From 223431e6aed9ac695cd3251e3718bae66b653f42 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Fri, 14 Apr 2023 14:22:00 +0200 Subject: [PATCH 001/272] Add scalable redis setup (#1) --- docker-compose.yml | 49 ++++++++++++++++++++++++++++++++++++++++++--- redis-sentinel.conf | 4 ++++ 2 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 redis-sentinel.conf diff --git a/docker-compose.yml b/docker-compose.yml index 25687ca..911fa50 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,17 +2,60 @@ version: '3.9' services: tor: image: dockage/tor-privoxy:latest - restart: always deploy: replicas: 8 + web: image: debridmediamanager/debrid-media-manager:latest ports: - 3000:3000 environment: - NODE_ENV=production - - REDIS_URL=redis://172.17.0.1:6379 + - REDIS_URL=redis://redis:6379 - GH_PAT=your_github_personal_access_token - restart: always deploy: replicas: 8 + restart_policy: + condition: on-failure + + redis: + image: 'bitnami/redis:latest' + environment: + - REDIS_REPLICATION_MODE=master + - ALLOW_EMPTY_PASSWORD=yes + volumes: + - redis_data:/bitnami/redis/data + deploy: + replicas: 1 + + redis-slave: + image: 'bitnami/redis:latest' + environment: + - REDIS_REPLICATION_MODE=slave + - REDIS_MASTER_HOST=redis + - ALLOW_EMPTY_PASSWORD=yes + depends_on: + - redis + volumes: + - redis_data:/bitnami/redis/data + deploy: + replicas: 3 + + redis-sentinel: + image: 'bitnami/redis-sentinel:latest' + environment: + - ALLOW_EMPTY_PASSWORD=yes + - REDIS_SENTINEL_CONF=/usr/local/etc/redis-sentinel.conf + depends_on: + - redis + - redis-slave + ports: + - '26379-26381:26379' + volumes: + - ./redis-sentinel.conf:/usr/local/etc/redis-sentinel.conf + deploy: + replicas: 3 + +volumes: + redis_data: + external: true diff --git a/redis-sentinel.conf b/redis-sentinel.conf new file mode 100644 index 0000000..5125d5a --- /dev/null +++ b/redis-sentinel.conf @@ -0,0 +1,4 @@ +sentinel monitor mymaster redis 6379 2 +sentinel down-after-milliseconds mymaster 5000 +sentinel failover-timeout mymaster 60000 +sentinel parallel-syncs mymaster 1 From 876f9c0f4a12ed05df3102247f5b6945a8b2c636 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Fri, 14 Apr 2023 18:24:41 +0200 Subject: [PATCH 002/272] 1.0.5 (#2) --- .env | 4 ++- .github/workflows/lint-and-build.yml | 31 +++++++++++++++++++++ Dockerfile | 2 +- docker-compose.yml | 7 ++--- package-lock.json | 4 +-- package.json | 2 +- src/pages/_document.tsx | 1 - src/pages/api/search.ts | 2 +- src/pages/hashlist.tsx | 7 +++++ src/pages/index.tsx | 4 +++ src/pages/library.tsx | 41 ++++++++++++++++++++++++---- src/pages/realdebrid/login.tsx | 4 +++ src/pages/search.tsx | 4 +++ src/pages/start.tsx | 4 +++ 14 files changed, 101 insertions(+), 16 deletions(-) create mode 100644 .github/workflows/lint-and-build.yml diff --git a/.env b/.env index 412296f..f77452d 100644 --- a/.env +++ b/.env @@ -1,2 +1,4 @@ +NODE_ENV=production GH_PAT=github-access-token -REDIS_URL=redis://localhost:6379 +REDIS_URL=redis://redis:16379 +PROXY=socks5h://tor:9050 diff --git a/.github/workflows/lint-and-build.yml b/.github/workflows/lint-and-build.yml new file mode 100644 index 0000000..c7bbf31 --- /dev/null +++ b/.github/workflows/lint-and-build.yml @@ -0,0 +1,31 @@ +name: Lint and Build + +on: + push: + branches-ignore: + - main + +jobs: + build-and-lint: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Cache node modules + uses: actions/cache@v2 + with: + path: node_modules + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Install dependencies + run: npm ci + + - name: Run lint + run: npm run lint + + - name: Build + run: npm run build diff --git a/Dockerfile b/Dockerfile index 24dbb03..2b078d0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM node:16-alpine as builder WORKDIR /app COPY package*.json ./ -RUN npm install +RUN npm ci COPY . . RUN npm run build diff --git a/docker-compose.yml b/docker-compose.yml index 911fa50..5a1cf9f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,10 +9,9 @@ services: image: debridmediamanager/debrid-media-manager:latest ports: - 3000:3000 - environment: - - NODE_ENV=production - - REDIS_URL=redis://redis:6379 - - GH_PAT=your_github_personal_access_token + env_file: + - .env + - .env.local deploy: replicas: 8 restart_policy: diff --git a/package-lock.json b/package-lock.json index 78d4941..686a97a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "1.0.4", + "version": "1.0.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "1.0.4", + "version": "1.0.5", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 504674a..bff3f10 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "1.0.4", + "version": "1.0.5", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/_document.tsx b/src/pages/_document.tsx index 405efa7..f544c85 100644 --- a/src/pages/_document.tsx +++ b/src/pages/_document.tsx @@ -4,7 +4,6 @@ export default function Document() { return ( - Debrid Media Manager diff --git a/src/pages/api/search.ts b/src/pages/api/search.ts index 382ee6e..2ea5f75 100644 --- a/src/pages/api/search.ts +++ b/src/pages/api/search.ts @@ -53,7 +53,7 @@ const stopWords = [ 'me', ]; -const agent = new SocksProxyAgent('socks5h://tor:9050', { timeout: 2000 }); +const agent = new SocksProxyAgent(process.env.PROXY!, { timeout: 2000 }); const dhtSearchHostname = 'http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { diff --git a/src/pages/hashlist.tsx b/src/pages/hashlist.tsx index e8c2e38..0ad3700 100644 --- a/src/pages/hashlist.tsx +++ b/src/pages/hashlist.tsx @@ -9,6 +9,7 @@ import { getSelectableFiles, isVideo } from '@/utils/selectable'; import { withAuth } from '@/utils/withAuth'; import { filenameParse, ParsedFilename } from '@ctrl/video-filename-parser'; import lzString from 'lz-string'; +import Head from 'next/head'; import Link from 'next/link'; import { useRouter } from 'next/router'; import { useEffect, useState } from 'react'; @@ -276,6 +277,12 @@ function TorrentsPage() { return (
+ + + Debrid Media Manager - Hash list:{' '} + {(totalBytes / ONE_GIGABYTE / 1024).toFixed(1)} TB + +

diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 609b890..49fa21f 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,5 +1,6 @@ import { useCurrentUser } from '@/hooks/auth'; import { withAuth } from '@/utils/withAuth'; +import Head from 'next/head'; import { useRouter } from 'next/router'; function IndexPage() { @@ -25,6 +26,9 @@ function IndexPage() { return (
+ + Debrid Media Manager - Home + diff --git a/src/pages/library.tsx b/src/pages/library.tsx index 9d64b61..3e278c7 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -1,6 +1,7 @@ import useLocalStorage from '@/hooks/localStorage'; import { createShortUrl } from '@/services/hashlists'; import { + addHashAsMagnet, deleteTorrent, getTorrentInfo, getUserTorrentsList, @@ -15,11 +16,12 @@ import { getSelectableFiles, isVideo } from '@/utils/selectable'; import { withAuth } from '@/utils/withAuth'; import { filenameParse, ParsedFilename } from '@ctrl/video-filename-parser'; import lzString from 'lz-string'; +import Head from 'next/head'; import Link from 'next/link'; import { useRouter } from 'next/router'; import { useEffect, useState } from 'react'; import { toast, Toaster } from 'react-hot-toast'; -import { FaShare, FaTrash } from 'react-icons/fa'; +import { FaArrowRight, FaShare, FaTrash } from 'react-icons/fa'; const ONE_GIGABYTE = 1024 * 1024 * 1024; @@ -177,7 +179,7 @@ function TorrentsPage() { // eslint-disable-next-line react-hooks/exhaustive-deps }, [router.query, userTorrentsList, movieGrouping, tvGroupingByEpisode]); - const handleDeleteTorrent = async (id: string) => { + const handleDeleteTorrent = async (id: string, disableToast: boolean = false) => { try { setUserTorrentsList((prevList) => prevList.filter((t) => t.id !== id)); cacheUserTorrentsList((prevCache) => { @@ -186,9 +188,9 @@ function TorrentsPage() { return prevCache; }); await deleteTorrent(accessToken!, id); - toast.success(`Torrent deleted (${id.substring(0, 3)})`); + if (!disableToast) toast.success(`Torrent deleted (${id.substring(0, 3)})`); } catch (error) { - toast.error(`Error deleting torrent (${id.substring(0, 3)})`); + if (!disableToast) toast.error(`Error deleting torrent (${id.substring(0, 3)})`); throw error; } }; @@ -363,8 +365,28 @@ function TorrentsPage() { ); } + const handleReinsertTorrent = async (oldId: string) => { + try { + const torrent = userTorrentsList.find((t) => t.id === oldId); + const hash = torrent!.hash; + const newId = await addHashAsMagnet(accessToken!, hash); + torrent!.id = newId; + await handleSelectFiles(newId); + await handleDeleteTorrent(oldId, true); + toast.success( + `Torrent reinserted (${oldId.substring(0, 3)}๐Ÿ‘‰${newId.substring(0, 3)})` + ); + } catch (error) { + toast.error(`Error reinserting torrent (${oldId.substring(0, 3)})`); + throw error; + } + }; + return (
+ + Debrid Media Manager - Library +

@@ -561,19 +583,28 @@ function TorrentsPage() { {torrent.score.toFixed(1)} - + + ); diff --git a/src/pages/realdebrid/login.tsx b/src/pages/realdebrid/login.tsx index 7c889b2..41b72a0 100644 --- a/src/pages/realdebrid/login.tsx +++ b/src/pages/realdebrid/login.tsx @@ -1,5 +1,6 @@ import useLocalStorage from '@/hooks/localStorage'; import { getCredentials, getDeviceCode, getToken } from '@/services/realDebrid'; +import Head from 'next/head'; import { useRouter } from 'next/router'; import { useEffect, useRef, useState } from 'react'; @@ -93,6 +94,9 @@ export default function RealDebridLoginPage() { return (
+ + Debrid Media Manager - Real-Debrid Login + {userCode && (

Please click the button and enter this code: {userCode}{' '} diff --git a/src/pages/search.tsx b/src/pages/search.tsx index 72aa0ca..6e732e8 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -14,6 +14,7 @@ import { getSelectableFiles, isVideo } from '@/utils/selectable'; import { withAuth } from '@/utils/withAuth'; import { ParsedFilename } from '@ctrl/video-filename-parser'; import axios, { CancelTokenSource } from 'axios'; +import Head from 'next/head'; import Link from 'next/link'; import { useRouter } from 'next/router'; import { useCallback, useEffect, useState } from 'react'; @@ -220,6 +221,9 @@ function Search() { return (

+ + Debrid Media Manager - Search: {query} +

Search

diff --git a/src/pages/start.tsx b/src/pages/start.tsx index ed09cbe..ea26e3b 100644 --- a/src/pages/start.tsx +++ b/src/pages/start.tsx @@ -1,10 +1,14 @@ import { useDebridLogin } from '@/hooks/auth'; +import Head from 'next/head'; export default function StartPage() { const { loginWithRealDebrid } = useDebridLogin(); return (
+ + Debrid Media Manager + {/* logo generated by ChatGPT4 */} From 474e8d731526e6db8acb7f640b34226399238e62 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Fri, 14 Apr 2023 19:14:38 +0200 Subject: [PATCH 003/272] 1.0.6 (#3) --- .env | 2 +- package-lock.json | 4 ++-- package.json | 2 +- src/pages/api/dbsize.ts | 18 ++++++++++++++++++ 4 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 src/pages/api/dbsize.ts diff --git a/.env b/.env index f77452d..3bdc5ca 100644 --- a/.env +++ b/.env @@ -1,4 +1,4 @@ NODE_ENV=production GH_PAT=github-access-token -REDIS_URL=redis://redis:16379 +REDIS_URL=redis://redis:6379 PROXY=socks5h://tor:9050 diff --git a/package-lock.json b/package-lock.json index 686a97a..ef80835 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "1.0.5", + "version": "1.0.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "1.0.5", + "version": "1.0.6", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index bff3f10..2d3f349 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "1.0.5", + "version": "1.0.6", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/api/dbsize.ts b/src/pages/api/dbsize.ts new file mode 100644 index 0000000..067fb36 --- /dev/null +++ b/src/pages/api/dbsize.ts @@ -0,0 +1,18 @@ +import { NextApiHandler } from 'next'; +import { createClient } from 'redis'; + +const redisClient = createClient({ url: process.env.REDIS_URL }); +redisClient.on('error', (err) => console.error('Redis connection error', err)); +redisClient.connect(); + +const handler: NextApiHandler = async (req, res) => { + try { + const size = await redisClient.DBSIZE(); + res.status(200).json({ size }); + } catch (err) { + console.error(err); + res.status(500).json({ error: err }); + } +}; + +export default handler; From 045772a18b38fda706cf3a6d472021ca8a7bf287 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Fri, 14 Apr 2023 20:05:52 +0200 Subject: [PATCH 004/272] Apply matrix strategy on build (#4) --- .github/workflows/build-and-push.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-and-push.yml b/.github/workflows/build-and-push.yml index 56a2cfd..d9af828 100644 --- a/.github/workflows/build-and-push.yml +++ b/.github/workflows/build-and-push.yml @@ -9,6 +9,10 @@ jobs: build-and-push: runs-on: ubuntu-latest + strategy: + matrix: + platform: [linux/amd64, linux/arm64] + steps: - name: Checkout code uses: actions/checkout@v2 @@ -41,8 +45,8 @@ jobs: uses: docker/build-push-action@v2 with: context: . - platforms: linux/amd64,linux/arm64 + platform: ${{ matrix.platform }} push: true tags: | - debridmediamanager/debrid-media-manager:latest - debridmediamanager/debrid-media-manager:${{ env.version }} + debridmediamanager/debrid-media-manager:latest-${{ matrix.platform }} + debridmediamanager/debrid-media-manager:${{ env.version }}-${{ matrix.platform }} From 9dfde16de6534933c3a3b00cb6072140d907e00c Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Fri, 14 Apr 2023 20:16:56 +0200 Subject: [PATCH 005/272] Matrix strat, Remove tag edits (#5) --- .github/workflows/build-and-push.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-and-push.yml b/.github/workflows/build-and-push.yml index d9af828..ce0359d 100644 --- a/.github/workflows/build-and-push.yml +++ b/.github/workflows/build-and-push.yml @@ -48,5 +48,5 @@ jobs: platform: ${{ matrix.platform }} push: true tags: | - debridmediamanager/debrid-media-manager:latest-${{ matrix.platform }} - debridmediamanager/debrid-media-manager:${{ env.version }}-${{ matrix.platform }} + debridmediamanager/debrid-media-manager:latest + debridmediamanager/debrid-media-manager:${{ env.version }} From 3c2706cace1f7f46eb1ebaf9fc70647dba13d780 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Fri, 14 Apr 2023 23:08:58 +0200 Subject: [PATCH 006/272] 1.0.7 (#6) --- package-lock.json | 4 +-- package.json | 2 +- src/pages/api/dbsize.ts | 2 +- src/pages/api/search.ts | 11 +++---- src/services/cache.ts | 69 ++++++++++++++++++++++++++++------------- 5 files changed, 56 insertions(+), 32 deletions(-) diff --git a/package-lock.json b/package-lock.json index ef80835..0b37ba1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "1.0.6", + "version": "1.0.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "1.0.6", + "version": "1.0.7", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 2d3f349..1bdc66a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "1.0.6", + "version": "1.0.7", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/api/dbsize.ts b/src/pages/api/dbsize.ts index 067fb36..2d6aa84 100644 --- a/src/pages/api/dbsize.ts +++ b/src/pages/api/dbsize.ts @@ -10,7 +10,7 @@ const handler: NextApiHandler = async (req, res) => { const size = await redisClient.DBSIZE(); res.status(200).json({ size }); } catch (err) { - console.error(err); + console.error(err); res.status(500).json({ error: err }); } }; diff --git a/src/pages/api/search.ts b/src/pages/api/search.ts index 2ea5f75..08b0b16 100644 --- a/src/pages/api/search.ts +++ b/src/pages/api/search.ts @@ -1,4 +1,4 @@ -import { cacheJsonValue, getCachedJsonValue } from '@/services/cache'; +import { RedisCache } from '@/services/cache'; import { getMediaId } from '@/utils/mediaId'; import { getMediaType } from '@/utils/mediaType'; import getReleaseTags from '@/utils/score'; @@ -56,6 +56,8 @@ const stopWords = [ const agent = new SocksProxyAgent(process.env.PROXY!, { timeout: 2000 }); const dhtSearchHostname = 'http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion'; +const cache = new RedisCache(); + export default async function handler(req: NextApiRequest, res: NextApiResponse) { const { search, libraryType } = req.query; @@ -137,10 +139,7 @@ async function fetchSearchResults( const finalQuery = `${searchQuery}${ !libraryType || libraryType === '1080pOr2160p' ? '' : ` ${libraryType}` }`; - const cached = await getCachedJsonValue(finalQuery.split(' ')); - // if (cached && !cached.length) { - // await deleteCache(finalQuery.split(' ')); - // } + const cached = await cache.getCachedJsonValue(finalQuery.split(' ')); if (cached) { return cached; } @@ -277,7 +276,7 @@ async function fetchSearchResults( console.log(`Found ${searchResultsArr.length} results (${finalQuery})`); // run async - cacheJsonValue(finalQuery.split(' '), searchResultsArr); + cache.cacheJsonValue(finalQuery.split(' '), searchResultsArr); return searchResultsArr; } catch (error) { diff --git a/src/services/cache.ts b/src/services/cache.ts index 64b08a1..9535630 100644 --- a/src/services/cache.ts +++ b/src/services/cache.ts @@ -1,28 +1,53 @@ -import { createClient } from 'redis'; +import { createClient, RedisClientType } from 'redis'; -const redisClient = createClient({ url: process.env.REDIS_URL }); -redisClient.on('error', (err) => console.error('Redis connection error', err)); -redisClient.connect(); +export class RedisCache { + private client: RedisClientType; -export async function cacheJsonValue(key: string[], value: T) { - const sortedKey = key.sort(); - const redisKey = sortedKey.join(':'); - const jsonValue = JSON.stringify(value); - redisClient.SET(redisKey, jsonValue); -} + constructor() { + this.client = createClient({ url: process.env.REDIS_URL }); + this.client.on('error', this.handleRedisConnectionError.bind(this)); + this.client.connect(); + } -export async function getCachedJsonValue(key: string[]): Promise { - const sortedKey = key.sort(); - const redisKey = sortedKey.join(':'); - const jsonValue = await redisClient.GET(redisKey); - if (!jsonValue) { - return undefined; + private handleRedisConnectionError(err: any) { + console.error('Redis connection error', err); + if (err.code === 'ECONNREFUSED') { + this.client.quit(); + this.client = createClient({ url: process.env.REDIS_URL }); + this.client.on('error', this.handleRedisConnectionError.bind(this)); + this.client.connect(); + } } - return JSON.parse(jsonValue) as T; -} -export async function deleteCache(key: string[]): Promise { - const sortedKey = key.sort(); - const redisKey = sortedKey.join(':'); - await redisClient.DEL(redisKey); + public async cacheJsonValue(key: string[], value: T) { + const sortedKey = key.sort(); + const redisKey = sortedKey.join(':'); + try { + this.client.SET(redisKey, JSON.stringify(value)); + } catch (err: any) { + if (err.code === 'ECONNREFUSED') { + const jitter = Math.floor(Math.random() * 500) + 500; + await new Promise((resolve) => setTimeout(resolve, jitter)); + await this.cacheJsonValue(key, value); + } + } + } + + public async getCachedJsonValue(key: string[]): Promise { + const sortedKey = key.sort(); + const redisKey = sortedKey.join(':'); + try { + const jsonValue = await this.client.GET(redisKey); + if (!jsonValue) { + return undefined; + } + return JSON.parse(jsonValue) as T; + } catch (err: any) { + if (err.code === 'ECONNREFUSED') { + const jitter = Math.floor(Math.random() * 500) + 500; + await new Promise((resolve) => setTimeout(resolve, jitter)); + return await this.getCachedJsonValue(key); + } + } + } } From 0eb3229bbcb3a15495dd34e5d649107d6178a173 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sat, 15 Apr 2023 00:10:17 +0200 Subject: [PATCH 007/272] 1.0.8 (#7) * set tor replicas to 48 * add bigger timeouts --- docker-compose.yml | 2 +- src/pages/api/search.ts | 22 +++++++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 5a1cf9f..7f80c52 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,7 +3,7 @@ services: tor: image: dockage/tor-privoxy:latest deploy: - replicas: 8 + replicas: 48 web: image: debridmediamanager/debrid-media-manager:latest diff --git a/src/pages/api/search.ts b/src/pages/api/search.ts index 08b0b16..e881fdb 100644 --- a/src/pages/api/search.ts +++ b/src/pages/api/search.ts @@ -53,7 +53,7 @@ const stopWords = [ 'me', ]; -const agent = new SocksProxyAgent(process.env.PROXY!, { timeout: 2000 }); +const agent = new SocksProxyAgent(process.env.PROXY!, { timeout: 3000 }); const dhtSearchHostname = 'http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion'; const cache = new RedisCache(); @@ -111,7 +111,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36', }, - timeout: 2000, + timeout: 3000, }); try { @@ -124,9 +124,9 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< res.status(200).json({ searchResults: processedResults }); } catch (error: any) { - console.error(error); - - res.status(500).json({ errorMessage: 'An error occurred while scraping the Btdigg' }); + res.status(500).json({ + errorMessage: `An error occurred while scraping the Btdigg (${error.message})`, + }); } } @@ -154,7 +154,7 @@ async function fetchSearchResults( let searchResultsArr: SearchResult[] = []; const MAX_RETRIES = 5; // maximum number of retries - const RETRY_DELAY = 1000; // initial delay in ms, doubles with each retry + const RETRY_DELAY = 1500; // initial delay in ms, doubles with each retry let skippedResults = 0; @@ -172,8 +172,8 @@ async function fetchSearchResults( numResults = parseInt(numResultsStr[1], 10); retries = 0; break; - } catch (error) { - console.error(`Error scraping page ${pageNum} (${finalQuery})`, error); + } catch (error: any) { + console.error(`Error scraping page ${pageNum} (${finalQuery})`, error.message); retries++; if (retries > MAX_RETRIES) { console.error(`Max retries reached (${MAX_RETRIES}), aborting search`); @@ -183,6 +183,10 @@ async function fetchSearchResults( await new Promise((resolve) => setTimeout(resolve, delay)); } } + console.log( + `Scrape successful for page ${pageNum} (${finalQuery})`, + new Date().getTime() + ); const fileSizes = Array.from( responseData.matchAll( /class=\"torrent_size\"[^>]*>(\d+(?:\.\d+)?)(?:[^A-Z<]+)?([A-Z]+)?/g @@ -280,7 +284,7 @@ async function fetchSearchResults( return searchResultsArr; } catch (error) { - console.error(error); + console.error('fetchSearchResults page processing error', error); throw error; } } From 7e7576d1f1875c8216cd54f8c54ccb2ce3ba9094 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sat, 15 Apr 2023 00:17:00 +0200 Subject: [PATCH 008/272] Version bump: 1.0.8 (#8) 1.0.8 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0b37ba1..ee656e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "1.0.7", + "version": "1.0.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "1.0.7", + "version": "1.0.8", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 1bdc66a..ab3d123 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "1.0.7", + "version": "1.0.8", "private": false, "scripts": { "dev": "next dev", From 5a8bc39dd74e3515447e57cde6bb0b0f709763e3 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sun, 16 Apr 2023 01:01:48 +0200 Subject: [PATCH 009/272] 1.0.9 (#9) * better media type ident logic * 1.0.9 * replace some special chars with spaces * files > downloads * rework regex * add forward slash * set replica numbers * add slow search api --- .env | 1 + docker-compose.yml | 18 +- package-lock.json | 4 +- package.json | 2 +- src/pages/api/search.ts | 34 ++-- src/pages/api/slowsearch.ts | 322 ++++++++++++++++++++++++++++++++++++ src/pages/library.tsx | 2 +- src/services/cache.ts | 8 +- src/utils/mediaType.ts | 4 +- 9 files changed, 367 insertions(+), 28 deletions(-) create mode 100644 src/pages/api/slowsearch.ts diff --git a/.env b/.env index 3bdc5ca..2615059 100644 --- a/.env +++ b/.env @@ -1,4 +1,5 @@ NODE_ENV=production GH_PAT=github-access-token REDIS_URL=redis://redis:6379 +REDIS_SLAVE_URL=redis://redis-slave:6379 PROXY=socks5h://tor:9050 diff --git a/docker-compose.yml b/docker-compose.yml index 7f80c52..0b857f1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,14 +1,22 @@ version: '3.9' services: + debugger: + image: ubuntu + volumes: + - redis_data:/userdata + entrypoint: ['tail', '-f', '/dev/null'] + deploy: + replicas: 1 + tor: image: dockage/tor-privoxy:latest deploy: - replicas: 48 + replicas: 64 web: image: debridmediamanager/debrid-media-manager:latest ports: - - 3000:3000 + - 127.0.0.1:3000:3000 env_file: - .env - .env.local @@ -24,6 +32,8 @@ services: - ALLOW_EMPTY_PASSWORD=yes volumes: - redis_data:/bitnami/redis/data + ports: + - 127.0.0.1:6379:6379 deploy: replicas: 1 @@ -38,7 +48,7 @@ services: volumes: - redis_data:/bitnami/redis/data deploy: - replicas: 3 + replicas: 5 redis-sentinel: image: 'bitnami/redis-sentinel:latest' @@ -49,7 +59,7 @@ services: - redis - redis-slave ports: - - '26379-26381:26379' + - '127.0.0.1:26379-26381:26379' volumes: - ./redis-sentinel.conf:/usr/local/etc/redis-sentinel.conf deploy: diff --git a/package-lock.json b/package-lock.json index ee656e7..8b1e1df 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "1.0.8", + "version": "1.0.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "1.0.8", + "version": "1.0.9", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index ab3d123..6a097d2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "1.0.8", + "version": "1.0.9", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/api/search.ts b/src/pages/api/search.ts index e881fdb..2f78d11 100644 --- a/src/pages/api/search.ts +++ b/src/pages/api/search.ts @@ -56,7 +56,7 @@ const stopWords = [ const agent = new SocksProxyAgent(process.env.PROXY!, { timeout: 3000 }); const dhtSearchHostname = 'http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion'; -const cache = new RedisCache(); +const cache = new RedisCache(process.env.REDIS_SLAVE_URL!); export default async function handler(req: NextApiRequest, res: NextApiResponse) { const { search, libraryType } = req.query; @@ -72,12 +72,12 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< } const finalQuery = search - .split(/[\s\.\-\(\)]/) - .filter((e) => e !== '') - .map((e) => e.toLowerCase()) - .filter((term) => !stopWords.includes(term)) - .join(' ') - .replace(/[รกร รครข]/g, 'a') + .split(/[\s\=:\?\.\-\(\)\/]/) // split the search query into an array of elements + .filter((e) => e !== '') // filter out any empty elements + .map((e) => e.toLowerCase()) // convert each element to lowercase + .filter((term) => !stopWords.includes(term)) // remove any stop words from an array + .join(' ') // join the remaining elements with a single space + .replace(/[รกร รครข]/g, 'a') // replace certain characters with their equivalent .replace(/[รฉรจรซรช]/g, 'e') .replace(/[รญรฌรฏรฎ]/g, 'i') .replace(/[รณรฒรถรด]/g, 'o') @@ -86,9 +86,9 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< .replace(/[รฑ]/g, 'n') .replace(/[ลŸ]/g, 's') .replace(/[ฤŸ]/g, 'g') - .replace(/[^\w\s]/g, '') - .replace(/\s+/g, ' ') - .trim(); + .replace(/[^\w\s]/g, '') // remove any non-word or non-space characters + .replace(/\s+/g, ' ') // replace multiple spaces with a single space + .trim(); // trim any leading or trailing spaces const libraryTypes = libraryType === '1080pOr2160p' ? ['1080p', '2160p', ''] : [libraryType]; @@ -139,9 +139,14 @@ async function fetchSearchResults( const finalQuery = `${searchQuery}${ !libraryType || libraryType === '1080pOr2160p' ? '' : ` ${libraryType}` }`; - const cached = await cache.getCachedJsonValue(finalQuery.split(' ')); - if (cached) { - return cached; + + try { + const cached = await cache.getCachedJsonValue(finalQuery.split(' ')); + if (cached) { + return cached; + } + } catch (e: any) { + console.warn(e); } let pageNum = 1; @@ -279,9 +284,6 @@ async function fetchSearchResults( console.log(`Found ${searchResultsArr.length} results (${finalQuery})`); - // run async - cache.cacheJsonValue(finalQuery.split(' '), searchResultsArr); - return searchResultsArr; } catch (error) { console.error('fetchSearchResults page processing error', error); diff --git a/src/pages/api/slowsearch.ts b/src/pages/api/slowsearch.ts new file mode 100644 index 0000000..720b1e9 --- /dev/null +++ b/src/pages/api/slowsearch.ts @@ -0,0 +1,322 @@ +import { RedisCache } from '@/services/cache'; +import { getMediaId } from '@/utils/mediaId'; +import { getMediaType } from '@/utils/mediaType'; +import getReleaseTags from '@/utils/score'; +import { filenameParse, ParsedFilename } from '@ctrl/video-filename-parser'; +import axios, { AxiosInstance } from 'axios'; +import { NextApiRequest, NextApiResponse } from 'next'; +import { SocksProxyAgent } from 'socks-proxy-agent'; + +type SearchResult = { + title: string; + fileSize: number; + magnetLink: string; + hash: string; + dolby_vision: boolean; + hdr10plus: boolean; + hdr: boolean; + remux: boolean; + proper_remux: boolean; + score: number; + mediaType: 'tv' | 'movie'; + info: ParsedFilename; +}; + +export type BtDiggApiResult = { + searchResults?: SearchResult[]; + errorMessage?: string; +}; + +const stopWords = [ + 'the', + 'and', + 'be', + 'to', + 'of', + 'a', + 'in', + 'i', + 'it', + 'on', + 'he', + 'as', + 'do', + 'at', + 'by', + 'we', + 'or', + 'an', + 'my', + 'so', + 'up', + 'if', + 'me', +]; + +const agent = new SocksProxyAgent(process.env.PROXY!, { timeout: 3000 }); +const dhtSearchHostname = 'http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion'; + +const cache = new RedisCache(process.env.REDIS_URL!); + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + const { search, libraryType } = req.query; + + if (!search || search instanceof Array) { + res.status(400).json({ errorMessage: 'Missing "search" query parameter' }); + return; + } + + if (!libraryType || libraryType instanceof Array) { + res.status(400).json({ errorMessage: 'Missing "libraryType" query parameter' }); + return; + } + + const finalQuery = search + .split(/[\s\=:\?\.\-\(\)\/]/) // split the search query into an array of elements + .filter((e) => e !== '') // filter out any empty elements + .map((e) => e.toLowerCase()) // convert each element to lowercase + .filter((term) => !stopWords.includes(term)) // remove any stop words from an array + .join(' ') // join the remaining elements with a single space + .replace(/[รกร รครข]/g, 'a') // replace certain characters with their equivalent + .replace(/[รฉรจรซรช]/g, 'e') + .replace(/[รญรฌรฏรฎ]/g, 'i') + .replace(/[รณรฒรถรด]/g, 'o') + .replace(/[รบรนรผรป]/g, 'u') + .replace(/[รง]/g, 'c') + .replace(/[รฑ]/g, 'n') + .replace(/[ลŸ]/g, 's') + .replace(/[ฤŸ]/g, 'g') + .replace(/[^\w\s]/g, '') // remove any non-word or non-space characters + .replace(/\s+/g, ' ') // replace multiple spaces with a single space + .trim(); // trim any leading or trailing spaces + + const libraryTypes = libraryType === '1080pOr2160p' ? ['1080p', '2160p', ''] : [libraryType]; + + const client = axios.create({ + httpAgent: agent, + headers: { + authority: 'btdig.com', + accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', + 'accept-language': 'en-US,en;q=0.9', + dnt: '1', + referer: 'https://btdig.com/', + 'sec-ch-ua': '"Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"macOS"', + 'sec-fetch-dest': 'document', + 'sec-fetch-mode': 'navigate', + 'sec-fetch-site': 'same-origin', + 'sec-fetch-user': '?1', + 'upgrade-insecure-requests': '1', + 'user-agent': + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36', + }, + timeout: 3000, + }); + + try { + const results = []; + for (const lType of libraryTypes) { + results.push(await fetchSearchResults(client, finalQuery, lType)); + } + let processedResults = flattenAndRemoveDuplicates(results); + if (processedResults.length) processedResults = groupByParsedTitle(processedResults); + + res.status(200).json({ searchResults: processedResults }); + } catch (error: any) { + res.status(500).json({ + errorMessage: `An error occurred while scraping the Btdigg (${error.message})`, + }); + } +} + +async function fetchSearchResults( + client: AxiosInstance, + searchQuery: string, + libraryType: string +): Promise { + try { + const finalQuery = `${searchQuery}${ + !libraryType || libraryType === '1080pOr2160p' ? '' : ` ${libraryType}` + }`; + + const cached = await cache.getCachedJsonValue(finalQuery.split(' ')); + if (cached) { + return cached; + } + + let pageNum = 1; + + const createSearchUrl = (pg: number) => + `${dhtSearchHostname}/search?q=${encodeURIComponent(finalQuery)}&p=${pg - 1}`; + + const BAD_RESULT_THRESHOLD = 11; + let badResults = 0; + let searchResultsArr: SearchResult[] = []; + + const MAX_RETRIES = 6; // maximum number of retries + const RETRY_DELAY = 1000; // initial delay in ms, doubles with each retry + + while (pageNum <= 100) { + console.log(`Scraping page ${pageNum} (${finalQuery})...`, new Date().getTime()); + let retries = 0; // current number of retries + let responseData = ''; + let numResults = 0; + const searchUrl = createSearchUrl(pageNum); + while (true) { + try { + const response = await client.get(searchUrl); + responseData = response.data; + const numResultsStr = responseData.match(/(\d+) results found/) || []; + numResults = parseInt(numResultsStr[1], 10); + retries = 0; + break; + } catch (error: any) { + console.error(`Error scraping page ${pageNum} (${finalQuery})`, error.message); + retries++; + if (retries > MAX_RETRIES) { + console.error(`Max retries reached (${MAX_RETRIES}), aborting search`); + throw error; + } + const delay = RETRY_DELAY * Math.pow(2, retries - 1); + await new Promise((resolve) => setTimeout(resolve, delay)); + } + } + console.log( + `Scrape successful for page ${pageNum} (${finalQuery})`, + new Date().getTime() + ); + const fileSizes = Array.from( + responseData.matchAll( + /class=\"torrent_size\"[^>]*>(\d+(?:\.\d+)?)(?:[^A-Z<]+)?([A-Z]+)?/g + ) + ); + const namesAndHashes = Array.from( + responseData.matchAll(/magnet:\?xt=urn:btih:([a-z\d]{40})&dn=([^&]+)&/g) + ); + + if (fileSizes.length !== namesAndHashes.length) { + console.warn('Mismatch in file sizes and names'); + break; + } + + for (let resIndex = 0; resIndex < fileSizes.length; resIndex++) { + const title = decodeURIComponent(namesAndHashes[resIndex][2].replaceAll('+', ' ')); + const fileSizeStr = `${fileSizes[resIndex][1]} ${fileSizes[resIndex][2] || 'B'}`; + const mediaType = getMediaType(title); + const info = + mediaType === 'movie' ? filenameParse(title) : filenameParse(title, true); + + // Ignore results that don't have GB in fileSize + if (libraryType !== '1080pOr2160p' && !fileSizeStr.includes('GB')) { + badResults++; + continue; + } + + // immediately check if filesize makes sense + const fileSize = parseFloat(fileSizeStr); + if (mediaType === 'movie' && fileSize > 128) { + continue; + } + + // Check if every term in the query (tokenized by space) is contained in the title + const queryTerms = finalQuery.split(' '); + const containsAllTerms = queryTerms.every((term) => + new RegExp(`\\b${term}`).test(title.toLowerCase()) + ); + if (!containsAllTerms) { + badResults++; + continue; + } + if (libraryType === '1080pOr2160p' && !/1080p|2160p/i.test(title.toLowerCase())) { + badResults++; + continue; + } + + const hash = namesAndHashes[resIndex][1]; + + const { dolby_vision, hdr10plus, hdr, remux, proper_remux, score } = getReleaseTags( + title, + fileSize + ); + + let resultObj: SearchResult = { + title, + fileSize, + magnetLink: `magnet:?xt=urn:btih:${hash}`, + hash, + dolby_vision, + hdr10plus, + hdr, + remux, + proper_remux, + score, + mediaType, + info, + }; + searchResultsArr.push(resultObj); + // Reset ignoredResults counter + badResults = 0; + } + + // Stop execution if the last 5 results were ignored + if (badResults >= BAD_RESULT_THRESHOLD) { + console.log( + `Stopped execution after ${pageNum} pages because the last ${BAD_RESULT_THRESHOLD} results were ignored.` + ); + break; + } + + if (numResults > pageNum * 10) { + pageNum++; + } else { + // No more pages, exit the loop + break; + } + } + + console.log(`Found ${searchResultsArr.length} results (${finalQuery})`); + + // run async + cache.cacheJsonValue(finalQuery.split(' '), searchResultsArr); + + return searchResultsArr; + } catch (error) { + console.error('fetchSearchResults page processing error', error); + throw error; + } +} + +function flattenAndRemoveDuplicates(arr: SearchResult[][]): SearchResult[] { + const flattened = arr.reduce((acc, val) => acc.concat(val), []); + const unique = new Map(); + flattened.forEach((item) => { + if (!unique.has(item.hash)) { + unique.set(item.hash, item); + } + }); + return Array.from(unique.values()); +} + +function groupByParsedTitle(results: SearchResult[]): SearchResult[] { + const frequency: Record = {}; + for (const result of results) { + const mediaId = getMediaId(result.info, result.mediaType); + if (mediaId in frequency) { + frequency[mediaId] += result.fileSize; + } else { + frequency[mediaId] = result.fileSize; + } + } + + results.sort((a, b) => { + const frequencyCompare = + frequency[getMediaId(b.info, b.mediaType)] - frequency[getMediaId(a.info, a.mediaType)]; + if (frequencyCompare === 0) { + return b.fileSize - a.fileSize; + } + return frequencyCompare; + }); + + return results; +} diff --git a/src/pages/library.tsx b/src/pages/library.tsx index 3e278c7..40cb04a 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -390,7 +390,7 @@ function TorrentsPage() {

- My Library ({userTorrentsList.length} files in total; size:{' '} + My Library ({userTorrentsList.length} downloads in total; size:{' '} {(totalBytes / ONE_GIGABYTE / 1024).toFixed(1)} TB)

{ - return /[\(\.\s)]s\d\d|[\(\.\s)]season[\.\s]?\d/i.test(filename) ? 'tv' : 'movie'; + return /[\(\.\s)]s\d\d[\be]|[\(\.\s)]season[\.\s]?\d[\d]?[\be]/i.test(filename) + ? 'tv' + : 'movie'; }; From 9869d64b0b6396147245ee5c333bb16f318ca810 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sun, 16 Apr 2023 01:43:33 +0200 Subject: [PATCH 010/272] 1.1.0 (#10) * refactor to new common file * 1.1.0 --- package-lock.json | 4 +- package.json | 2 +- src/pages/api/search.ts | 305 ++---------------------------------- src/pages/api/slowsearch.ts | 301 ++--------------------------------- src/pages/search.tsx | 4 +- src/services/btdigg.ts | 244 +++++++++++++++++++++++++++++ src/utils/search.ts | 50 ++++++ 7 files changed, 333 insertions(+), 577 deletions(-) create mode 100644 src/services/btdigg.ts create mode 100644 src/utils/search.ts diff --git a/package-lock.json b/package-lock.json index 8b1e1df..5c852b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "1.0.9", + "version": "1.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "1.0.9", + "version": "1.1.0", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 6a097d2..b962052 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "1.0.9", + "version": "1.1.0", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/api/search.ts b/src/pages/api/search.ts index 2f78d11..4b66954 100644 --- a/src/pages/api/search.ts +++ b/src/pages/api/search.ts @@ -1,64 +1,27 @@ +import { + createAxiosInstance, + fetchSearchResults, + flattenAndRemoveDuplicates, + groupByParsedTitle, + SearchResult, +} from '@/services/btdigg'; import { RedisCache } from '@/services/cache'; -import { getMediaId } from '@/utils/mediaId'; -import { getMediaType } from '@/utils/mediaType'; -import getReleaseTags from '@/utils/score'; -import { filenameParse, ParsedFilename } from '@ctrl/video-filename-parser'; -import axios, { AxiosInstance } from 'axios'; +import { cleanSearchQuery, getLibraryTypes } from '@/utils/search'; import { NextApiRequest, NextApiResponse } from 'next'; import { SocksProxyAgent } from 'socks-proxy-agent'; -type SearchResult = { - title: string; - fileSize: number; - magnetLink: string; - hash: string; - dolby_vision: boolean; - hdr10plus: boolean; - hdr: boolean; - remux: boolean; - proper_remux: boolean; - score: number; - mediaType: 'tv' | 'movie'; - info: ParsedFilename; -}; - -export type BtDiggApiResult = { +export type SearchApiResponse = { searchResults?: SearchResult[]; errorMessage?: string; }; -const stopWords = [ - 'the', - 'and', - 'be', - 'to', - 'of', - 'a', - 'in', - 'i', - 'it', - 'on', - 'he', - 'as', - 'do', - 'at', - 'by', - 'we', - 'or', - 'an', - 'my', - 'so', - 'up', - 'if', - 'me', -]; - const agent = new SocksProxyAgent(process.env.PROXY!, { timeout: 3000 }); -const dhtSearchHostname = 'http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion'; - const cache = new RedisCache(process.env.REDIS_SLAVE_URL!); -export default async function handler(req: NextApiRequest, res: NextApiResponse) { +export default async function handler( + req: NextApiRequest, + res: NextApiResponse +) { const { search, libraryType } = req.query; if (!search || search instanceof Array) { @@ -71,53 +34,14 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< return; } - const finalQuery = search - .split(/[\s\=:\?\.\-\(\)\/]/) // split the search query into an array of elements - .filter((e) => e !== '') // filter out any empty elements - .map((e) => e.toLowerCase()) // convert each element to lowercase - .filter((term) => !stopWords.includes(term)) // remove any stop words from an array - .join(' ') // join the remaining elements with a single space - .replace(/[รกร รครข]/g, 'a') // replace certain characters with their equivalent - .replace(/[รฉรจรซรช]/g, 'e') - .replace(/[รญรฌรฏรฎ]/g, 'i') - .replace(/[รณรฒรถรด]/g, 'o') - .replace(/[รบรนรผรป]/g, 'u') - .replace(/[รง]/g, 'c') - .replace(/[รฑ]/g, 'n') - .replace(/[ลŸ]/g, 's') - .replace(/[ฤŸ]/g, 'g') - .replace(/[^\w\s]/g, '') // remove any non-word or non-space characters - .replace(/\s+/g, ' ') // replace multiple spaces with a single space - .trim(); // trim any leading or trailing spaces - - const libraryTypes = libraryType === '1080pOr2160p' ? ['1080p', '2160p', ''] : [libraryType]; - - const client = axios.create({ - httpAgent: agent, - headers: { - authority: 'btdig.com', - accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', - 'accept-language': 'en-US,en;q=0.9', - dnt: '1', - referer: 'https://btdig.com/', - 'sec-ch-ua': '"Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"', - 'sec-ch-ua-mobile': '?0', - 'sec-ch-ua-platform': '"macOS"', - 'sec-fetch-dest': 'document', - 'sec-fetch-mode': 'navigate', - 'sec-fetch-site': 'same-origin', - 'sec-fetch-user': '?1', - 'upgrade-insecure-requests': '1', - 'user-agent': - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36', - }, - timeout: 3000, - }); + const finalQuery = cleanSearchQuery(search); + const libraryTypes = getLibraryTypes(libraryType); + const client = createAxiosInstance(agent); try { const results = []; for (const lType of libraryTypes) { - results.push(await fetchSearchResults(client, finalQuery, lType)); + results.push(await fetchSearchResults(client, finalQuery, lType, cache)); } let processedResults = flattenAndRemoveDuplicates(results); if (processedResults.length) processedResults = groupByParsedTitle(processedResults); @@ -129,198 +53,3 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< }); } } - -async function fetchSearchResults( - client: AxiosInstance, - searchQuery: string, - libraryType: string -): Promise { - try { - const finalQuery = `${searchQuery}${ - !libraryType || libraryType === '1080pOr2160p' ? '' : ` ${libraryType}` - }`; - - try { - const cached = await cache.getCachedJsonValue(finalQuery.split(' ')); - if (cached) { - return cached; - } - } catch (e: any) { - console.warn(e); - } - - let pageNum = 1; - - const createSearchUrl = (pg: number) => - `${dhtSearchHostname}/search?q=${encodeURIComponent(finalQuery)}&p=${pg - 1}`; - - const BAD_RESULT_THRESHOLD = 11; - let badResults = 0; - let searchResultsArr: SearchResult[] = []; - - const MAX_RETRIES = 5; // maximum number of retries - const RETRY_DELAY = 1500; // initial delay in ms, doubles with each retry - - let skippedResults = 0; - - while (pageNum <= 40 + Math.floor(skippedResults / 10)) { - console.log(`Scraping page ${pageNum} (${finalQuery})...`, new Date().getTime()); - let retries = 0; // current number of retries - let responseData = ''; - let numResults = 0; - const searchUrl = createSearchUrl(pageNum); - while (true) { - try { - const response = await client.get(searchUrl); - responseData = response.data; - const numResultsStr = responseData.match(/(\d+) results found/) || []; - numResults = parseInt(numResultsStr[1], 10); - retries = 0; - break; - } catch (error: any) { - console.error(`Error scraping page ${pageNum} (${finalQuery})`, error.message); - retries++; - if (retries > MAX_RETRIES) { - console.error(`Max retries reached (${MAX_RETRIES}), aborting search`); - throw error; - } - const delay = RETRY_DELAY * Math.pow(2, retries - 1); - await new Promise((resolve) => setTimeout(resolve, delay)); - } - } - console.log( - `Scrape successful for page ${pageNum} (${finalQuery})`, - new Date().getTime() - ); - const fileSizes = Array.from( - responseData.matchAll( - /class=\"torrent_size\"[^>]*>(\d+(?:\.\d+)?)(?:[^A-Z<]+)?([A-Z]+)?/g - ) - ); - const namesAndHashes = Array.from( - responseData.matchAll(/magnet:\?xt=urn:btih:([a-z\d]{40})&dn=([^&]+)&/g) - ); - - if (fileSizes.length !== namesAndHashes.length) { - console.warn('Mismatch in file sizes and names'); - break; - } - - for (let resIndex = 0; resIndex < fileSizes.length; resIndex++) { - const title = decodeURIComponent(namesAndHashes[resIndex][2].replaceAll('+', ' ')); - const fileSizeStr = `${fileSizes[resIndex][1]} ${fileSizes[resIndex][2] || 'B'}`; - const mediaType = getMediaType(title); - const info = - mediaType === 'movie' ? filenameParse(title) : filenameParse(title, true); - - // Ignore results that don't have GB in fileSize - if (libraryType !== '1080pOr2160p' && !fileSizeStr.includes('GB')) { - badResults++; - continue; - } - - // immediately check if filesize makes sense - const fileSize = parseFloat(fileSizeStr); - if (mediaType === 'movie' && fileSize > 128) { - skippedResults++; - continue; - } - - // Check if every term in the query (tokenized by space) is contained in the title - const queryTerms = finalQuery.split(' '); - const containsAllTerms = queryTerms.every((term) => - new RegExp(`\\b${term}`).test(title.toLowerCase()) - ); - if (!containsAllTerms) { - badResults++; - continue; - } - if (libraryType === '1080pOr2160p' && !/1080p|2160p/i.test(title.toLowerCase())) { - badResults++; - continue; - } - - const hash = namesAndHashes[resIndex][1]; - - const { dolby_vision, hdr10plus, hdr, remux, proper_remux, score } = getReleaseTags( - title, - fileSize - ); - - let resultObj: SearchResult = { - title, - fileSize, - magnetLink: `magnet:?xt=urn:btih:${hash}`, - hash, - dolby_vision, - hdr10plus, - hdr, - remux, - proper_remux, - score, - mediaType, - info, - }; - searchResultsArr.push(resultObj); - // Reset ignoredResults counter - badResults = 0; - } - - // Stop execution if the last 5 results were ignored - if (badResults >= BAD_RESULT_THRESHOLD) { - console.log( - `Stopped execution after ${pageNum} pages because the last ${BAD_RESULT_THRESHOLD} results were ignored.` - ); - break; - } - - if (numResults > pageNum * 10) { - pageNum++; - } else { - // No more pages, exit the loop - break; - } - } - - console.log(`Found ${searchResultsArr.length} results (${finalQuery})`); - - return searchResultsArr; - } catch (error) { - console.error('fetchSearchResults page processing error', error); - throw error; - } -} - -function flattenAndRemoveDuplicates(arr: SearchResult[][]): SearchResult[] { - const flattened = arr.reduce((acc, val) => acc.concat(val), []); - const unique = new Map(); - flattened.forEach((item) => { - if (!unique.has(item.hash)) { - unique.set(item.hash, item); - } - }); - return Array.from(unique.values()); -} - -function groupByParsedTitle(results: SearchResult[]): SearchResult[] { - const frequency: Record = {}; - for (const result of results) { - const mediaId = getMediaId(result.info, result.mediaType); - if (mediaId in frequency) { - frequency[mediaId] += result.fileSize; - } else { - frequency[mediaId] = result.fileSize; - } - } - - results.sort((a, b) => { - const frequencyCompare = - frequency[getMediaId(b.info, b.mediaType)] - frequency[getMediaId(a.info, a.mediaType)]; - if (frequencyCompare === 0) { - return b.fileSize - a.fileSize; - } - return frequencyCompare; - }); - - return results; -} diff --git a/src/pages/api/slowsearch.ts b/src/pages/api/slowsearch.ts index 720b1e9..8ffa41a 100644 --- a/src/pages/api/slowsearch.ts +++ b/src/pages/api/slowsearch.ts @@ -1,64 +1,27 @@ +import { + createAxiosInstance, + fetchSearchResults, + flattenAndRemoveDuplicates, + groupByParsedTitle, + SearchResult, +} from '@/services/btdigg'; import { RedisCache } from '@/services/cache'; -import { getMediaId } from '@/utils/mediaId'; -import { getMediaType } from '@/utils/mediaType'; -import getReleaseTags from '@/utils/score'; -import { filenameParse, ParsedFilename } from '@ctrl/video-filename-parser'; -import axios, { AxiosInstance } from 'axios'; +import { cleanSearchQuery, getLibraryTypes } from '@/utils/search'; import { NextApiRequest, NextApiResponse } from 'next'; import { SocksProxyAgent } from 'socks-proxy-agent'; -type SearchResult = { - title: string; - fileSize: number; - magnetLink: string; - hash: string; - dolby_vision: boolean; - hdr10plus: boolean; - hdr: boolean; - remux: boolean; - proper_remux: boolean; - score: number; - mediaType: 'tv' | 'movie'; - info: ParsedFilename; -}; - -export type BtDiggApiResult = { +export type SlowSearchApiResponse = { searchResults?: SearchResult[]; errorMessage?: string; }; -const stopWords = [ - 'the', - 'and', - 'be', - 'to', - 'of', - 'a', - 'in', - 'i', - 'it', - 'on', - 'he', - 'as', - 'do', - 'at', - 'by', - 'we', - 'or', - 'an', - 'my', - 'so', - 'up', - 'if', - 'me', -]; - const agent = new SocksProxyAgent(process.env.PROXY!, { timeout: 3000 }); -const dhtSearchHostname = 'http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion'; - const cache = new RedisCache(process.env.REDIS_URL!); -export default async function handler(req: NextApiRequest, res: NextApiResponse) { +export default async function handler( + req: NextApiRequest, + res: NextApiResponse +) { const { search, libraryType } = req.query; if (!search || search instanceof Array) { @@ -71,53 +34,14 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< return; } - const finalQuery = search - .split(/[\s\=:\?\.\-\(\)\/]/) // split the search query into an array of elements - .filter((e) => e !== '') // filter out any empty elements - .map((e) => e.toLowerCase()) // convert each element to lowercase - .filter((term) => !stopWords.includes(term)) // remove any stop words from an array - .join(' ') // join the remaining elements with a single space - .replace(/[รกร รครข]/g, 'a') // replace certain characters with their equivalent - .replace(/[รฉรจรซรช]/g, 'e') - .replace(/[รญรฌรฏรฎ]/g, 'i') - .replace(/[รณรฒรถรด]/g, 'o') - .replace(/[รบรนรผรป]/g, 'u') - .replace(/[รง]/g, 'c') - .replace(/[รฑ]/g, 'n') - .replace(/[ลŸ]/g, 's') - .replace(/[ฤŸ]/g, 'g') - .replace(/[^\w\s]/g, '') // remove any non-word or non-space characters - .replace(/\s+/g, ' ') // replace multiple spaces with a single space - .trim(); // trim any leading or trailing spaces - - const libraryTypes = libraryType === '1080pOr2160p' ? ['1080p', '2160p', ''] : [libraryType]; - - const client = axios.create({ - httpAgent: agent, - headers: { - authority: 'btdig.com', - accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', - 'accept-language': 'en-US,en;q=0.9', - dnt: '1', - referer: 'https://btdig.com/', - 'sec-ch-ua': '"Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"', - 'sec-ch-ua-mobile': '?0', - 'sec-ch-ua-platform': '"macOS"', - 'sec-fetch-dest': 'document', - 'sec-fetch-mode': 'navigate', - 'sec-fetch-site': 'same-origin', - 'sec-fetch-user': '?1', - 'upgrade-insecure-requests': '1', - 'user-agent': - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36', - }, - timeout: 3000, - }); + const finalQuery = cleanSearchQuery(search); + const libraryTypes = getLibraryTypes(libraryType); + const client = createAxiosInstance(agent); try { const results = []; for (const lType of libraryTypes) { - results.push(await fetchSearchResults(client, finalQuery, lType)); + results.push(await fetchSearchResults(client, finalQuery, lType, cache)); } let processedResults = flattenAndRemoveDuplicates(results); if (processedResults.length) processedResults = groupByParsedTitle(processedResults); @@ -129,194 +53,3 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< }); } } - -async function fetchSearchResults( - client: AxiosInstance, - searchQuery: string, - libraryType: string -): Promise { - try { - const finalQuery = `${searchQuery}${ - !libraryType || libraryType === '1080pOr2160p' ? '' : ` ${libraryType}` - }`; - - const cached = await cache.getCachedJsonValue(finalQuery.split(' ')); - if (cached) { - return cached; - } - - let pageNum = 1; - - const createSearchUrl = (pg: number) => - `${dhtSearchHostname}/search?q=${encodeURIComponent(finalQuery)}&p=${pg - 1}`; - - const BAD_RESULT_THRESHOLD = 11; - let badResults = 0; - let searchResultsArr: SearchResult[] = []; - - const MAX_RETRIES = 6; // maximum number of retries - const RETRY_DELAY = 1000; // initial delay in ms, doubles with each retry - - while (pageNum <= 100) { - console.log(`Scraping page ${pageNum} (${finalQuery})...`, new Date().getTime()); - let retries = 0; // current number of retries - let responseData = ''; - let numResults = 0; - const searchUrl = createSearchUrl(pageNum); - while (true) { - try { - const response = await client.get(searchUrl); - responseData = response.data; - const numResultsStr = responseData.match(/(\d+) results found/) || []; - numResults = parseInt(numResultsStr[1], 10); - retries = 0; - break; - } catch (error: any) { - console.error(`Error scraping page ${pageNum} (${finalQuery})`, error.message); - retries++; - if (retries > MAX_RETRIES) { - console.error(`Max retries reached (${MAX_RETRIES}), aborting search`); - throw error; - } - const delay = RETRY_DELAY * Math.pow(2, retries - 1); - await new Promise((resolve) => setTimeout(resolve, delay)); - } - } - console.log( - `Scrape successful for page ${pageNum} (${finalQuery})`, - new Date().getTime() - ); - const fileSizes = Array.from( - responseData.matchAll( - /class=\"torrent_size\"[^>]*>(\d+(?:\.\d+)?)(?:[^A-Z<]+)?([A-Z]+)?/g - ) - ); - const namesAndHashes = Array.from( - responseData.matchAll(/magnet:\?xt=urn:btih:([a-z\d]{40})&dn=([^&]+)&/g) - ); - - if (fileSizes.length !== namesAndHashes.length) { - console.warn('Mismatch in file sizes and names'); - break; - } - - for (let resIndex = 0; resIndex < fileSizes.length; resIndex++) { - const title = decodeURIComponent(namesAndHashes[resIndex][2].replaceAll('+', ' ')); - const fileSizeStr = `${fileSizes[resIndex][1]} ${fileSizes[resIndex][2] || 'B'}`; - const mediaType = getMediaType(title); - const info = - mediaType === 'movie' ? filenameParse(title) : filenameParse(title, true); - - // Ignore results that don't have GB in fileSize - if (libraryType !== '1080pOr2160p' && !fileSizeStr.includes('GB')) { - badResults++; - continue; - } - - // immediately check if filesize makes sense - const fileSize = parseFloat(fileSizeStr); - if (mediaType === 'movie' && fileSize > 128) { - continue; - } - - // Check if every term in the query (tokenized by space) is contained in the title - const queryTerms = finalQuery.split(' '); - const containsAllTerms = queryTerms.every((term) => - new RegExp(`\\b${term}`).test(title.toLowerCase()) - ); - if (!containsAllTerms) { - badResults++; - continue; - } - if (libraryType === '1080pOr2160p' && !/1080p|2160p/i.test(title.toLowerCase())) { - badResults++; - continue; - } - - const hash = namesAndHashes[resIndex][1]; - - const { dolby_vision, hdr10plus, hdr, remux, proper_remux, score } = getReleaseTags( - title, - fileSize - ); - - let resultObj: SearchResult = { - title, - fileSize, - magnetLink: `magnet:?xt=urn:btih:${hash}`, - hash, - dolby_vision, - hdr10plus, - hdr, - remux, - proper_remux, - score, - mediaType, - info, - }; - searchResultsArr.push(resultObj); - // Reset ignoredResults counter - badResults = 0; - } - - // Stop execution if the last 5 results were ignored - if (badResults >= BAD_RESULT_THRESHOLD) { - console.log( - `Stopped execution after ${pageNum} pages because the last ${BAD_RESULT_THRESHOLD} results were ignored.` - ); - break; - } - - if (numResults > pageNum * 10) { - pageNum++; - } else { - // No more pages, exit the loop - break; - } - } - - console.log(`Found ${searchResultsArr.length} results (${finalQuery})`); - - // run async - cache.cacheJsonValue(finalQuery.split(' '), searchResultsArr); - - return searchResultsArr; - } catch (error) { - console.error('fetchSearchResults page processing error', error); - throw error; - } -} - -function flattenAndRemoveDuplicates(arr: SearchResult[][]): SearchResult[] { - const flattened = arr.reduce((acc, val) => acc.concat(val), []); - const unique = new Map(); - flattened.forEach((item) => { - if (!unique.has(item.hash)) { - unique.set(item.hash, item); - } - }); - return Array.from(unique.values()); -} - -function groupByParsedTitle(results: SearchResult[]): SearchResult[] { - const frequency: Record = {}; - for (const result of results) { - const mediaId = getMediaId(result.info, result.mediaType); - if (mediaId in frequency) { - frequency[mediaId] += result.fileSize; - } else { - frequency[mediaId] = result.fileSize; - } - } - - results.sort((a, b) => { - const frequencyCompare = - frequency[getMediaId(b.info, b.mediaType)] - frequency[getMediaId(a.info, a.mediaType)]; - if (frequencyCompare === 0) { - return b.fileSize - a.fileSize; - } - return frequencyCompare; - }); - - return results; -} diff --git a/src/pages/search.tsx b/src/pages/search.tsx index 6e732e8..4c69383 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -19,7 +19,7 @@ import Link from 'next/link'; import { useRouter } from 'next/router'; import { useCallback, useEffect, useState } from 'react'; import toast, { Toaster } from 'react-hot-toast'; -import { BtDiggApiResult } from './api/search'; +import { SearchApiResponse } from './api/search'; type SearchResult = { title: string; @@ -56,7 +56,7 @@ function Search() { search: searchQuery, ...(myAccount?.libraryType ? { ['libraryType']: myAccount.libraryType } : {}), }; - const response = await axios.get('/api/search', { + const response = await axios.get('/api/search', { params, cancelToken: source.token, }); diff --git a/src/services/btdigg.ts b/src/services/btdigg.ts new file mode 100644 index 0000000..5b92624 --- /dev/null +++ b/src/services/btdigg.ts @@ -0,0 +1,244 @@ +import { getMediaId } from '@/utils/mediaId'; +import { getMediaType } from '@/utils/mediaType'; +import getReleaseTags from '@/utils/score'; +import { filenameParse, ParsedFilename } from '@ctrl/video-filename-parser'; +import axios, { AxiosInstance } from 'axios'; +import { SocksProxyAgent } from 'socks-proxy-agent'; +import { RedisCache } from './cache'; + +export type SearchResult = { + title: string; + fileSize: number; + magnetLink: string; + hash: string; + dolby_vision: boolean; + hdr10plus: boolean; + hdr: boolean; + remux: boolean; + proper_remux: boolean; + score: number; + mediaType: 'tv' | 'movie'; + info: ParsedFilename; +}; + +export const createAxiosInstance = (agent: SocksProxyAgent) => { + return axios.create({ + httpAgent: agent, + headers: { + authority: 'btdig.com', + accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', + 'accept-language': 'en-US,en;q=0.9', + dnt: '1', + referer: 'https://btdig.com/', + 'sec-ch-ua': '"Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"macOS"', + 'sec-fetch-dest': 'document', + 'sec-fetch-mode': 'navigate', + 'sec-fetch-site': 'same-origin', + 'sec-fetch-user': '?1', + 'upgrade-insecure-requests': '1', + 'user-agent': + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36', + }, + timeout: 3000, + }); +}; + +export const flattenAndRemoveDuplicates = (arr: SearchResult[][]): SearchResult[] => { + const flattened = arr.reduce((acc, val) => acc.concat(val), []); + const unique = new Map(); + flattened.forEach((item) => { + if (!unique.has(item.hash)) { + unique.set(item.hash, item); + } + }); + return Array.from(unique.values()); +}; + +export const groupByParsedTitle = (results: SearchResult[]): SearchResult[] => { + const frequency: Record = {}; + for (const result of results) { + const mediaId = getMediaId(result.info, result.mediaType); + if (mediaId in frequency) { + frequency[mediaId] += result.fileSize; + } else { + frequency[mediaId] = result.fileSize; + } + } + + results.sort((a, b) => { + const frequencyCompare = + frequency[getMediaId(b.info, b.mediaType)] - frequency[getMediaId(a.info, a.mediaType)]; + if (frequencyCompare === 0) { + return b.fileSize - a.fileSize; + } + return frequencyCompare; + }); + + return results; +}; + +const dhtSearchHostname = 'http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion'; + +export async function fetchSearchResults( + client: AxiosInstance, + searchQuery: string, + libraryType: string, + cache: RedisCache +): Promise { + try { + const finalQuery = `${searchQuery}${ + !libraryType || libraryType === '1080pOr2160p' ? '' : ` ${libraryType}` + }`; + + try { + const cached = await cache.getCachedJsonValue(finalQuery.split(' ')); + if (cached) { + return cached; + } + } catch (e: any) { + console.warn(e); + } + + let pageNum = 1; + + const createSearchUrl = (pg: number) => + `${dhtSearchHostname}/search?q=${encodeURIComponent(finalQuery)}&p=${pg - 1}`; + + const BAD_RESULT_THRESHOLD = 11; + let badResults = 0; + let searchResultsArr: SearchResult[] = []; + + const MAX_RETRIES = 5; // maximum number of retries + const RETRY_DELAY = 1500; // initial delay in ms, doubles with each retry + + let skippedResults = 0; + + while (pageNum <= 40 + Math.floor(skippedResults / 10)) { + console.log(`Scraping page ${pageNum} (${finalQuery})...`, new Date().getTime()); + let retries = 0; // current number of retries + let responseData = ''; + let numResults = 0; + const searchUrl = createSearchUrl(pageNum); + while (true) { + try { + const response = await client.get(searchUrl); + responseData = response.data; + const numResultsStr = responseData.match(/(\d+) results found/) || []; + numResults = parseInt(numResultsStr[1], 10); + retries = 0; + break; + } catch (error: any) { + console.error(`Error scraping page ${pageNum} (${finalQuery})`, error.message); + retries++; + if (retries > MAX_RETRIES) { + console.error(`Max retries reached (${MAX_RETRIES}), aborting search`); + throw error; + } + const delay = RETRY_DELAY * Math.pow(2, retries - 1); + await new Promise((resolve) => setTimeout(resolve, delay)); + } + } + console.log( + `Scrape successful for page ${pageNum} (${finalQuery})`, + new Date().getTime() + ); + const fileSizes = Array.from( + responseData.matchAll( + /class=\"torrent_size\"[^>]*>(\d+(?:\.\d+)?)(?:[^A-Z<]+)?([A-Z]+)?/g + ) + ); + const namesAndHashes = Array.from( + responseData.matchAll(/magnet:\?xt=urn:btih:([a-z\d]{40})&dn=([^&]+)&/g) + ); + + if (fileSizes.length !== namesAndHashes.length) { + console.warn('Mismatch in file sizes and names'); + break; + } + + for (let resIndex = 0; resIndex < fileSizes.length; resIndex++) { + const title = decodeURIComponent(namesAndHashes[resIndex][2].replaceAll('+', ' ')); + const fileSizeStr = `${fileSizes[resIndex][1]} ${fileSizes[resIndex][2] || 'B'}`; + const mediaType = getMediaType(title); + const info = + mediaType === 'movie' ? filenameParse(title) : filenameParse(title, true); + + // Ignore results that don't have GB in fileSize + if (libraryType !== '1080pOr2160p' && !fileSizeStr.includes('GB')) { + badResults++; + continue; + } + + // immediately check if filesize makes sense + const fileSize = parseFloat(fileSizeStr); + if (mediaType === 'movie' && fileSize > 128) { + skippedResults++; + continue; + } + + // Check if every term in the query (tokenized by space) is contained in the title + const queryTerms = finalQuery.split(' '); + const containsAllTerms = queryTerms.every((term) => + new RegExp(`\\b${term}`).test(title.toLowerCase()) + ); + if (!containsAllTerms) { + badResults++; + continue; + } + if (libraryType === '1080pOr2160p' && !/1080p|2160p/i.test(title.toLowerCase())) { + badResults++; + continue; + } + + const hash = namesAndHashes[resIndex][1]; + + const { dolby_vision, hdr10plus, hdr, remux, proper_remux, score } = getReleaseTags( + title, + fileSize + ); + + let resultObj: SearchResult = { + title, + fileSize, + magnetLink: `magnet:?xt=urn:btih:${hash}`, + hash, + dolby_vision, + hdr10plus, + hdr, + remux, + proper_remux, + score, + mediaType, + info, + }; + searchResultsArr.push(resultObj); + // Reset ignoredResults counter + badResults = 0; + } + + // Stop execution if the last 5 results were ignored + if (badResults >= BAD_RESULT_THRESHOLD) { + console.log( + `Stopped execution after ${pageNum} pages because the last ${BAD_RESULT_THRESHOLD} results were ignored.` + ); + break; + } + + if (numResults > pageNum * 10) { + pageNum++; + } else { + // No more pages, exit the loop + break; + } + } + + console.log(`Found ${searchResultsArr.length} results (${finalQuery})`); + + return searchResultsArr; + } catch (error) { + console.error('fetchSearchResults page processing error', error); + throw error; + } +} diff --git a/src/utils/search.ts b/src/utils/search.ts new file mode 100644 index 0000000..e8a3c39 --- /dev/null +++ b/src/utils/search.ts @@ -0,0 +1,50 @@ +export const stopWords = [ + 'the', + 'and', + 'be', + 'to', + 'of', + 'a', + 'in', + 'i', + 'it', + 'on', + 'he', + 'as', + 'do', + 'at', + 'by', + 'we', + 'or', + 'an', + 'my', + 'so', + 'up', + 'if', + 'me', +]; + +export const cleanSearchQuery = (search: string): string => { + return search + .split(/[\s\=:\?\.\-\(\)\/]/) // split the search query into an array of elements + .filter((e) => e !== '') // filter out any empty elements + .map((e) => e.toLowerCase()) // convert each element to lowercase + .filter((term) => !stopWords.includes(term)) // remove any stop words from an array + .join(' ') // join the remaining elements with a single space + .replace(/[รกร รครข]/g, 'a') // replace certain characters with their equivalent + .replace(/[รฉรจรซรช]/g, 'e') + .replace(/[รญรฌรฏรฎ]/g, 'i') + .replace(/[รณรฒรถรด]/g, 'o') + .replace(/[รบรนรผรป]/g, 'u') + .replace(/[รง]/g, 'c') + .replace(/[รฑ]/g, 'n') + .replace(/[ลŸ]/g, 's') + .replace(/[ฤŸ]/g, 'g') + .replace(/[^\w\s]/g, '') // remove any non-word or non-space characters + .replace(/\s+/g, ' ') // replace multiple spaces with a single space + .trim(); +}; + +export const getLibraryTypes = (libraryType: string): string[] => { + return libraryType === '1080pOr2160p' ? ['1080p', '2160p', ''] : [libraryType]; +}; From 7f910545887966f617c786f64c96cd70410c1d24 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sun, 16 Apr 2023 12:55:07 +0200 Subject: [PATCH 011/272] 1.2.0 (#11) * highly available redis setup * setup docker compose properly * 1.2.0 --- .env | 2 -- .github/workflows/build-and-push.yml | 6 +----- docker-compose.yml | 30 +++++++++++++--------------- package-lock.json | 4 ++-- package.json | 2 +- redis-sentinel.conf | 9 +++++---- src/pages/api/search.ts | 2 +- src/pages/api/slowsearch.ts | 2 +- src/services/cache.ts | 20 ++++++++++++++----- 9 files changed, 40 insertions(+), 37 deletions(-) diff --git a/.env b/.env index 2615059..5a04210 100644 --- a/.env +++ b/.env @@ -1,5 +1,3 @@ NODE_ENV=production GH_PAT=github-access-token -REDIS_URL=redis://redis:6379 -REDIS_SLAVE_URL=redis://redis-slave:6379 PROXY=socks5h://tor:9050 diff --git a/.github/workflows/build-and-push.yml b/.github/workflows/build-and-push.yml index ce0359d..be57329 100644 --- a/.github/workflows/build-and-push.yml +++ b/.github/workflows/build-and-push.yml @@ -9,10 +9,6 @@ jobs: build-and-push: runs-on: ubuntu-latest - strategy: - matrix: - platform: [linux/amd64, linux/arm64] - steps: - name: Checkout code uses: actions/checkout@v2 @@ -45,7 +41,7 @@ jobs: uses: docker/build-push-action@v2 with: context: . - platform: ${{ matrix.platform }} + platform: linux/amd64 push: true tags: | debridmediamanager/debrid-media-manager:latest diff --git a/docker-compose.yml b/docker-compose.yml index 0b857f1..59c4283 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,50 +16,48 @@ services: web: image: debridmediamanager/debrid-media-manager:latest ports: - - 127.0.0.1:3000:3000 + - 3000:3000 env_file: - .env - .env.local + depends_on: + - tor + - redis-sentinel deploy: replicas: 8 restart_policy: condition: on-failure - redis: - image: 'bitnami/redis:latest' - environment: - - REDIS_REPLICATION_MODE=master - - ALLOW_EMPTY_PASSWORD=yes + redis-master: + image: bitnami/redis:latest + command: redis-server --requirepass dmm123456 volumes: - redis_data:/bitnami/redis/data ports: - - 127.0.0.1:6379:6379 + - 6379:6379 deploy: replicas: 1 redis-slave: - image: 'bitnami/redis:latest' - environment: - - REDIS_REPLICATION_MODE=slave - - REDIS_MASTER_HOST=redis - - ALLOW_EMPTY_PASSWORD=yes + image: bitnami/redis:latest + command: redis-server --requirepass dmm123456 --slaveof redis-master 6379 depends_on: - - redis + - redis-master volumes: - redis_data:/bitnami/redis/data deploy: replicas: 5 redis-sentinel: - image: 'bitnami/redis-sentinel:latest' + image: bitnami/redis-sentinel:latest environment: - ALLOW_EMPTY_PASSWORD=yes - REDIS_SENTINEL_CONF=/usr/local/etc/redis-sentinel.conf depends_on: - - redis + - redis-master - redis-slave ports: - - '127.0.0.1:26379-26381:26379' + - 26379-26381:26379 volumes: - ./redis-sentinel.conf:/usr/local/etc/redis-sentinel.conf deploy: diff --git a/package-lock.json b/package-lock.json index 5c852b6..222b087 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "1.1.0", + "version": "1.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "1.1.0", + "version": "1.2.0", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index b962052..5735cd7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "1.1.0", + "version": "1.2.0", "private": false, "scripts": { "dev": "next dev", diff --git a/redis-sentinel.conf b/redis-sentinel.conf index 5125d5a..34b14cd 100644 --- a/redis-sentinel.conf +++ b/redis-sentinel.conf @@ -1,4 +1,5 @@ -sentinel monitor mymaster redis 6379 2 -sentinel down-after-milliseconds mymaster 5000 -sentinel failover-timeout mymaster 60000 -sentinel parallel-syncs mymaster 1 +sentinel monitor dmmmaster redis-master 6379 2 +sentinel down-after-milliseconds dmmmaster 5000 +sentinel failover-timeout dmmmaster 60000 +sentinel parallel-syncs dmmmaster 1 +sentinel auth-pass dmmmaster dmm123456 diff --git a/src/pages/api/search.ts b/src/pages/api/search.ts index 4b66954..af33829 100644 --- a/src/pages/api/search.ts +++ b/src/pages/api/search.ts @@ -16,7 +16,7 @@ export type SearchApiResponse = { }; const agent = new SocksProxyAgent(process.env.PROXY!, { timeout: 3000 }); -const cache = new RedisCache(process.env.REDIS_SLAVE_URL!); +const cache = new RedisCache(); export default async function handler( req: NextApiRequest, diff --git a/src/pages/api/slowsearch.ts b/src/pages/api/slowsearch.ts index 8ffa41a..f23443a 100644 --- a/src/pages/api/slowsearch.ts +++ b/src/pages/api/slowsearch.ts @@ -16,7 +16,7 @@ export type SlowSearchApiResponse = { }; const agent = new SocksProxyAgent(process.env.PROXY!, { timeout: 3000 }); -const cache = new RedisCache(process.env.REDIS_URL!); +const cache = new RedisCache(); export default async function handler( req: NextApiRequest, diff --git a/src/services/cache.ts b/src/services/cache.ts index c5d725c..15a6b0e 100644 --- a/src/services/cache.ts +++ b/src/services/cache.ts @@ -1,12 +1,22 @@ import { createClient, RedisClientType } from 'redis'; +const sentinels = [ + { host: 'redis-sentinel', port: 26379 }, + { host: 'redis-sentinel', port: 26380 }, + { host: 'redis-sentinel', port: 26381 }, +]; + +const redisOptions = { + sentinels: sentinels, + name: 'dmmmaster', + password: 'dmm123456', +}; + export class RedisCache { - private url: string; private client: RedisClientType; - constructor(url: string) { - this.url = url; - this.client = createClient({ url: this.url }); + constructor() { + this.client = createClient(redisOptions); this.client.on('error', this.handleRedisConnectionError.bind(this)); this.client.connect(); } @@ -15,7 +25,7 @@ export class RedisCache { console.error('Redis connection error', err); if (err.code === 'ECONNREFUSED') { this.client.quit(); - this.client = createClient({ url: this.url }); + this.client = createClient(redisOptions); this.client.on('error', this.handleRedisConnectionError.bind(this)); this.client.connect(); } From aa372988e004c173c70520d6b9a645710d808732 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sun, 16 Apr 2023 16:22:21 +0200 Subject: [PATCH 012/272] 1.2.1 (#12) * redis fixes * 1.2.1 --- docker-compose.yml | 24 +++++++++++++++--------- package-lock.json | 4 ++-- package.json | 2 +- redis-sentinel.conf | 10 +++++----- src/services/cache.ts | 5 +---- 5 files changed, 24 insertions(+), 21 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 59c4283..5fd423f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,7 +14,7 @@ services: replicas: 64 web: - image: debridmediamanager/debrid-media-manager:latest + image: debridmediamanager/debrid-media-manager:hotfix ports: - 3000:3000 env_file: @@ -30,7 +30,9 @@ services: redis-master: image: bitnami/redis:latest - command: redis-server --requirepass dmm123456 + environment: + - REDIS_REPLICATION_MODE=master + - REDIS_PASSWORD=dmm123456 volumes: - redis_data:/bitnami/redis/data ports: @@ -40,28 +42,32 @@ services: redis-slave: image: bitnami/redis:latest - command: redis-server --requirepass dmm123456 --slaveof redis-master 6379 + environment: + - REDIS_REPLICATION_MODE=slave + - REDIS_MASTER_HOST=redis-master + - REDIS_MASTER_PASSWORD=dmm123456 + - REDIS_PASSWORD=dmm123456 depends_on: - redis-master volumes: - redis_data:/bitnami/redis/data + ports: + - 6379 deploy: replicas: 5 redis-sentinel: image: bitnami/redis-sentinel:latest environment: - - ALLOW_EMPTY_PASSWORD=yes - - REDIS_SENTINEL_CONF=/usr/local/etc/redis-sentinel.conf + - REDIS_MASTER_HOST=redis-master + - REDIS_MASTER_PASSWORD=dmm123456 depends_on: - redis-master - redis-slave ports: - - 26379-26381:26379 - volumes: - - ./redis-sentinel.conf:/usr/local/etc/redis-sentinel.conf + - 26379:26379 deploy: - replicas: 3 + replicas: 1 volumes: redis_data: diff --git a/package-lock.json b/package-lock.json index 222b087..9dfde00 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "1.2.0", + "version": "1.2.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "1.2.0", + "version": "1.2.1", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 5735cd7..16c02fc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "1.2.0", + "version": "1.2.1", "private": false, "scripts": { "dev": "next dev", diff --git a/redis-sentinel.conf b/redis-sentinel.conf index 34b14cd..5aa95f3 100644 --- a/redis-sentinel.conf +++ b/redis-sentinel.conf @@ -1,5 +1,5 @@ -sentinel monitor dmmmaster redis-master 6379 2 -sentinel down-after-milliseconds dmmmaster 5000 -sentinel failover-timeout dmmmaster 60000 -sentinel parallel-syncs dmmmaster 1 -sentinel auth-pass dmmmaster dmm123456 +sentinel monitor dmm-master redis-master 6379 2 +sentinel down-after-milliseconds dmm-master 5000 +sentinel failover-timeout dmm-master 60000 +sentinel parallel-syncs dmm-master 1 +sentinel auth-pass dmm-master dmm123456 diff --git a/src/services/cache.ts b/src/services/cache.ts index 15a6b0e..4136ec0 100644 --- a/src/services/cache.ts +++ b/src/services/cache.ts @@ -2,14 +2,11 @@ import { createClient, RedisClientType } from 'redis'; const sentinels = [ { host: 'redis-sentinel', port: 26379 }, - { host: 'redis-sentinel', port: 26380 }, - { host: 'redis-sentinel', port: 26381 }, ]; const redisOptions = { sentinels: sentinels, - name: 'dmmmaster', - password: 'dmm123456', + name: 'dmm-master', }; export class RedisCache { From 897c5f5f5f4d2d03da520f0b42d66a0cf37f0e40 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sun, 16 Apr 2023 16:33:38 +0200 Subject: [PATCH 013/272] Fix: cluster name update (#13) cluster name update --- redis-sentinel.conf | 10 +++++----- src/services/cache.ts | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/redis-sentinel.conf b/redis-sentinel.conf index 5aa95f3..7c3a888 100644 --- a/redis-sentinel.conf +++ b/redis-sentinel.conf @@ -1,5 +1,5 @@ -sentinel monitor dmm-master redis-master 6379 2 -sentinel down-after-milliseconds dmm-master 5000 -sentinel failover-timeout dmm-master 60000 -sentinel parallel-syncs dmm-master 1 -sentinel auth-pass dmm-master dmm123456 +sentinel monitor mymaster redis-master 6379 2 +sentinel down-after-milliseconds mymaster 5000 +sentinel failover-timeout mymaster 60000 +sentinel parallel-syncs mymaster 1 +sentinel auth-pass mymaster dmm123456 diff --git a/src/services/cache.ts b/src/services/cache.ts index 4136ec0..6d092c7 100644 --- a/src/services/cache.ts +++ b/src/services/cache.ts @@ -6,7 +6,7 @@ const sentinels = [ const redisOptions = { sentinels: sentinels, - name: 'dmm-master', + name: 'mymaster', }; export class RedisCache { From af5163b82c66017bcddd97bef979c1adc9442607 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sun, 16 Apr 2023 17:29:34 +0200 Subject: [PATCH 014/272] 1.2.2 (#14) * proper sentinel support with ioredis * 1.2.2 * formatting --- .env | 1 + docker-compose.yml | 2 +- package-lock.json | 154 +++++++++++++++++++++------------------- package.json | 5 +- src/pages/api/dbsize.ts | 8 +-- src/services/cache.ts | 52 ++++---------- 6 files changed, 101 insertions(+), 121 deletions(-) diff --git a/.env b/.env index 5a04210..43a4f33 100644 --- a/.env +++ b/.env @@ -1,3 +1,4 @@ NODE_ENV=production GH_PAT=github-access-token PROXY=socks5h://tor:9050 +SENTINEL_URL=redis-sentinel diff --git a/docker-compose.yml b/docker-compose.yml index 5fd423f..3b28595 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,7 +14,7 @@ services: replicas: 64 web: - image: debridmediamanager/debrid-media-manager:hotfix + image: debridmediamanager/debrid-media-manager:latest ports: - 3000:3000 env_file: diff --git a/package-lock.json b/package-lock.json index 9dfde00..5cb42bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,16 @@ { "name": "debrid-media-manager", - "version": "1.2.1", + "version": "1.2.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "1.2.1", + "version": "1.2.2", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", + "@types/ioredis": "^5.0.0", "@types/node": "18.15.10", "@types/react": "18.0.29", "@types/react-dom": "18.0.11", @@ -18,6 +19,7 @@ "eslint": "8.36.0", "eslint-config-next": "13.2.4", "express": "^4.18.2", + "ioredis": "^5.3.2", "lz-string": "^1.5.0", "next": "13.2.4", "qs": "^6.11.1", @@ -25,7 +27,6 @@ "react-dom": "18.2.0", "react-hot-toast": "^2.4.0", "react-icons": "^4.8.0", - "redis": "^4.6.5", "socks-proxy-agent": "^7.0.0", "typescript": "5.0.2", "uuid": "^9.0.0" @@ -165,6 +166,11 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, + "node_modules/@ioredis/commands": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", + "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==" + }, "node_modules/@next/env": { "version": "13.2.4", "resolved": "https://registry.npmjs.org/@next/env/-/env-13.2.4.tgz", @@ -571,59 +577,6 @@ "url": "https://opencollective.com/unts" } }, - "node_modules/@redis/bloom": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.2.0.tgz", - "integrity": "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redis/client": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.5.6.tgz", - "integrity": "sha512-dFD1S6je+A47Lj22jN/upVU2fj4huR7S9APd7/ziUXsIXDL+11GPYti4Suv5y8FuXaN+0ZG4JF+y1houEJ7ToA==", - "dependencies": { - "cluster-key-slot": "1.1.2", - "generic-pool": "3.9.0", - "yallist": "4.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@redis/graph": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.1.0.tgz", - "integrity": "sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg==", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redis/json": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.4.tgz", - "integrity": "sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw==", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redis/search": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.1.2.tgz", - "integrity": "sha512-/cMfstG/fOh/SsE+4/BQGeuH/JJloeWuH+qJzM8dbxuWvdWibWAOAHHCZTMPhV3xIlH4/cUEIA8OV5QnYpaVoA==", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redis/time-series": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.4.tgz", - "integrity": "sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng==", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, "node_modules/@rushstack/eslint-patch": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", @@ -661,6 +614,15 @@ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, + "node_modules/@types/ioredis": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/ioredis/-/ioredis-5.0.0.tgz", + "integrity": "sha512-zJbJ3FVE17CNl5KXzdeSPtdltc4tMT3TzC6fxQS0sQngkbFZ6h+0uTafsRqu+eSLIugf6Yb0Ea0SUuRr42Nk9g==", + "deprecated": "This is a stub types definition. ioredis provides its own type definitions, so you do not need this installed.", + "dependencies": { + "ioredis": "*" + } + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -1546,6 +1508,14 @@ "node": ">=0.4.0" } }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "engines": { + "node": ">=0.10" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -2543,14 +2513,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/generic-pool": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.9.0.tgz", - "integrity": "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==", - "engines": { - "node": ">= 4" - } - }, "node_modules/get-intrinsic": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", @@ -2861,6 +2823,29 @@ "node": ">= 0.4" } }, + "node_modules/ioredis": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.3.2.tgz", + "integrity": "sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==", + "dependencies": { + "@ioredis/commands": "^1.1.1", + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.4", + "denque": "^2.1.0", + "lodash.defaults": "^4.2.0", + "lodash.isarguments": "^3.1.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ioredis" + } + }, "node_modules/ip": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", @@ -3304,6 +3289,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -4231,17 +4226,23 @@ "node": ">=8.10.0" } }, - "node_modules/redis": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/redis/-/redis-4.6.5.tgz", - "integrity": "sha512-O0OWA36gDQbswOdUuAhRL6mTZpHFN525HlgZgDaVNgCJIAZR3ya06NTESb0R+TUZ+BFaDpz6NnnVvoMx9meUFg==", + "node_modules/redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/redis-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", "dependencies": { - "@redis/bloom": "1.2.0", - "@redis/client": "1.5.6", - "@redis/graph": "1.1.0", - "@redis/json": "1.0.4", - "@redis/search": "1.1.2", - "@redis/time-series": "1.0.4" + "redis-errors": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/regenerator-runtime": { @@ -4536,6 +4537,11 @@ "node": ">=0.10.0" } }, + "node_modules/standard-as-callback": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", + "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", diff --git a/package.json b/package.json index 16c02fc..760fadc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "1.2.1", + "version": "1.2.2", "private": false, "scripts": { "dev": "next dev", @@ -12,6 +12,7 @@ "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", + "@types/ioredis": "^5.0.0", "@types/node": "18.15.10", "@types/react": "18.0.29", "@types/react-dom": "18.0.11", @@ -20,6 +21,7 @@ "eslint": "8.36.0", "eslint-config-next": "13.2.4", "express": "^4.18.2", + "ioredis": "^5.3.2", "lz-string": "^1.5.0", "next": "13.2.4", "qs": "^6.11.1", @@ -27,7 +29,6 @@ "react-dom": "18.2.0", "react-hot-toast": "^2.4.0", "react-icons": "^4.8.0", - "redis": "^4.6.5", "socks-proxy-agent": "^7.0.0", "typescript": "5.0.2", "uuid": "^9.0.0" diff --git a/src/pages/api/dbsize.ts b/src/pages/api/dbsize.ts index 2d6aa84..f364d7a 100644 --- a/src/pages/api/dbsize.ts +++ b/src/pages/api/dbsize.ts @@ -1,13 +1,11 @@ +import { RedisCache } from '@/services/cache'; import { NextApiHandler } from 'next'; -import { createClient } from 'redis'; -const redisClient = createClient({ url: process.env.REDIS_URL }); -redisClient.on('error', (err) => console.error('Redis connection error', err)); -redisClient.connect(); +const cache = new RedisCache(); const handler: NextApiHandler = async (req, res) => { try { - const size = await redisClient.DBSIZE(); + const size = await cache.getDbSize(); res.status(200).json({ size }); } catch (err) { console.error(err); diff --git a/src/services/cache.ts b/src/services/cache.ts index 6d092c7..5645e51 100644 --- a/src/services/cache.ts +++ b/src/services/cache.ts @@ -1,8 +1,6 @@ -import { createClient, RedisClientType } from 'redis'; +import Redis from 'ioredis'; -const sentinels = [ - { host: 'redis-sentinel', port: 26379 }, -]; +const sentinels = [{ host: process.env.SENTINEL_URL, port: 26379 }]; const redisOptions = { sentinels: sentinels, @@ -10,53 +8,29 @@ const redisOptions = { }; export class RedisCache { - private client: RedisClientType; + private client: Redis; constructor() { - this.client = createClient(redisOptions); - this.client.on('error', this.handleRedisConnectionError.bind(this)); - this.client.connect(); - } - - private handleRedisConnectionError(err: any) { - console.error('Redis connection error', err); - if (err.code === 'ECONNREFUSED') { - this.client.quit(); - this.client = createClient(redisOptions); - this.client.on('error', this.handleRedisConnectionError.bind(this)); - this.client.connect(); - } + this.client = new Redis(redisOptions); } public async cacheJsonValue(key: string[], value: T) { const sortedKey = key.sort(); const redisKey = sortedKey.join(':'); - try { - this.client.SET(redisKey, JSON.stringify(value)); - } catch (err: any) { - if (err.code === 'ECONNREFUSED') { - const jitter = Math.floor(Math.random() * 500) + 500; - await new Promise((resolve) => setTimeout(resolve, jitter)); - await this.cacheJsonValue(key, value); - } - } + await this.client.set(redisKey, JSON.stringify(value)); } public async getCachedJsonValue(key: string[]): Promise { const sortedKey = key.sort(); const redisKey = sortedKey.join(':'); - try { - const jsonValue = await this.client.GET(redisKey); - if (!jsonValue) { - return undefined; - } - return JSON.parse(jsonValue) as T; - } catch (err: any) { - if (err.code === 'ECONNREFUSED') { - const jitter = Math.floor(Math.random() * 500) + 500; - await new Promise((resolve) => setTimeout(resolve, jitter)); - return await this.getCachedJsonValue(key); - } + const jsonValue = await this.client.get(redisKey); + if (!jsonValue) { + return undefined; } + return JSON.parse(jsonValue) as T; + } + + public async getDbSize(): Promise { + return await this.client.dbsize(); } } From f7a99bae98039b6191182cc365a4cfc6da7382f6 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sun, 16 Apr 2023 19:17:12 +0200 Subject: [PATCH 015/272] 1.2.2 (#15) * proper sentinel support with ioredis * 1.2.2 * formatting * redis fixes --- .env | 4 +++- docker-compose.yml | 12 ++++++------ redis-sentinel.conf | 5 ----- src/pages/api/dbsize.ts | 4 ++-- src/services/cache.ts | 7 +++---- 5 files changed, 14 insertions(+), 18 deletions(-) delete mode 100644 redis-sentinel.conf diff --git a/.env b/.env index 43a4f33..efc4494 100644 --- a/.env +++ b/.env @@ -1,4 +1,6 @@ NODE_ENV=production GH_PAT=github-access-token PROXY=socks5h://tor:9050 -SENTINEL_URL=redis-sentinel + +REDIS_SENTINEL_HOST=redis-sentinel +REDIS_PASSWORD=dmm123456 diff --git a/docker-compose.yml b/docker-compose.yml index 3b28595..f6dc0e9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,7 +11,7 @@ services: tor: image: dockage/tor-privoxy:latest deploy: - replicas: 64 + replicas: 1 web: image: debridmediamanager/debrid-media-manager:latest @@ -24,7 +24,7 @@ services: - tor - redis-sentinel deploy: - replicas: 8 + replicas: 1 restart_policy: condition: on-failure @@ -36,7 +36,7 @@ services: volumes: - redis_data:/bitnami/redis/data ports: - - 6379:6379 + - 6379 deploy: replicas: 1 @@ -44,9 +44,9 @@ services: image: bitnami/redis:latest environment: - REDIS_REPLICATION_MODE=slave + - REDIS_PASSWORD=dmm123456 - REDIS_MASTER_HOST=redis-master - REDIS_MASTER_PASSWORD=dmm123456 - - REDIS_PASSWORD=dmm123456 depends_on: - redis-master volumes: @@ -54,7 +54,7 @@ services: ports: - 6379 deploy: - replicas: 5 + replicas: 1 redis-sentinel: image: bitnami/redis-sentinel:latest @@ -65,7 +65,7 @@ services: - redis-master - redis-slave ports: - - 26379:26379 + - 26379 deploy: replicas: 1 diff --git a/redis-sentinel.conf b/redis-sentinel.conf deleted file mode 100644 index 7c3a888..0000000 --- a/redis-sentinel.conf +++ /dev/null @@ -1,5 +0,0 @@ -sentinel monitor mymaster redis-master 6379 2 -sentinel down-after-milliseconds mymaster 5000 -sentinel failover-timeout mymaster 60000 -sentinel parallel-syncs mymaster 1 -sentinel auth-pass mymaster dmm123456 diff --git a/src/pages/api/dbsize.ts b/src/pages/api/dbsize.ts index f364d7a..022a18f 100644 --- a/src/pages/api/dbsize.ts +++ b/src/pages/api/dbsize.ts @@ -7,9 +7,9 @@ const handler: NextApiHandler = async (req, res) => { try { const size = await cache.getDbSize(); res.status(200).json({ size }); - } catch (err) { + } catch (err: any) { console.error(err); - res.status(500).json({ error: err }); + res.status(500).json({ error: err.message }); } }; diff --git a/src/services/cache.ts b/src/services/cache.ts index 5645e51..a7c6088 100644 --- a/src/services/cache.ts +++ b/src/services/cache.ts @@ -1,10 +1,9 @@ import Redis from 'ioredis'; -const sentinels = [{ host: process.env.SENTINEL_URL, port: 26379 }]; - const redisOptions = { - sentinels: sentinels, - name: 'mymaster', + sentinels: [{ host: process.env.REDIS_SENTINEL_HOST, port: 26379 }], + name: 'mymaster', // default from bitnami/redis-sentinel + password: process.env.REDIS_PASSWORD, }; export class RedisCache { From 35af68125d39e5c1b9cff2eae14ee1fd28fc5b33 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sun, 16 Apr 2023 21:16:07 +0200 Subject: [PATCH 016/272] 1.2.3 (#16) * reimplement caching * 1.2.3 --- package-lock.json | 4 ++-- package.json | 2 +- src/pages/api/dbsize.ts | 2 +- src/pages/api/search.ts | 2 +- src/services/btdigg.ts | 2 ++ src/services/cache.ts | 20 ++++++++++++++++++-- 6 files changed, 25 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5cb42bb..48942b0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "1.2.2", + "version": "1.2.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "1.2.2", + "version": "1.2.3", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 760fadc..a41154e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "1.2.2", + "version": "1.2.3", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/api/dbsize.ts b/src/pages/api/dbsize.ts index 022a18f..8284227 100644 --- a/src/pages/api/dbsize.ts +++ b/src/pages/api/dbsize.ts @@ -1,7 +1,7 @@ import { RedisCache } from '@/services/cache'; import { NextApiHandler } from 'next'; -const cache = new RedisCache(); +const cache = new RedisCache(true); const handler: NextApiHandler = async (req, res) => { try { diff --git a/src/pages/api/search.ts b/src/pages/api/search.ts index af33829..1ab1533 100644 --- a/src/pages/api/search.ts +++ b/src/pages/api/search.ts @@ -16,7 +16,7 @@ export type SearchApiResponse = { }; const agent = new SocksProxyAgent(process.env.PROXY!, { timeout: 3000 }); -const cache = new RedisCache(); +const cache = new RedisCache(true); export default async function handler( req: NextApiRequest, diff --git a/src/services/btdigg.ts b/src/services/btdigg.ts index 5b92624..a4fb570 100644 --- a/src/services/btdigg.ts +++ b/src/services/btdigg.ts @@ -236,6 +236,8 @@ export async function fetchSearchResults( console.log(`Found ${searchResultsArr.length} results (${finalQuery})`); + if (!cache.isSlaveInstance()) cache.cacheJsonValue(finalQuery.split(' '), searchResultsArr); + return searchResultsArr; } catch (error) { console.error('fetchSearchResults page processing error', error); diff --git a/src/services/cache.ts b/src/services/cache.ts index a7c6088..f37e110 100644 --- a/src/services/cache.ts +++ b/src/services/cache.ts @@ -8,9 +8,21 @@ const redisOptions = { export class RedisCache { private client: Redis; + private isSlave: boolean; - constructor() { - this.client = new Redis(redisOptions); + constructor(slave = false) { + this.isSlave = slave; + this.client = new Redis({ + role: slave ? 'slave' : 'master', + reconnectOnError(err) { + const targetError = 'READONLY'; + if (err.message.includes(targetError)) { + return true; + } + return false; + }, + ...redisOptions, + }); } public async cacheJsonValue(key: string[], value: T) { @@ -32,4 +44,8 @@ export class RedisCache { public async getDbSize(): Promise { return await this.client.dbsize(); } + + public isSlaveInstance(): boolean { + return this.isSlave; + } } From 7ccd12bee6167f46fed5468625a40021c816cab3 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Wed, 19 Apr 2023 20:30:43 +0200 Subject: [PATCH 017/272] 2.0.0 - AllDebrid support! (#17) * add all debrid configs, fix typo in real debrid config * add alldebrid login page, implement alldebrid api service * implement more robust caching * add different speeds of searching * add normal sped * Alldebrid login flow * Add user fetch in index page * support 2 logins on index page * add premium status * add premium status * support 2 providers in library page * Support for hashlist page * support for search page * Search page support * reset docker-compose * 2.0.0 * support cors for alldebrid --- next.config.js | 5 +- package-lock.json | 4 +- package.json | 2 +- src/hooks/auth.ts | 50 ++++-- src/pages/alldebrid/login.tsx | 75 +++++++++ src/pages/api/dbsize.ts | 2 +- src/pages/api/search.ts | 4 +- src/pages/api/slowsearch.ts | 2 +- src/pages/hashlist.tsx | 146 ++++++++++++----- src/pages/index.tsx | 36 ++++- src/pages/library.tsx | 200 ++++++++++++++++++------ src/pages/realdebrid/login.tsx | 16 +- src/pages/search.tsx | 227 ++++++++++++++++++++------- src/pages/start.tsx | 7 +- src/services/allDebrid.ts | 278 +++++++++++++++++++++++++++++++++ src/services/btdigg.ts | 29 +++- src/services/cache.ts | 36 +++-- src/services/realDebrid.ts | 20 +-- src/utils/withAuth.tsx | 10 +- 19 files changed, 941 insertions(+), 208 deletions(-) create mode 100644 src/pages/alldebrid/login.tsx create mode 100644 src/services/allDebrid.ts diff --git a/next.config.js b/next.config.js index d504791..2e7135d 100644 --- a/next.config.js +++ b/next.config.js @@ -3,7 +3,10 @@ const nextConfig = { reactStrictMode: false, publicRuntimeConfig: { // Will be available on both server and client - realDebirdHostname: 'https://corsproxy.org/?https://api.real-debrid.com', + realDebridHostname: 'https://corsproxy.org/?https://api.real-debrid.com', + allDebridHostname: 'https://api.alldebrid.com', + allDebridAgent: 'debridMediaManager', + bypassHostname: 'https://corsproxy.org/?', }, }; diff --git a/package-lock.json b/package-lock.json index 48942b0..09f0587 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "1.2.3", + "version": "2.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "1.2.3", + "version": "2.0.0", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index a41154e..e774e4c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "1.2.3", + "version": "2.0.0", "private": false, "scripts": { "dev": "next dev", diff --git a/src/hooks/auth.ts b/src/hooks/auth.ts index f223378..21ae6b2 100644 --- a/src/hooks/auth.ts +++ b/src/hooks/auth.ts @@ -1,9 +1,10 @@ +import { getAllDebridUser } from '@/services/allDebrid'; import { getCurrentUser as getRealDebridUser, getToken } from '@/services/realDebrid'; import { useRouter } from 'next/router'; import { useEffect, useState } from 'react'; import useLocalStorage from './localStorage'; -interface User { +interface RealDebridUser { id: number; username: string; email: string; @@ -15,6 +16,18 @@ interface User { expiration: string; } +interface AllDebridUser { + username: string; + email: string; + isPremium: boolean; + isSubscribed: boolean; + isTrial: boolean; + premiumUntil: number; + lang: string; + preferedDomain: string; + fidelityPoints: number; +} + export const useDebridLogin = () => { const router = useRouter(); @@ -33,10 +46,10 @@ export const useDebridLogin = () => { }; export const useRealDebridAccessToken = () => { - const [clientId] = useLocalStorage('clientId'); - const [clientSecret] = useLocalStorage('clientSecret'); - const [refreshToken] = useLocalStorage('refreshToken'); - const [accessToken, setAccessToken] = useLocalStorage('accessToken'); + const [clientId] = useLocalStorage('rd:clientId'); + const [clientSecret] = useLocalStorage('rd:clientSecret'); + const [refreshToken] = useLocalStorage('rd:refreshToken'); + const [accessToken, setAccessToken] = useLocalStorage('rd:accessToken'); useEffect(() => { (async () => { @@ -56,18 +69,31 @@ export const useRealDebridAccessToken = () => { return accessToken; }; +export const useAllDebridApiKey = () => { + const [apiKey] = useLocalStorage('ad:apiKey'); + return apiKey; +}; + export const useCurrentUser = () => { - const [user, setUser] = useState(null); + const [rdUser, setRdUser] = useState(null); + const [adUser, setAdUser] = useState(null); const router = useRouter(); - const [accessToken] = useLocalStorage('accessToken'); + const [accessToken] = useLocalStorage('rd:accessToken'); + const [apiKey] = useLocalStorage('ad:apiKey'); useEffect(() => { (async () => { - if (!accessToken) return null; - const rdUser = await getRealDebridUser(accessToken); - if (rdUser) setUser(rdUser); + if (!accessToken && !apiKey) return null; + if (accessToken) { + const rdUserResponse = await getRealDebridUser(accessToken); + if (rdUserResponse) setRdUser(rdUserResponse); + } + if (apiKey) { + const adUserResponse = await getAllDebridUser(apiKey); + if (adUserResponse) setAdUser(adUserResponse); + } })(); - }, [accessToken, router]); + }, [accessToken, apiKey, router]); - return user; + return { realDebrid: rdUser, allDebrid: adUser }; }; diff --git a/src/pages/alldebrid/login.tsx b/src/pages/alldebrid/login.tsx new file mode 100644 index 0000000..3d551d2 --- /dev/null +++ b/src/pages/alldebrid/login.tsx @@ -0,0 +1,75 @@ +import useLocalStorage from '@/hooks/localStorage'; +import { checkPin, getPin } from '@/services/allDebrid'; +import Head from 'next/head'; +import { useRouter } from 'next/router'; +import { useEffect, useState } from 'react'; + +// Current limits are at 12 requests per second and 600 requests per minute. +// This is the pin auth flow + +export default function AllDebridLoginPage() { + const [pinCodeInputUrl, setPinCodeInputUrl] = useState(''); + const [pinCode, setPinCode] = useState(''); + const router = useRouter(); + const [apiKey, setApiKey] = useLocalStorage('ad:apiKey'); + const [isCopied, setIsCopied] = useState(false); + + useEffect(() => { + const fetchDeviceCode = async () => { + const pinResponse = await getPin(); + if (pinResponse) { + setPinCodeInputUrl(pinResponse.user_url); + setPinCode(pinResponse.pin); + + // Save pin code to clipboard + try { + await navigator.clipboard.writeText(pinResponse.pin); + } catch (error) { + setIsCopied(true); + console.error('Error saving pin code to clipboard:', (error as any).message); + } + + const checkResponse = await checkPin(pinResponse.pin, pinResponse.check); + if (checkResponse) { + setApiKey(checkResponse.data.apikey!, checkResponse.data.expires_in); + } + } + }; + if (!apiKey) fetchDeviceCode(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [router]); + + useEffect(() => { + (async () => { + if (apiKey) { + await router.push('/'); + } + })(); + }, [apiKey, router]); + + const handleAuthorize = () => { + if (pinCodeInputUrl) { + window.open(pinCodeInputUrl, '_blank'); + } + }; + + return ( +
+ + Debrid Media Manager - AllDebrid Login + + {pinCode && ( +

+ Please click the button and enter this code: {pinCode}{' '} + {isCopied && '(copied to clipboard)'} +

+ )} + +
+ ); +} diff --git a/src/pages/api/dbsize.ts b/src/pages/api/dbsize.ts index 8284227..022a18f 100644 --- a/src/pages/api/dbsize.ts +++ b/src/pages/api/dbsize.ts @@ -1,7 +1,7 @@ import { RedisCache } from '@/services/cache'; import { NextApiHandler } from 'next'; -const cache = new RedisCache(true); +const cache = new RedisCache(); const handler: NextApiHandler = async (req, res) => { try { diff --git a/src/pages/api/search.ts b/src/pages/api/search.ts index 1ab1533..25d1f11 100644 --- a/src/pages/api/search.ts +++ b/src/pages/api/search.ts @@ -16,7 +16,7 @@ export type SearchApiResponse = { }; const agent = new SocksProxyAgent(process.env.PROXY!, { timeout: 3000 }); -const cache = new RedisCache(true); +const cache = new RedisCache(); export default async function handler( req: NextApiRequest, @@ -41,7 +41,7 @@ export default async function handler( try { const results = []; for (const lType of libraryTypes) { - results.push(await fetchSearchResults(client, finalQuery, lType, cache)); + results.push(await fetchSearchResults('fast', client, finalQuery, lType, cache)); } let processedResults = flattenAndRemoveDuplicates(results); if (processedResults.length) processedResults = groupByParsedTitle(processedResults); diff --git a/src/pages/api/slowsearch.ts b/src/pages/api/slowsearch.ts index f23443a..0512e94 100644 --- a/src/pages/api/slowsearch.ts +++ b/src/pages/api/slowsearch.ts @@ -41,7 +41,7 @@ export default async function handler( try { const results = []; for (const lType of libraryTypes) { - results.push(await fetchSearchResults(client, finalQuery, lType, cache)); + results.push(await fetchSearchResults('veryslow', client, finalQuery, lType, cache)); } let processedResults = flattenAndRemoveDuplicates(results); if (processedResults.length) processedResults = groupByParsedTitle(processedResults); diff --git a/src/pages/hashlist.tsx b/src/pages/hashlist.tsx index 0ad3700..d01b354 100644 --- a/src/pages/hashlist.tsx +++ b/src/pages/hashlist.tsx @@ -1,4 +1,6 @@ +import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; import useLocalStorage from '@/hooks/localStorage'; +import { uploadMagnet } from '@/services/allDebrid'; import { addHashAsMagnet, deleteTorrent, getTorrentInfo, selectFiles } from '@/services/realDebrid'; import { runConcurrentFunctions } from '@/utils/batch'; import { CachedTorrentInfo } from '@/utils/cachedTorrentInfo'; @@ -40,18 +42,22 @@ function TorrentsPage() { const [loading, setLoading] = useState(true); const [filtering, setFiltering] = useState(false); const [grouping, setGrouping] = useState(false); + const [userTorrentsList, setUserTorrentsList] = useState([]); const [filteredList, setFilteredList] = useState([]); const [sortBy, setSortBy] = useState({ column: 'title', direction: 'asc' }); - const [accessToken] = useLocalStorage('accessToken'); + + const rdKey = useRealDebridAccessToken(); + const adKey = useAllDebridApiKey(); + const [movieCount, setMovieCount] = useState(0); const [tvCount, setTvCount] = useState(0); - const [movieGrouping, _1] = useState>({}); - const [tvGroupingByEpisode, _2] = useState>({}); - const [tvGroupingByTitle, _3] = useState>({}); - const [hasDupes, _4] = useState>([]); + const [movieGrouping] = useState>({}); + const [tvGroupingByEpisode] = useState>({}); + const [tvGroupingByTitle] = useState>({}); + const [hasDupes] = useState>([]); const [totalBytes, setTotalBytes] = useState(0); - const [cachedTorrentInfo, setTorrentInfo] = useLocalStorage>( + const [torrentCache, setTorrentCache] = useLocalStorage>( 'userTorrentsList', {} ); @@ -92,7 +98,7 @@ function TorrentsPage() { } })(); // eslint-disable-next-line react-hooks/exhaustive-deps - }, [accessToken]); + }, [rdKey]); // aggregate metadata useEffect(() => { @@ -186,11 +192,12 @@ function TorrentsPage() { } } - const handleAddAsMagnet = async (hash: string, disableToast: boolean = false) => { + const handleAddAsMagnetInRd = async (hash: string, disableToast: boolean = false) => { try { - const id = await addHashAsMagnet(accessToken!, hash); + if (!rdKey) throw new Error('no_rd_key'); + const id = await addHashAsMagnet(rdKey, hash); if (!disableToast) toast.success('Successfully added as magnet!'); - setTorrentInfo( + setTorrentCache( (prev) => ({ ...prev, [hash]: { hash, status: 'downloading' } } as Record< string, @@ -200,20 +207,45 @@ function TorrentsPage() { handleSelectFiles(id, true); } catch (error) { if (!disableToast) - toast.error('There was an error adding as magnet. Please try again.'); + toast.error( + 'There was an error adding as magnet in Real-Debrid. Please try again.' + ); throw error; } }; - function wrapDownloadFilesFn(t: UserTorrent) { - return async () => await handleAddAsMagnet(t.hash, true); + const handleAddAsMagnetInAd = async (hash: string, disableToast: boolean = false) => { + try { + if (!rdKey) throw new Error('no_rd_key'); + await uploadMagnet(rdKey, [hash]); + if (!disableToast) toast.success('Successfully added as magnet!'); + setTorrentCache( + (prev) => + ({ ...prev, [hash]: { hash, status: 'downloading' } } as Record< + string, + CachedTorrentInfo + >) + ); + } catch (error) { + if (!disableToast) + toast.error('There was an error adding as magnet in AllDebrid. Please try again.'); + throw error; + } + }; + + function wrapDownloadFilesInRdFn(t: UserTorrent) { + return async () => await handleAddAsMagnetInRd(t.hash, true); } - async function downloadNonDupeTorrents() { - const libraryHashes = Object.keys(cachedTorrentInfo!); + function wrapDownloadFilesInAdFn(t: UserTorrent) { + return async () => await handleAddAsMagnetInAd(t.hash, true); + } + + async function downloadNonDupeTorrentsInRd() { + const libraryHashes = Object.keys(torrentCache!); const yetToDownload = filteredList .filter((t) => !libraryHashes.includes(t.hash)) - .map(wrapDownloadFilesFn); + .map(wrapDownloadFilesInRdFn); const [results, errors] = await runConcurrentFunctions(yetToDownload, 5, 500); if (errors.length) { toast.error(`Error downloading files on ${errors.length} torrents`); @@ -226,18 +258,36 @@ function TorrentsPage() { } } - const inLibrary = (hash: string) => hash in cachedTorrentInfo!; + async function downloadNonDupeTorrentsInAd() { + const libraryHashes = Object.keys(torrentCache!); + const yetToDownload = filteredList + .filter((t) => !libraryHashes.includes(t.hash)) + .map(wrapDownloadFilesInAdFn); + const [results, errors] = await runConcurrentFunctions(yetToDownload, 5, 500); + if (errors.length) { + toast.error(`Error downloading files on ${errors.length} torrents`); + } + if (results.length) { + toast.success(`Started downloading ${results.length} torrents`); + } + if (!errors.length && !results.length) { + toast('Everything has been downloaded', { icon: '๐Ÿ‘' }); + } + } + + const inLibrary = (hash: string) => hash in torrentCache!; const notInLibrary = (hash: string) => !inLibrary(hash); const isDownloaded = (hash: string) => - inLibrary(hash) && cachedTorrentInfo![hash].status === 'downloaded'; + inLibrary(hash) && torrentCache![hash].status === 'downloaded'; const isDownloading = (hash: string) => - inLibrary(hash) && cachedTorrentInfo![hash].status !== 'downloaded'; + inLibrary(hash) && torrentCache![hash].status !== 'downloaded'; const handleDeleteTorrent = async (id: string, disableToast: boolean = false) => { try { - await deleteTorrent(accessToken!, id); + if (!rdKey) throw new Error('no_rd_key'); + await deleteTorrent(rdKey, id); if (!disableToast) toast.success(`Download canceled (${id.substring(0, 3)})`); - setTorrentInfo((prevCache) => { + setTorrentCache((prevCache) => { const updatedCache = { ...prevCache }; const hash = Object.keys(updatedCache).find((key) => updatedCache[key].id === id); delete updatedCache[hash!]; @@ -251,7 +301,8 @@ function TorrentsPage() { const handleSelectFiles = async (id: string, disableToast: boolean = false) => { try { - const response = await getTorrentInfo(accessToken!, id); + if (!rdKey) throw new Error('no_rd_key'); + const response = await getTorrentInfo(rdKey, id); const selectedFiles = getSelectableFiles(response.files.filter(isVideo)).map( (file) => file.id @@ -261,7 +312,7 @@ function TorrentsPage() { throw new Error('no_files_for_selection'); } - await selectFiles(accessToken!, id, selectedFiles); + await selectFiles(rdKey, id, selectedFiles); } catch (error) { if ((error as Error).message === 'no_files_for_selection') { if (!disableToast) @@ -309,15 +360,28 @@ function TorrentsPage() { > Show {tvCount} TV shows - + {rdKey && ( + + )} + {adKey && ( + + )} {Object.keys(router.query).length !== 0 && ( {t.score.toFixed(1)} {(isDownloaded(t.hash) || isDownloading(t.hash)) && - `${cachedTorrentInfo![t.hash].status}`} - {notInLibrary(t.hash) && ( + `${torrentCache![t.hash].status}`} + {rdKey && notInLibrary(t.hash) && ( + + )} + {adKey && notInLibrary(t.hash) && ( )} diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 49fa21f..2f5c7cf 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,11 +1,12 @@ import { useCurrentUser } from '@/hooks/auth'; import { withAuth } from '@/utils/withAuth'; import Head from 'next/head'; +import Link from 'next/link'; import { useRouter } from 'next/router'; function IndexPage() { const router = useRouter(); - const user = useCurrentUser(); + const { realDebrid: rdUser, allDebrid: adUser } = useCurrentUser(); const handleLibraryClick = () => { router.push('/library'); @@ -40,11 +41,38 @@ function IndexPage() { /> {/* this is made by ChatGPT */} - {user ? ( + {rdUser || adUser ? ( <>

Debrid Media Manager

-

Welcome back, {user.username}!

+

+ Welcome back,{' '} + {rdUser ? ( + <> + Real-Debrid: {rdUser.username} {rdUser.premium ? 'โœ…' : 'โŒ'} + + ) : ( + + Login with Real-Debrid + + )}{' '} + {adUser ? ( + <> + AllDebrid: {adUser.username} {adUser.isPremium ? 'โœ…' : 'โŒ'} + + ) : ( + + Login with AllDebrid + + )} +

+
-
-
- {loading || grouping || filtering ? ( + {rdLoading || adLoading || grouping || filtering ? (
@@ -536,9 +644,7 @@ function TorrentsPage() { : ''; return ( - - {torrent.id.substring(0, 3)} - + {torrent.id} {!['Invalid Magnet', 'Magnet'].includes( torrent.filename @@ -601,7 +707,11 @@ function TorrentsPage() { diff --git a/src/pages/realdebrid/login.tsx b/src/pages/realdebrid/login.tsx index 41b72a0..4092521 100644 --- a/src/pages/realdebrid/login.tsx +++ b/src/pages/realdebrid/login.tsx @@ -9,10 +9,10 @@ export default function RealDebridLoginPage() { const intervalId = useRef(null); const [userCode, setUserCode] = useState(''); const router = useRouter(); - const [clientId, setClientId] = useLocalStorage('clientId'); - const [clientSecret, setClientSecret] = useLocalStorage('clientSecret'); - const [refreshToken, setRefreshToken] = useLocalStorage('refreshToken'); - const [accessToken, setAccessToken] = useLocalStorage('accessToken'); + const [clientId, setClientId] = useLocalStorage('rd:clientId'); + const [clientSecret, setClientSecret] = useLocalStorage('rd:clientSecret'); + const [refreshToken, setRefreshToken] = useLocalStorage('rd:refreshToken'); + const [accessToken, setAccessToken] = useLocalStorage('rd:accessToken'); const [isCopied, setIsCopied] = useState(false); useEffect(() => { @@ -78,14 +78,6 @@ export default function RealDebridLoginPage() { })(); }, [accessToken, router]); - useEffect(() => { - (async () => { - if (accessToken) { - await router.push('/'); - } - })(); - }, [accessToken, router]); - const handleAuthorize = () => { if (verificationUrl) { window.open(verificationUrl, '_blank'); diff --git a/src/pages/search.tsx b/src/pages/search.tsx index 4c69383..3330cb9 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -1,6 +1,7 @@ import useMyAccount, { MyAccount } from '@/hooks/account'; -import { useRealDebridAccessToken } from '@/hooks/auth'; +import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; import useLocalStorage from '@/hooks/localStorage'; +import { getInstantAvailability, MagnetFile, uploadMagnet } from '@/services/allDebrid'; import { addHashAsMagnet, deleteTorrent, @@ -21,24 +22,27 @@ import { useCallback, useEffect, useState } from 'react'; import toast, { Toaster } from 'react-hot-toast'; import { SearchApiResponse } from './api/search'; +type Availability = 'all:available' | 'rd:available' | 'ad:available' | 'unavailable' | 'no_videos'; + type SearchResult = { title: string; fileSize: number; hash: string; mediaType: 'movie' | 'tv'; info: ParsedFilename; - available: boolean; + available: Availability; }; function Search() { const [query, setQuery] = useState(''); const [searchResults, setSearchResults] = useState([]); const [errorMessage, setErrorMessage] = useState(''); - const accessToken = useRealDebridAccessToken(); + const rdKey = useRealDebridAccessToken(); + const adKey = useAllDebridApiKey(); const [loading, setLoading] = useState(false); const [cancelTokenSource, setCancelTokenSource] = useState(null); const [myAccount, setMyAccount] = useMyAccount(); - const [cachedTorrentInfo, setTorrentInfo] = useLocalStorage>( + const [torrentCache, setTorrentCache] = useLocalStorage>( 'userTorrentsList', {} ); @@ -65,9 +69,9 @@ function Search() { response.data.searchResults.map((result) => result.hash) ); setSearchResults( - response.data.searchResults.map((r, ifx) => ({ + response.data.searchResults.map((r) => ({ ...r, - available: availability[ifx], + available: availability[r.hash], })) ); } else { @@ -113,43 +117,83 @@ function Search() { }; }, [cancelTokenSource]); - const checkResultsAvailability = async (hashes: string[]): Promise => { - const results: boolean[] = []; + type HashAvailability = Record; + + const checkResultsAvailability = async (hashes: string[]): Promise => { + const availability = hashes.reduce((acc: HashAvailability, curr: string) => { + acc[curr] = 'unavailable'; + return acc; + }, {}); + try { - const response = await getInstantlyAvailableFiles(accessToken!, ...hashes); - for (const masterHash in response) { - if ('rd' in response[masterHash] === false) { - results.push(false); - continue; - } + const availabilityChecks = []; + if (rdKey) + availabilityChecks.push( + getInstantlyAvailableFiles(rdKey, ...hashes).then((rdAvailabilityResp) => { + for (const masterHash in rdAvailabilityResp) { + const variants = rdAvailabilityResp[masterHash]['rd']; + if (variants.length) availability[masterHash] = 'no_videos'; + for (const variant of variants) { + for (const fileId in variant) { + const file = variant[fileId]; + if (isVideo({ path: file.filename })) { + availability[masterHash] = + availability[masterHash] === 'ad:available' + ? 'all:available' + : 'rd:available'; + break; + } + } + } + } + }) + ); - for (const variant of response[masterHash]['rd']) { - for (const fileIndex in variant) { - const file = variant[fileIndex]; - if (isVideo({ path: file.filename })) { - results.push(true); - continue; + if (adKey) + availabilityChecks.push( + getInstantAvailability(adKey, hashes).then((adAvailabilityResp) => { + for (const magnetData of adAvailabilityResp.data.magnets) { + const masterHash = magnetData.hash; + const instant = magnetData.instant; + + if (masterHash in availability && instant === true) { + availability[masterHash] = magnetData.files?.reduce( + (acc: boolean, curr: MagnetFile) => { + if (isVideo({ path: curr.n })) { + return true; + } + return acc; + }, + false + ) + ? availability[masterHash] === 'rd:available' + ? 'all:available' + : 'ad:available' + : 'no_videos'; + } } - } - } - results.push(false); - } - return results; + }) + ); + + await Promise.all(availabilityChecks); + + return availability; } catch (error) { toast.error('There was an error checking availability. Please try again.'); throw error; } }; - const handleAddAsMagnet = async ( + const handleAddAsMagnetInRd = async ( hash: string, instantDownload: boolean = false, disableToast: boolean = false ) => { try { - const id = await addHashAsMagnet(accessToken!, hash); + if (!rdKey) throw new Error('no_rd_key'); + const id = await addHashAsMagnet(rdKey, hash); if (!disableToast) toast.success('Successfully added as magnet!'); - setTorrentInfo( + setTorrentCache( (prev) => ({ ...prev, @@ -169,18 +213,51 @@ function Search() { } }; - const inLibrary = (hash: string) => hash in cachedTorrentInfo!; + const handleAddAsMagnetInAd = async ( + hash: string, + instantDownload: boolean = false, + disableToast: boolean = false + ) => { + try { + if (!adKey) throw new Error('no_ad_key'); + const id = await uploadMagnet(adKey, [hash]); + if (!disableToast) toast.success('Successfully added as magnet!'); + setTorrentCache( + (prev) => + ({ + ...prev, + [hash]: { + id, + hash, + status: instantDownload ? 'downloaded' : 'downloading', + progress: 0, + }, + } as Record) + ); + } catch (error) { + if (!disableToast) + toast.error('There was an error adding as magnet. Please try again.'); + throw error; + } + }; + + const inLibrary = (hash: string) => hash in torrentCache!; const notInLibrary = (hash: string) => !inLibrary(hash); const isDownloaded = (hash: string) => - inLibrary(hash) && cachedTorrentInfo![hash].status === 'downloaded'; + inLibrary(hash) && torrentCache![hash].status === 'downloaded'; const isDownloading = (hash: string) => - inLibrary(hash) && cachedTorrentInfo![hash].status !== 'downloaded'; + inLibrary(hash) && torrentCache![hash].status !== 'downloaded'; + const isAvailableInAd = (result: SearchResult) => + result.available === 'ad:available' || result.available === 'all:available'; + const isAvailableInRd = (result: SearchResult) => + result.available === 'rd:available' || result.available === 'all:available'; const handleDeleteTorrent = async (id: string, disableToast: boolean = false) => { try { - await deleteTorrent(accessToken!, id); + if (!rdKey) throw new Error('no_rd_key'); + await deleteTorrent(rdKey, id); if (!disableToast) toast.success(`Download canceled (${id.substring(0, 3)})`); - setTorrentInfo((prevCache) => { + setTorrentCache((prevCache) => { const updatedCache = { ...prevCache }; const hash = Object.keys(updatedCache).find((key) => updatedCache[key].id === id); delete updatedCache[hash!]; @@ -194,7 +271,8 @@ function Search() { const handleSelectFiles = async (id: string, disableToast: boolean = false) => { try { - const response = await getTorrentInfo(accessToken!, id); + if (!rdKey) throw new Error('no_rd_key'); + const response = await getTorrentInfo(rdKey, id); if (response.filename === 'Magnet') return; // no files yet const selectedFiles = getSelectableFiles(response.files.filter(isVideo)).map( @@ -205,7 +283,7 @@ function Search() { throw new Error('no_files_for_selection'); } - await selectFiles(accessToken!, id, selectedFiles); + await selectFiles(rdKey, id, selectedFiles); } catch (error) { if ((error as Error).message === 'no_files_for_selection') { if (!disableToast) @@ -308,40 +386,75 @@ function Search() { {(isDownloaded(result.hash) || (inLibrary(result.hash) && - !cachedTorrentInfo![result.hash].id)) && - `${cachedTorrentInfo![result.hash].status}`} + !torrentCache![result.hash].id)) && + `${torrentCache![result.hash].status}`} {isDownloading(result.hash) && - cachedTorrentInfo![result.hash].id && ( + torrentCache![result.hash].id && ( )} {notInLibrary(result.hash) && ( - + <> + {rdKey && ( + + )} + {adKey && ( + + )} + )} diff --git a/src/pages/start.tsx b/src/pages/start.tsx index ea26e3b..3efd1df 100644 --- a/src/pages/start.tsx +++ b/src/pages/start.tsx @@ -2,7 +2,7 @@ import { useDebridLogin } from '@/hooks/auth'; import Head from 'next/head'; export default function StartPage() { - const { loginWithRealDebrid } = useDebridLogin(); + const { loginWithRealDebrid, loginWithAllDebrid } = useDebridLogin(); return (
@@ -70,9 +70,8 @@ export default function StartPage() { {/* AllDebrid */}
diff --git a/src/services/allDebrid.ts b/src/services/allDebrid.ts new file mode 100644 index 0000000..715ce7e --- /dev/null +++ b/src/services/allDebrid.ts @@ -0,0 +1,278 @@ +import axios from 'axios'; +import getConfig from 'next/config'; + +const { publicRuntimeConfig: config } = getConfig(); + +interface PinResponse { + status: string; + data: { + pin: string; + check: string; + expires_in: number; + user_url: string; + base_url: string; + check_url: string; + }; +} + +export const getPin = async () => { + try { + let endpoint = `${config.allDebridHostname}/v4/pin/get?agent=${config.allDebridAgent}`; + if (config.bypassHostname) { + endpoint = `${config.bypassHostname}${encodeURIComponent(endpoint)}`; + } + const response = await axios.get(endpoint); + return response.data.data; + } catch (error) { + console.error('Error fetching PIN:', (error as any).message); + throw error; + } +}; + +interface PinCheckResponse { + status: string; + data: { + activated: boolean; + expires_in: number; + apikey?: string; + }; +} + +export const checkPin = async (pin: string, check: string) => { + let endpoint = `${config.allDebridHostname}/v4/pin/check?agent=${config.allDebridAgent}&check=${check}&pin=${pin}`; + if (config.bypassHostname) { + endpoint = `${config.bypassHostname}${encodeURIComponent(endpoint)}`; + } + try { + let pinCheck = await axios.get(endpoint); + + while (!pinCheck.data.data.activated) { + await new Promise((resolve) => setTimeout(resolve, 5000)); // Wait 5 seconds before polling again. + pinCheck = await axios.get(endpoint); + } + + return pinCheck.data; + } catch (error) { + console.error('Error checking PIN:', (error as any).message); + throw error; + } +}; + +interface UserResponse { + status: string; + data: { + user: { + username: string; + email: string; + isPremium: boolean; + isSubscribed: boolean; + isTrial: boolean; + premiumUntil: number; + lang: string; + preferedDomain: string; + fidelityPoints: number; + limitedHostersQuotas: Record; + remainingTrialQuota?: number; + notifications: string[]; + }; + }; +} + +export const getAllDebridUser = async (apikey: string) => { + let endpoint = `${config.allDebridHostname}/v4/user?agent=${config.allDebridAgent}&apikey=${apikey}`; + if (config.bypassHostname) { + endpoint = `${config.bypassHostname}${encodeURIComponent(endpoint)}`; + } + try { + const response = await axios.get(endpoint); + return response.data.data.user; + } catch (error) { + console.error('Error fetching user info:', (error as any).message); + throw error; + } +}; + +interface MagnetObject { + magnet: string; + name?: string; + id?: number; + hash?: string; + size?: number; + ready?: boolean; + error?: { + code: string; + message: string; + }; +} + +interface MagnetUploadResponse { + status: string; + data: { + magnets: MagnetObject[]; + }; +} + +export const uploadMagnet = async (apikey: string, hashes: string[]) => { + try { + let endpoint = `${config.allDebridHostname}/v4/magnet/upload?agent=${config.allDebridAgent}&apikey=${apikey}`; + for (const hash of hashes) { + endpoint += `&magnets[]=${hash}`; + } + if (config.bypassHostname) { + endpoint = `${config.bypassHostname}${encodeURIComponent(endpoint)}`; + } + const response = await axios.post(endpoint); + return response.data; + } catch (error) { + console.error('Error uploading magnet:', (error as any).message); + throw error; + } +}; + +interface MagnetStatus { + id: number; + filename: string; + size: number; + hash: string; + status: string; + statusCode: number; + downloaded: number; + uploaded: number; + seeders: number; + downloadSpeed: number; + processingPerc: number; + uploadSpeed: number; + uploadDate: number; + completionDate: number; + links: LinkObject[]; + type: string; + notified: boolean; + version: number; +} + +interface LinkObject { + link: string; + filename: string; + size: number; + files: { n: string; s?: number }[]; +} + +interface MagnetStatusResponse { + status: string; + data: { + magnets: MagnetStatus[]; + }; +} + +export const getMagnetStatus = async ( + apikey: string, + magnetId?: number, + statusFilter?: string, + session?: number, + counter?: number +): Promise => { + let endpoint = `${config.allDebridHostname}/v4/user?agent=${config.allDebridAgent}&apikey=${apikey}`; + if (magnetId) { + endpoint += `&id=${magnetId}`; + } else if (statusFilter) { + endpoint += `&status=${statusFilter}`; + } + if (session) { + endpoint += `&session=${session}`; + } + if (counter) { + endpoint += `&counter=${counter}`; + } + if (config.bypassHostname) { + endpoint = `${config.bypassHostname}${encodeURIComponent(endpoint)}`; + } + try { + const response = await axios.get(endpoint); + return response.data; + } catch (error) { + console.error('Error fetching magnet status:', (error as any).message); + throw error; + } +}; + +interface MagnetDeleteResponse { + message: string; +} + +export const deleteMagnet = async (apikey: string, id: string): Promise => { + let endpoint = `${config.allDebridHostname}/v4/magnet/delete?agent=${config.allDebridAgent}&apikey=${apikey}&id=${id}`; + if (config.bypassHostname) { + endpoint = `${config.bypassHostname}${encodeURIComponent(endpoint)}`; + } + try { + const response = await axios.get(endpoint); + return response.data; + } catch (error) { + console.error('Error deleting magnet:', (error as any).message); + throw error; + } +}; + +interface MagnetRestartResponse { + message?: string; + error?: { + code: string; + message: string; + }; + magnet?: number | string; +} + +export const restartMagnet = async (apikey: string, id: string): Promise => { + let endpoint = `${config.allDebridHostname}/v4/magnet/restart?agent=${config.allDebridAgent}&apikey=${apikey}&id=${id}`; + if (config.bypassHostname) { + endpoint = `${config.bypassHostname}${encodeURIComponent(endpoint)}`; + } + try { + const response = await axios.get(endpoint); + return response.data; + } catch (error) { + console.error('Error restarting magnet:', (error as any).message); + throw error; + } +}; + +export interface MagnetFile { + n: string; + s: number; +} + +interface MagnetData { + magnet: string; + hash: string; + instant: boolean; + files?: MagnetFile[]; + error?: { + code: string; + message: string; + }; +} + +interface InstantAvailabilityResponse { + status: string; + data: { magnets: MagnetData[] }; +} + +export const getInstantAvailability = async ( + apikey: string, + hashes: string[] +): Promise => { + let endpoint = `${config.allDebridHostname}/v4/magnet/instant?agent=${config.allDebridAgent}&apikey=${apikey}`; + for (const hash of hashes) { + endpoint += `&magnets[]=${hash}`; + } + if (config.bypassHostname) { + endpoint = `${config.bypassHostname}${encodeURIComponent(endpoint)}`; + } + try { + const response = await axios.get(endpoint); + return response.data; + } catch (error: any) { + console.error('Error fetching magnet availability:', error.message); + throw error; + } +}; diff --git a/src/services/btdigg.ts b/src/services/btdigg.ts index a4fb570..344d3d4 100644 --- a/src/services/btdigg.ts +++ b/src/services/btdigg.ts @@ -82,6 +82,7 @@ export const groupByParsedTitle = (results: SearchResult[]): SearchResult[] => { const dhtSearchHostname = 'http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion'; export async function fetchSearchResults( + speed: 'veryfast' | 'fast' | 'normal' | 'slow' | 'veryslow', client: AxiosInstance, searchQuery: string, libraryType: string, @@ -95,6 +96,9 @@ export async function fetchSearchResults( try { const cached = await cache.getCachedJsonValue(finalQuery.split(' ')); if (cached) { + if (cached.length === 0) { + cache.deleteCachedJsonValue(finalQuery.split(' ')); + } return cached; } } catch (e: any) { @@ -113,9 +117,28 @@ export async function fetchSearchResults( const MAX_RETRIES = 5; // maximum number of retries const RETRY_DELAY = 1500; // initial delay in ms, doubles with each retry - let skippedResults = 0; + let upperThreshold: (skipped: number) => number; + + switch (speed) { + case 'veryfast': + upperThreshold = (skipped: number): number => 20 + Math.floor(skipped / 10); + break; + case 'fast': + upperThreshold = (skipped: number): number => 40 + Math.floor(skipped / 10); + break; + case 'normal': + upperThreshold = (skipped: number): number => 60 + Math.floor(skipped / 10); + break; + case 'slow': + upperThreshold = (skipped: number): number => 80 + Math.floor(skipped / 10); + break; + case 'veryslow': + upperThreshold = (_: any) => 100; + break; + } - while (pageNum <= 40 + Math.floor(skippedResults / 10)) { + let skippedResults = 0; + while (pageNum <= upperThreshold(skippedResults)) { console.log(`Scraping page ${pageNum} (${finalQuery})...`, new Date().getTime()); let retries = 0; // current number of retries let responseData = ''; @@ -236,7 +259,7 @@ export async function fetchSearchResults( console.log(`Found ${searchResultsArr.length} results (${finalQuery})`); - if (!cache.isSlaveInstance()) cache.cacheJsonValue(finalQuery.split(' '), searchResultsArr); + cache.cacheJsonValue(finalQuery.split(' '), searchResultsArr); return searchResultsArr; } catch (error) { diff --git a/src/services/cache.ts b/src/services/cache.ts index f37e110..3f29e97 100644 --- a/src/services/cache.ts +++ b/src/services/cache.ts @@ -7,13 +7,23 @@ const redisOptions = { }; export class RedisCache { - private client: Redis; - private isSlave: boolean; + private slaveClient: Redis; + private masterClient: Redis; - constructor(slave = false) { - this.isSlave = slave; - this.client = new Redis({ - role: slave ? 'slave' : 'master', + constructor() { + this.slaveClient = new Redis({ + role: 'slave', + reconnectOnError(err) { + const targetError = 'READONLY'; + if (err.message.includes(targetError)) { + return true; + } + return false; + }, + ...redisOptions, + }); + this.masterClient = new Redis({ + role: 'master', reconnectOnError(err) { const targetError = 'READONLY'; if (err.message.includes(targetError)) { @@ -28,24 +38,26 @@ export class RedisCache { public async cacheJsonValue(key: string[], value: T) { const sortedKey = key.sort(); const redisKey = sortedKey.join(':'); - await this.client.set(redisKey, JSON.stringify(value)); + await this.masterClient.set(redisKey, JSON.stringify(value)); } public async getCachedJsonValue(key: string[]): Promise { const sortedKey = key.sort(); const redisKey = sortedKey.join(':'); - const jsonValue = await this.client.get(redisKey); + const jsonValue = await this.slaveClient.get(redisKey); if (!jsonValue) { return undefined; } return JSON.parse(jsonValue) as T; } - public async getDbSize(): Promise { - return await this.client.dbsize(); + public async deleteCachedJsonValue(key: string[]): Promise { + const sortedKey = key.sort(); + const redisKey = sortedKey.join(':'); + await this.masterClient.del(redisKey); } - public isSlaveInstance(): boolean { - return this.isSlave; + public async getDbSize(): Promise { + return await this.slaveClient.dbsize(); } } diff --git a/src/services/realDebrid.ts b/src/services/realDebrid.ts index e8ff913..1810331 100644 --- a/src/services/realDebrid.ts +++ b/src/services/realDebrid.ts @@ -102,7 +102,7 @@ const { publicRuntimeConfig: config } = getConfig(); export const getDeviceCode = async () => { try { const response = await axios.get( - `${config.realDebirdHostname}/oauth/v2/device/code`, + `${config.realDebridHostname}/oauth/v2/device/code`, { params: { client_id: RD_OPENSOURCE_CLIENT_ID, @@ -120,7 +120,7 @@ export const getDeviceCode = async () => { export const getCredentials = async (deviceCode: string) => { try { const response = await axios.get( - `${config.realDebirdHostname}/oauth/v2/device/credentials`, + `${config.realDebridHostname}/oauth/v2/device/credentials`, { params: { client_id: RD_OPENSOURCE_CLIENT_ID, @@ -148,7 +148,7 @@ export const getToken = async (clientId: string, clientSecret: string, code: str }; const response = await axios.post( - `${config.realDebirdHostname}/oauth/v2/token`, + `${config.realDebridHostname}/oauth/v2/token`, params.toString(), { headers } ); @@ -166,7 +166,7 @@ export const getCurrentUser = async (accessToken: string) => { }; const response = await axios.get( - `${config.realDebirdHostname}/rest/1.0/user`, + `${config.realDebridHostname}/rest/1.0/user`, { headers } ); return response.data; @@ -189,7 +189,7 @@ export const getUserTorrentsList = async ( }; const response = await axios.get( - `${config.realDebirdHostname}/rest/1.0/torrents`, + `${config.realDebridHostname}/rest/1.0/torrents`, { headers, params: { offset, page, limit, filter } } ); return response.data; @@ -206,7 +206,7 @@ export const getTorrentInfo = async (accessToken: string, id: string) => { }; const response = await axios.get( - `${config.realDebirdHostname}/rest/1.0/torrents/info/${id}`, + `${config.realDebridHostname}/rest/1.0/torrents/info/${id}`, { headers } ); return response.data; @@ -223,7 +223,7 @@ export const getInstantlyAvailableFiles = async (accessToken: string, ...hashes: }; const response = await axios.get( - `${config.realDebirdHostname}/rest/1.0/torrents/instantAvailability/${hashes.join( + `${config.realDebridHostname}/rest/1.0/torrents/instantAvailability/${hashes.join( '/' )}`, { headers } @@ -245,7 +245,7 @@ export const addMagnet = async (accessToken: string, magnet: string): Promise( - `${config.realDebirdHostname}/rest/1.0/torrents/addMagnet`, + `${config.realDebridHostname}/rest/1.0/torrents/addMagnet`, formData, { headers, @@ -271,7 +271,7 @@ export const selectFiles = async (accessToken: string, id: string, files: number const formData = qs.stringify({ files: files.join(',') }); await axios.post( - `${config.realDebirdHostname}/rest/1.0/torrents/selectFiles/${id}`, + `${config.realDebridHostname}/rest/1.0/torrents/selectFiles/${id}`, formData, { headers } ); @@ -287,7 +287,7 @@ export const deleteTorrent = async (accessToken: string, id: string) => { Authorization: `Bearer ${accessToken}`, }; - await axios.delete(`${config.realDebirdHostname}/rest/1.0/torrents/delete/${id}`, { + await axios.delete(`${config.realDebridHostname}/rest/1.0/torrents/delete/${id}`, { headers, }); } catch (error: any) { diff --git a/src/utils/withAuth.tsx b/src/utils/withAuth.tsx index 0dfb4a7..db44c18 100644 --- a/src/utils/withAuth.tsx +++ b/src/utils/withAuth.tsx @@ -1,4 +1,4 @@ -import { useRealDebridAccessToken } from '@/hooks/auth'; +import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; import { useRouter } from 'next/router'; import { ComponentType, useEffect, useState } from 'react'; @@ -9,11 +9,13 @@ export const withAuth =

(Component: ComponentType

) => { return function WithAuth(props: P) { const router = useRouter(); const [isLoading, setIsLoading] = useState(true); - const accessToken = useRealDebridAccessToken(); + const rdKey = useRealDebridAccessToken(); + const adKey = useAllDebridApiKey(); useEffect(() => { if ( - !accessToken && + !rdKey && + !adKey && router.pathname !== START_ROUTE && !router.pathname.endsWith(LOGIN_ROUTE) ) { @@ -21,7 +23,7 @@ export const withAuth =

(Component: ComponentType

) => { } else { setIsLoading(false); } - }, [accessToken, router]); + }, [rdKey, adKey, router]); if (isLoading) { // Render a loading indicator or placeholder on initial load From e7fa0aaedd33edd32927256617e50ee0fe7b887d Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Wed, 19 Apr 2023 20:39:17 +0200 Subject: [PATCH 018/272] 2.0.1 (#18) * fix endpoint for all debrid magnets * 2.0.1 --- package-lock.json | 4 ++-- package.json | 2 +- src/services/allDebrid.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 09f0587..445cc30 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "2.0.0", + "version": "2.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "2.0.0", + "version": "2.0.1", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index e774e4c..31a28af 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.0.0", + "version": "2.0.1", "private": false, "scripts": { "dev": "next dev", diff --git a/src/services/allDebrid.ts b/src/services/allDebrid.ts index 715ce7e..e928261 100644 --- a/src/services/allDebrid.ts +++ b/src/services/allDebrid.ts @@ -171,7 +171,7 @@ export const getMagnetStatus = async ( session?: number, counter?: number ): Promise => { - let endpoint = `${config.allDebridHostname}/v4/user?agent=${config.allDebridAgent}&apikey=${apikey}`; + let endpoint = `${config.allDebridHostname}/v4/magnet/status?agent=${config.allDebridAgent}&apikey=${apikey}`; if (magnetId) { endpoint += `&id=${magnetId}`; } else if (statusFilter) { From 972343302778c9b78ae06591ec594823548584f4 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Wed, 19 Apr 2023 21:02:39 +0200 Subject: [PATCH 019/272] 2.0.2 (#19) * Fix passing IDs * 2.0.2 --- package-lock.json | 4 ++-- package.json | 2 +- src/pages/hashlist.tsx | 19 ++++++++++--------- src/pages/library.tsx | 11 ++++++----- src/pages/search.tsx | 24 +++++++++++++++--------- 5 files changed, 34 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index 445cc30..d235bdb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "2.0.1", + "version": "2.0.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "2.0.1", + "version": "2.0.2", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 31a28af..e539844 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.0.1", + "version": "2.0.2", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/hashlist.tsx b/src/pages/hashlist.tsx index d01b354..1542f13 100644 --- a/src/pages/hashlist.tsx +++ b/src/pages/hashlist.tsx @@ -1,6 +1,6 @@ import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; import useLocalStorage from '@/hooks/localStorage'; -import { uploadMagnet } from '@/services/allDebrid'; +import { deleteMagnet, uploadMagnet } from '@/services/allDebrid'; import { addHashAsMagnet, deleteTorrent, getTorrentInfo, selectFiles } from '@/services/realDebrid'; import { runConcurrentFunctions } from '@/utils/batch'; import { CachedTorrentInfo } from '@/utils/cachedTorrentInfo'; @@ -284,9 +284,10 @@ function TorrentsPage() { const handleDeleteTorrent = async (id: string, disableToast: boolean = false) => { try { - if (!rdKey) throw new Error('no_rd_key'); - await deleteTorrent(rdKey, id); - if (!disableToast) toast.success(`Download canceled (${id.substring(0, 3)})`); + if (!rdKey && !adKey) throw new Error('no_keys'); + if (rdKey && id.startsWith('rd:')) await deleteTorrent(rdKey, id.substring(3)); + if (adKey && id.startsWith('ad:')) await deleteMagnet(adKey, id.substring(3)); + if (!disableToast) toast.success(`Download canceled (${id})`); setTorrentCache((prevCache) => { const updatedCache = { ...prevCache }; const hash = Object.keys(updatedCache).find((key) => updatedCache[key].id === id); @@ -294,7 +295,7 @@ function TorrentsPage() { return updatedCache; }); } catch (error) { - if (!disableToast) toast.error(`Error deleting torrent (${id.substring(0, 3)})`); + if (!disableToast) toast.error(`Error deleting torrent (${id})`); throw error; } }; @@ -302,7 +303,7 @@ function TorrentsPage() { const handleSelectFiles = async (id: string, disableToast: boolean = false) => { try { if (!rdKey) throw new Error('no_rd_key'); - const response = await getTorrentInfo(rdKey, id); + const response = await getTorrentInfo(rdKey, id.substring(3)); const selectedFiles = getSelectableFiles(response.files.filter(isVideo)).map( (file) => file.id @@ -312,15 +313,15 @@ function TorrentsPage() { throw new Error('no_files_for_selection'); } - await selectFiles(rdKey, id, selectedFiles); + await selectFiles(rdKey, id.substring(3), selectedFiles); } catch (error) { if ((error as Error).message === 'no_files_for_selection') { if (!disableToast) - toast.error(`No files for selection, deleting (${id.substring(0, 3)})`, { + toast.error(`No files for selection, deleting (${id})`, { duration: 5000, }); } else { - if (!disableToast) toast.error(`Error selecting files (${id.substring(0, 3)})`); + if (!disableToast) toast.error(`Error selecting files (${id})`); } throw error; } diff --git a/src/pages/library.tsx b/src/pages/library.tsx index 9c26ed7..6b2455e 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -276,15 +276,16 @@ function TorrentsPage() { const handleDeleteTorrent = async (id: string, disableToast: boolean = false) => { try { + if (!rdKey && !adKey) throw new Error('no_keys'); setUserTorrentsList((prevList) => prevList.filter((t) => t.id !== id)); + if (rdKey && id.startsWith('rd:')) await deleteTorrent(rdKey, id.substring(3)); + if (adKey && id.startsWith('ad:')) await deleteMagnet(adKey, id.substring(3)); + if (!disableToast) toast.success(`Torrent deleted (${id})`); setTorrentCache((prevCache) => { const hash = Object.keys(prevCache).find((key) => prevCache[key].id === id) || ''; delete prevCache[hash]; return prevCache; }); - if (rdKey && id.startsWith('rd:')) await deleteTorrent(rdKey, id.substring(3)); - if (adKey && id.startsWith('ad:')) await deleteMagnet(adKey, id.substring(3)); - if (!disableToast) toast.success(`Torrent deleted (${id})`); } catch (error) { if (!disableToast) toast.error(`Error deleting torrent (${id})`); throw error; @@ -327,7 +328,7 @@ function TorrentsPage() { const handleSelectFiles = async (id: string) => { try { if (!rdKey) throw new Error('no_rd_key'); - const response = await getTorrentInfo(rdKey, id); + const response = await getTorrentInfo(rdKey, id.substring(3)); const selectedFiles = getSelectableFiles(response.files.filter(isVideo)).map( (file) => file.id @@ -337,7 +338,7 @@ function TorrentsPage() { throw new Error('no_files_for_selection'); } - await selectFiles(rdKey, id, selectedFiles); + await selectFiles(rdKey, id.substring(3), selectedFiles); setUserTorrentsList((prevList) => { const newList = [...prevList]; const index = newList.findIndex((t) => t.id === id); diff --git a/src/pages/search.tsx b/src/pages/search.tsx index 3330cb9..efc62ff 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -1,7 +1,12 @@ import useMyAccount, { MyAccount } from '@/hooks/account'; import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; import useLocalStorage from '@/hooks/localStorage'; -import { getInstantAvailability, MagnetFile, uploadMagnet } from '@/services/allDebrid'; +import { + deleteMagnet, + getInstantAvailability, + MagnetFile, + uploadMagnet, +} from '@/services/allDebrid'; import { addHashAsMagnet, deleteTorrent, @@ -254,9 +259,10 @@ function Search() { const handleDeleteTorrent = async (id: string, disableToast: boolean = false) => { try { - if (!rdKey) throw new Error('no_rd_key'); - await deleteTorrent(rdKey, id); - if (!disableToast) toast.success(`Download canceled (${id.substring(0, 3)})`); + if (!rdKey && !adKey) throw new Error('no_keys'); + if (rdKey && id.startsWith('rd:')) await deleteTorrent(rdKey, id.substring(3)); + if (adKey && id.startsWith('ad:')) await deleteMagnet(adKey, id.substring(3)); + if (!disableToast) toast.success(`Download canceled (${id})`); setTorrentCache((prevCache) => { const updatedCache = { ...prevCache }; const hash = Object.keys(updatedCache).find((key) => updatedCache[key].id === id); @@ -264,7 +270,7 @@ function Search() { return updatedCache; }); } catch (error) { - if (!disableToast) toast.error(`Error deleting torrent (${id.substring(0, 3)})`); + if (!disableToast) toast.error(`Error deleting torrent (${id})`); throw error; } }; @@ -272,7 +278,7 @@ function Search() { const handleSelectFiles = async (id: string, disableToast: boolean = false) => { try { if (!rdKey) throw new Error('no_rd_key'); - const response = await getTorrentInfo(rdKey, id); + const response = await getTorrentInfo(rdKey, id.substring(3)); if (response.filename === 'Magnet') return; // no files yet const selectedFiles = getSelectableFiles(response.files.filter(isVideo)).map( @@ -283,15 +289,15 @@ function Search() { throw new Error('no_files_for_selection'); } - await selectFiles(rdKey, id, selectedFiles); + await selectFiles(rdKey, id.substring(3), selectedFiles); } catch (error) { if ((error as Error).message === 'no_files_for_selection') { if (!disableToast) - toast.error(`No files for selection, deleting (${id.substring(0, 3)})`, { + toast.error(`No files for selection, deleting (${id})`, { duration: 5000, }); } else { - if (!disableToast) toast.error(`Error selecting files (${id.substring(0, 3)})`); + if (!disableToast) toast.error(`Error selecting files (${id})`); } throw error; } From 98f0045c63d394db5abc1260304616d8c1314ca7 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Wed, 19 Apr 2023 22:38:20 +0200 Subject: [PATCH 020/272] 2.0.3 (#20) * fix bug in availability check * 2.0.3 --- package-lock.json | 4 ++-- package.json | 2 +- src/pages/search.tsx | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index d235bdb..df8beee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "2.0.2", + "version": "2.0.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "2.0.2", + "version": "2.0.3", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index e539844..2ff9a92 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.0.2", + "version": "2.0.3", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/search.tsx b/src/pages/search.tsx index efc62ff..33ca5ad 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -136,6 +136,7 @@ function Search() { availabilityChecks.push( getInstantlyAvailableFiles(rdKey, ...hashes).then((rdAvailabilityResp) => { for (const masterHash in rdAvailabilityResp) { + if ('rd' in rdAvailabilityResp[masterHash] === false) continue; const variants = rdAvailabilityResp[masterHash]['rd']; if (variants.length) availability[masterHash] = 'no_videos'; for (const variant of variants) { From fbedf5b5004286497f3297ba7a28e98c353998eb Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Wed, 19 Apr 2023 23:33:57 +0200 Subject: [PATCH 021/272] 2.0.4 (#21) * remove cache deletion * 2.0.4 --- package-lock.json | 4 ++-- package.json | 2 +- src/services/btdigg.ts | 3 --- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index df8beee..4be3b59 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "2.0.3", + "version": "2.0.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "2.0.3", + "version": "2.0.4", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 2ff9a92..100b002 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.0.3", + "version": "2.0.4", "private": false, "scripts": { "dev": "next dev", diff --git a/src/services/btdigg.ts b/src/services/btdigg.ts index 344d3d4..c876ec0 100644 --- a/src/services/btdigg.ts +++ b/src/services/btdigg.ts @@ -96,9 +96,6 @@ export async function fetchSearchResults( try { const cached = await cache.getCachedJsonValue(finalQuery.split(' ')); if (cached) { - if (cached.length === 0) { - cache.deleteCachedJsonValue(finalQuery.split(' ')); - } return cached; } } catch (e: any) { From 2e5115f37210567da88564a1b9a41d471d8f9e8e Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Thu, 20 Apr 2023 00:56:32 +0200 Subject: [PATCH 022/272] 2.0.5 (#22) * Add grouping by 20 hashes for instant check * 2.0.5 * set ad key expiry to 1 day --- package-lock.json | 4 +- package.json | 2 +- src/pages/alldebrid/login.tsx | 2 +- src/pages/search.tsx | 101 +++++++++++++++++++--------------- src/services/allDebrid.ts | 8 +-- src/services/realDebrid.ts | 6 +- 6 files changed, 69 insertions(+), 54 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4be3b59..db57088 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "2.0.4", + "version": "2.0.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "2.0.4", + "version": "2.0.5", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 100b002..d66565d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.0.4", + "version": "2.0.5", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/alldebrid/login.tsx b/src/pages/alldebrid/login.tsx index 3d551d2..dc25090 100644 --- a/src/pages/alldebrid/login.tsx +++ b/src/pages/alldebrid/login.tsx @@ -31,7 +31,7 @@ export default function AllDebridLoginPage() { const checkResponse = await checkPin(pinResponse.pin, pinResponse.check); if (checkResponse) { - setApiKey(checkResponse.data.apikey!, checkResponse.data.expires_in); + setApiKey(checkResponse.data.apikey!, 86400); } } }; diff --git a/src/pages/search.tsx b/src/pages/search.tsx index 33ca5ad..406837e 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -2,16 +2,18 @@ import useMyAccount, { MyAccount } from '@/hooks/account'; import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; import useLocalStorage from '@/hooks/localStorage'; import { + AdInstantAvailabilityResponse, + adInstantCheck, deleteMagnet, - getInstantAvailability, MagnetFile, uploadMagnet, } from '@/services/allDebrid'; import { addHashAsMagnet, deleteTorrent, - getInstantlyAvailableFiles, getTorrentInfo, + RdInstantAvailabilityResponse, + rdInstantCheck, selectFiles, } from '@/services/realDebrid'; import { CachedTorrentInfo } from '@/utils/cachedTorrentInfo'; @@ -130,55 +132,68 @@ function Search() { return acc; }, {}); + const setInstantFromRd = (rdAvailabilityResp: RdInstantAvailabilityResponse) => { + for (const masterHash in rdAvailabilityResp) { + if ('rd' in rdAvailabilityResp[masterHash] === false) continue; + const variants = rdAvailabilityResp[masterHash]['rd']; + if (variants.length) availability[masterHash] = 'no_videos'; + for (const variant of variants) { + for (const fileId in variant) { + const file = variant[fileId]; + if (isVideo({ path: file.filename })) { + availability[masterHash] = + availability[masterHash] === 'ad:available' + ? 'all:available' + : 'rd:available'; + break; + } + } + } + } + }; + + const setInstantFromAd = (adAvailabilityResp: AdInstantAvailabilityResponse) => { + for (const magnetData of adAvailabilityResp.data.magnets) { + const masterHash = magnetData.hash; + const instant = magnetData.instant; + + if (masterHash in availability && instant === true) { + availability[masterHash] = magnetData.files?.reduce( + (acc: boolean, curr: MagnetFile) => { + if (isVideo({ path: curr.n })) { + return true; + } + return acc; + }, + false + ) + ? availability[masterHash] === 'rd:available' + ? 'all:available' + : 'ad:available' + : 'no_videos'; + } + } + }; + + const groupBy20 = (hashes: string[]) => + Array.from({ length: Math.ceil(hashes.length / 20) }, (_, i) => + hashes.slice(i * 20, (i + 1) * 20) + ); + try { const availabilityChecks = []; if (rdKey) availabilityChecks.push( - getInstantlyAvailableFiles(rdKey, ...hashes).then((rdAvailabilityResp) => { - for (const masterHash in rdAvailabilityResp) { - if ('rd' in rdAvailabilityResp[masterHash] === false) continue; - const variants = rdAvailabilityResp[masterHash]['rd']; - if (variants.length) availability[masterHash] = 'no_videos'; - for (const variant of variants) { - for (const fileId in variant) { - const file = variant[fileId]; - if (isVideo({ path: file.filename })) { - availability[masterHash] = - availability[masterHash] === 'ad:available' - ? 'all:available' - : 'rd:available'; - break; - } - } - } - } - }) + ...groupBy20(hashes).map((hashGroup) => + rdInstantCheck(rdKey, hashGroup).then(setInstantFromRd) + ) ); if (adKey) availabilityChecks.push( - getInstantAvailability(adKey, hashes).then((adAvailabilityResp) => { - for (const magnetData of adAvailabilityResp.data.magnets) { - const masterHash = magnetData.hash; - const instant = magnetData.instant; - - if (masterHash in availability && instant === true) { - availability[masterHash] = magnetData.files?.reduce( - (acc: boolean, curr: MagnetFile) => { - if (isVideo({ path: curr.n })) { - return true; - } - return acc; - }, - false - ) - ? availability[masterHash] === 'rd:available' - ? 'all:available' - : 'ad:available' - : 'no_videos'; - } - } - }) + ...groupBy20(hashes).map((hashGroup) => + adInstantCheck(adKey, hashGroup).then(setInstantFromAd) + ) ); await Promise.all(availabilityChecks); diff --git a/src/services/allDebrid.ts b/src/services/allDebrid.ts index e928261..ad24812 100644 --- a/src/services/allDebrid.ts +++ b/src/services/allDebrid.ts @@ -252,15 +252,15 @@ interface MagnetData { }; } -interface InstantAvailabilityResponse { +export interface AdInstantAvailabilityResponse { status: string; data: { magnets: MagnetData[] }; } -export const getInstantAvailability = async ( +export const adInstantCheck = async ( apikey: string, hashes: string[] -): Promise => { +): Promise => { let endpoint = `${config.allDebridHostname}/v4/magnet/instant?agent=${config.allDebridAgent}&apikey=${apikey}`; for (const hash of hashes) { endpoint += `&magnets[]=${hash}`; @@ -269,7 +269,7 @@ export const getInstantAvailability = async ( endpoint = `${config.bypassHostname}${encodeURIComponent(endpoint)}`; } try { - const response = await axios.get(endpoint); + const response = await axios.get(endpoint); return response.data; } catch (error: any) { console.error('Error fetching magnet availability:', error.message); diff --git a/src/services/realDebrid.ts b/src/services/realDebrid.ts index 1810331..de1ce0c 100644 --- a/src/services/realDebrid.ts +++ b/src/services/realDebrid.ts @@ -90,7 +90,7 @@ interface MasterHash { [hash: string]: HosterHash; } -export interface InstantAvailabilityResponse extends MasterHash {} +export interface RdInstantAvailabilityResponse extends MasterHash {} export interface AddMagnetResponse { id: string; @@ -216,13 +216,13 @@ export const getTorrentInfo = async (accessToken: string, id: string) => { } }; -export const getInstantlyAvailableFiles = async (accessToken: string, ...hashes: string[]) => { +export const rdInstantCheck = async (accessToken: string, hashes: string[]) => { try { const headers = { Authorization: `Bearer ${accessToken}`, }; - const response = await axios.get( + const response = await axios.get( `${config.realDebridHostname}/rest/1.0/torrents/instantAvailability/${hashes.join( '/' )}`, From 78146e4797403b48f73fb7a901c26a96b8980c2c Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Thu, 20 Apr 2023 01:20:12 +0200 Subject: [PATCH 023/272] 2.0.6 (#23) * do one by one on instant check * 2.0.6 --- package-lock.json | 4 ++-- package.json | 2 +- src/pages/search.tsx | 21 ++++----------------- 3 files changed, 7 insertions(+), 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index db57088..7c906b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "2.0.5", + "version": "2.0.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "2.0.5", + "version": "2.0.6", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index d66565d..0a94484 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.0.5", + "version": "2.0.6", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/search.tsx b/src/pages/search.tsx index 406837e..9d8828a 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -181,23 +181,10 @@ function Search() { ); try { - const availabilityChecks = []; - if (rdKey) - availabilityChecks.push( - ...groupBy20(hashes).map((hashGroup) => - rdInstantCheck(rdKey, hashGroup).then(setInstantFromRd) - ) - ); - - if (adKey) - availabilityChecks.push( - ...groupBy20(hashes).map((hashGroup) => - adInstantCheck(adKey, hashGroup).then(setInstantFromAd) - ) - ); - - await Promise.all(availabilityChecks); - + for (const hashGroup of groupBy20(hashes)) { + if (rdKey) await rdInstantCheck(rdKey, hashGroup).then(setInstantFromRd); + if (adKey) await adInstantCheck(adKey, hashGroup).then(setInstantFromAd); + } return availability; } catch (error) { toast.error('There was an error checking availability. Please try again.'); From d2bfffadb18d0acdc4149ed84cd23ebbcc7b4798 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Thu, 20 Apr 2023 21:10:24 +0200 Subject: [PATCH 024/272] 2.0.7 (#24) * fix issue on selecting after adding * optimize instant check * 2.0.7 --- package-lock.json | 4 ++-- package.json | 2 +- src/pages/search.tsx | 12 +++++++----- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7c906b5..f6baa4d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "2.0.6", + "version": "2.0.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "2.0.6", + "version": "2.0.7", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 0a94484..4dc0fee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.0.6", + "version": "2.0.7", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/search.tsx b/src/pages/search.tsx index 9d8828a..0cb3efa 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -175,14 +175,16 @@ function Search() { } }; - const groupBy20 = (hashes: string[]) => - Array.from({ length: Math.ceil(hashes.length / 20) }, (_, i) => - hashes.slice(i * 20, (i + 1) * 20) + const groupBy = (itemLimit: number, hashes: string[]) => + Array.from({ length: Math.ceil(hashes.length / itemLimit) }, (_, i) => + hashes.slice(i * itemLimit, (i + 1) * itemLimit) ); try { - for (const hashGroup of groupBy20(hashes)) { + for (const hashGroup of groupBy(100, hashes)) { if (rdKey) await rdInstantCheck(rdKey, hashGroup).then(setInstantFromRd); + } + for (const hashGroup of groupBy(30, hashes)) { if (adKey) await adInstantCheck(adKey, hashGroup).then(setInstantFromAd); } return availability; @@ -213,7 +215,7 @@ function Search() { }, } as Record) ); - handleSelectFiles(id, true); + handleSelectFiles(`rd:${id}`, true); // add rd: to account for substr(3) in handleSelectFiles } catch (error) { if (!disableToast) toast.error('There was an error adding as magnet. Please try again.'); From 1ba0fbc7d4361f13b14d67b21c82d772e4f37d88 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sat, 22 Apr 2023 11:50:57 +0200 Subject: [PATCH 025/272] 2.1.0 (#25) * remove instant check in alldebrid for now * refactor setting availability * Fix issue on invalid dates * Enable for local testing * add pagination and filter options * better quick search exp * update packages * fix media ident function * fix behavior on quick searches etc * filtering behavior * 2.1.0 * add dev config exclusions --- .env | 1 - next.config.js | 1 + package-lock.json | 530 +++++++++++++++++++++++++---------------- package.json | 2 +- src/pages/library.tsx | 378 +++++++++++++++++------------ src/pages/search.tsx | 118 ++++++--- src/utils/mediaType.ts | 2 +- 7 files changed, 655 insertions(+), 377 deletions(-) diff --git a/.env b/.env index efc4494..01d4c04 100644 --- a/.env +++ b/.env @@ -1,4 +1,3 @@ -NODE_ENV=production GH_PAT=github-access-token PROXY=socks5h://tor:9050 diff --git a/next.config.js b/next.config.js index 2e7135d..cbb13b5 100644 --- a/next.config.js +++ b/next.config.js @@ -3,6 +3,7 @@ const nextConfig = { reactStrictMode: false, publicRuntimeConfig: { // Will be available on both server and client + externalSearchApiHostname: 'https://debridmediamanager.com', realDebridHostname: 'https://corsproxy.org/?https://api.real-debrid.com', allDebridHostname: 'https://api.alldebrid.com', allDebridAgent: 'debridMediaManager', diff --git a/package-lock.json b/package-lock.json index f6baa4d..c29eadf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "2.0.7", + "version": "2.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "2.0.7", + "version": "2.1.0", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", @@ -99,21 +99,21 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.1.tgz", - "integrity": "sha512-BISJ6ZE4xQsuL/FmsyRaiffpq977bMlsKfGHTQrOGFErfByxIe6iZTxPf/00Zon9b9a7iUykfQwejN3s2ZW/Bw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz", + "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz", - "integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", + "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.0", + "espree": "^9.5.1", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -171,6 +171,60 @@ "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==" }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/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/@next/env": { "version": "13.2.4", "resolved": "https://registry.npmjs.org/@next/env/-/env-13.2.4.tgz", @@ -466,9 +520,9 @@ } }, "node_modules/@octokit/openapi-types": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", - "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-17.0.0.tgz", + "integrity": "sha512-V8BVJGN0ZmMlURF55VFHFd/L92XQQ43KvFjNmY1IYbCN3V/h/uUFV6iQi19WEHM395Nn+1qhUbViCAD/1czzog==" }, "node_modules/@octokit/plugin-paginate-rest": { "version": "6.0.0", @@ -551,11 +605,11 @@ } }, "node_modules/@octokit/types": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", - "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.1.2.tgz", + "integrity": "sha512-LPbJIuu1WNoRHbN4UMysEdlissRFpTCWyoKT7kHPufI8T+XX33/qilfMWJo3mCOjNIKu0+43oSQPf+HJa0+TTQ==", "dependencies": { - "@octokit/openapi-types": "^16.0.0" + "@octokit/openapi-types": "^17.0.0" } }, "node_modules/@pkgr/utils": { @@ -629,9 +683,9 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" }, "node_modules/@types/node": { - "version": "16.18.23", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.23.tgz", - "integrity": "sha512-XAMpaw1s1+6zM+jn2tmw8MyaRDIJfXxqmIQIS0HfoGYPuf7dUWeiUKopwq13KFX9lEp1+THGtlaaYx39Nxr58g==", + "version": "16.18.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.24.tgz", + "integrity": "sha512-zvSN2Esek1aeLdKDYuntKAYjti9Z2oT4I8bfkLLhIxHlv3dwZ5vvATxOc31820iYm4hQRCwjUgDpwSMFjfTUnw==", "dev": true }, "node_modules/@types/prettier": { @@ -680,13 +734,13 @@ "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==" }, "node_modules/@typescript-eslint/parser": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.56.0.tgz", - "integrity": "sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.0.tgz", + "integrity": "sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==", "dependencies": { - "@typescript-eslint/scope-manager": "5.56.0", - "@typescript-eslint/types": "5.56.0", - "@typescript-eslint/typescript-estree": "5.56.0", + "@typescript-eslint/scope-manager": "5.59.0", + "@typescript-eslint/types": "5.59.0", + "@typescript-eslint/typescript-estree": "5.59.0", "debug": "^4.3.4" }, "engines": { @@ -706,12 +760,12 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.56.0.tgz", - "integrity": "sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.0.tgz", + "integrity": "sha512-tsoldKaMh7izN6BvkK6zRMINj4Z2d6gGhO2UsI8zGZY3XhLq1DndP3Ycjhi1JwdwPRwtLMW4EFPgpuKhbCGOvQ==", "dependencies": { - "@typescript-eslint/types": "5.56.0", - "@typescript-eslint/visitor-keys": "5.56.0" + "@typescript-eslint/types": "5.59.0", + "@typescript-eslint/visitor-keys": "5.59.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -722,9 +776,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.56.0.tgz", - "integrity": "sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.0.tgz", + "integrity": "sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA==", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -734,12 +788,12 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.56.0.tgz", - "integrity": "sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.0.tgz", + "integrity": "sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg==", "dependencies": { - "@typescript-eslint/types": "5.56.0", - "@typescript-eslint/visitor-keys": "5.56.0", + "@typescript-eslint/types": "5.59.0", + "@typescript-eslint/visitor-keys": "5.59.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -760,11 +814,11 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz", - "integrity": "sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.0.tgz", + "integrity": "sha512-qZ3iXxQhanchCeaExlKPV3gDQFxMUmU35xfd5eCXB6+kUw1TUAbIy2n7QIrwz9s98DQLzNWyHp61fY0da4ZcbA==", "dependencies": { - "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/types": "5.59.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -806,33 +860,10 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-node/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true, "engines": { "node": ">=0.4.0" @@ -886,6 +917,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -1062,17 +1099,17 @@ } }, "node_modules/axe-core": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz", - "integrity": "sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", + "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", "engines": { "node": ">=4" } }, "node_modules/axios": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.5.tgz", - "integrity": "sha512-glL/PvG/E+xCWwV8S6nCHcrfg1exGx7vxyUIivIA1iL7BIh6bePylCfVHwp6k13ao7SATxB6imau2kqY+I67kw==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.6.tgz", + "integrity": "sha512-PEcdkk7JcdPiMDkvM4K6ZBRYq9keuVJsToxm2zQIM70Qqo2WHTdJZMXcG9X+RmRp2VPNUQC8W1RAGbgt6b1yMg==", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -1242,9 +1279,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001470", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001470.tgz", - "integrity": "sha512-065uNwY6QtHCBOExzbV6m236DDhYCCtPmQUCoQtwkVqzud8v5QPidoMr6CoMkC2nfp6nksjttqWQRRh75LqUmA==", + "version": "1.0.30001481", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz", + "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==", "funding": [ { "type": "opencollective", @@ -1253,6 +1290,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, @@ -1350,6 +1391,15 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1374,6 +1424,14 @@ "node": ">= 0.6" } }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", @@ -1411,9 +1469,9 @@ } }, "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", @@ -1491,15 +1549,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/defined": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", - "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -1538,23 +1587,6 @@ "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/detective": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", - "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", - "dev": true, - "dependencies": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" - }, - "bin": { - "detective": "bin/detective.js" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -1604,9 +1636,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.340", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.340.tgz", - "integrity": "sha512-zx8hqumOqltKsv/MF50yvdAlPF9S/4PXbyfzJS6ZGhbddGkRegdwImmfSVqCkEziYzrIGZ/TlrzBND4FysfkDg==", + "version": "1.4.369", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.369.tgz", + "integrity": "sha512-LfxbHXdA/S+qyoTEA4EbhxGjrxx7WK2h6yb5K2v0UCOufUKX+VZaHbl3svlzZfv9sGseym/g3Ne4DpsgRULmqg==", "dev": true }, "node_modules/emoji-regex": { @@ -1623,9 +1655,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz", + "integrity": "sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -1862,17 +1894,18 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.3.tgz", - "integrity": "sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==", + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz", + "integrity": "sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==", "dependencies": { "debug": "^4.3.4", - "enhanced-resolve": "^5.10.0", - "get-tsconfig": "^4.2.0", - "globby": "^13.1.2", - "is-core-module": "^2.10.0", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "get-tsconfig": "^4.5.0", + "globby": "^13.1.3", + "is-core-module": "^2.11.0", "is-glob": "^4.0.3", - "synckit": "^0.8.4" + "synckit": "^0.8.5" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -1886,9 +1919,9 @@ } }, "node_modules/eslint-import-resolver-typescript/node_modules/globby": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", - "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "version": "13.1.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.4.tgz", + "integrity": "sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==", "dependencies": { "dir-glob": "^3.0.1", "fast-glob": "^3.2.11", @@ -1915,9 +1948,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dependencies": { "debug": "^3.2.7" }, @@ -2105,33 +2138,39 @@ } }, "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", + "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/espree": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz", - "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", + "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", "dependencies": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2227,14 +2266,6 @@ "node": ">= 0.10.0" } }, - "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -2542,9 +2573,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.4.0.tgz", - "integrity": "sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.5.0.tgz", + "integrity": "sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==", "funding": { "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } @@ -2637,9 +2668,9 @@ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" }, "node_modules/goober": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.12.tgz", - "integrity": "sha512-yXHAvO08FU1JgTXX6Zn6sYCUFfB/OJSX8HHjDSgerZHZmFKAb08cykp5LBw5QnmyMcZyPRMqkdyHUSSzge788Q==", + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.13.tgz", + "integrity": "sha512-jFj3BQeleOoy7t93E9rZ2de+ScC4lQICLwiAQmKMg9F6roKGaLSHoCDYKkWlSafg138jejvq/mTdvmnwDQgqoQ==", "peerDependencies": { "csstype": "^3.0.10" } @@ -2937,9 +2968,9 @@ } }, "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==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", + "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", "dependencies": { "has": "^1.0.3" }, @@ -3183,6 +3214,15 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "node_modules/jiti": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", + "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, "node_modules/js-sdsl": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", @@ -3275,6 +3315,12 @@ "node": ">=10" } }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -3435,10 +3481,27 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -3867,10 +3930,19 @@ "node": ">=0.10.0" } }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "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==", + "version": "8.4.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", + "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", "dev": true, "funding": [ { @@ -3880,10 +3952,14 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -4251,13 +4327,13 @@ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -4267,11 +4343,11 @@ } }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.11.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -4381,9 +4457,9 @@ } }, "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -4673,6 +4749,48 @@ } } }, + "node_modules/sucrase": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", + "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -4711,20 +4829,20 @@ } }, "node_modules/tailwindcss": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.7.tgz", - "integrity": "sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.1.tgz", + "integrity": "sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g==", "dev": true, "dependencies": { "arg": "^5.0.2", "chokidar": "^3.5.3", "color-name": "^1.1.4", - "detective": "^5.2.1", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.2.12", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", + "jiti": "^1.17.2", "lilconfig": "^2.0.6", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", @@ -4738,7 +4856,8 @@ "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0", "quick-lru": "^5.1.1", - "resolve": "^1.22.1" + "resolve": "^1.22.1", + "sucrase": "^3.29.0" }, "bin": { "tailwind": "lib/cli.js", @@ -4764,6 +4883,27 @@ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/tiny-glob": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", @@ -4797,6 +4937,12 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, "node_modules/ts-node": { "version": "10.7.0", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", @@ -4840,15 +4986,6 @@ } } }, - "node_modules/ts-node/node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/ts-node/node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -4977,9 +5114,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "dev": true, "funding": [ { @@ -4989,6 +5126,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { @@ -4996,7 +5137,7 @@ "picocolors": "^1.0.0" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -5135,15 +5276,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", diff --git a/package.json b/package.json index 4dc0fee..92a038c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.0.7", + "version": "2.1.0", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/library.tsx b/src/pages/library.tsx index 6b2455e..8f4aa39 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -21,11 +21,12 @@ import lzString from 'lz-string'; import Head from 'next/head'; import Link from 'next/link'; import { useRouter } from 'next/router'; -import { useEffect, useState } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import { toast, Toaster } from 'react-hot-toast'; -import { FaArrowRight, FaShare, FaTrash } from 'react-icons/fa'; +import { FaArrowLeft, FaArrowRight, FaRecycle, FaShare, FaTrash } from 'react-icons/fa'; const ONE_GIGABYTE = 1024 * 1024 * 1024; +const ITEMS_PER_PAGE = 100; interface UserTorrent { id: string; @@ -48,6 +49,8 @@ interface SortBy { function TorrentsPage() { const router = useRouter(); + const [query, setQuery] = useState(''); + const [currentPage, setCurrentPage] = useState(1); // loading states const [rdLoading, setRdLoading] = useState(true); @@ -63,8 +66,6 @@ function TorrentsPage() { const rdKey = useRealDebridAccessToken(); const adKey = useAllDebridApiKey(); - const [movieCount, setMovieCount] = useState(0); - const [tvCount, setTvCount] = useState(0); const [movieGrouping] = useState>({}); const [tvGroupingByEpisode] = useState>({}); const [tvGroupingByTitle] = useState>({}); @@ -78,6 +79,27 @@ function TorrentsPage() { {} ); + const handlePrevPage = useCallback(() => { + if (router.query.page === '1') return; + router.push({ + query: { ...router.query, page: currentPage - 1 }, + }); + }, [currentPage, router]); + + const handleNextPage = useCallback(() => { + router.push({ + query: { ...router.query, page: currentPage + 1 }, + }); + }, [currentPage, router]); + + // pagination query params + useEffect(() => { + const { page } = router.query; + if (!page || Array.isArray(page)) return; + setCurrentPage(parseInt(page, 10)); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [router]); + // fetch list from api useEffect(() => { const fetchRealDebrid = async () => { @@ -135,17 +157,7 @@ function TorrentsPage() { const date = new Date(torrent.uploadDate * 1000); // Format date string - const formattedDate = `${date.getDate().toString().padStart(2, '0')}/${( - date.getMonth() + 1 - ) - .toString() - .padStart(2, '0')}/${date.getFullYear().toString().padStart(4, '0')}, ${date - .getHours() - .toString() - .padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}:${date - .getSeconds() - .toString() - .padStart(2, '0')}`; + const formattedDate = date.toISOString(); let status = 'error'; if (torrent.statusCode >= 0 && torrent.statusCode <= 3) { @@ -163,7 +175,7 @@ function TorrentsPage() { filename: torrent.filename, hash: torrent.hash, bytes: torrent.size, - progress: Math.floor((100 * torrent.downloadSpeed) / torrent.size), + progress: torrent.processingPerc, status, added: formattedDate, }; @@ -193,8 +205,6 @@ function TorrentsPage() { useEffect(() => { if (rdLoading || adLoading) return; setGrouping(true); - setMovieCount(0); - setTvCount(0); setTotalBytes(0); let tmpTotalBytes = 0; @@ -219,8 +229,6 @@ function TorrentsPage() { } } - setMovieCount(Object.keys(movieGrouping).length); - setTvCount(Object.keys(tvGroupingByTitle).length); setTotalBytes(tmpTotalBytes); setGrouping(false); // eslint-disable-next-line react-hooks/exhaustive-deps @@ -238,8 +246,8 @@ function TorrentsPage() { useEffect(() => { if (rdLoading || adLoading || grouping) return; setFiltering(true); - if (Object.keys(router.query).length === 0) { - setFilteredList(userTorrentsList); + if (hasNoQueryParamsBut('page')) { + setFilteredList(applyQuickSearch(userTorrentsList)); selectPlayableFiles(userTorrentsList); deleteFailedTorrents(userTorrentsList); setFiltering(false); @@ -249,30 +257,39 @@ function TorrentsPage() { let tmpList = userTorrentsList; if (status === 'slow') { tmpList = tmpList.filter(isTorrentSlow); - setFilteredList(tmpList); + setFilteredList(applyQuickSearch(tmpList)); } if (status === 'dupe') { tmpList = tmpList.filter((t) => hasDupes.includes(getMediaId(t.info, t.mediaType))); - setFilteredList(tmpList); + setFilteredList(applyQuickSearch(tmpList)); } if (status === 'non4k') { tmpList = tmpList.filter((t) => !/\b2160p|\b4k|\buhd/i.test(t.filename)); - setFilteredList(tmpList); + setFilteredList(applyQuickSearch(tmpList)); } if (titleFilter) { const decodedTitleFilter = decodeURIComponent(titleFilter as string); tmpList = tmpList.filter((t) => decodedTitleFilter === getMediaId(t.info, t.mediaType)); - setFilteredList(tmpList); + setFilteredList(applyQuickSearch(tmpList)); } if (mediaType) { tmpList = tmpList.filter((t) => mediaType === t.mediaType); - setFilteredList(tmpList); + setFilteredList(applyQuickSearch(tmpList)); } selectPlayableFiles(tmpList); deleteFailedTorrents(tmpList); setFiltering(false); // eslint-disable-next-line react-hooks/exhaustive-deps - }, [router.query, userTorrentsList, rdLoading, adLoading, grouping, hasDupes]); + }, [ + router.query, + userTorrentsList, + rdLoading, + adLoading, + grouping, + hasDupes, + query, + currentPage, + ]); const handleDeleteTorrent = async (id: string, disableToast: boolean = false) => { try { @@ -299,6 +316,24 @@ function TorrentsPage() { }); } + // given a list, filter by query and paginate + function applyQuickSearch(unfiltered: UserTorrent[]) { + let regexFilter = new RegExp('', 'i'); + try { + regexFilter = new RegExp(query.split(' ').join('|'), 'i'); + } catch (error) { + // do nothing + } + return query + ? unfiltered.filter( + (t) => + regexFilter.test(t.filename) || + query === t.hash || + query === t.id.substring(3) + ) + : unfiltered; + } + function sortedData() { if (!sortBy.column) { return filteredList; @@ -406,7 +441,8 @@ function TorrentsPage() { } async function deleteFilteredTorrents() { - if (!confirm('This will delete all torrents listed. Are you sure?')) return; + if (!confirm(`This will delete the ${filteredList.length} torrents listed. Are you sure?`)) + return; const torrentsToDelete = filteredList.map(wrapDeleteFn); const [results, errors] = await runConcurrentFunctions(torrentsToDelete, 5, 500); if (errors.length) { @@ -491,6 +527,9 @@ function TorrentsPage() { } }; + const hasNoQueryParamsBut = (...params: string[]) => + Object.keys(router.query).filter((p) => !params.includes(p)).length === 0; + return (

@@ -509,27 +548,61 @@ function TorrentsPage() { Go Home
-
+
+ { + setCurrentPage(1); + setQuery(e.target.value); + }} + /> +
+
+ + Page {currentPage} + - Show {movieCount} movies + Show only movies - Show {tvCount} TV shows + Show only TV shows Show slow torrents Show duplicate torrents @@ -537,17 +610,19 @@ function TorrentsPage() { - - {Object.keys(router.query).length !== 0 && ( - - Clear filter - - )} + + Clear filter +
{rdLoading || adLoading || grouping || filtering ? ( @@ -585,7 +661,7 @@ function TorrentsPage() { className="px-4 py-2 cursor-pointer" onClick={() => handleSort('id')} > - ID{' '} + ID{` (${sortedData().length}) `} {sortBy.column === 'id' && (sortBy.direction === 'asc' ? 'โ†‘' : 'โ†“')} @@ -605,6 +681,14 @@ function TorrentsPage() { {sortBy.column === 'bytes' && (sortBy.direction === 'asc' ? 'โ†‘' : 'โ†“')} + handleSort('score')} + > + QScore{' '} + {sortBy.column === 'score' && + (sortBy.direction === 'asc' ? 'โ†‘' : 'โ†“')} + handleSort('progress')} @@ -621,105 +705,105 @@ function TorrentsPage() { {sortBy.column === 'added' && (sortBy.direction === 'asc' ? 'โ†‘' : 'โ†“')} - handleSort('score')} - > - Score{' '} - {sortBy.column === 'score' && - (sortBy.direction === 'asc' ? 'โ†‘' : 'โ†“')} - Actions - {sortedData().map((torrent) => { - const groupCount = getGroupings(torrent.mediaType)[ - getMediaId(torrent.info, torrent.mediaType) - ]; - const filterText = - groupCount > 1 && !router.query.filter - ? `${groupCount - 1} other file${ - groupCount === 1 ? '' : 's' - }` - : ''; - return ( - - {torrent.id} - - {!['Invalid Magnet', 'Magnet'].includes( - torrent.filename - ) && ( - <> - {torrent.title}{' '} - - {filterText} - {' '} - - Search again - -
- - )} - {torrent.filename} - - - {(torrent.bytes / ONE_GIGABYTE).toFixed(1)} GB - - - {torrent.status === 'downloading' - ? `${torrent.progress}%` - : torrent.status} - - - {new Date(torrent.added).toLocaleString()} - - - {torrent.score.toFixed(1)} - - - - - - - - ); - })} + {sortedData() + .slice( + (currentPage - 1) * ITEMS_PER_PAGE, + (currentPage - 1) * ITEMS_PER_PAGE + ITEMS_PER_PAGE + ) + .map((torrent) => { + const groupCount = getGroupings(torrent.mediaType)[ + getMediaId(torrent.info, torrent.mediaType) + ]; + const filterText = + groupCount > 1 && !router.query.filter + ? `${groupCount - 1} other file${ + groupCount === 1 ? '' : 's' + }` + : ''; + return ( + + {torrent.id} + + {!['Invalid Magnet', 'Magnet'].includes( + torrent.filename + ) && ( + <> + {torrent.title}{' '} + + {filterText} + {' '} + + Search again + +
+ + )} + {torrent.filename} + + + {(torrent.bytes / ONE_GIGABYTE).toFixed(1)} GB + + + {torrent.score.toFixed(1)} + + + {torrent.status === 'downloading' + ? `${torrent.progress}%` + : torrent.status} + + + {new Date(torrent.added).toLocaleString()} + + + + + + + + ); + })} )} diff --git a/src/pages/search.tsx b/src/pages/search.tsx index 0cb3efa..2b871a7 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -22,11 +22,13 @@ import { getSelectableFiles, isVideo } from '@/utils/selectable'; import { withAuth } from '@/utils/withAuth'; import { ParsedFilename } from '@ctrl/video-filename-parser'; import axios, { CancelTokenSource } from 'axios'; +import getConfig from 'next/config'; import Head from 'next/head'; import Link from 'next/link'; import { useRouter } from 'next/router'; import { useCallback, useEffect, useState } from 'react'; import toast, { Toaster } from 'react-hot-toast'; +import { FaDownload, FaFastForward } from 'react-icons/fa'; import { SearchApiResponse } from './api/search'; type Availability = 'all:available' | 'rd:available' | 'ad:available' | 'unavailable' | 'no_videos'; @@ -40,6 +42,8 @@ type SearchResult = { available: Availability; }; +const { publicRuntimeConfig: config } = getConfig(); + function Search() { const [query, setQuery] = useState(''); const [searchResults, setSearchResults] = useState([]); @@ -63,25 +67,38 @@ function Search() { const source = axios.CancelToken.source(); setCancelTokenSource(source); try { - const params = { - search: searchQuery, - ...(myAccount?.libraryType ? { ['libraryType']: myAccount.libraryType } : {}), - }; - const response = await axios.get('/api/search', { - params, + let endpoint = `/api/search?search=${encodeURIComponent(searchQuery)}&libraryType=${ + myAccount?.libraryType + }`; + if ( + config.externalSearchApiHostname && + window.location.origin !== config.externalSearchApiHostname + ) + endpoint = `${config.externalSearchApiHostname}${endpoint}`; + if (config.bypassHostname && !endpoint.startsWith('/')) + endpoint = `${config.bypassHostname}${encodeURIComponent(endpoint)}`; + const response = await axios.get(endpoint, { cancelToken: source.token, }); + setSearchResults( + response.data.searchResults?.map((r) => ({ ...r, available: 'unavailable' })) || [] + ); if (response.data.searchResults?.length) { - const availability = await checkResultsAvailability( + toast(`Found ${response.data.searchResults.length} results`, { icon: '๐Ÿ”' }); + const availability = await instantCheckInRd( response.data.searchResults.map((result) => result.hash) ); - setSearchResults( - response.data.searchResults.map((r) => ({ - ...r, - available: availability[r.hash], - })) + toast( + `Found ${ + Object.values(availability).filter((a) => a.includes(':available')).length + } available in RD`, + { icon: '๐Ÿ”' } + ); + setSearchResults((prev) => + prev.map((r) => ({ ...r, available: availability[r.hash] })) ); } else { + toast(`No results found`, { icon: '๐Ÿ”' }); setSearchResults([]); } } catch (error) { @@ -104,7 +121,9 @@ function Search() { (e?: React.FormEvent) => { if (e) e.preventDefault(); if (!query) return; - router.push(`/search?query=${encodeURIComponent(query)}`); + router.push({ + query: { ...router.query, query: encodeURIComponent(query) }, + }); }, [router, query] ); @@ -126,12 +145,14 @@ function Search() { type HashAvailability = Record; - const checkResultsAvailability = async (hashes: string[]): Promise => { + const instantCheckInRd = async (hashes: string[]): Promise => { const availability = hashes.reduce((acc: HashAvailability, curr: string) => { acc[curr] = 'unavailable'; return acc; }, {}); + if (!rdKey) return availability; + const setInstantFromRd = (rdAvailabilityResp: RdInstantAvailabilityResponse) => { for (const masterHash in rdAvailabilityResp) { if ('rd' in rdAvailabilityResp[masterHash] === false) continue; @@ -152,6 +173,38 @@ function Search() { } }; + const groupBy = (itemLimit: number, hashes: string[]) => + Array.from({ length: Math.ceil(hashes.length / itemLimit) }, (_, i) => + hashes.slice(i * itemLimit, (i + 1) * itemLimit) + ); + + try { + for (const hashGroup of groupBy(100, hashes)) { + if (rdKey) await rdInstantCheck(rdKey, hashGroup).then(setInstantFromRd); + } + return availability; + } catch (error) { + toast.error( + 'There was an error checking availability in Real-Debrid. Please try again.' + ); + throw error; + } + }; + + // TODO: Add AD instant check-in support + const instantCheckInAd = async ( + hashes: string[], + existingAvailability?: HashAvailability + ): Promise => { + const availability = + existingAvailability || + hashes.reduce((acc: HashAvailability, curr: string) => { + acc[curr] = 'unavailable'; + return acc; + }, {}); + + if (!adKey) return availability; + const setInstantFromAd = (adAvailabilityResp: AdInstantAvailabilityResponse) => { for (const magnetData of adAvailabilityResp.data.magnets) { const masterHash = magnetData.hash; @@ -181,15 +234,12 @@ function Search() { ); try { - for (const hashGroup of groupBy(100, hashes)) { - if (rdKey) await rdInstantCheck(rdKey, hashGroup).then(setInstantFromRd); - } for (const hashGroup of groupBy(30, hashes)) { if (adKey) await adInstantCheck(adKey, hashGroup).then(setInstantFromAd); } return availability; } catch (error) { - toast.error('There was an error checking availability. Please try again.'); + toast.error('There was an error checking availability in AllDebrid. Please try again.'); throw error; } }; @@ -433,11 +483,17 @@ function Search() { ); }} > - {`${ - isAvailableInRd(result) - ? 'Instant ' - : '' - }Download in RD`} + {isAvailableInRd(result) ? ( + <> + + RD + + ) : ( + <> + + RD + + )} )} {adKey && ( @@ -458,11 +514,17 @@ function Search() { ); }} > - {`${ - isAvailableInAd(result) - ? 'Instant ' - : '' - }Download in AD`} + {isAvailableInAd(result) ? ( + <> + + AD + + ) : ( + <> + + AD + + )} )} diff --git a/src/utils/mediaType.ts b/src/utils/mediaType.ts index 829c57a..caba75a 100644 --- a/src/utils/mediaType.ts +++ b/src/utils/mediaType.ts @@ -1,5 +1,5 @@ export const getMediaType = (filename: string): 'tv' | 'movie' => { - return /[\(\.\s)]s\d\d[\be]|[\(\.\s)]season[\.\s]?\d[\d]?[\be]/i.test(filename) + return /[\(\.\s)]s\d\d[\be]?|[\(\.\s)]season[\.\s]?\d[\d]?[\be]?/i.test(filename) ? 'tv' : 'movie'; }; From b9ae0e16a79ac0385524f5c8deed5c0f3ba90278 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sat, 22 Apr 2023 13:59:56 +0200 Subject: [PATCH 026/272] 2.2.0 (#26) * regex filters behavior improvement * fix todo * 2.2.0 --- TODO.md | 16 ++++++----- package-lock.json | 4 +-- package.json | 2 +- src/pages/library.tsx | 63 +++++++++++++++++++++++++------------------ 4 files changed, 49 insertions(+), 36 deletions(-) diff --git a/TODO.md b/TODO.md index 17963fd..a0c0f7a 100644 --- a/TODO.md +++ b/TODO.md @@ -5,17 +5,19 @@ - [โœ”๏ธ] Media page, button: delete failed content - [โœ”๏ธ] Media page, button: delete slow content - [โœ”๏ธ] Media page, button: auto select files -- [] Media page, button: reinsert rar archives -- [] Media page, button: dedupe hash +- [โœ”๏ธ] Media page, button: reinsert rar archives +- [โœ”๏ธ] Media page, button: dedupe hash - [โœ”๏ธ] Media page, button: dedupe content - [โœ”๏ธ] Identify IMDB link - [โœ”๏ธ] Group by IMDB link - [โœ”๏ธ] Media page, button: share to the internet -- [] Refactor pages into different components - [โœ”๏ธ] When waiting_files_selection and Select button is pressed, should convert to downloading -- [] Add title filter buttons on search page - [โœ”๏ธ] Downloading has race condition on status -- [] Dockerize with tor -- [] Make the architecture more scalable using docker swarm -- [] Rescan library button in all other pages except library +- [โœ”๏ธ] Dockerize with tor +- [โœ”๏ธ] Make the architecture more scalable using docker swarm - [โœ”๏ธ] Find cached and selectable download on search +- [] 2.3.0: Show AD/RD download buttons even if status=downloaded +- [] 2.4.0: Add instant check in AD on search page (removed due to performance impact) +- [] 2.5.0: Rescan library button in all other pages except library +- [] 2.6.0: Add title filter buttons on search page +- [] 3.0.0: Refactor pages into different components diff --git a/package-lock.json b/package-lock.json index c29eadf..c6df7d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "2.1.0", + "version": "2.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "2.1.0", + "version": "2.2.0", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 92a038c..dcb1549 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.1.0", + "version": "2.2.0", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/library.tsx b/src/pages/library.tsx index 8f4aa39..64d4940 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -70,6 +70,7 @@ function TorrentsPage() { const [tvGroupingByEpisode] = useState>({}); const [tvGroupingByTitle] = useState>({}); const [hasDupes] = useState>([]); + const [dupeHashes] = useState>([]); // stats const [totalBytes, setTotalBytes] = useState(0); @@ -210,7 +211,10 @@ function TorrentsPage() { let tmpTotalBytes = 0; clearGroupings(movieGrouping); clearGroupings(tvGroupingByEpisode); + const hashes: string[] = []; for (const t of userTorrentsList) { + if (!hashes.includes(t.hash)) hashes.push(t.hash); + else dupeHashes.push(t.hash); tmpTotalBytes += t.bytes; const mediaId = getMediaId(t.info, t.mediaType); if (mediaId in getGroupings(t.mediaType)) { @@ -263,6 +267,10 @@ function TorrentsPage() { tmpList = tmpList.filter((t) => hasDupes.includes(getMediaId(t.info, t.mediaType))); setFilteredList(applyQuickSearch(tmpList)); } + if (status === 'dupehash') { + tmpList = tmpList.filter((t) => dupeHashes.includes(t.hash)); + setFilteredList(applyQuickSearch(tmpList)); + } if (status === 'non4k') { tmpList = tmpList.filter((t) => !/\b2160p|\b4k|\buhd/i.test(t.filename)); setFilteredList(applyQuickSearch(tmpList)); @@ -318,19 +326,16 @@ function TorrentsPage() { // given a list, filter by query and paginate function applyQuickSearch(unfiltered: UserTorrent[]) { - let regexFilter = new RegExp('', 'i'); - try { - regexFilter = new RegExp(query.split(' ').join('|'), 'i'); - } catch (error) { - // do nothing + let regexFilters: RegExp[] = []; + for (const q of query.split(' ')) { + try { + regexFilters.push(new RegExp(q, 'ig')); + } catch (error) { + continue; + } } return query - ? unfiltered.filter( - (t) => - regexFilter.test(t.filename) || - query === t.hash || - query === t.id.substring(3) - ) + ? unfiltered.filter((t) => regexFilters.every((regex) => regex.test(t.filename))) : unfiltered; } @@ -557,13 +562,13 @@ function TorrentsPage() { value={query} onChange={(e) => { setCurrentPage(1); - setQuery(e.target.value); + setQuery(e.target.value.toLocaleLowerCase()); }} />
- Show only movies + Only movies - Show only TV shows + Only TV - Show slow torrents + Slow downloads + Duplicate titles + + - Show duplicate torrents + Duplicate hashes
) : ( - +
- diff --git a/src/pages/library.tsx b/src/pages/library.tsx index 64d4940..559272a 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -1,5 +1,5 @@ import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; -import useLocalStorage from '@/hooks/localStorage'; +import { useDownloadsCache } from '@/hooks/cache'; import { deleteMagnet, getMagnetStatus, restartMagnet } from '@/services/allDebrid'; import { createShortUrl } from '@/services/hashlists'; import { @@ -10,7 +10,6 @@ import { selectFiles, } from '@/services/realDebrid'; import { runConcurrentFunctions } from '@/utils/batch'; -import { CachedTorrentInfo } from '@/utils/cachedTorrentInfo'; import { getMediaId } from '@/utils/mediaId'; import { getMediaType } from '@/utils/mediaType'; import getReleaseTags from '@/utils/score'; @@ -75,10 +74,9 @@ function TorrentsPage() { // stats const [totalBytes, setTotalBytes] = useState(0); - const [_, setTorrentCache] = useLocalStorage>( - 'userTorrentsList', - {} - ); + // cache + const [_1, __1, rdCacheAdder, removeFromRdCache] = useDownloadsCache('rd'); + const [_2, __2, adCacheAdder, removeFromAdCache] = useDownloadsCache('ad'); const handlePrevPage = useCallback(() => { if (router.query.page === '1') return; @@ -126,13 +124,14 @@ function TorrentsPage() { ) as UserTorrent[]; setUserTorrentsList((prev) => [...prev, ...torrents]); - setTorrentCache((prev) => ({ - ...prev, - ...torrents.reduce>((cache, t) => { - cache[t.hash] = t; - return cache; - }, {}), - })); + rdCacheAdder.many( + torrents.map((t) => ({ + id: t.id, + hash: t.hash, + status: t.status === 'downloaded' ? 'downloaded' : 'downloading', + progress: t.progress, + })) + ); } catch (error) { setUserTorrentsList((prev) => [...prev]); toast.error('Error fetching user torrents list'); @@ -183,13 +182,14 @@ function TorrentsPage() { }) as UserTorrent[]; setUserTorrentsList((prev) => [...prev, ...torrents]); - setTorrentCache((prev) => ({ - ...prev, - ...torrents.reduce>((cache, t) => { - cache[t.hash] = t; - return cache; - }, {}), - })); + adCacheAdder.many( + torrents.map((t) => ({ + id: t.id, + hash: t.hash, + status: t.status === 'downloaded' ? 'downloaded' : 'downloading', + progress: t.progress, + })) + ); } catch (error) { setUserTorrentsList((prev) => [...prev]); toast.error('Error fetching AllDebrid torrents list'); @@ -306,11 +306,8 @@ function TorrentsPage() { if (rdKey && id.startsWith('rd:')) await deleteTorrent(rdKey, id.substring(3)); if (adKey && id.startsWith('ad:')) await deleteMagnet(adKey, id.substring(3)); if (!disableToast) toast.success(`Torrent deleted (${id})`); - setTorrentCache((prevCache) => { - const hash = Object.keys(prevCache).find((key) => prevCache[key].id === id) || ''; - delete prevCache[hash]; - return prevCache; - }); + if (id.startsWith('rd:')) removeFromRdCache(id.substring(3)); + if (id.startsWith('ad:')) removeFromAdCache(id.substring(3)); } catch (error) { if (!disableToast) toast.error(`Error deleting torrent (${id})`); throw error; @@ -385,11 +382,7 @@ function TorrentsPage() { newList[index].status = 'downloading'; return newList; }); - setTorrentCache((prevCache) => { - const hash = Object.keys(prevCache).find((key) => prevCache[key].id === id) || ''; - prevCache[hash].status = 'downloading'; - return prevCache; - }); + rdCacheAdder.single(id, response.hash, response.status); } catch (error) { if ((error as Error).message === 'no_files_for_selection') { toast.error(`No files for selection, deleting (${id})`, { @@ -510,11 +503,11 @@ function TorrentsPage() { const torrent = userTorrentsList.find((t) => t.id === oldId); if (!torrent) throw new Error('no_torrent_found'); const hash = torrent.hash; - const newId = await addHashAsMagnet(rdKey, hash); - torrent.id = newId; - await handleSelectFiles(newId); + const id = await addHashAsMagnet(rdKey, hash); + torrent.id = `rd:${id}`; + await handleSelectFiles(torrent.id); await handleDeleteTorrent(oldId, true); - toast.success(`Torrent reinserted (${oldId}๐Ÿ‘‰${newId})`); + toast.success(`Torrent reinserted (${oldId}๐Ÿ‘‰${torrent.id})`); } catch (error) { toast.error(`Error reinserting torrent (${oldId})`); throw error; @@ -738,9 +731,11 @@ function TorrentsPage() { return ( - + = ({ title, description, )} {searchState === 'requested' && ( -
+
Notice: {' '} @@ -230,7 +230,7 @@ const MovieSearch: FunctionComponent = ({ title, description,
)} {searchState === 'processing' && ( -
+
Notice: {' '} @@ -239,7 +239,7 @@ const MovieSearch: FunctionComponent = ({ title, description,
)} {errorMessage && ( -
+
Error: {errorMessage}
diff --git a/src/pages/search.tsx b/src/pages/search.tsx index 1346a1b..c01f503 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -90,7 +90,7 @@ function Search() {
)} {errorMessage && ( -
+
Error: {errorMessage}
diff --git a/src/pages/show/[imdbid]/[seasonNum].tsx b/src/pages/show/[imdbid]/[seasonNum].tsx index 4d15ad3..dc53ad7 100644 --- a/src/pages/show/[imdbid]/[seasonNum].tsx +++ b/src/pages/show/[imdbid]/[seasonNum].tsx @@ -257,7 +257,7 @@ const TvSearch: FunctionComponent = ({
)} {searchState === 'requested' && ( -
+
Notice: {' '} @@ -266,7 +266,7 @@ const TvSearch: FunctionComponent = ({
)} {searchState === 'processing' && ( -
+
Notice: {' '} @@ -275,7 +275,7 @@ const TvSearch: FunctionComponent = ({
)} {errorMessage && ( -
+
Error: {errorMessage}
From 088e86a5093fdd1e08ee4a87b3dce864c70142f0 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sun, 24 Sep 2023 13:54:07 +0200 Subject: [PATCH 129/272] 3.6.0 (#74) * recently updated page * add imdb score * support fetching >2500 torrents * troubleshooting page * bump version --- next.config.js | 1 + package-lock.json | 4 +- package.json | 2 +- src/pages/index.tsx | 27 +++++++- src/pages/library.tsx | 33 +++++----- src/pages/movie/[imdbid].tsx | 25 +++++++- src/pages/recentlyupdated.tsx | 79 +++++++++++++++++++++++ src/pages/show/[imdbid]/[seasonNum].tsx | 29 ++++++--- src/pages/troubleshooting.tsx | 85 +++++++++++++++++++++++++ src/services/planetscale.ts | 25 ++++++++ src/services/realDebrid.ts | 46 +++++++++---- 11 files changed, 310 insertions(+), 46 deletions(-) create mode 100644 src/pages/recentlyupdated.tsx create mode 100644 src/pages/troubleshooting.tsx diff --git a/next.config.js b/next.config.js index 8aa5795..ca412b2 100644 --- a/next.config.js +++ b/next.config.js @@ -1,6 +1,7 @@ /** @type {import('next').NextConfig} */ const nextConfig = { images: { + minimumCacheTTL: 60 * 60 * 24 * 30, // 30 days remotePatterns: [ { protocol: 'https', diff --git a/package-lock.json b/package-lock.json index 1ebf7e3..c8af85c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "3.5.1", + "version": "3.6.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "3.5.1", + "version": "3.6.0", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index c25a7ea..5571107 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "3.5.1", + "version": "3.6.0", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 7bc5690..4b7aec7 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -16,6 +16,14 @@ function IndexPage() { router.push('/search'); }; + const handleRecentlyUpdated = () => { + router.push('/recentlyupdated'); + }; + + const handleTroubleshooting = () => { + router.push('/troubleshooting'); + }; + const handleLogout = (prefix?: string) => { if (typeof window === 'undefined') { // Running on the server, return null @@ -83,7 +91,7 @@ function IndexPage() { )}

- 7+ million individual torrents collected from all corners of the web + 7+ million torrents collected from all corners of the web


@@ -93,13 +101,28 @@ function IndexPage() { > My Library + + + - +
+
+ {rdUser && (

{title}

-

{description}

+

{description}

+ {imdb_score && ( +

+ + IMDB Score: {imdb_score} + +

+ )}
@@ -457,12 +471,19 @@ const getMdbInfo = (imdbId: string) => `https://mdblist.com/api/?apikey=${mdblis export const getServerSideProps: GetServerSideProps = async (context) => { const { params } = context; const movieResponse = await axios.get(getMdbInfo(params!.imdbid as string)); + let imdb_score = movieResponse.data.ratings?.reduce((acc: number | undefined, rating: any) => { + if (rating.source === 'imdb') { + return rating.score as number; + } + return acc; + }, null); return { props: { title: movieResponse.data.title, description: movieResponse.data.description, poster: movieResponse.data.poster, year: movieResponse.data.year, + imdb_score, }, }; }; diff --git a/src/pages/recentlyupdated.tsx b/src/pages/recentlyupdated.tsx new file mode 100644 index 0000000..b2a4788 --- /dev/null +++ b/src/pages/recentlyupdated.tsx @@ -0,0 +1,79 @@ +import Poster from '@/components/poster'; +import { PlanetScaleCache } from '@/services/planetscale'; +import { withAuth } from '@/utils/withAuth'; +import { GetServerSideProps, NextPage } from 'next'; +import Head from 'next/head'; +import Link from 'next/link'; +import { Toaster } from 'react-hot-toast'; + +interface RecentlyUpdatedProps { + searchResults: string[]; +} + +const db = new PlanetScaleCache(); + +const RecentlyUpdated: NextPage = ({ searchResults }) => { + return ( +
+ + Debrid Media Manager - Recently Updated + + +
+

Recently Updated

+ + Go Home + +
+ {searchResults.length > 0 && ( + <> +
+ {searchResults.map((key: string) => { + const match = key.match(/^(movie|tv):(.+)/); + if (match) { + const mediaType = match[1] === 'movie' ? 'movie' : 'show'; + const imdbid = match[2]; + + return ( + + + + ); + } + return null; + })} +
+ + )} +
+ ); +}; +export const getServerSideProps: GetServerSideProps = async ({ + req, + res, +}) => { + res.setHeader('Cache-Control', 'public, s-maxage=600 , stale-while-revalidate=300'); + try { + const data = Array.from(new Set(await db.getRecentlyUpdatedContent())); + + return { + props: { + searchResults: data, + }, + }; + } catch (error: any) { + return { + props: { + searchResults: [], + }, + }; + } +}; + +export default withAuth(RecentlyUpdated); diff --git a/src/pages/show/[imdbid]/[seasonNum].tsx b/src/pages/show/[imdbid]/[seasonNum].tsx index dc53ad7..1c9dfda 100644 --- a/src/pages/show/[imdbid]/[seasonNum].tsx +++ b/src/pages/show/[imdbid]/[seasonNum].tsx @@ -24,6 +24,7 @@ type TvSearchProps = { poster: string; season_count: number; season_names: string[]; + imdb_score?: number; }; const TvSearch: FunctionComponent = ({ @@ -32,6 +33,7 @@ const TvSearch: FunctionComponent = ({ poster, season_count, season_names, + imdb_score, }) => { const [searchState, setSearchState] = useState('loading'); const [searchResults, setSearchResults] = useState([]); @@ -224,7 +226,14 @@ const TvSearch: FunctionComponent = ({

{title} - Season {seasonNum}

-

{description}

+

{description}

+ {imdb_score && ( +

+ + IMDB Score: {imdb_score} + +

+ )} <> {Array.from({ length: season_count || 0 }, (_, i) => i + 1).map( (season) => { @@ -476,17 +485,18 @@ export const getServerSideProps: GetServerSideProps = async (context) => { const { params } = context; let season_count = 1; let season_names = []; + let imdb_score; const showResponse = await axios.get(getMdbInfo(params!.imdbid as string)); if (showResponse.data.type === 'show' && showResponse.data.seasons?.length !== 0) { const seasons = showResponse.data.seasons.filter((season: any) => season.season_number > 0); - season_count = Math.max( - ...seasons.map((season: any) => { - return season.season_number; - }) - ); - season_names = seasons.map((season: any) => { - return season.name; - }); + season_count = Math.max(...seasons.map((season: any) => season.season_number)); + season_names = seasons.map((season: any) => season.name); + imdb_score = showResponse.data.ratings?.reduce((acc: number | undefined, rating: any) => { + if (rating.source === 'imdb') { + return rating.score as number; + } + return acc; + }, null); if (params!.seasonNum && parseInt(params!.seasonNum as string) > season_count) { return { @@ -504,6 +514,7 @@ export const getServerSideProps: GetServerSideProps = async (context) => { poster: showResponse.data.poster, season_count, season_names, + imdb_score, }, }; }; diff --git a/src/pages/troubleshooting.tsx b/src/pages/troubleshooting.tsx new file mode 100644 index 0000000..59c5734 --- /dev/null +++ b/src/pages/troubleshooting.tsx @@ -0,0 +1,85 @@ +import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; +import { getMagnetStatus } from '@/services/allDebrid'; +import { getUserTorrentsList } from '@/services/realDebrid'; +import { withAuth } from '@/utils/withAuth'; +import getConfig from 'next/config'; +import { useState } from 'react'; + +function TroubleshootingPage() { + const { publicRuntimeConfig: config } = getConfig(); + + // keys + const rdKey = useRealDebridAccessToken(); + const adKey = useAllDebridApiKey(); + + const [testResults, setTestResults] = useState('Running test...\n-----\n'); + const [testRunning, setTestRunning] = useState(false); + + const startTest = async () => { + setTestRunning(true); + if (rdKey) { + setTestResults((prev) => prev + `Real-Debrid base URL: ${config.realDebridHostname}\n`); + try { + let rdTorrents = await getUserTorrentsList(rdKey); + setTestResults((prev) => prev + `RD torrent count: ${rdTorrents.length}\n`); + } catch (e) { + setTestResults((prev) => prev + `RD torrent error: ${e}\n`); + } + + setTestResults((prev) => prev + `-----\n`); + + config.realDebridHostname = 'https://api.real-debrid.com'; + setTestResults((prev) => prev + `Real-Debrid base URL: ${config.realDebridHostname}\n`); + try { + let rdTorrents = await getUserTorrentsList(rdKey); + setTestResults((prev) => prev + `RD torrent count: ${rdTorrents.length}\n`); + } catch (e) { + setTestResults((prev) => prev + `RD torrent error: ${e}\n`); + } + + setTestResults((prev) => prev + `-----\n`); + } + if (adKey) { + let adBaseUrl = `${config.bypassHostname}${config.allDebridHostname}`; + setTestResults((prev) => prev + `AllDebrid base URL: ${adBaseUrl}\n`); + try { + let adTorrents = (await getMagnetStatus(adKey)).data.magnets; + setTestResults((prev) => prev + `AD torrent count: ${adTorrents.length}\n`); + } catch (e) { + setTestResults((prev) => prev + `AD torrent error: ${e}\n`); + } + + setTestResults((prev) => prev + `-----\n`); + + config.bypassHostname = ''; + setTestResults((prev) => prev + `AllDebrid base URL: ${config.allDebridHostname}\n`); + try { + let adTorrents = (await getMagnetStatus(adKey)).data.magnets; + setTestResults((prev) => prev + `AD torrent count: ${adTorrents.length}\n`); + } catch (e) { + setTestResults((prev) => prev + `AD torrent error: ${e}\n`); + } + + setTestResults((prev) => prev + `-----\n`); + } + setTestResults( + (prev) => + prev + + `Test complete. Post this to r/debridmediamanager or send to my discord @yowmamasita\n` + ); + }; + + return ( +
+

Troubleshooting

+ {!testRunning && ( + + )} + {testRunning &&
{testResults}
} +
+ ); +} + +export default withAuth(TroubleshootingPage); diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index a2526d7..6b03bea 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -169,4 +169,29 @@ export class PlanetScaleCache { return undefined; } + + public async getRecentlyUpdatedContent(): Promise { + const rows = await this.prisma.scraped.findMany({ + take: 200, + orderBy: { + updatedAt: 'desc', + }, + where: { + OR: [{ key: { startsWith: 'movie:' } }, { key: { startsWith: 'tv:' } }], + }, + select: { + key: true, + }, + }); + + return rows + .map((row) => { + const match = row.key.match(/^(movie|tv):([^:]+)/); + if (match) { + return `${match[1]}:${match[2]}`; + } + return ''; + }) + .filter((key) => key !== ''); + } } diff --git a/src/services/realDebrid.ts b/src/services/realDebrid.ts index c74e0ff..f679c10 100644 --- a/src/services/realDebrid.ts +++ b/src/services/realDebrid.ts @@ -176,23 +176,45 @@ export const getCurrentUser = async (accessToken: string) => { } }; -export const getUserTorrentsList = async ( - accessToken: string, - offset: number, - page: number, - limit: number, - filter: string -) => { +export const getUserTorrentsList = async (accessToken: string): Promise => { try { const headers = { Authorization: `Bearer ${accessToken}`, }; - const response = await axios.get( - `${config.realDebridHostname}/rest/1.0/torrents`, - { headers, params: { offset, page, limit, filter } } - ); - return response?.data || []; + let torrents: UserTorrentResponse[] = []; + let page = 1; + let limit = 2500; + + while (true) { + const response = await axios.get( + `${config.realDebridHostname}/rest/1.0/torrents`, + { headers, params: { page, limit } } + ); + + const { + data, + headers: { 'x-total-count': totalCount }, + } = response; + torrents = torrents.concat(data); + + if (data.length < limit || !totalCount) { + break; + } + + const totalCountValue = parseInt(totalCount, 10); + if (isNaN(totalCountValue)) { + break; + } + + if (data.length >= totalCountValue) { + break; + } + + page++; + } + + return torrents; } catch (error: any) { console.error('Error fetching user torrents list:', error.message); throw error; From f0b3b4fd6432271ecbf73b3d49661312a37ab9ca Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sun, 24 Sep 2023 14:07:45 +0200 Subject: [PATCH 130/272] 3.6.1 (#75) hotfix --- package-lock.json | 4 ++-- package.json | 2 +- src/services/planetscale.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index c8af85c..6d27853 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "3.6.0", + "version": "3.6.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "3.6.0", + "version": "3.6.1", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 5571107..4874251 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "3.6.0", + "version": "3.6.1", "private": false, "scripts": { "dev": "next dev", diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index 6b03bea..c355764 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -185,7 +185,7 @@ export class PlanetScaleCache { }); return rows - .map((row) => { + .map((row: any) => { const match = row.key.match(/^(movie|tv):([^:]+)/); if (match) { return `${match[1]}:${match[2]}`; From c3de52950097819c05320f89f0bf99c5a5bfc098 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 24 Sep 2023 14:41:35 +0200 Subject: [PATCH 131/272] apply filter hotfix --- src/services/planetscale.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index c355764..946072b 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -192,6 +192,6 @@ export class PlanetScaleCache { } return ''; }) - .filter((key) => key !== ''); + .filter((key: any) => key !== ''); } } From b15afcd333be579a861b074195f84636fa71a62c Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 24 Sep 2023 14:56:10 +0200 Subject: [PATCH 132/272] use node 18 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 809506f..b9a2ff7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # ---- Base Node ---- -FROM node:alpine AS base +FROM node:18-alpine AS base WORKDIR /app COPY package*.json ./ From 75fccdde9de85f203c54dd14558dfbb2cadb9aa6 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 24 Sep 2023 15:28:02 +0200 Subject: [PATCH 133/272] generate prisma first before build --- Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index b9a2ff7..3dc924e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,6 +15,7 @@ RUN npm install # ---- Build ---- FROM dependencies AS build COPY . . +RUN npm run prisma:generate RUN npm run build # --- Release ---- @@ -27,8 +28,6 @@ COPY . . COPY --from=build /app/.next ./.next COPY --from=build /app/public ./public -RUN npm run prisma:generate - # Expose the listening port EXPOSE 3000 CMD ["npm", "start"] From 842503bc34a5469a14663e03be7770132fad889a Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 24 Sep 2023 15:33:22 +0200 Subject: [PATCH 134/272] Add cases to troubleshoot --- src/pages/troubleshooting.tsx | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/pages/troubleshooting.tsx b/src/pages/troubleshooting.tsx index 59c5734..d11c7df 100644 --- a/src/pages/troubleshooting.tsx +++ b/src/pages/troubleshooting.tsx @@ -25,7 +25,16 @@ function TroubleshootingPage() { } catch (e) { setTestResults((prev) => prev + `RD torrent error: ${e}\n`); } + setTestResults((prev) => prev + `-----\n`); + config.realDebridHostname = 'https://corsproxy.io/?https://api.real-debrid.com'; + setTestResults((prev) => prev + `Real-Debrid base URL: ${config.realDebridHostname}\n`); + try { + let rdTorrents = await getUserTorrentsList(rdKey); + setTestResults((prev) => prev + `RD torrent count: ${rdTorrents.length}\n`); + } catch (e) { + setTestResults((prev) => prev + `RD torrent error: ${e}\n`); + } setTestResults((prev) => prev + `-----\n`); config.realDebridHostname = 'https://api.real-debrid.com'; @@ -36,7 +45,6 @@ function TroubleshootingPage() { } catch (e) { setTestResults((prev) => prev + `RD torrent error: ${e}\n`); } - setTestResults((prev) => prev + `-----\n`); } if (adKey) { @@ -48,7 +56,17 @@ function TroubleshootingPage() { } catch (e) { setTestResults((prev) => prev + `AD torrent error: ${e}\n`); } + setTestResults((prev) => prev + `-----\n`); + config.bypassHostname = 'https://corsproxy.io/?'; + adBaseUrl = `${config.bypassHostname}${config.allDebridHostname}`; + setTestResults((prev) => prev + `AllDebrid base URL: ${adBaseUrl}\n`); + try { + let adTorrents = (await getMagnetStatus(adKey)).data.magnets; + setTestResults((prev) => prev + `AD torrent count: ${adTorrents.length}\n`); + } catch (e) { + setTestResults((prev) => prev + `AD torrent error: ${e}\n`); + } setTestResults((prev) => prev + `-----\n`); config.bypassHostname = ''; @@ -59,13 +77,12 @@ function TroubleshootingPage() { } catch (e) { setTestResults((prev) => prev + `AD torrent error: ${e}\n`); } - setTestResults((prev) => prev + `-----\n`); } setTestResults( (prev) => prev + - `Test complete. Post this to r/debridmediamanager or send to my discord @yowmamasita\n` + `Test complete. Copy this and send to r/debridmediamanager or send to my Discord @ yowmamasita\n` ); }; From 5d8a34c452c49ded8d252a25c9d7c63c67c6357a Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 24 Sep 2023 18:24:44 +0200 Subject: [PATCH 135/272] add binary target for arm64 --- prisma/schema.prisma | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 20af633..f08323d 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -2,7 +2,8 @@ // learn more about it in the docs: https://pris.ly/d/prisma-schema generator client { - provider = "prisma-client-js" + provider = "prisma-client-js" + binaryTargets = ["native", "linux-musl-arm64-openssl-3.0.x"] } datasource db { From d13ed6e1baca97b849f88d1461d02cf98332110f Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sun, 24 Sep 2023 19:16:27 +0200 Subject: [PATCH 136/272] 3.6.2 (#76) * Fixes * prisma generate fix --- Dockerfile | 3 ++- package-lock.json | 4 ++-- package.json | 2 +- src/pages/troubleshooting.tsx | 44 +++++++++++++++++++++++++++++++---- src/utils/toastOptions.ts | 5 ++++ 5 files changed, 50 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3dc924e..cd2bb19 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,13 +15,14 @@ RUN npm install # ---- Build ---- FROM dependencies AS build COPY . . -RUN npm run prisma:generate RUN npm run build # --- Release ---- FROM base AS release # copy production node_modules COPY --from=dependencies /app/prod_node_modules ./node_modules +# generate prisma client in node_modules +RUN npm run prisma:generate # copy app sources COPY . . # copy build files from build image diff --git a/package-lock.json b/package-lock.json index 6d27853..3b32712 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "3.6.1", + "version": "3.6.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "3.6.1", + "version": "3.6.2", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 4874251..5fabf25 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "3.6.1", + "version": "3.6.2", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/troubleshooting.tsx b/src/pages/troubleshooting.tsx index d11c7df..6f57318 100644 --- a/src/pages/troubleshooting.tsx +++ b/src/pages/troubleshooting.tsx @@ -1,9 +1,11 @@ import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; import { getMagnetStatus } from '@/services/allDebrid'; import { getUserTorrentsList } from '@/services/realDebrid'; +import { genericToastOptions } from '@/utils/toastOptions'; import { withAuth } from '@/utils/withAuth'; import getConfig from 'next/config'; import { useState } from 'react'; +import toast, { Toaster } from 'react-hot-toast'; function TroubleshootingPage() { const { publicRuntimeConfig: config } = getConfig(); @@ -16,6 +18,38 @@ function TroubleshootingPage() { const [testRunning, setTestRunning] = useState(false); const startTest = async () => { + let cachedRdDownloads = JSON.parse( + localStorage.getItem('rd:downloads')?.toString() || '{}' + ); + setTestResults( + (prev) => + prev + `Real-Debrid cached downloads: ${Object.keys(cachedRdDownloads).length}\n` + ); + localStorage.removeItem('rd:downloads'); + + cachedRdDownloads = JSON.parse(localStorage.getItem('rd:downloads')?.toString() || '{}'); + setTestResults( + (prev) => + prev + `Real-Debrid refreshed downloads: ${Object.keys(cachedRdDownloads).length}\n` + ); + setTestResults((prev) => prev + `-----\n`); + + let cachedAdDownloads = JSON.parse( + localStorage.getItem('ad:downloads')?.toString() || '{}' + ); + setTestResults( + (prev) => + prev + `AllDebrid cached downloads: ${Object.keys(cachedAdDownloads).length}\n` + ); + localStorage.removeItem('ad:downloads'); + + cachedAdDownloads = JSON.parse(localStorage.getItem('ad:downloads')?.toString() || '{}'); + setTestResults( + (prev) => + prev + `AllDebrid refreshed downloads: ${Object.keys(cachedAdDownloads).length}\n` + ); + setTestResults((prev) => prev + `-----\n`); + setTestRunning(true); if (rdKey) { setTestResults((prev) => prev + `Real-Debrid base URL: ${config.realDebridHostname}\n`); @@ -79,10 +113,11 @@ function TroubleshootingPage() { } setTestResults((prev) => prev + `-----\n`); } - setTestResults( - (prev) => - prev + - `Test complete. Copy this and send to r/debridmediamanager or send to my Discord @ yowmamasita\n` + setTestResults((prev) => prev + `Test complete!\n`); + + toast( + 'Copy this and send to r/debridmediamanager or send to my Discord @ yowmamasita', + genericToastOptions ); }; @@ -95,6 +130,7 @@ function TroubleshootingPage() { )} {testRunning &&
{testResults}
} +
); } diff --git a/src/utils/toastOptions.ts b/src/utils/toastOptions.ts index 9a94068..5760922 100644 --- a/src/utils/toastOptions.ts +++ b/src/utils/toastOptions.ts @@ -16,3 +16,8 @@ export const libraryToastOptions = { ...globalToastOptions, icon: '๐Ÿ“š', }; + +export const genericToastOptions = { + ...globalToastOptions, + icon: '๐Ÿ“ข', +}; From 4299c96928fd8ecddbbdf988800532f9a0d30f7c Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 24 Sep 2023 19:24:01 +0200 Subject: [PATCH 137/272] correct usage of service inside ssr page --- Dockerfile | 6 ++++-- src/pages/recentlyupdated.tsx | 3 +-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index cd2bb19..a7f71e7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -33,7 +33,9 @@ COPY --from=build /app/public ./public EXPOSE 3000 CMD ["npm", "start"] -RUN apk --no-cache --update --upgrade add curl grep +# Install additional tools (curl and grep) +RUN apk --no-cache add curl grep +# Healthcheck HEALTHCHECK --interval=30s --timeout=1s --start-period=3s --retries=1 \ - CMD curl -s http://127.0.0.1:3000/api/healthz | grep -qm1 ok + CMD curl -s http://127.0.0.1:3000/api/healthz | grep -qm1 ok diff --git a/src/pages/recentlyupdated.tsx b/src/pages/recentlyupdated.tsx index b2a4788..ad3585f 100644 --- a/src/pages/recentlyupdated.tsx +++ b/src/pages/recentlyupdated.tsx @@ -10,8 +10,6 @@ interface RecentlyUpdatedProps { searchResults: string[]; } -const db = new PlanetScaleCache(); - const RecentlyUpdated: NextPage = ({ searchResults }) => { return (
@@ -60,6 +58,7 @@ export const getServerSideProps: GetServerSideProps = asyn }) => { res.setHeader('Cache-Control', 'public, s-maxage=600 , stale-while-revalidate=300'); try { + const db = new PlanetScaleCache(); const data = Array.from(new Set(await db.getRecentlyUpdatedContent())); return { From a41438193d73f885e1b367a0ac22a9ee5f9b54e6 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sun, 24 Sep 2023 21:01:31 +0200 Subject: [PATCH 138/272] 3.6.3 (#77) rework recent page --- package-lock.json | 449 +++++++++++++++++++++++++++++++++- package.json | 3 +- src/pages/api/recent.ts | 12 + src/pages/index.tsx | 12 + src/pages/recentlyupdated.tsx | 63 ++--- src/pages/search.tsx | 4 +- 6 files changed, 500 insertions(+), 43 deletions(-) create mode 100644 src/pages/api/recent.ts diff --git a/package-lock.json b/package-lock.json index 3b32712..21b2615 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "3.6.2", + "version": "3.6.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "3.6.2", + "version": "3.6.3", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", @@ -24,6 +24,7 @@ "react-dom": "18.2.0", "react-hot-toast": "^2.4.0", "react-icons": "^4.8.0", + "sharp": "^0.32.6", "socks-proxy-agent": "^7.0.0", "user-agents": "^1.0.1444", "uuid": "^9.0.0" @@ -1217,6 +1218,11 @@ "dequal": "^2.0.3" } }, + "node_modules/b4a": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", + "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==" + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1236,6 +1242,25 @@ "node": ">= 0.6.0" } }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/before-after-hook": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", @@ -1261,6 +1286,16 @@ "node": ">=8" } }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, "node_modules/body-parser": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", @@ -1361,6 +1396,29 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -1484,6 +1542,11 @@ "node": ">= 6" } }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", @@ -1497,11 +1560,22 @@ "node": ">=0.10.0" } }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -1512,8 +1586,16 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } }, "node_modules/combined-stream": { "version": "1.0.8", @@ -1632,6 +1714,28 @@ } } }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -1724,6 +1828,14 @@ "node": ">=8" } }, + "node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "engines": { + "node": ">=8" + } + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -1815,6 +1927,14 @@ "node": ">= 0.8" } }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/enhanced-resolve": { "version": "5.15.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", @@ -2412,6 +2532,14 @@ "node": ">= 0.6" } }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "engines": { + "node": ">=6" + } + }, "node_modules/express": { "version": "4.18.2", "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", @@ -2486,6 +2614,11 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" + }, "node_modules/fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", @@ -2700,6 +2833,11 @@ "node": ">= 0.6" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2794,6 +2932,11 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, "node_modules/glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", @@ -3016,6 +3159,25 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -3065,6 +3227,11 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, "node_modules/internal-slot": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", @@ -3129,6 +3296,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "node_modules/is-async-function": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", @@ -3648,7 +3820,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -3743,6 +3914,17 @@ "node": ">= 0.6" } }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3759,11 +3941,15 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -3797,6 +3983,11 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -3880,6 +4071,22 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/node-abi": { + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.47.0.tgz", + "integrity": "sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==" + }, "node_modules/node-fetch": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", @@ -4348,6 +4555,57 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, + "node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prebuild-install/node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/prebuild-install/node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -4451,6 +4709,15 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -4494,6 +4761,11 @@ } ] }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" + }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", @@ -4528,6 +4800,28 @@ "node": ">= 0.8" } }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", @@ -4589,6 +4883,19 @@ "pify": "^2.3.0" } }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -4814,7 +5121,6 @@ "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -4899,6 +5205,28 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "node_modules/sharp": { + "version": "0.32.6", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", + "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", + "hasInstallScript": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.2", + "node-addon-api": "^6.1.0", + "prebuild-install": "^7.1.1", + "semver": "^7.5.4", + "simple-get": "^4.0.1", + "tar-fs": "^3.0.4", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4933,6 +5261,57 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -5006,6 +5385,23 @@ "node": ">=10.0.0" } }, + "node_modules/streamx": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.1.tgz", + "integrity": "sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==", + "dependencies": { + "fast-fifo": "^1.1.0", + "queue-tick": "^1.0.1" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/string.prototype.matchall": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", @@ -5243,6 +5639,26 @@ "node": ">=6" } }, + "node_modules/tar-fs": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", + "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", + "dependencies": { + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + } + }, + "node_modules/tar-stream": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", + "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -5379,6 +5795,17 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -5593,8 +6020,7 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/utils-merge": { "version": "1.0.1", @@ -5751,8 +6177,7 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { "version": "1.10.2", diff --git a/package.json b/package.json index 5fabf25..18e568b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "3.6.2", + "version": "3.6.3", "private": false, "scripts": { "dev": "next dev", @@ -27,6 +27,7 @@ "react-dom": "18.2.0", "react-hot-toast": "^2.4.0", "react-icons": "^4.8.0", + "sharp": "^0.32.6", "socks-proxy-agent": "^7.0.0", "user-agents": "^1.0.1444", "uuid": "^9.0.0" diff --git a/src/pages/api/recent.ts b/src/pages/api/recent.ts new file mode 100644 index 0000000..208c23c --- /dev/null +++ b/src/pages/api/recent.ts @@ -0,0 +1,12 @@ +import { PlanetScaleCache } from '@/services/planetscale'; +import { NextApiHandler } from 'next'; + +const db = new PlanetScaleCache(); + +const handler: NextApiHandler = async (req, res) => { + const data = Array.from(new Set(await db.getRecentlyUpdatedContent())); + + res.status(200).json(data); +}; + +export default handler; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 4b7aec7..18c1db8 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -12,6 +12,11 @@ function IndexPage() { router.push('/library'); }; + const handleHashListClick = () => { + const newTab = window.open('https://hashlists.debridmediamanager.com', '_blank'); + newTab?.focus(); + }; + const handleSearchV2Click = () => { router.push('/search'); }; @@ -102,6 +107,13 @@ function IndexPage() { My Library + + + + + )} + {fixRunning &&
{fixOutput}
} +
+ ); +} + +export default withAuth(FixerPage); diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 3783cd7..ddcb0c9 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -8,31 +8,11 @@ function IndexPage() { const router = useRouter(); const { realDebrid: rdUser, allDebrid: adUser } = useCurrentUser(); - const handleLibraryClick = () => { - router.push('/library'); - }; - const handleHashListClick = () => { const newTab = window.open('https://hashlists.debridmediamanager.com', '_blank'); newTab?.focus(); }; - const handleSearchV2Click = () => { - router.push('/search'); - }; - - const handleBrowse = () => { - router.push('/browse'); - }; - - const handleRecentlyUpdated = () => { - router.push('/recentlyupdated'); - }; - - const handleTroubleshooting = () => { - router.push('/troubleshooting'); - }; - const handleLogout = (prefix?: string) => { if (typeof window === 'undefined') { // Running on the server, return null @@ -100,16 +80,17 @@ function IndexPage() { )}

- 7+ million torrents collected from all corners of the web + 8.5+ million torrents collected from all corners of the web


+
- + + Search + - + - + Browse +
+
+ {/* */} diff --git a/src/pages/library.tsx b/src/pages/library.tsx index 163f2d0..bfd2acf 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -8,6 +8,7 @@ import { getTorrentInfo, getUserTorrentsList, selectFiles, + unrestrictCheck, } from '@/services/realDebrid'; import { runConcurrentFunctions } from '@/utils/batch'; import { getMediaId } from '@/utils/mediaId'; @@ -41,6 +42,7 @@ interface UserTorrent { score: number; mediaType: 'movie' | 'tv'; info: ParsedFilename; + links: string[]; } interface SortBy { @@ -119,6 +121,7 @@ function TorrentsPage() { title: getMediaId(info, mediaType, false), ...torrent, id: `rd:${torrent.id}`, + links: torrent.links.map((l) => l.replaceAll('/', '/')), }; }) as UserTorrent[]; @@ -369,15 +372,12 @@ function TorrentsPage() { try { if (!rdKey) throw new Error('no_rd_key'); const response = await getTorrentInfo(rdKey, id.substring(3)); - console.log(`${response.filename} files`, response.files); const selectedFiles = getSelectableFiles(response.files.filter(isVideoOrSubs)).map( (file) => file.id ); - console.log(`selected files`, selectedFiles); if (selectedFiles.length === 0) { handleDeleteTorrent(id); - console.log(response.files); throw new Error('no_files_for_selection'); } @@ -445,11 +445,90 @@ function TorrentsPage() { return async () => await handleDeleteTorrent(t.id); } + const getKeyByStatus = (status: string) => { + if (status === 'dupe') return (torrent: UserTorrent) => torrent.info.title; + return (torrent: UserTorrent) => torrent.hash; + }; + + async function dedupeBySize() { + if ( + !confirm( + `This will delete duplicate torrents based on size (bigger size wins). Are you sure?` + ) + ) + return; + const getKey = getKeyByStatus(router.query.status as string); + const dupes: UserTorrent[] = []; + filteredList.reduce((acc: { [key: string]: UserTorrent }, cur: UserTorrent) => { + let key = getKey(cur); + if (acc[key]) { + if (acc[key].bytes < cur.bytes) { + dupes.push(acc[key]); + acc[key] = cur; + } else { + dupes.push(cur); + } + } else { + acc[key] = cur; + } + return acc; + }, {}); + const toDelete = dupes.map(wrapDeleteFn); + const [results, errors] = await runConcurrentFunctions(toDelete, 5, 500); + if (errors.length) { + toast.error(`Error deleting ${errors.length} torrents`, libraryToastOptions); + } + if (results.length) { + toast.success(`Deleted ${results.length} torrents`, libraryToastOptions); + } + if (!errors.length && !results.length) { + toast('No torrents to delete', libraryToastOptions); + } + } + + async function dedupeByRecency() { + if ( + !confirm( + `This will delete duplicate torrents based on recency (recently added wins). Are you sure?` + ) + ) + return; + const getKey = getKeyByStatus(router.query.status as string); + const dupes: UserTorrent[] = []; + filteredList.reduce((acc: { [key: string]: UserTorrent }, cur: UserTorrent) => { + let key = getKey(cur); + if (acc[key]) { + if (acc[key].added < cur.added) { + dupes.push(acc[key]); + acc[key] = cur; + } else { + dupes.push(cur); + } + } else { + acc[key] = cur; + } + return acc; + }, {}); + const toDelete = dupes.map(wrapDeleteFn); + const [results, errors] = await runConcurrentFunctions(toDelete, 5, 500); + if (errors.length) { + toast.error(`Error deleting ${errors.length} torrents`, libraryToastOptions); + } + if (results.length) { + toast.success(`Deleted ${results.length} torrents`, libraryToastOptions); + } + if (!errors.length && !results.length) { + toast('No torrents to delete', libraryToastOptions); + } + } + async function deleteFilteredTorrents() { - if (!confirm(`This will delete the ${filteredList.length} torrents listed. Are you sure?`)) + if ( + !confirm(`This will delete the ${filteredList.length} torrents filtered. Are you sure?`) + ) return; - const torrentsToDelete = filteredList.map(wrapDeleteFn); - const [results, errors] = await runConcurrentFunctions(torrentsToDelete, 5, 500); + const toDelete = filteredList.map(wrapDeleteFn); + const [results, errors] = await runConcurrentFunctions(toDelete, 5, 500); if (errors.length) { toast.error(`Error deleting ${errors.length} torrents`, libraryToastOptions); } @@ -461,6 +540,34 @@ function TorrentsPage() { } } + function wrapUnrestrictCheck2(link: string) { + return async () => await unrestrictCheck(rdKey!, link); + } + + function wrapUnrestrictCheck(t: UserTorrent) { + const toCheck = t.links.map(wrapUnrestrictCheck2); + return async () => await runConcurrentFunctions(toCheck, 5, 500); + } + + // TODO: use this + async function checkTorrentsIfUnrestrictable() { + const toCheck = userTorrentsList.map(wrapUnrestrictCheck); + const results = await runConcurrentFunctions(toCheck, 5, 500); + + const errors = results.filter((result) => result instanceof Error); + const successes = results.filter((result) => result); + + if (errors.length) { + toast.error(`Error checking ${errors.length} torrents`, libraryToastOptions); + } + if (successes.length) { + toast.success(`Checked ${successes.length} torrents`, libraryToastOptions); + } + if (!errors.length && !successes.length) { + toast('No torrents to check', libraryToastOptions); + } + } + function isTorrentSlow(t: UserTorrent) { const oldTorrentAge = 86400000; // One day in milliseconds const addedDate = new Date(t.added); @@ -720,6 +827,40 @@ function TorrentsPage() { Duplicate hashes + + + +
+
+ { + setQuery(e.target.value.toLocaleLowerCase()); + }} + /> +
- {torrent.title}{' '} + {torrent.mediaType === 'tv' ? '๐Ÿ“บ' : '๐ŸŽฅ'} +  {torrent.title}{' '} { return axios.create({ httpAgent: BTDIG.startsWith('http://') ? agent : undefined, - // httpsAgent: BTDIG.startsWith('https://') ? agent : undefined, headers: { accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'accept-language': 'en-US,en;q=0.5', @@ -131,12 +130,8 @@ const processPage = async ( error.message.includes('"socket" was not created') ) { proxy.rerollProxy(); - // console.log('429 error, waiting for a bit longer before retrying...'); - // console.log('Btdigg 429'); retries++; } else if (error.message.includes('timeout of')) { - // console.log('timeout, waiting for a bit longer before retrying...'); - // console.log('Btdigg โฑ'); retries++; } else { console.log('request error:', error.message); @@ -149,11 +144,6 @@ const processPage = async ( await new Promise((resolve) => setTimeout(resolve, 10000 * retries)); } } - // console.log( - // `${pageNum}/${calculateMaxPages( - // numResults - // )} : ${finalQuery}, ${targetTitle}, ${mustHaveTerms}` - // ); const fileSizes = Array.from( responseData.matchAll(/class=\"torrent_size\"[^>]*>(\d+(?:\.\d+)?)(?:[^A-Z<]+)?([A-Z]+)?/g) ); @@ -191,41 +181,10 @@ const processPage = async ( continue; } - // Check if every term in the query (tokenized by space) is contained in the title - const queryTerms = targetTitle - .replaceAll('"', ' ') - .split(' ') - .filter((e) => e !== ''); - let requiredTerms = queryTerms.length <= 3 ? queryTerms.length : queryTerms.length - 1; - const containedTerms = queryTerms.filter((term) => - new RegExp(`${term.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&')}`, 'i').test(title) - ).length; - if (containedTerms < requiredTerms) { - // console.debug(title, '-title match-', targetTitle); - // console.debug('bad title', containedTerms, requiredTerms); - badCount++; // title doesn't contain most terms in the query - continue; - } - const containedMustHaveTerms = mustHaveTerms.filter((term) => { - if (typeof term === 'string') { - return new RegExp(`${term}`, 'i').test(title); - } else if (term instanceof RegExp) { - return term.test(title); - } - return false; - }).length; - if (containedMustHaveTerms < mustHaveTerms.length) { - // console.debug(title, '-must have-', mustHaveTerms); - // console.debug('bad must have terms', containedMustHaveTerms, mustHaveTerms.length); + if (!meetsTitleConditions(targetTitle, mustHaveTerms, title)) { badCount++; continue; } - if (!targetTitle.match(/xxx/i)) { - if (title.match(/xxx/i)) { - badCount++; - continue; - } - } const hash = namesAndHashes[resIndex][1]; diff --git a/src/services/jackett.ts b/src/services/jackett.ts index f7021cc..2054406 100644 --- a/src/services/jackett.ts +++ b/src/services/jackett.ts @@ -1,3 +1,4 @@ +import { meetsTitleConditions } from '@/utils/checks'; import axios from 'axios'; import bencode from 'bencode'; import { createHash } from 'crypto'; @@ -78,48 +79,9 @@ async function processItem( return undefined; } - // Check if every term in the query (tokenized by space) is contained in the title - const queryTerms = targetTitle - .replaceAll('"', ' ') - .split(' ') - .filter((e) => e !== ''); - let requiredTerms = queryTerms.length <= 3 ? queryTerms.length : queryTerms.length - 1; - const containedTerms = queryTerms.filter((term) => - new RegExp(`${term.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&')}`, 'i').test(title) - ).length; - if (containedTerms < requiredTerms) { - // console.debug(title, '-title match-', targetTitle); - // console.debug('bad title', containedTerms, requiredTerms); - // console.log( - // `โŒ ${item.Tracker} returned a bad result (title match)`, - // containedTerms, - // requiredTerms - // ); + if (!meetsTitleConditions(targetTitle, mustHaveTerms, title)) { return undefined; } - const containedMustHaveTerms = mustHaveTerms.filter((term) => { - if (typeof term === 'string') { - return new RegExp(`${term}`, 'i').test(title); - } else if (term instanceof RegExp) { - return term.test(title); - } - return false; - }).length; - if (containedMustHaveTerms < mustHaveTerms.length) { - // console.debug(title, '-must have-', mustHaveTerms); - // console.debug('bad must have terms', containedMustHaveTerms, mustHaveTerms.length); - // console.log( - // `โŒ ${item.Tracker} returned a bad result (must have terms)`, - // containedMustHaveTerms, - // mustHaveTerms.length - // ); - return undefined; - } - if (!targetTitle.match(/xxx/i)) { - if (title.match(/xxx/i)) { - return undefined; - } - } const hash = item.InfoHash?.toLowerCase() || diff --git a/src/services/movieScraper.ts b/src/services/movieScraper.ts index 76702f3..d4f8f33 100644 --- a/src/services/movieScraper.ts +++ b/src/services/movieScraper.ts @@ -1,3 +1,4 @@ +import { naked } from '@/utils/checks'; import { cleanSearchQuery } from '@/utils/search'; import fs from 'fs'; import { scrapeBtdigg } from './btdigg-v2'; @@ -52,28 +53,40 @@ async function scrapeAll( const getMovieSearchResults = async (job: MovieScrapeJob) => { let sets: ScrapeSearchResult[][] = []; const hasUncommonWords = countUncommonWordsInTitle(job.title) >= 1; + const mustHaveFn = (title: string, year?: string) => + naked(title).length <= 6 && year ? [year] : []; + let mustHave = mustHaveFn(job.title, job.year); if (job.title.includes(' & ')) { const aSets = await Promise.all([ - scrapeAll(`"${job.title}" ${job.year ?? ''}`, job.title, [], job.airDate), + scrapeAll(`"${job.title}" ${job.year ?? ''}`, job.title, mustHave, job.airDate), scrapeAll( `"${job.title.replaceAll(' & ', ' and ')}" ${job.year ?? ''}`, job.title, - [], + mustHave, job.airDate ), ]); sets.push(...aSets.flat()); } else { sets.push( - ...(await scrapeAll(`"${job.title}" ${job.year ?? ''}`, job.title, [], job.airDate)) + ...(await scrapeAll( + `"${job.title}" ${job.year ?? ''}`, + job.title, + mustHave, + job.airDate + )) ); } - if (job.title.split(/\s/).length > 3 || hasUncommonWords) { - sets.push(...(await scrapeAll(`"${job.title}"`, job.title, [], job.airDate))); + if ( + job.title.replaceAll(/[^a-z0-9]/gi, '').length > 5 && + (job.title.split(/\s/).length > 3 || hasUncommonWords) + ) { + sets.push(...(await scrapeAll(`"${job.title}"`, job.title, mustHave, job.airDate))); } if (job.originalTitle) { + mustHave = mustHaveFn(job.originalTitle, job.year); sets.push( ...(await scrapeAll( `"${job.originalTitle}" ${job.year ?? ''}`, @@ -82,7 +95,7 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { job.airDate )) ); - if (hasUncommonWords) { + if (job.originalTitle.replaceAll(/[^a-z0-9]/gi, '').length > 5 && hasUncommonWords) { sets.push( ...(await scrapeAll(`"${job.originalTitle}"`, job.originalTitle, [], job.airDate)) ); @@ -90,6 +103,7 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { } if (job.cleanedTitle) { + mustHave = mustHaveFn(job.cleanedTitle, job.year); sets.push( ...(await scrapeAll( `"${job.cleanedTitle}" ${job.year ?? ''}`, @@ -98,7 +112,7 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { job.airDate )) ); - if (hasUncommonWords) { + if (job.cleanedTitle.replaceAll(/[^a-z0-9]/gi, '').length > 5 && hasUncommonWords) { sets.push( ...(await scrapeAll(`"${job.cleanedTitle}"`, job.cleanedTitle, [], job.airDate)) ); @@ -112,7 +126,8 @@ export async function scrapeMovies( imdbId: string, tmdbData: any, mdbData: any, - db: PlanetScaleCache + db: PlanetScaleCache, + replaceOldScrape: boolean = false ): Promise { console.log( `๐Ÿน Scraping movie: ${tmdbData.title} (${imdbId}) (uncommon: ${countUncommonWordsInTitle( @@ -208,7 +223,7 @@ export async function scrapeMovies( let processedResults = flattenAndRemoveDuplicates(searchResults); if (processedResults.length) processedResults = sortByFileSize(processedResults); - await db.saveScrapedResults(`movie:${imdbId}`, processedResults); + await db.saveScrapedResults(`movie:${imdbId}`, processedResults, replaceOldScrape); console.log(`๐ŸŽฅ Saved ${processedResults.length} results for ${cleanTitle}`); await db.markAsDone(imdbId); diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index 28a3e0d..479c666 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -14,14 +14,15 @@ export class PlanetScaleCache { public async saveScrapedResults( key: string, value: ScrapeSearchResult[], - updateUpdatedAt: boolean = true + updateUpdatedAt: boolean = true, + replaceOldScrape: boolean = false ) { // Fetch the existing record const existingRecord: Scraped | null = await this.prisma.scraped.findUnique({ where: { key }, }); - if (existingRecord) { + if (existingRecord && !replaceOldScrape) { // If record exists, append the new values to it let updatedValue = flattenAndRemoveDuplicates([ existingRecord.value as ScrapeSearchResult[], @@ -33,7 +34,15 @@ export class PlanetScaleCache { where: { key }, data: { value: updatedValue, - updatedAt: updateUpdatedAt ? undefined : existingRecord.updatedAt, // If updateUpdatedAt is false, keep the old updatedAt value + updatedAt: updateUpdatedAt ? undefined : existingRecord.updatedAt, + }, + }); + } else if (existingRecord && replaceOldScrape) { + await this.prisma.scraped.update({ + where: { key }, + data: { + value, + updatedAt: updateUpdatedAt ? undefined : existingRecord.updatedAt, }, }); } else { diff --git a/src/services/prowlarr.ts b/src/services/prowlarr.ts index 2d4a6bf..9c371fb 100644 --- a/src/services/prowlarr.ts +++ b/src/services/prowlarr.ts @@ -1,3 +1,4 @@ +import { meetsTitleConditions } from '@/utils/checks'; import axios from 'axios'; import bencode from 'bencode'; import { createHash } from 'crypto'; @@ -73,48 +74,9 @@ async function processItem( return undefined; } - // Check if every term in the query (tokenized by space) is contained in the title - const queryTerms = targetTitle - .replaceAll('"', ' ') - .split(' ') - .filter((e) => e !== ''); - let requiredTerms = queryTerms.length <= 3 ? queryTerms.length : queryTerms.length - 1; - const containedTerms = queryTerms.filter((term) => - new RegExp(`${term.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&')}`, 'i').test(title) - ).length; - if (containedTerms < requiredTerms) { - // console.debug(title, '-title match-', targetTitle); - // console.debug('bad title', containedTerms, requiredTerms); - // console.log( - // `โŒ ${item.indexer} returned a bad result (title match)`, - // containedTerms, - // requiredTerms - // ); + if (!meetsTitleConditions(targetTitle, mustHaveTerms, title)) { return undefined; } - const containedMustHaveTerms = mustHaveTerms.filter((term) => { - if (typeof term === 'string') { - return new RegExp(`${term}`, 'i').test(title); - } else if (term instanceof RegExp) { - return term.test(title); - } - return false; - }).length; - if (containedMustHaveTerms < mustHaveTerms.length) { - // console.debug(title, '-must have-', mustHaveTerms); - // console.debug('bad must have terms', containedMustHaveTerms, mustHaveTerms.length); - // console.log( - // `โŒ ${item.indexer} returned a bad result (must have terms)`, - // containedMustHaveTerms, - // mustHaveTerms.length - // ); - return undefined; - } - if (!targetTitle.match(/xxx/i)) { - if (title.match(/xxx/i)) { - return undefined; - } - } const hash = item.infoHash?.toLowerCase() || diff --git a/src/services/scrapeJobs.ts b/src/services/scrapeJobs.ts index 21cd3ec..d02ce70 100644 --- a/src/services/scrapeJobs.ts +++ b/src/services/scrapeJobs.ts @@ -15,18 +15,6 @@ const getTmdbMovieInfo = (tmdbId: string) => const db = new PlanetScaleCache(); -const isAlreadyScraped = async (mediaType: string, imdbId: string): Promise => { - const keyExists = await db.keyExists(`${mediaType}:${imdbId}${mediaType === 'tv' ? ':1' : ''}`); - if (keyExists) { - return true; - } - const isProcessing = await db.keyExists(`processing:${imdbId}`); - if (isProcessing) { - return true; - } - return false; -}; - function convertMdbToTmdb(apiResponse: any) { return { title: apiResponse.title, @@ -41,7 +29,7 @@ export type ScrapeResponse = { errorMessage?: string; }; -export async function generateScrapeJobs(imdbId: string, override: boolean = false) { +export async function generateScrapeJobs(imdbId: string, replaceOldScrape: boolean = false) { let tmdbSearch, mdbInfo; try { tmdbSearch = await axios.get(getTmdbSearch(imdbId)); @@ -55,18 +43,16 @@ export async function generateScrapeJobs(imdbId: string, override: boolean = fal const isTv = mdbInfo.data.type === 'show' || tmdbSearch.data.tv_results?.length > 0; if (isMovie) { - if (!override && (await isAlreadyScraped('movie', imdbId))) return; - try { const tmdbId = mdbInfo.data.tmdbid ?? tmdbSearch.data.movie_results[0]?.id; const tmdbInfo = await axios.get(getTmdbMovieInfo(tmdbId)); - await scrapeMovies(imdbId, tmdbInfo.data, mdbInfo.data, db); + await scrapeMovies(imdbId, tmdbInfo.data, mdbInfo.data, db, replaceOldScrape); return; } catch (error: any) { if (error.response?.status === 404 || error.message.includes("reading 'id'")) { try { const convertedMdb = convertMdbToTmdb(mdbInfo.data); - await scrapeMovies(imdbId, convertedMdb, mdbInfo.data, db); + await scrapeMovies(imdbId, convertedMdb, mdbInfo.data, db, replaceOldScrape); return; } catch (error: any) { console.error(error); @@ -79,18 +65,16 @@ export async function generateScrapeJobs(imdbId: string, override: boolean = fal } if (isTv) { - if (!override && (await isAlreadyScraped('tv', imdbId))) return; - try { const tmdbId = mdbInfo.data.tmdbid ?? tmdbSearch.data.tv_results[0]?.id; const tmdbInfo = await axios.get(getTmdbTvInfo(tmdbId)); - await scrapeTv(imdbId, tmdbInfo.data, mdbInfo.data, db); + await scrapeTv(imdbId, tmdbInfo.data, mdbInfo.data, db, replaceOldScrape); return; } catch (error: any) { if (error.response?.status === 404 || error.message.includes("reading 'id'")) { try { const convertedMdb = convertMdbToTmdb(mdbInfo.data); - await scrapeTv(imdbId, convertedMdb, mdbInfo.data, db); + await scrapeTv(imdbId, convertedMdb, mdbInfo.data, db, replaceOldScrape); return; } catch (error: any) { console.error(error); diff --git a/src/services/tvScraper.ts b/src/services/tvScraper.ts index 0d701df..ea6246b 100644 --- a/src/services/tvScraper.ts +++ b/src/services/tvScraper.ts @@ -94,7 +94,11 @@ const getSearchResults = async (job: TvScrapeJob) => { ); } - if (job.title.split(/\s/).length > 3 && job.seasonNumber === 1) { + if ( + job.title.replaceAll(/[^a-z0-9]/gi, '').length > 5 && + job.title.split(/\s/).length > 3 && + job.seasonNumber === 1 + ) { sets.push(...(await scrapeAll(`"${job.title}"`, job.title, [], job.airDate))); } @@ -138,7 +142,8 @@ export async function scrapeTv( imdbId: string, tmdbData: any, mdbData: any, - db: PlanetScaleCache + db: PlanetScaleCache, + replaceOldScrape: boolean = false ): Promise { console.log( `๐Ÿ Scraping ${getSeasons(mdbData).length} season(s) of tv show: ${ @@ -199,7 +204,11 @@ export async function scrapeTv( } totalResultsCount += processedResults.length; - await db.saveScrapedResults(`tv:${imdbId}:${job.seasonNumber}`, processedResults); + await db.saveScrapedResults( + `tv:${imdbId}:${job.seasonNumber}`, + processedResults, + replaceOldScrape + ); console.log( `๐Ÿ“บ Saved ${processedResults.length} results for ${job.title} season ${job.seasonNumber}` ); diff --git a/src/utils/checks.ts b/src/utils/checks.ts new file mode 100644 index 0000000..8ea68ee --- /dev/null +++ b/src/utils/checks.ts @@ -0,0 +1,61 @@ +import fs from 'fs'; + +let wordSet: Set; +try { + let data = fs.readFileSync('./bannedwordlist.txt', 'utf8'); + wordSet = new Set(data.toLowerCase().split('\n')); +} catch (err) { + console.error('error loading banned wordlist', err); +} + +export function naked(title: string): string { + return title.toLowerCase().replace(/[^a-z0-9]/g, ''); +} + +export function matchesTitle(targetTitle: string, testTitle: string) { + const result = /^(?\w+)/i.exec(targetTitle); + if (result && result.groups) { + if (!new RegExp(`\\b${result.groups.firstWord}`, 'i').test(testTitle)) { + return false; + } + } + const nakedTitle = naked(targetTitle); + const nakedTest = naked(testTitle); + return nakedTest.includes(nakedTitle); +} + +export function includesMustHaveTerms(mustHaveTerms: (string | RegExp)[], testTitle: string) { + let actualCount = 0; + for (let i = 0; i < mustHaveTerms.length; i++) { + let term = mustHaveTerms[i]; + const bufTitle = testTitle.replace(term, ''); + if (bufTitle !== testTitle) { + actualCount++; + } + testTitle = bufTitle; + } + return actualCount >= mustHaveTerms.length; +} + +export function hasNoBannedTerms(targetTitle: string, testTitle: string): boolean { + let processedTitle = testTitle + .toLowerCase() + .split(/[^a-z0-9]+/) + .filter((word: string) => word.length >= 3); + return ( + processedTitle.filter((word: string) => !targetTitle.includes(word) && wordSet.has(word)) + .length === 0 + ); +} + +export function meetsTitleConditions( + targetTitle: string, + mustHaveTerms: (string | RegExp)[], + testTitle: string +): boolean { + return ( + matchesTitle(targetTitle, testTitle) && + includesMustHaveTerms(mustHaveTerms, testTitle) && + hasNoBannedTerms(targetTitle, testTitle) + ); +} diff --git a/src/utils/mediaId.ts b/src/utils/mediaId.ts index b0f01e3..b7883c4 100644 --- a/src/utils/mediaId.ts +++ b/src/utils/mediaId.ts @@ -3,61 +3,52 @@ import { ParsedMovie, ParsedShow } from '@ctrl/video-filename-parser'; // Prefixes a number with a character and leading zero if necessary const prefix = (char: string, num: number): string => `${char}${num < 10 ? '0' : ''}${num}`; +function isArrayContinuouslyIncreasing(array: number[]) { + for (let i = 1; i < array.length; i++) { + if (array[i] <= array[i - 1]) { + return false; + } + } + return true; +} + export const getMediaId = ( info: ParsedMovie | ParsedShow | string, mediaType: 'tv' | 'movie', systemOnlyId = true, tvShowTitleOnly = false ) => { - // Check if info is string and assign titleId accordingly + let mediaId = ''; + const titleId: string = typeof info === 'string' ? info : info.title; - // If media type is movie, return formatted string if (mediaType === 'movie') { - return `${systemOnlyId ? titleId.toLocaleLowerCase() : titleId}${ - typeof info !== 'string' && info.year ? ` (${info.year})` : '' - }`; - } - - // If info is string or only the title of the TV show is required, return titleId - if (typeof info === 'string' || tvShowTitleOnly) { - return systemOnlyId ? titleId.toLocaleLowerCase() : titleId; - } - - // Destructure info of type ParsedShow - const { title, seasons, fullSeason, isMultiSeason, episodeNumbers } = info as ParsedShow; - - // Format title string - const titleStr = systemOnlyId ? title.toLocaleLowerCase() : title; - - // If seasons are not present or empty, return title string - if (!seasons || seasons.length === 0) return titleStr; - - // Define season and episode prefixes - const seasonPrefix = systemOnlyId ? 's' : 'S'; - const episodePrefix = systemOnlyId ? 'e' : 'E'; - - // Handle multi-season case - if (isMultiSeason) { - return `${titleStr} ${prefix(seasonPrefix, Math.min(...seasons))}-${prefix( - seasonPrefix, - Math.max(...seasons) - )}`; - } - - // Handle full season case - else if (fullSeason) { - return `${titleStr} ${prefix(seasonPrefix, Math.min(...seasons))}`; + mediaId = `${titleId}${typeof info !== 'string' && info.year ? ` (${info.year})` : ''}`; + } else if (typeof info === 'string' || tvShowTitleOnly) { + mediaId = titleId; + } else { + const { title, seasons, episodeNumbers } = info as ParsedShow; + if (!seasons || !seasons.length) { + mediaId = title; + } else if (seasons.length === 1) { + if (episodeNumbers.length === 1) { + mediaId = `${title} โžก๏ธ ${prefix('S', seasons[0])}${prefix('E', episodeNumbers[0])}`; + } else { + mediaId = `${title} โžก๏ธ ${prefix('S', seasons[0])}`; + } + } else if (isArrayContinuouslyIncreasing(seasons)) { + mediaId = `${title} โžก๏ธ ${prefix('S', seasons[0])} to ${prefix( + 'S', + seasons[seasons.length - 1] + )}`; + } else { + mediaId = `${title} โžก๏ธ ${seasons.map((season) => prefix('S', season)).join(', ')}`; + } } - // Handle single episode case - else if (episodeNumbers && episodeNumbers.length > 0) { - return `${titleStr} ${prefix(seasonPrefix, Math.min(...seasons))}${prefix( - episodePrefix, - episodeNumbers[0] - )}`; + if (systemOnlyId) { + mediaId = mediaId.toLowerCase(); } - // Default case, return title and season without episode - return `${titleStr} ${prefix(seasonPrefix, Math.min(...seasons))}`; + return mediaId; }; From b6a86ea8857d6ccb66db33b0965ccbac2e83d027 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Tue, 3 Oct 2023 21:43:16 +0200 Subject: [PATCH 151/272] 3.7.5 (#84) * Add support for external search * Update readme --- .env | 2 ++ README.md | 11 ++++++++--- next.config.js | 2 +- package.json | 2 +- src/pages/movie/[imdbid].tsx | 6 +++++- src/pages/recentlyupdated.tsx | 4 +++- src/pages/search.tsx | 6 +++++- src/pages/show/[imdbid]/[seasonNum].tsx | 8 +++++--- 8 files changed, 30 insertions(+), 11 deletions(-) diff --git a/.env b/.env index 3781893..d526130 100644 --- a/.env +++ b/.env @@ -11,3 +11,5 @@ JACKETT="http://localhost:9117" JACKETT_KEY=abc123 PROWLARR="http://localhost:9696" PROWLARR_KEY=abc123 + +EXTERNAL_SEARCH_API_HOSTNAME= diff --git a/README.md b/README.md index ec25cb0..fe56e18 100644 --- a/README.md +++ b/README.md @@ -33,18 +33,23 @@ You can share your whole collection or select specific items you want to share. ## Setup 0. Signup for a free tier plan at [PlanetScale](https://planetscale.com/) - this is a serverless MySQL database hosted in the cloud -1. Have Tor running at `127.0.0.1:9050` (needed for DHT search; if you don't use that then it's not needed) -2. Clone this repository and go to the cloned directory -3. Create a copy of the `.env` file `cp .env .env.local` +1. Have Tor running at `127.0.0.1:9050` (needed for DHT search; if you don't need your own search database then refer to the secion `External Search API`) +2. Clone this repository and go to the directory +3. Create a copy of the `.env` file `cp .env .env.local` and fill in the details 4. Fill in required settings in `.env.local` (e.g. `PROXY=socks5h://127.0.0.1:9050` if tor is running on your host machine) 5. Get your Prisma database connection string from PlanetScale console and put that in your `.env.local` file 6. Install the dependencies `npm i` 7. This is a Next.js project so either go with `npm run dev` or `npm run build && npm run start` 8. Head to `localhost:3000` and login +### External Search API + +If you don't want to build your own library, edit the config `EXTERNAL_SEARCH_API_HOSTNAME` in your `.env.local` and set it to `https://corsproxy.org/?https://debridmediamanager.com` + ### Docker Swarm ``` +cp .env .env.local docker swarm init docker stack deploy -c docker-compose.yml ``` diff --git a/next.config.js b/next.config.js index 6efd0aa..4f2cd4a 100644 --- a/next.config.js +++ b/next.config.js @@ -27,7 +27,7 @@ const nextConfig = { reactStrictMode: false, publicRuntimeConfig: { // Will be available on both server and client - // externalSearchApiHostname: 'http://debridmediamanager.com', + externalSearchApiHostname: process.env.EXTERNAL_SEARCH_API_HOSTNAME, realDebridHostname: 'https://corsproxy.org/?https://api.real-debrid.com', allDebridHostname: 'https://api.alldebrid.com', allDebridAgent: 'debridMediaManager', diff --git a/package.json b/package.json index f03022f..62fc9e5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "3.7.4", + "version": "3.7.5", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/movie/[imdbid].tsx b/src/pages/movie/[imdbid].tsx index c7a7f92..4481b1c 100644 --- a/src/pages/movie/[imdbid].tsx +++ b/src/pages/movie/[imdbid].tsx @@ -10,6 +10,7 @@ import { searchToastOptions } from '@/utils/toastOptions'; import { withAuth } from '@/utils/withAuth'; import axios from 'axios'; import { GetServerSideProps } from 'next'; +import getConfig from 'next/config'; import Head from 'next/head'; import Image from 'next/image'; import Link from 'next/link'; @@ -33,6 +34,7 @@ const MovieSearch: FunctionComponent = ({ year, imdb_score, }) => { + const { publicRuntimeConfig: config } = getConfig(); const [searchState, setSearchState] = useState('loading'); const [searchResults, setSearchResults] = useState([]); const [errorMessage, setErrorMessage] = useState(''); @@ -63,7 +65,9 @@ const MovieSearch: FunctionComponent = ({ setSearchResults([]); setErrorMessage(''); try { - let endpoint = `/api/moviesearch?imdbId=${encodeURIComponent(imdbId)}`; + let endpoint = `${ + config.externalSearchApiHostname + }/api/moviesearch%3FimdbId=${encodeURIComponent(imdbId)}`; const response = await axios.get(endpoint); if (response.status === 204) { setSearchState(response.headers['status']); diff --git a/src/pages/recentlyupdated.tsx b/src/pages/recentlyupdated.tsx index 4c06e74..776a3ef 100644 --- a/src/pages/recentlyupdated.tsx +++ b/src/pages/recentlyupdated.tsx @@ -1,11 +1,13 @@ import Poster from '@/components/poster'; import { withAuth } from '@/utils/withAuth'; +import getConfig from 'next/config'; import Head from 'next/head'; import Link from 'next/link'; import { useEffect, useState } from 'react'; import { Toaster } from 'react-hot-toast'; function RecentlyUpdated() { + const { publicRuntimeConfig: config } = getConfig(); const [searchResults, setSearchResults] = useState([]); const [loading, setLoading] = useState(false); const [errorMessage, setErrorMessage] = useState(''); @@ -13,7 +15,7 @@ function RecentlyUpdated() { const fetchData = async () => { setLoading(true); try { - const res = await fetch(`/api/recent`); + const res = await fetch(`${config.externalSearchApiHostname}/api/recent`); const data = await res.json(); setSearchResults(data); } catch (error: any) { diff --git a/src/pages/search.tsx b/src/pages/search.tsx index 870380a..01f0afa 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -1,5 +1,6 @@ import Poster from '@/components/poster'; import { withAuth } from '@/utils/withAuth'; +import getConfig from 'next/config'; import Head from 'next/head'; import Link from 'next/link'; import { useRouter } from 'next/router'; @@ -8,6 +9,7 @@ import { Toaster } from 'react-hot-toast'; import { MdbSearchResult } from './api/keywordsearch'; function Search() { + const { publicRuntimeConfig: config } = getConfig(); const [query, setQuery] = useState(''); const [typedQuery, setTypedQuery] = useState(''); const [searchResults, setSearchResults] = useState([]); @@ -19,7 +21,9 @@ function Search() { const fetchData = async (query: string) => { setLoading(true); try { - const res = await fetch(`/api/keywordsearch?keyword=${query}`); + const res = await fetch( + `${config.externalSearchApiHostname}/api/keywordsearch%3Fkeyword=${query}` + ); const data = await res.json(); setSearchResults(data.results); } catch (error: any) { diff --git a/src/pages/show/[imdbid]/[seasonNum].tsx b/src/pages/show/[imdbid]/[seasonNum].tsx index 1c9dfda..94cbcc0 100644 --- a/src/pages/show/[imdbid]/[seasonNum].tsx +++ b/src/pages/show/[imdbid]/[seasonNum].tsx @@ -10,6 +10,7 @@ import { searchToastOptions } from '@/utils/toastOptions'; import { withAuth } from '@/utils/withAuth'; import axios from 'axios'; import { GetServerSideProps } from 'next'; +import getConfig from 'next/config'; import Head from 'next/head'; import Image from 'next/image'; import Link from 'next/link'; @@ -35,6 +36,7 @@ const TvSearch: FunctionComponent = ({ season_names, imdb_score, }) => { + const { publicRuntimeConfig: config } = getConfig(); const [searchState, setSearchState] = useState('loading'); const [searchResults, setSearchResults] = useState([]); const [errorMessage, setErrorMessage] = useState(''); @@ -65,9 +67,9 @@ const TvSearch: FunctionComponent = ({ setSearchResults([]); setErrorMessage(''); try { - let endpoint = `/api/tvsearch?imdbId=${encodeURIComponent( - imdbId - )}&seasonNum=${seasonNum}`; + let endpoint = `${ + config.externalSearchApiHostname + }/api/tvsearch%3FimdbId=${encodeURIComponent(imdbId)}&seasonNum=${seasonNum}`; const response = await axios.get(endpoint); if (response.status === 204) { setSearchState(response.headers['status']); From 44bffeeaacb446591384a518a45f21520a614d79 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Tue, 3 Oct 2023 20:56:57 +0000 Subject: [PATCH 152/272] Hello there! From 5f7d7210407f589f9c1e579a34b9652d5096e0c7 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sun, 8 Oct 2023 03:07:22 +0200 Subject: [PATCH 153/272] 3.8.0 (#85) * Add support for external search * Update readme * improve scrapers * add year * cleaner working * Working tv cleaner * fixes * fixes * finish the scraper * small stuffs --- bannedwordlist.txt | 13 - package-lock.json | 4 +- package.json | 2 +- src/pages/api/keywordsearch.ts | 2 +- src/pages/api/moviecleaner.ts | 30 ++ src/pages/api/tvcleaner.ts | 31 ++ src/pages/movie/[imdbid].tsx | 12 +- src/pages/recentlyupdated.tsx | 7 +- src/pages/search.tsx | 9 +- src/pages/show/[imdbid]/[seasonNum].tsx | 8 +- src/services/btdigg-v2.ts | 34 +- src/services/jackett.ts | 12 +- src/services/movieCleaner.ts | 148 +++++++ src/services/movieScraper.ts | 218 ++-------- src/services/planetscale.ts | 15 +- src/services/prowlarr.ts | 12 +- src/services/tvCleaner.ts | 186 +++++++++ src/services/tvScraper.ts | 213 +++------- src/utils/checks.ts | 529 ++++++++++++++++++++++-- src/utils/search.ts | 9 + wordlist.txt | 141 +++++++ 21 files changed, 1201 insertions(+), 434 deletions(-) create mode 100644 src/pages/api/moviecleaner.ts create mode 100644 src/pages/api/tvcleaner.ts create mode 100644 src/services/movieCleaner.ts create mode 100644 src/services/tvCleaner.ts diff --git a/bannedwordlist.txt b/bannedwordlist.txt index 0a594f7..29479b4 100644 --- a/bannedwordlist.txt +++ b/bannedwordlist.txt @@ -33,7 +33,6 @@ boiolas bollock bollok boner -boob boobs booobs boooobs @@ -93,7 +92,6 @@ cyberfucked cyberfucker cyberfuckers cyberfucking -damn dick dickhead dildo @@ -183,9 +181,6 @@ gaylord gaysex girlsoutwest goatse -god -goddamn -goddamned hardcoresex hell heshe @@ -221,8 +216,6 @@ kumming kums kunilingus labia -lmao -lmfao lust lusting masochist @@ -271,7 +264,6 @@ nobjocky nobjokey numbnuts nutsack -omg orgasim orgasims orgasm @@ -300,7 +292,6 @@ pissflaps pissin pissing pissoff -poop porn porno pornography @@ -326,13 +317,11 @@ scroat scrote scrotum semen -sex shag shagger shaggin shagging shemale -shit shitdick shite shited @@ -361,7 +350,6 @@ teets teez testical testicle -tit titfuck tits titt @@ -388,6 +376,5 @@ whoar whore willies willy -wtf xrated xxx diff --git a/package-lock.json b/package-lock.json index ab95c4b..b88b525 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "3.7.4", + "version": "3.8.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "3.7.4", + "version": "3.8.0", "dependencies": { "@ctrl/video-filename-parser": "^5.0.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 62fc9e5..1d549e2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "3.7.5", + "version": "3.8.0", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/api/keywordsearch.ts b/src/pages/api/keywordsearch.ts index 1582751..c9fd0d1 100644 --- a/src/pages/api/keywordsearch.ts +++ b/src/pages/api/keywordsearch.ts @@ -36,7 +36,7 @@ const handler: NextApiHandler = async (req, res) => { try { const cleanKeyword = encodeURIComponent( - keyword.toString().replaceAll(/[\W]+/g, ' ').split(' ').join(' ').trim().toLowerCase() + keyword.toString().replace(/[\W]+/g, ' ').split(' ').join(' ').trim().toLowerCase() ); const searchResults = await db.getSearchResults(cleanKeyword); if (searchResults) { diff --git a/src/pages/api/moviecleaner.ts b/src/pages/api/moviecleaner.ts new file mode 100644 index 0000000..4d22245 --- /dev/null +++ b/src/pages/api/moviecleaner.ts @@ -0,0 +1,30 @@ +import { cleanByImdbId } from '@/services/movieCleaner'; +import { PlanetScaleCache } from '@/services/planetscale'; +import { ScrapeResponse } from '@/services/scrapeJobs'; +import { NextApiRequest, NextApiResponse } from 'next'; + +const db = new PlanetScaleCache(); + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + const { scrapePassword } = req.query; + if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { + res.status(403).json({ + status: 'error', + errorMessage: 'You are not authorized to use this feature', + }); + return; + } + + let imdbIds = await db.getAllImdbIds('movie'); + if (!imdbIds) { + console.log( + '[moviecleaner] There must be something wrong with the database, waiting 60 seconds' + ); + return; + } + for (let i = 0; i < imdbIds.length; i++) { + await cleanByImdbId(imdbIds[i]); + } + res.status(200).json({ status: 'success' }); + return; +} diff --git a/src/pages/api/tvcleaner.ts b/src/pages/api/tvcleaner.ts new file mode 100644 index 0000000..a4dbd35 --- /dev/null +++ b/src/pages/api/tvcleaner.ts @@ -0,0 +1,31 @@ +import { PlanetScaleCache } from '@/services/planetscale'; +import { ScrapeResponse } from '@/services/scrapeJobs'; +import { cleanByImdbId } from '@/services/tvCleaner'; +import { NextApiRequest, NextApiResponse } from 'next'; + +const db = new PlanetScaleCache(); + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + const { scrapePassword } = req.query; + if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { + res.status(403).json({ + status: 'error', + errorMessage: 'You are not authorized to use this feature', + }); + return; + } + + let imdbIds = await db.getAllImdbIds('tv'); + if (!imdbIds) { + console.log( + '[moviecleaner] There must be something wrong with the database, waiting 60 seconds' + ); + return; + } + let uniqueIds = Array.from(new Set(imdbIds)); + for (let i = 0; i < uniqueIds.length; i++) { + await cleanByImdbId(imdbIds[i]); + } + res.status(200).json({ status: 'success' }); + return; +} diff --git a/src/pages/movie/[imdbid].tsx b/src/pages/movie/[imdbid].tsx index 4481b1c..7e7a61f 100644 --- a/src/pages/movie/[imdbid].tsx +++ b/src/pages/movie/[imdbid].tsx @@ -65,9 +65,11 @@ const MovieSearch: FunctionComponent = ({ setSearchResults([]); setErrorMessage(''); try { - let endpoint = `${ - config.externalSearchApiHostname - }/api/moviesearch%3FimdbId=${encodeURIComponent(imdbId)}`; + let path = `api/moviesearch?imdbId=${encodeURIComponent(imdbId)}`; + if (config.externalSearchApiHostname) { + path = encodeURIComponent(path); + } + let endpoint = `${config.externalSearchApiHostname || ''}/${path}`; const response = await axios.get(endpoint); if (response.status === 204) { setSearchState(response.headers['status']); @@ -219,7 +221,9 @@ const MovieSearch: FunctionComponent = ({ />
-

{title}

+

+ {title} ({year}) +

{description}

{imdb_score && (

diff --git a/src/pages/recentlyupdated.tsx b/src/pages/recentlyupdated.tsx index 776a3ef..2754c81 100644 --- a/src/pages/recentlyupdated.tsx +++ b/src/pages/recentlyupdated.tsx @@ -15,7 +15,12 @@ function RecentlyUpdated() { const fetchData = async () => { setLoading(true); try { - const res = await fetch(`${config.externalSearchApiHostname}/api/recent`); + let path = 'api/recent'; + if (config.externalSearchApiHostname) { + path = encodeURIComponent(path); + } + let endpoint = `${config.externalSearchApiHostname || ''}/${path}`; + const res = await fetch(endpoint); const data = await res.json(); setSearchResults(data); } catch (error: any) { diff --git a/src/pages/search.tsx b/src/pages/search.tsx index 01f0afa..9dbfc2a 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -21,9 +21,12 @@ function Search() { const fetchData = async (query: string) => { setLoading(true); try { - const res = await fetch( - `${config.externalSearchApiHostname}/api/keywordsearch%3Fkeyword=${query}` - ); + let path = `api/keywordsearch?keyword=${query}`; + if (config.externalSearchApiHostname) { + path = encodeURIComponent(path); + } + let endpoint = `${config.externalSearchApiHostname || ''}/${path}`; + const res = await fetch(endpoint); const data = await res.json(); setSearchResults(data.results); } catch (error: any) { diff --git a/src/pages/show/[imdbid]/[seasonNum].tsx b/src/pages/show/[imdbid]/[seasonNum].tsx index 94cbcc0..c0ea918 100644 --- a/src/pages/show/[imdbid]/[seasonNum].tsx +++ b/src/pages/show/[imdbid]/[seasonNum].tsx @@ -67,9 +67,11 @@ const TvSearch: FunctionComponent = ({ setSearchResults([]); setErrorMessage(''); try { - let endpoint = `${ - config.externalSearchApiHostname - }/api/tvsearch%3FimdbId=${encodeURIComponent(imdbId)}&seasonNum=${seasonNum}`; + let path = `api/tvsearch?imdbId=${imdbId}&seasonNum=${seasonNum}`; + if (config.externalSearchApiHostname) { + path = encodeURIComponent(path); + } + let endpoint = `${config.externalSearchApiHostname || ''}/${path}`; const response = await axios.get(endpoint); if (response.status === 204) { setSearchState(response.headers['status']); diff --git a/src/services/btdigg-v2.ts b/src/services/btdigg-v2.ts index d361ed3..d0df08a 100644 --- a/src/services/btdigg-v2.ts +++ b/src/services/btdigg-v2.ts @@ -1,5 +1,4 @@ import { meetsTitleConditions } from '@/utils/checks'; -import { getMediaType } from '@/utils/mediaType'; import ProxyManager from '@/utils/proxyManager'; import axios from 'axios'; import { SocksProxyAgent } from 'socks-proxy-agent'; @@ -99,7 +98,6 @@ type ProcessPageResult = { const processPage = async ( finalQuery: string, targetTitle: string, - mustHaveTerms: (string | RegExp)[], airDate: string, pageNum: number ): Promise => { @@ -165,23 +163,19 @@ const processPage = async ( badCount++; continue; } - const fileSize = convertToMB(fileSizeStr); - if (getMediaType(title) === 'movie' && fileSize > 200000) { - badCount++; // movie is too big - continue; - } - if (fileSizeStr.includes(' B') || fileSizeStr.includes(' KB')) { - badCount++; - continue; - } if (!isFoundDateRecent(ages[resIndex][1], airDate)) { badCount++; continue; } - if (!meetsTitleConditions(targetTitle, mustHaveTerms, title)) { + if (!meetsTitleConditions(targetTitle, airDate.substring(0, 4), title)) { + // console.log( + // `๐Ÿ”ฅ ${title} does not meet title conditions`, + // targetTitle, + // airDate.substring(0, 4) + // ); badCount++; continue; } @@ -219,7 +213,7 @@ async function processInBatches( let lastPrintedIndex = 0; while (i < promises.length) { let percentageIncrease = ((i - lastPrintedIndex) / promises.length) * 100; - if (percentageIncrease >= 10) { + if (percentageIncrease >= 20) { console.log(`๐ŸŒƒ Btdigg batch ${i}/${promises.length}:${title}`); lastPrintedIndex = i; } @@ -248,7 +242,6 @@ async function processInBatches( export async function scrapeBtdigg( finalQuery: string, targetTitle: string, - mustHaveTerms: (string | RegExp)[], airDate: string ): Promise { let searchResultsArr: ScrapeSearchResult[] = []; @@ -259,7 +252,6 @@ export async function scrapeBtdigg( const { results, numResults } = await processPage( finalQuery, targetTitle, - mustHaveTerms, airDate, pageNum++ ); @@ -270,13 +262,7 @@ export async function scrapeBtdigg( while (pageNum <= maxPages) { promises.push( ((pageNum) => async () => { - return await processPage( - finalQuery, - targetTitle, - mustHaveTerms, - airDate, - pageNum - ); + return await processPage(finalQuery, targetTitle, airDate, pageNum); })(pageNum) ); pageNum++; @@ -292,7 +278,6 @@ export async function scrapeBtdigg( const { results, numResults } = await processPage( `${finalQuery} .mkv`, targetTitle, - mustHaveTerms, airDate, pageNum++ ); @@ -305,7 +290,6 @@ export async function scrapeBtdigg( return await processPage( `${finalQuery} .mkv`, targetTitle, - mustHaveTerms, airDate, pageNum ); @@ -324,7 +308,6 @@ export async function scrapeBtdigg( const { results, numResults } = await processPage( `${finalQuery} .mp4`, targetTitle, - mustHaveTerms, airDate, pageNum++ ); @@ -337,7 +320,6 @@ export async function scrapeBtdigg( return await processPage( `${finalQuery} .mp4`, targetTitle, - mustHaveTerms, airDate, pageNum ); diff --git a/src/services/jackett.ts b/src/services/jackett.ts index 2054406..368829f 100644 --- a/src/services/jackett.ts +++ b/src/services/jackett.ts @@ -65,7 +65,6 @@ async function computeHashFromTorrent(url: string): Promise async function processItem( item: any, targetTitle: string, - mustHaveTerms: (string | RegExp)[], airDate: string ): Promise { const title = item.Title; @@ -79,7 +78,8 @@ async function processItem( return undefined; } - if (!meetsTitleConditions(targetTitle, mustHaveTerms, title)) { + if (!meetsTitleConditions(targetTitle, airDate.substring(0, 4), title)) { + // console.log(`๐Ÿ”ฅ ${title} does not meet title conditions`, targetTitle, airDate.substring(0, 4)) return undefined; } @@ -108,7 +108,7 @@ async function processInBatches( let lastPrintedIndex = 0; while (i < promises.length) { let percentageIncrease = ((i - lastPrintedIndex) / promises.length) * 100; - if (percentageIncrease >= 10) { + if (percentageIncrease >= 20) { console.log(`๐ŸŒ Jackett batch ${i}/${promises.length}:${title}`); lastPrintedIndex = i; } @@ -125,7 +125,6 @@ async function processInBatches( const processPage = async ( finalQuery: string, targetTitle: string, - mustHaveTerms: (string | RegExp)[], airDate: string ): Promise => { const MAX_RETRIES = 5; // maximum number of retries @@ -158,7 +157,7 @@ const processPage = async ( const promises: (() => Promise)[] = responseData.map( (item: any) => { - return () => processItem(item, targetTitle, mustHaveTerms, airDate); + return () => processItem(item, targetTitle, airDate); } ); results.push(...(await processInBatches(finalQuery, promises, 10))); @@ -169,12 +168,11 @@ const processPage = async ( export async function scrapeJackett( finalQuery: string, targetTitle: string, - mustHaveTerms: (string | RegExp)[], airDate: string ): Promise { console.log(`๐Ÿ” Searching Jackett: ${finalQuery}`); try { - return await processPage(finalQuery, targetTitle, mustHaveTerms, airDate); + return await processPage(finalQuery, targetTitle, airDate); } catch (error) { console.error('scrapeJackett page processing error', error); } diff --git a/src/services/movieCleaner.ts b/src/services/movieCleaner.ts new file mode 100644 index 0000000..c12ef3a --- /dev/null +++ b/src/services/movieCleaner.ts @@ -0,0 +1,148 @@ +import { + filterByMovieConditions, + getAllPossibleTitles, + grabMovieMetadata, + meetsTitleConditions, +} from '@/utils/checks'; +import axios from 'axios'; +import { ScrapeSearchResult, flattenAndRemoveDuplicates, sortByFileSize } from './mediasearch'; +import { PlanetScaleCache } from './planetscale'; + +type MovieScrapeJob = { + titles: string[]; + year: string; + airDate: string; + scrapes: ScrapeSearchResult[]; +}; + +const db = new PlanetScaleCache(); +const tmdbKey = process.env.TMDB_KEY; +const getTmdbSearch = (imdbId: string) => + `https://api.themoviedb.org/3/find/${imdbId}?api_key=${tmdbKey}&external_source=imdb_id`; +const mdbKey = process.env.MDBLIST_KEY; +const getMdbInfo = (imdbId: string) => `https://mdblist.com/api/?apikey=${mdbKey}&i=${imdbId}`; +const getTmdbMovieInfo = (tmdbId: string) => + `https://api.themoviedb.org/3/movie/${tmdbId}?api_key=${tmdbKey}`; + +function convertMdbToTmdb(apiResponse: any) { + return { + title: apiResponse.title, + name: apiResponse.title, + release_date: apiResponse.released, + // original_title: apiResponse.original_title, // This field does not exist in the provided API response + }; +} + +export async function cleanByImdbId(imdbId: string) { + let tmdbSearch, mdbInfo; + try { + tmdbSearch = await axios.get(getTmdbSearch(imdbId)); + mdbInfo = await axios.get(getMdbInfo(imdbId)); + } catch (error: any) { + console.error(error); + return; + } + + const isMovie = mdbInfo.data.type === 'movie' || tmdbSearch.data.movie_results?.length > 0; + + if (isMovie) { + try { + const tmdbId = mdbInfo.data.tmdbid ?? tmdbSearch.data.movie_results[0]?.id; + const tmdbInfo = await axios.get(getTmdbMovieInfo(tmdbId)); + await cleanMovieScrapes(imdbId, tmdbInfo.data, mdbInfo.data, db); + return; + } catch (error: any) { + if (error.response?.status === 404 || error.message.includes("reading 'id'")) { + try { + const convertedMdb = convertMdbToTmdb(mdbInfo.data); + await cleanMovieScrapes(imdbId, convertedMdb, mdbInfo.data, db); + return; + } catch (error: any) { + console.error(error); + } + } else { + console.error(error); + return; + } + } + } + return; +} + +function cleanScrapes( + targetTitle: string, + year: string, + scrapes: ScrapeSearchResult[] +): ScrapeSearchResult[] { + return scrapes.filter((scrape) => meetsTitleConditions(targetTitle, year, scrape.title)); +} + +const cleanBasedOnScrapeJob = (job: MovieScrapeJob): ScrapeSearchResult[][] => { + return job.titles.map((title) => cleanScrapes(title, job.year, job.scrapes)); +}; + +export async function cleanMovieScrapes( + imdbId: string, + tmdbData: any, + mdbData: any, + db: PlanetScaleCache +) { + let scrapes: ScrapeSearchResult[] | undefined = await db.getScrapedResults(`movie:${imdbId}`); + if (!scrapes) { + return; + } + const scrapesCount = scrapes.length; + if (!scrapes.length) { + console.log(`โš ๏ธ No results for ${mdbData.title} !`); + return; + } + + const { + cleanTitle, + originalTitle, + titleWithSymbols, + alternativeTitle, + cleanedTitle, + year, + airDate, + } = grabMovieMetadata(imdbId, tmdbData, mdbData); + + scrapes = filterByMovieConditions(cleanTitle, year, scrapes); + if (!scrapes.length) { + await db.saveScrapedResults(`movie:${imdbId}`, scrapes, false, true); + await db.markAsDone(imdbId); + console.log(`โš ๏ธ Preliminary procedure removed all results left for ${cleanTitle}`); + return; + } + + const titles = getAllPossibleTitles([ + cleanTitle, + originalTitle, + cleanedTitle, + titleWithSymbols, + alternativeTitle, + ]); + const searchResults = cleanBasedOnScrapeJob({ + titles, + year, + airDate, + scrapes, + }); + let processedResults = flattenAndRemoveDuplicates(searchResults); + processedResults = sortByFileSize(processedResults); + + if (processedResults.length < scrapesCount) { + await db.saveScrapedResults(`movie:${imdbId}`, processedResults, false, true); + await db.markAsDone(imdbId); + console.log( + scrapes + .filter((s) => !processedResults.find((p) => p.hash === s.hash)) + .map((s) => `โšก ${s.title}`) + ); + console.log( + `๐ŸŽฅ Removed ${scrapesCount - processedResults.length}, left ${ + processedResults.length + } results for ${cleanTitle}` + ); + } +} diff --git a/src/services/movieScraper.ts b/src/services/movieScraper.ts index d4f8f33..1686594 100644 --- a/src/services/movieScraper.ts +++ b/src/services/movieScraper.ts @@ -1,125 +1,36 @@ -import { naked } from '@/utils/checks'; -import { cleanSearchQuery } from '@/utils/search'; -import fs from 'fs'; +import { filterByMovieConditions, getAllPossibleTitles, grabMovieMetadata } from '@/utils/checks'; import { scrapeBtdigg } from './btdigg-v2'; import { scrapeJackett } from './jackett'; import { ScrapeSearchResult, flattenAndRemoveDuplicates, sortByFileSize } from './mediasearch'; import { PlanetScaleCache } from './planetscale'; import { scrapeProwlarr } from './prowlarr'; -let wordSet: Set; -try { - let data = fs.readFileSync('./wordlist.txt', 'utf8'); - wordSet = new Set(data.toLowerCase().split('\n')); -} catch (err) { - console.error('error loading wordlist', err); -} - type MovieScrapeJob = { - title: string; - originalTitle?: string; - cleanedTitle?: string; - year?: string; + titles: string[]; + year: string; airDate: string; }; -const countUncommonWordsInTitle = (title: string) => { - let processedTitle = title - .split(/\s+/) - .map((word: string) => - word - .toLowerCase() - .replace(/'s/g, '') - .replace(/\s&\s/g, ' and ') - .replaceAll(/[\W]+/g, '') - ) - .filter((word: string) => word.length > 3); - return processedTitle.filter((word: string) => !wordSet.has(word)).length; -}; - async function scrapeAll( finalQuery: string, targetTitle: string, - mustHaveTerms: (string | RegExp)[], airDate: string ): Promise { return await Promise.all([ - scrapeBtdigg(finalQuery, targetTitle, mustHaveTerms, airDate), - scrapeProwlarr(finalQuery, targetTitle, mustHaveTerms, airDate), - scrapeJackett(finalQuery, targetTitle, mustHaveTerms, airDate), + scrapeBtdigg(finalQuery, targetTitle, airDate), + scrapeProwlarr(finalQuery, targetTitle, airDate), + scrapeJackett(finalQuery, targetTitle, airDate), ]); } -const getMovieSearchResults = async (job: MovieScrapeJob) => { - let sets: ScrapeSearchResult[][] = []; - const hasUncommonWords = countUncommonWordsInTitle(job.title) >= 1; - const mustHaveFn = (title: string, year?: string) => - naked(title).length <= 6 && year ? [year] : []; - - let mustHave = mustHaveFn(job.title, job.year); - if (job.title.includes(' & ')) { - const aSets = await Promise.all([ - scrapeAll(`"${job.title}" ${job.year ?? ''}`, job.title, mustHave, job.airDate), - scrapeAll( - `"${job.title.replaceAll(' & ', ' and ')}" ${job.year ?? ''}`, - job.title, - mustHave, - job.airDate - ), - ]); - sets.push(...aSets.flat()); - } else { - sets.push( - ...(await scrapeAll( - `"${job.title}" ${job.year ?? ''}`, - job.title, - mustHave, - job.airDate - )) - ); - } - if ( - job.title.replaceAll(/[^a-z0-9]/gi, '').length > 5 && - (job.title.split(/\s/).length > 3 || hasUncommonWords) - ) { - sets.push(...(await scrapeAll(`"${job.title}"`, job.title, mustHave, job.airDate))); +const processMovieJob = async (job: MovieScrapeJob): Promise => { + const results: ScrapeSearchResult[][] = []; + for (let i = 0; i < job.titles.length; i++) { + const title = job.titles[i]; + results.push(...(await scrapeAll(`"${title}" ${job.year}`, title, job.airDate))); + results.push(...(await scrapeAll(`"${title}"`, title, job.airDate))); } - - if (job.originalTitle) { - mustHave = mustHaveFn(job.originalTitle, job.year); - sets.push( - ...(await scrapeAll( - `"${job.originalTitle}" ${job.year ?? ''}`, - job.originalTitle, - [], - job.airDate - )) - ); - if (job.originalTitle.replaceAll(/[^a-z0-9]/gi, '').length > 5 && hasUncommonWords) { - sets.push( - ...(await scrapeAll(`"${job.originalTitle}"`, job.originalTitle, [], job.airDate)) - ); - } - } - - if (job.cleanedTitle) { - mustHave = mustHaveFn(job.cleanedTitle, job.year); - sets.push( - ...(await scrapeAll( - `"${job.cleanedTitle}" ${job.year ?? ''}`, - job.cleanedTitle, - [], - job.airDate - )) - ); - if (job.cleanedTitle.replaceAll(/[^a-z0-9]/gi, '').length > 5 && hasUncommonWords) { - sets.push( - ...(await scrapeAll(`"${job.cleanedTitle}"`, job.cleanedTitle, [], job.airDate)) - ); - } - } - - return sets; + return results; }; export async function scrapeMovies( @@ -129,104 +40,37 @@ export async function scrapeMovies( db: PlanetScaleCache, replaceOldScrape: boolean = false ): Promise { - console.log( - `๐Ÿน Scraping movie: ${tmdbData.title} (${imdbId}) (uncommon: ${countUncommonWordsInTitle( - tmdbData.title - )})...` - ); - const cleanTitle = cleanSearchQuery(tmdbData.title); - const year = - mdbData.year ?? mdbData.released?.substring(0, 4) ?? tmdbData.release_date?.substring(0, 4); - const airDate = mdbData.released ?? tmdbData.release_date ?? '2000-01-01'; - let originalTitle, cleanedTitle; - - const processedTitle = tmdbData.title - .split(' ') - .map((word: string) => word.replaceAll(/[\W]+/g, '')) - .join(' ') - .trim() - .toLowerCase(); - - if ( - tmdbData.original_title && - tmdbData.original_title !== tmdbData.title && - mdbData.ratings?.length - ) { - originalTitle = tmdbData.original_title.toLowerCase(); - for (let rating of mdbData.ratings) { - if (rating.source === 'tomatoes') { - if (!rating.url) continue; - let tomatoTitle = rating.url.split('/').pop(); - if (tomatoTitle.match(/^\d{6,}/)) continue; - tomatoTitle = tomatoTitle - .split('_') - .map((word: string) => word.replaceAll(/[\W]+/g, '')) - .join(' ') - .trim() - .toLowerCase(); - if (tomatoTitle !== processedTitle) { - console.log( - '๐ŸŽฏ Found another title (1):', - tomatoTitle, - `(uncommon: ${countUncommonWordsInTitle(tomatoTitle)})` - ); - cleanedTitle = tomatoTitle; - } - } - } - } - - let anotherTitle; - if (mdbData.ratings?.length) { - for (let rating of mdbData.ratings) { - if (rating.source === 'metacritic') { - if (!rating.url) continue; - let metacriticTitle = rating.url.split('/').pop(); - metacriticTitle = metacriticTitle - .split('-') - .map((word: string) => word.replaceAll(/[\W]+/g, '')) - .join(' ') - .trim() - .toLowerCase(); - if (metacriticTitle !== processedTitle && metacriticTitle !== cleanedTitle) { - console.log( - '๐ŸŽฏ Found another title (2):', - metacriticTitle, - `(uncommon: ${countUncommonWordsInTitle(metacriticTitle)})` - ); - anotherTitle = metacriticTitle; - } - } - } - } + const { + cleanTitle, + originalTitle, + titleWithSymbols, + alternativeTitle, + cleanedTitle, + year, + airDate, + } = grabMovieMetadata(imdbId, tmdbData, mdbData); await db.saveScrapedResults(`processing:${imdbId}`, []); - const searchResults = await getMovieSearchResults({ - title: cleanTitle, + const titles = getAllPossibleTitles([ + cleanTitle, originalTitle, cleanedTitle, + titleWithSymbols, + alternativeTitle, + ]); + const searchResults = await processMovieJob({ + titles, year, airDate, }); - if (anotherTitle) { - searchResults.push( - ...(await getMovieSearchResults({ - title: anotherTitle, - originalTitle: undefined, - cleanedTitle: undefined, - year, - airDate, - })) - ); - } let processedResults = flattenAndRemoveDuplicates(searchResults); + processedResults = filterByMovieConditions(cleanTitle, year, processedResults); if (processedResults.length) processedResults = sortByFileSize(processedResults); await db.saveScrapedResults(`movie:${imdbId}`, processedResults, replaceOldScrape); - console.log(`๐ŸŽฅ Saved ${processedResults.length} results for ${cleanTitle}`); - await db.markAsDone(imdbId); + console.log(`๐ŸŽฅ Saved ${processedResults.length} results for ${cleanTitle}`); return processedResults.length; } diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index 479c666..3688b15 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -2,11 +2,19 @@ import { PrismaClient, Scraped } from '@prisma/client'; import { ScrapeSearchResult, flattenAndRemoveDuplicates, sortByFileSize } from './mediasearch'; export class PlanetScaleCache { + private static instance: PrismaClient; public prisma: PrismaClient; constructor() { - this.prisma = new PrismaClient(); - this.prisma.$queryRaw`SET @@boost_cached_queries = true`; + this.prisma = PlanetScaleCache.getInstance(); + } + + private static getInstance(): PrismaClient { + if (!PlanetScaleCache.instance) { + PlanetScaleCache.instance = new PrismaClient(); + PlanetScaleCache.instance.$queryRaw`SET @@boost_cached_queries = true`; + } + return PlanetScaleCache.instance; } /// scraped results @@ -23,12 +31,15 @@ export class PlanetScaleCache { }); if (existingRecord && !replaceOldScrape) { + const origLength = (existingRecord.value as ScrapeSearchResult[]).length; // If record exists, append the new values to it let updatedValue = flattenAndRemoveDuplicates([ existingRecord.value as ScrapeSearchResult[], value, ]); updatedValue = sortByFileSize(updatedValue); + const newLength = updatedValue.length; + console.log(`๐Ÿ“ ${key}: +${newLength - origLength} results`); await this.prisma.scraped.update({ where: { key }, diff --git a/src/services/prowlarr.ts b/src/services/prowlarr.ts index 9c371fb..7d231af 100644 --- a/src/services/prowlarr.ts +++ b/src/services/prowlarr.ts @@ -64,7 +64,6 @@ async function computeHashFromTorrent(url: string): Promise async function processItem( item: any, targetTitle: string, - mustHaveTerms: (string | RegExp)[], airDate: string ): Promise { const title = item.title; @@ -74,7 +73,8 @@ async function processItem( return undefined; } - if (!meetsTitleConditions(targetTitle, mustHaveTerms, title)) { + if (!meetsTitleConditions(targetTitle, airDate.substring(0, 4), title)) { + // console.log(`๐Ÿ”ฅ ${title} does not meet title conditions`, targetTitle, airDate.substring(0, 4)) return undefined; } @@ -103,7 +103,7 @@ async function processInBatches( let lastPrintedIndex = 0; while (i < promises.length) { let percentageIncrease = ((i - lastPrintedIndex) / promises.length) * 100; - if (percentageIncrease >= 10) { + if (percentageIncrease >= 20) { console.log(`๐ŸŒ„ Prowlarr batch ${i}/${promises.length}:${title}`); lastPrintedIndex = i; } @@ -120,7 +120,6 @@ async function processInBatches( const processPage = async ( finalQuery: string, targetTitle: string, - mustHaveTerms: (string | RegExp)[], airDate: string ): Promise => { const MAX_RETRIES = 5; // maximum number of retries @@ -153,7 +152,7 @@ const processPage = async ( const promises: (() => Promise)[] = responseData.map( (item: any) => { - return () => processItem(item, targetTitle, mustHaveTerms, airDate); + return () => processItem(item, targetTitle, airDate); } ); results.push(...(await processInBatches(finalQuery, promises, 5))); @@ -164,12 +163,11 @@ const processPage = async ( export async function scrapeProwlarr( finalQuery: string, targetTitle: string, - mustHaveTerms: (string | RegExp)[], airDate: string ): Promise { console.log(`๐Ÿ” Searching Prowlarr: ${finalQuery}`); try { - return await processPage(finalQuery, targetTitle, mustHaveTerms, airDate); + return await processPage(finalQuery, targetTitle, airDate); } catch (error) { console.error('scrapeProwlarr page processing error', error); } diff --git a/src/services/tvCleaner.ts b/src/services/tvCleaner.ts new file mode 100644 index 0000000..612d6ae --- /dev/null +++ b/src/services/tvCleaner.ts @@ -0,0 +1,186 @@ +import { + filterByTvConditions, + getAllPossibleTitles, + getSeasonNameAndCode, + getSeasonYear, + grabTvMetadata, + meetsTitleConditions, + padWithZero, +} from '@/utils/checks'; +import axios from 'axios'; +import { ScrapeSearchResult, flattenAndRemoveDuplicates, sortByFileSize } from './mediasearch'; +import { PlanetScaleCache } from './planetscale'; + +type TvScrapeJob = { + titles: string[]; + seasonNumber: number; + seasonName?: string; + seasonCode?: number; + seasonYear?: string; + airDate: string; + scrapes: ScrapeSearchResult[]; +}; + +const db = new PlanetScaleCache(); +const tmdbKey = process.env.TMDB_KEY; +const getTmdbSearch = (imdbId: string) => + `https://api.themoviedb.org/3/find/${imdbId}?api_key=${tmdbKey}&external_source=imdb_id`; +const mdbKey = process.env.MDBLIST_KEY; +const getMdbInfo = (imdbId: string) => `https://mdblist.com/api/?apikey=${mdbKey}&i=${imdbId}`; +const getTmdbTvInfo = (tmdbId: string) => + `https://api.themoviedb.org/3/tv/${tmdbId}?api_key=${tmdbKey}`; + +function convertMdbToTmdb(apiResponse: any) { + return { + title: apiResponse.title, + name: apiResponse.title, + release_date: apiResponse.released, + // original_title: apiResponse.original_title, // This field does not exist in the provided API response + }; +} + +export async function cleanByImdbId(imdbId: string) { + let tmdbSearch, mdbInfo; + try { + tmdbSearch = await axios.get(getTmdbSearch(imdbId)); + mdbInfo = await axios.get(getMdbInfo(imdbId)); + } catch (error: any) { + console.error(error); + return; + } + + const isTv = mdbInfo.data.type === 'show' || tmdbSearch.data.tv_results?.length > 0; + if (isTv) { + try { + const tmdbId = mdbInfo.data.tmdbid ?? tmdbSearch.data.tv_results[0]?.id; + const tmdbInfo = await axios.get(getTmdbTvInfo(tmdbId)); + await cleanTvScrapes(imdbId, tmdbInfo.data, mdbInfo.data, db); + return; + } catch (error: any) { + if (error.response?.status === 404 || error.message.includes("reading 'id'")) { + try { + const convertedMdb = convertMdbToTmdb(mdbInfo.data); + await cleanTvScrapes(imdbId, convertedMdb, mdbInfo.data, db); + return; + } catch (error: any) { + console.error(error); + } + } else { + console.error(error); + return; + } + } + } + return; +} + +function cleanScrapes( + targetTitle: string, + year: string, + scrapes: ScrapeSearchResult[] +): ScrapeSearchResult[] { + return scrapes.filter((scrape) => meetsTitleConditions(targetTitle, year, scrape.title)); +} + +const cleanBasedOnScrapeJob = (job: TvScrapeJob): ScrapeSearchResult[][] => { + return job.titles.map((title) => { + return cleanScrapes(title, job.seasonYear ?? '', job.scrapes); + }); +}; + +export async function cleanTvScrapes( + imdbId: string, + tmdbData: any, + mdbData: any, + db: PlanetScaleCache +) { + const { + cleanTitle, + originalTitle, + titleWithSymbols, + alternativeTitle, + cleanedTitle, + year, + seasons, + } = grabTvMetadata(imdbId, tmdbData, mdbData); + + for (const season of seasons) { + if (season.season_number === 0) continue; + let seasonNumber = season.season_number; + const { seasonName, seasonCode } = getSeasonNameAndCode(season); + const seasonYear = getSeasonYear(season) ?? year; + const airDate = season.air_date ?? '2000-01-01'; + + const titles = getAllPossibleTitles([ + cleanTitle, + originalTitle, + cleanedTitle, + titleWithSymbols, + alternativeTitle, + ]); + + let scrapes: ScrapeSearchResult[] | undefined = await db.getScrapedResults( + `tv:${imdbId}:${seasonNumber}` + ); + if (!scrapes) { + return; + } + const scrapesCount = scrapes.length; + if (!scrapes.length) { + console.log(`โš ๏ธ No results for ${cleanTitle} s${padWithZero(seasonNumber)}`); + return; + } + + scrapes = filterByTvConditions( + scrapes, + cleanTitle, + year, + seasonYear, + seasonNumber, + seasonName, + seasonCode + ); + if (!scrapes.length) { + await db.saveScrapedResults(`tv:${imdbId}:${seasonNumber}`, scrapes, false, true); + await db.markAsDone(imdbId); + console.log( + `โš ๏ธ Preliminary procedure removed all results left for ${cleanTitle} s${padWithZero( + seasonNumber + )}` + ); + continue; + } + + const searchResults = cleanBasedOnScrapeJob({ + titles, + seasonNumber, + seasonName, + seasonCode, + seasonYear, + airDate, + scrapes, + }); + let processedResults = flattenAndRemoveDuplicates(searchResults); + processedResults = sortByFileSize(processedResults); + + if (processedResults.length < scrapesCount) { + await db.saveScrapedResults( + `tv:${imdbId}:${seasonNumber}`, + processedResults, + false, + true + ); + await db.markAsDone(imdbId); + console.log( + scrapes + .filter((s) => !processedResults.find((p) => p.hash === s.hash)) + .map((s) => `โšก ${s.title}`) + ); + console.log( + `๐Ÿ“บ Removed ${scrapesCount - processedResults.length}, left ${ + processedResults.length + } results for ${cleanTitle} s${padWithZero(seasonNumber)}` + ); + } + } +} diff --git a/src/services/tvScraper.ts b/src/services/tvScraper.ts index ea6246b..cf18b0f 100644 --- a/src/services/tvScraper.ts +++ b/src/services/tvScraper.ts @@ -1,4 +1,11 @@ -import { cleanSearchQuery } from '@/utils/search'; +import { + filterByTvConditions, + getAllPossibleTitles, + getSeasonNameAndCode, + getSeasonYear, + grabTvMetadata, + padWithZero, +} from '@/utils/checks'; import { scrapeBtdigg } from './btdigg-v2'; import { scrapeJackett } from './jackett'; import { ScrapeSearchResult, flattenAndRemoveDuplicates, sortByFileSize } from './mediasearch'; @@ -6,136 +13,48 @@ import { PlanetScaleCache } from './planetscale'; import { scrapeProwlarr } from './prowlarr'; type TvScrapeJob = { - title: string; - originalTitle?: string; + titles: string[]; seasonNumber: number; seasonName?: string; seasonCode?: number; - seasonYear?: string; + seasonYear: string; airDate: string; }; -function padWithZero(num: number) { - if (num < 10) { - return '0' + num; - } else { - return num.toString(); - } -} - -const getSeasons = (mdbData: any) => - mdbData.seasons.length - ? mdbData.seasons - : [{ name: 'Season 1', season_number: 1, episode_count: 0 }]; - -const getSeasonNameAndCode = (season: any) => { - let seasonName, seasonCode; - let parts = season.name.split(/\s+/); - for (let i = parts.length - 1; i >= 0; i--) { - let match = parts[i].match(/\(?(\d+)\)?$/); - if (match) { - seasonCode = parseInt(match[1]); - parts[i] = ''; - break; - } - } - seasonName = cleanSearchQuery(parts.join(' ').trim()); - if (/series|season/.test(seasonName)) seasonName = undefined; - return { seasonName, seasonCode }; -}; - -const getSeasonYear = (season: any) => season.air_date?.substring(0, 4); - async function scrapeAll( finalQuery: string, targetTitle: string, - mustHaveTerms: (string | RegExp)[], airDate: string ): Promise { return await Promise.all([ - scrapeBtdigg(finalQuery, targetTitle, mustHaveTerms, airDate), - scrapeProwlarr(finalQuery, targetTitle, mustHaveTerms, airDate), - scrapeJackett(finalQuery, targetTitle, mustHaveTerms, airDate), + scrapeBtdigg(finalQuery, targetTitle, airDate), + scrapeProwlarr(finalQuery, targetTitle, airDate), + scrapeJackett(finalQuery, targetTitle, airDate), ]); } -const getSearchResults = async (job: TvScrapeJob) => { - let sets: ScrapeSearchResult[][] = []; - - sets.push( - ...(await scrapeAll( - `"${job.title}" s${padWithZero(job.seasonNumber)}`, - job.title, - [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], - job.airDate - )) - ); - - if (job.seasonName && job.seasonCode) { - sets.push( - ...(await scrapeAll( - `"${job.title}" "${job.seasonName}" s${padWithZero(job.seasonCode)}`, - job.title, - [ - new RegExp(`[0123]?${job.seasonCode}[ex\\W_]`, 'i'), - ...job.seasonName.split(/\s/), - ], - job.airDate - )) - ); - } else if (job.seasonName && job.seasonName !== job.title) { - sets.push( - ...(await scrapeAll( - `"${job.title}" "${job.seasonName}"`, - job.title, - [...job.seasonName.split(/\s/)], - job.airDate - )) - ); - } - - if ( - job.title.replaceAll(/[^a-z0-9]/gi, '').length > 5 && - job.title.split(/\s/).length > 3 && - job.seasonNumber === 1 - ) { - sets.push(...(await scrapeAll(`"${job.title}"`, job.title, [], job.airDate))); - } - - if (!job.originalTitle) return sets; - - let sets2: ScrapeSearchResult[][] = []; - - sets2 = await scrapeAll( - `"${job.originalTitle}" s${padWithZero(job.seasonNumber)}`, - job.originalTitle, - [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], - job.airDate - ); - if (job.seasonName && job.seasonCode) { - sets2.push( - ...(await scrapeAll( - `"${job.originalTitle}" "${job.seasonName}" s${padWithZero(job.seasonCode)}`, - job.originalTitle, - [ - new RegExp(`[0123]?${job.seasonCode}[ex\\W_]`, 'i'), - ...job.seasonName.split(/\s/), - ], - job.airDate - )) - ); - } else if (job.seasonName && job.seasonName !== job.originalTitle) { - sets2.push( - ...(await scrapeAll( - `"${job.originalTitle}" "${job.seasonName}"`, - job.originalTitle, - [...job.seasonName.split(/\s/)], - job.airDate - )) +const getSearchResults = async (job: TvScrapeJob): Promise => { + let results: ScrapeSearchResult[][] = []; + for (let i = 0; i < job.titles.length; i++) { + const title = job.titles[i]; + results.push( + ...(await scrapeAll(`"${title}" s${padWithZero(job.seasonNumber)}`, title, job.airDate)) ); + if (job.seasonName && job.seasonCode) { + results.push( + ...(await scrapeAll( + `"${title}" ${job.seasonName} s${padWithZero(job.seasonCode)}`, + title, + job.airDate + )) + ); + } else if (job.seasonName && job.seasonName !== title) { + results.push(...(await scrapeAll(`"${title}" ${job.seasonName}`, title, job.airDate))); + } else if (job.seasonNumber === 1) { + results.push(...(await scrapeAll(`"${title}"`, title, job.airDate))); + } } - - return [...sets, ...sets2]; + return results; }; export async function scrapeTv( @@ -145,28 +64,34 @@ export async function scrapeTv( db: PlanetScaleCache, replaceOldScrape: boolean = false ): Promise { - console.log( - `๐Ÿ Scraping ${getSeasons(mdbData).length} season(s) of tv show: ${ - tmdbData.name - } (${imdbId})...` - ); const scrapeJobs: TvScrapeJob[] = []; - let cleanTitle = cleanSearchQuery(tmdbData.name); - let cleanOriginalTitle; - if (tmdbData.original_name && tmdbData.original_name !== tmdbData.name) { - cleanOriginalTitle = cleanSearchQuery(tmdbData.original_name); - } - for (const season of getSeasons(mdbData)) { + const { + cleanTitle, + originalTitle, + titleWithSymbols, + alternativeTitle, + cleanedTitle, + year, + seasons, + } = grabTvMetadata(imdbId, tmdbData, mdbData); + for (const season of seasons) { if (season.season_number === 0) continue; let seasonNumber = season.season_number; const { seasonName, seasonCode } = getSeasonNameAndCode(season); - const seasonYear = getSeasonYear(season); + const seasonYear = getSeasonYear(season) ?? year; const airDate = season.air_date ?? '2000-01-01'; + const titles = getAllPossibleTitles([ + cleanTitle, + originalTitle, + cleanedTitle, + titleWithSymbols, + alternativeTitle, + ]); + scrapeJobs.push({ - title: cleanTitle, - originalTitle: cleanOriginalTitle, + titles, seasonNumber, seasonName, seasonCode, @@ -180,28 +105,18 @@ export async function scrapeTv( let totalResultsCount = 0; for (const job of scrapeJobs) { let searchResults: ScrapeSearchResult[][] = []; - if (job.title.includes(' & ')) { - const searchResultsArr = await Promise.all([ - getSearchResults(job), - getSearchResults({ - ...job, - title: job.title.replace(' & ', ' and '), - originalTitle: job.originalTitle?.includes(' & ') - ? job.originalTitle.replace(' & ', ' and ') - : job.originalTitle, - }), - ]); - searchResults = searchResultsArr.flat(); - } else { - searchResults = await getSearchResults(job); - } + searchResults = await getSearchResults(job); let processedResults = flattenAndRemoveDuplicates(searchResults); + processedResults = filterByTvConditions( + processedResults, + cleanTitle, + year, + job.seasonYear, + job.seasonNumber, + job.seasonName, + job.seasonCode + ); if (processedResults.length) processedResults = sortByFileSize(processedResults); - if (!/movie/i.test(job.title)) { - processedResults = processedResults.filter((result) => { - return !/movie/i.test(result.title); - }); - } totalResultsCount += processedResults.length; await db.saveScrapedResults( @@ -210,7 +125,7 @@ export async function scrapeTv( replaceOldScrape ); console.log( - `๐Ÿ“บ Saved ${processedResults.length} results for ${job.title} season ${job.seasonNumber}` + `๐Ÿ“บ Saved ${processedResults.length} results for ${cleanTitle} season ${job.seasonNumber}` ); } diff --git a/src/utils/checks.ts b/src/utils/checks.ts index 8ea68ee..db8dc89 100644 --- a/src/utils/checks.ts +++ b/src/utils/checks.ts @@ -1,9 +1,20 @@ +import { ScrapeSearchResult } from '@/services/mediasearch'; +import { filenameParse } from '@ctrl/video-filename-parser'; import fs from 'fs'; +import { cleanSearchQuery, liteCleanSearchQuery } from './search'; -let wordSet: Set; +let dictionary: Set; +try { + let data = fs.readFileSync('./wordlist.txt', 'utf8'); + dictionary = new Set(data.toLowerCase().split('\n')); +} catch (err) { + console.error('error loading wordlist', err); +} + +let bannedWordSet: Set; try { let data = fs.readFileSync('./bannedwordlist.txt', 'utf8'); - wordSet = new Set(data.toLowerCase().split('\n')); + bannedWordSet = new Set(data.toLowerCase().split('\n')); } catch (err) { console.error('error loading banned wordlist', err); } @@ -12,50 +23,512 @@ export function naked(title: string): string { return title.toLowerCase().replace(/[^a-z0-9]/g, ''); } -export function matchesTitle(targetTitle: string, testTitle: string) { - const result = /^(?\w+)/i.exec(targetTitle); - if (result && result.groups) { - if (!new RegExp(`\\b${result.groups.firstWord}`, 'i').test(testTitle)) { +export function grabYears(str: string): string[] { + return (str.match(/\d{4}/g) ?? []).filter( + (n) => parseInt(n, 10) > 1900 && parseInt(n, 10) <= new Date().getFullYear() + ); +} + +export function grabSeasons(str: string): string[] { + return (str.match(/\d+/g) ?? []).filter((n) => parseInt(n, 10) > 0 && parseInt(n, 10) <= 100); +} + +export function hasYear(test: string, years: string[]) { + return ( + years.filter((year) => { + const intYear = parseInt(year); + return ( + test.includes(year) || + test.includes(`${intYear + 1}`) || + test.includes(`${intYear - 1}`) + ); + }).length > 0 + ); +} + +function removeDiacritics(str: string) { + return str.normalize('NFD').replace(/[\u0300-\u036f]/g, ''); +} + +function removeRepeats(str: string) { + return str.replace(/(.)\1+/g, '$1'); +} + +function flexEq(test: string, target: string, strict = false) { + if (strict) { + const movieTitle = filenameParse(test).title.toLowerCase(); + const tvTitle = filenameParse(test, true).title.toLowerCase(); + return ( + target === movieTitle || + removeRepeats(target) === removeRepeats(movieTitle) || + removeDiacritics(target) === removeDiacritics(movieTitle) || + target === tvTitle || + removeRepeats(target) === removeRepeats(tvTitle) || + removeDiacritics(target) === removeDiacritics(tvTitle) + ); + } + return ( + test.includes(target) || + removeRepeats(test).includes(removeRepeats(target)) || + removeDiacritics(test).includes(removeDiacritics(target)) + ); +} + +export function matchesTitle(target: string, year: string, test: string) { + target = target.toLowerCase(); + test = test.toLowerCase(); + const containsYear = hasYear(test, [year]); + + // if title doesn't contain any spaces, then we can do a simple match + if (!target.match(/\s/)) { + // if title is common and title matches perfectly, then we're good + if (countUncommonWords(target) === 0) { + return flexEq(test, target, true) || (flexEq(test, target) && containsYear); + } + // if title is uncommon single word, remove all non-alphanumeric characters + // note: may contain symbols, or just be only symbols + let targetTitle2 = naked(target); + let testTitle2 = naked(test); + const magicLength = 4; + if (targetTitle2.length >= magicLength && testTitle2.includes(targetTitle2)) { + return true; + } + return flexEq(test, target) && containsYear; + } + + // if title is alphanumeric with spaces, then we can do a simple match + if (target.match(/^[a-z0-9\s]+$/) !== null) { + // remove spaces + let targetTitle2 = target.replace(/\s/g, ''); + let testTitle2 = test.replace(/\s/g, ''); + const magicLength = 5; + if (targetTitle2.length >= magicLength && testTitle2.includes(targetTitle2)) { + return true; + } else if (flexEq(testTitle2, targetTitle2) && containsYear) { + return true; + } + } + // if title is alphanumeric with symbols and spaces + let targetTitle2 = target.replace(/\s/g, ''); + let testTitle2 = test.replace(/\s/g, ''); + let targetTitle3 = naked(targetTitle2); + let testTitle3 = naked(testTitle2); + const magicLength = 5; + if (targetTitle3.length >= magicLength && testTitle3.includes(targetTitle3)) { + return true; + } else if (targetTitle2.length >= magicLength && testTitle2.includes(targetTitle2)) { + return true; + } else if (flexEq(testTitle2, targetTitle2) && containsYear) { + return true; + } + + // last chance + const splits = target.split(/\s+/); + if (splits.length > 4) { + let target2 = target; + const actual = splits.filter((term) => { + let newTitle = target2.replace(term, ''); + if (newTitle !== target2) { + target2 = newTitle; + return true; + } + + newTitle = target2.replace(removeDiacritics(term), ''); + if (newTitle !== target2) { + target2 = newTitle; + return true; + } + + newTitle = target2.replace(removeRepeats(term), ''); + if (newTitle !== target2) { + target2 = newTitle; + return true; + } return false; + }).length; + if (actual + 1 >= splits.length) { + return true; } } - const nakedTitle = naked(targetTitle); - const nakedTest = naked(testTitle); - return nakedTest.includes(nakedTitle); + const mustHaveTerms: string[] = splits.filter((word) => !dictionary.has(word)); + return containsYear && includesMustHaveTerms(mustHaveTerms, test); } -export function includesMustHaveTerms(mustHaveTerms: (string | RegExp)[], testTitle: string) { - let actualCount = 0; - for (let i = 0; i < mustHaveTerms.length; i++) { - let term = mustHaveTerms[i]; - const bufTitle = testTitle.replace(term, ''); - if (bufTitle !== testTitle) { - actualCount++; +export function includesMustHaveTerms(mustHaveTerms: string[], testTitle: string) { + return mustHaveTerms.every((term) => { + let newTitle = testTitle.replace(term, ''); + if (newTitle !== testTitle) { + testTitle = newTitle; + return true; } - testTitle = bufTitle; - } - return actualCount >= mustHaveTerms.length; + + newTitle = testTitle.replace(removeDiacritics(term), ''); + if (newTitle !== testTitle) { + testTitle = newTitle; + return true; + } + + newTitle = testTitle.replace(removeRepeats(term), ''); + if (newTitle !== testTitle) { + testTitle = newTitle; + return true; + } + return false; + }); } export function hasNoBannedTerms(targetTitle: string, testTitle: string): boolean { - let processedTitle = testTitle - .toLowerCase() + let processedTitle = filenameParse(testTitle) + .title.toLowerCase() .split(/[^a-z0-9]+/) .filter((word: string) => word.length >= 3); return ( - processedTitle.filter((word: string) => !targetTitle.includes(word) && wordSet.has(word)) - .length === 0 + processedTitle.filter( + (word: string) => !targetTitle.includes(word) && bannedWordSet.has(word) + ).length === 0 ); } export function meetsTitleConditions( targetTitle: string, - mustHaveTerms: (string | RegExp)[], + year: string, testTitle: string ): boolean { - return ( - matchesTitle(targetTitle, testTitle) && - includesMustHaveTerms(mustHaveTerms, testTitle) && - hasNoBannedTerms(targetTitle, testTitle) + return matchesTitle(targetTitle, year, testTitle) && hasNoBannedTerms(targetTitle, testTitle); +} + +export function countUncommonWords(title: string) { + let processedTitle = title + .split(/\s+/) + .map((word: string) => + word.toLowerCase().replace(/'s/g, '').replace(/\s&\s/g, '').replace(/[\W]+/g, '') + ) + .filter((word: string) => word.length > 3); + return processedTitle.filter((word: string) => !dictionary.has(word)).length; +} + +export function grabMovieMetadata(imdbId: string, tmdbData: any, mdbData: any) { + const cleanTitle = cleanSearchQuery(tmdbData.title); + const liteCleantitle = liteCleanSearchQuery(tmdbData.title); + console.log( + `๐Ÿน Movie: ${cleanTitle} Y${ + mdbData.year ?? 'year' + } (${imdbId}) (uncommon: ${countUncommonWords(tmdbData.title)})` + ); + const year: string = + mdbData.year ?? mdbData.released?.substring(0, 4) ?? tmdbData.release_date?.substring(0, 4); + const airDate: string = mdbData.released ?? tmdbData.release_date ?? '2000-01-01'; + let originalTitle: string | undefined, cleanedTitle: string | undefined; + + const processedTitle = tmdbData.title + .split(' ') + .map((word: string) => word.replace(/[\W]+/g, '')) + .join(' ') + .trim() + .toLowerCase(); + + if ( + tmdbData.original_title && + tmdbData.original_title !== tmdbData.title && + mdbData.ratings?.length + ) { + originalTitle = tmdbData.original_title.toLowerCase(); + console.log( + '๐ŸŽฏ Found original title:', + originalTitle, + `(uncommon: ${countUncommonWords(originalTitle!)})` + ); + for (let rating of mdbData.ratings) { + if (rating.source === 'tomatoes' && rating.score > 0) { + if (!rating.url) continue; + let tomatoTitle = rating.url.split('/').pop(); + if (tomatoTitle.match(/^\d{6,}/)) continue; + tomatoTitle = tomatoTitle + .split('_') + .map((word: string) => word.replace(/[\W]+/g, '')) + .join(' ') + .trim() + .toLowerCase(); + if (tomatoTitle !== processedTitle) { + console.log( + '๐ŸŽฏ Found tomato title:', + tomatoTitle, + `(uncommon: ${countUncommonWords(tomatoTitle)})` + ); + cleanedTitle = tomatoTitle; + } + } + } + } + + let alternativeTitle: string | undefined; + if (mdbData.ratings?.length) { + for (let rating of mdbData.ratings) { + if (rating.source === 'metacritic' && rating.score > 0) { + if (!rating.url) continue; + let metacriticTitle = rating.url.split('/').pop(); + if (metacriticTitle.startsWith('-')) continue; + metacriticTitle = metacriticTitle + .split('-') + .map((word: string) => word.replace(/[\W]+/g, '')) + .join(' ') + .trim() + .toLowerCase(); + if (metacriticTitle !== processedTitle && metacriticTitle !== cleanedTitle) { + console.log( + '๐ŸŽฏ Found metacritic title:', + metacriticTitle, + `(uncommon: ${countUncommonWords(metacriticTitle)})` + ); + alternativeTitle = metacriticTitle; + } + } + } + } + if (cleanTitle !== liteCleantitle) { + console.log('๐ŸŽฏ Title with symbols:', liteCleantitle); + } + + return { + cleanTitle, + originalTitle, + titleWithSymbols: cleanTitle !== liteCleantitle ? liteCleantitle : undefined, + alternativeTitle, + cleanedTitle, + year, + airDate, + }; +} + +const getSeasons = (mdbData: any) => + mdbData.seasons.length + ? mdbData.seasons + : [{ name: 'Season 1', season_number: 1, episode_count: 0 }]; + +export function grabTvMetadata(imdbId: string, tmdbData: any, mdbData: any) { + const cleanTitle = cleanSearchQuery(tmdbData.name); + const liteCleantitle = liteCleanSearchQuery(tmdbData.name); + console.log( + `๐Ÿ ${getSeasons(mdbData).length} season(s) of tv show: ${tmdbData.name} (${imdbId})...` ); + const year: string = + mdbData.year ?? mdbData.released?.substring(0, 4) ?? tmdbData.release_date?.substring(0, 4); + let originalTitle: string | undefined, cleanedTitle: string | undefined; + + const processedTitle = tmdbData.name + .split(' ') + .map((word: string) => word.replace(/[\W]+/g, '')) + .join(' ') + .trim() + .toLowerCase(); + + if ( + tmdbData.original_name && + tmdbData.original_name !== tmdbData.name && + mdbData.ratings?.length + ) { + originalTitle = tmdbData.original_name.toLowerCase(); + console.log( + '๐ŸŽฏ Found original title:', + originalTitle, + `(uncommon: ${countUncommonWords(originalTitle!)})` + ); + for (let rating of mdbData.ratings) { + if (rating.source === 'tomatoes' && rating.score > 0) { + if (!rating.url) continue; + let tomatoTitle = rating.url.split('/').pop(); + if (tomatoTitle.match(/^\d{6,}/)) continue; + tomatoTitle = tomatoTitle + .split('_') + .map((word: string) => word.replace(/[\W]+/g, '')) + .join(' ') + .trim() + .toLowerCase(); + if (tomatoTitle !== processedTitle) { + console.log( + '๐ŸŽฏ Found tomato title:', + tomatoTitle, + `(uncommon: ${countUncommonWords(tomatoTitle)})` + ); + cleanedTitle = tomatoTitle; + } + } + } + } + + let alternativeTitle: string | undefined; + if (mdbData.ratings?.length) { + for (let rating of mdbData.ratings) { + if (rating.source === 'metacritic' && rating.score > 0) { + if (!rating.url) continue; + let metacriticTitle = rating.url.split('/').pop(); + if (metacriticTitle.startsWith('-')) continue; + metacriticTitle = metacriticTitle + .split('-') + .map((word: string) => word.replace(/[\W]+/g, '')) + .join(' ') + .trim() + .toLowerCase(); + if (metacriticTitle !== processedTitle && metacriticTitle !== cleanedTitle) { + console.log( + '๐ŸŽฏ Found metacritic title:', + metacriticTitle, + `(uncommon: ${countUncommonWords(metacriticTitle)})` + ); + alternativeTitle = metacriticTitle; + } + } + } + } + if (cleanTitle !== liteCleantitle) { + console.log('๐ŸŽฏ Title with symbols:', liteCleantitle); + } + + return { + cleanTitle, + originalTitle, + titleWithSymbols: cleanTitle !== liteCleantitle ? liteCleantitle : undefined, + alternativeTitle, + cleanedTitle, + year, + seasons: getSeasons(mdbData), + }; +} + +export function getAllPossibleTitles(titles: (string | undefined)[]) { + const ret: string[] = []; + titles.forEach((title) => { + if (title) { + ret.push(title); + if (title.match(/\b&\b/)) { + ret.push(title.replace(/\b&\b/g, 'and')); + } + if (title.match(/\b\+\b/)) { + ret.push(title.replace(/\b\+\b/g, 'and')); + } + if (title.match(/\b@\b/)) { + ret.push(title.replace(/\b@\b/g, 'at')); + } + } + }); + return ret; +} + +export function filterByMovieConditions(title: string, year: string, items: ScrapeSearchResult[]) { + return items + .filter((result) => !/s\d\de\d\d/i.test(result.title)) + .filter((result) => result.fileSize < 200000 && result.fileSize > 500) + .filter((result) => { + const yearsFromTitle = grabYears(title); + const yearsFromFile = grabYears(result.title).filter( + (y) => !yearsFromTitle.includes(y) + ); + return ( + (yearsFromFile.length > 0 && hasYear(result.title, [year])) || + yearsFromFile.length === 0 + ); + }); +} + +export function filterByTvConditions( + items: ScrapeSearchResult[], + title: string, + firstYear: string, + seasonYear: string | undefined, + seasonNumber: number, + seasonName: string | undefined, + seasonCode: number | undefined +) { + return items + .filter((result) => result.fileSize > 100) + .filter((result) => { + const yearsFromTitle = grabYears(title); + const yearsFromFile = grabYears(result.title).filter( + (y) => !yearsFromTitle.includes(y) + ); + const years = [firstYear, seasonYear].filter((y) => y !== undefined) as string[]; + return ( + (yearsFromFile.length > 0 && hasYear(result.title, years)) || + yearsFromFile.length === 0 + ); + }) + .filter((result) => { + // drop 3xRus or 1xEng or AC3 + let regex = + /\b(\d)x([a-z]+)\b|\bac3\b|\b5\.1|\bmp4|\bav1|\br[1-6]|\bdvd\-?\d|\bp2p|\bbd\d+/gi; + let resultTitle = result.title.replace(regex, ''); + + if (resultTitle.match(/\bs\d\de?/i)) { + const season = parseInt(resultTitle.match(/s(\d\d)e?/i)![1]); + return season === seasonNumber || season === seasonCode; + } + + const seasons = grabSeasons(resultTitle); + if ( + seasonName && + seasonCode && + flexEq(naked(seasonName), naked(result.title)) && + seasons.filter((s) => parseInt(s) === seasonCode).length > 0 + ) { + // console.log( + // '๐ŸŽฏ Found season name and code in title:', + // seasonName, + // seasonCode, + // result.title, + // seasons + // ); + return true; + } + if (seasonName && seasonName !== title && flexEq(resultTitle, seasonName)) { + // console.log( + // '๐ŸŽฏ Found season name only in title:', + // seasonName, + // result.title, + // seasons + // ); + return true; + } + if ( + seasons.filter((s) => parseInt(s) === seasonNumber || parseInt(s) === seasonCode) + .length > 0 + ) { + // console.log( + // '๐ŸŽฏ Found season number only in title:', + // seasonNumber, + // seasonCode, + // result.title, + // seasons + // ); + return true; + } + // it can contain no numbers if it's still season 1 (or only season 1) + // console.log('๐ŸŽฏ Season number 1:', result.title, seasons); + return seasonNumber === 1 && grabSeasons(resultTitle).length === 0; + }); +} + +export function padWithZero(num: number) { + if (num < 10) { + return '0' + num; + } else { + return num.toString(); + } } + +export const getSeasonNameAndCode = (season: any) => { + let seasonName, seasonCode; + let parts = season.name.split(/\s+/); + for (let i = parts.length - 1; i >= 0; i--) { + let match = parts[i].match(/\(?(\d+)\)?$/); + if (match) { + seasonCode = parseInt(match[1]); + parts[i] = ''; + break; + } + } + seasonName = cleanSearchQuery(parts.join(' ').trim()); + if (/series|season/.test(seasonName)) seasonName = undefined; + return { seasonName, seasonCode }; +}; + +export const getSeasonYear = (season: any) => season.air_date?.substring(0, 4); diff --git a/src/utils/search.ts b/src/utils/search.ts index 6b01699..b0ceddc 100644 --- a/src/utils/search.ts +++ b/src/utils/search.ts @@ -13,3 +13,12 @@ export const cleanSearchQuery = (search: string): string => { .replace(/\s+/g, ' ') // replace multiple spaces with a single space .trim(); }; + +export const liteCleanSearchQuery = (search: string): string => { + return search + .split(/[\s:;"',]/) // split the search query into an array of elements + .filter((e) => e !== '') // filter out any empty elements + .map((e) => e.toLowerCase()) // convert each element to lowercase + .join(' ') + .trim(); +}; diff --git a/wordlist.txt b/wordlist.txt index 15995c9..a12f613 100644 --- a/wordlist.txt +++ b/wordlist.txt @@ -12,6 +12,7 @@ aardvarks aardwolf aardwolves aargh +aaron aarrgh aarrghh aas @@ -1533,6 +1534,7 @@ adages adagial adagio adagios +adam adamance adamances adamancies @@ -1541,6 +1543,7 @@ adamant adamantine adamantly adamants +adams adamsite adamsites adapt @@ -3723,6 +3726,7 @@ alleluia alleluias allemande allemandes +allen allergen allergenic allergenicities @@ -4161,6 +4165,7 @@ alumroots alums alunite alunites +alvarez alveolar alveolarly alveolars @@ -4191,6 +4196,7 @@ amalgamations amalgamator amalgamators amalgams +amanda amandine amanita amanitas @@ -4803,6 +4809,7 @@ amusingly amusingness amusingnesses amusive +amy amygdala amygdalae amygdale @@ -5159,6 +5166,7 @@ andante andantes andantino andantinos +anderson andesite andesites andesitic @@ -5172,6 +5180,7 @@ andouillette andouillettes andradite andradites +andrew androcentric androecia androecium @@ -5297,6 +5306,7 @@ angaries angary angas angel +angela angeled angelfish angelfishes @@ -5889,6 +5899,7 @@ anthologizers anthologizes anthologizing anthology +anthony anthophilous anthophyllite anthophyllites @@ -8582,6 +8593,7 @@ ashlered ashlering ashlers ashless +ashley ashman ashmen ashore @@ -11476,6 +11488,7 @@ barathea baratheas barb barbal +barbara barbarian barbarianism barbarianisms @@ -13443,6 +13456,7 @@ benne bennes bennet bennets +bennett benni bennies bennis @@ -13891,6 +13905,7 @@ betters betting bettor bettors +betty between betweenbrain betweenbrains @@ -17536,6 +17551,7 @@ brandish brandished brandishes brandishing +brandon brands brandy brandying @@ -17864,6 +17880,7 @@ bregmate bremsstrahlung bremsstrahlungs bren +brenda brens brent brents @@ -17897,6 +17914,7 @@ brewings brewis brewises brews +brian briar briard briards @@ -20557,6 +20575,7 @@ campanology campanula campanulas campanulate +campbell campcraft campcrafts camped @@ -22150,6 +22169,7 @@ castigation castigations castigator castigators +castillo casting castings castle @@ -23793,6 +23813,7 @@ charlatanisms charlatanries charlatanry charlatans +charles charley charleys charlie @@ -23964,6 +23985,7 @@ chauvinist chauvinistic chauvinistically chauvinists +chavez chaw chawbacon chawbacons @@ -25148,6 +25170,9 @@ christiania christianias christie christies +christina +christine +christopher christy chroma chromaffin @@ -26153,6 +26178,7 @@ clarioning clarions clarities clarity +clark clarkia clarkias claro @@ -34589,6 +34615,7 @@ crutches crutching crux cruxes +cruz cruzado cruzadoes cruzados @@ -35806,6 +35833,7 @@ cynicisms cynics cynosure cynosures +cynthia cypher cyphered cyphering @@ -36318,6 +36346,7 @@ danglers dangles dangling dangs +daniel danio danios danish @@ -36558,7 +36587,9 @@ davening davenport davenports davens +david davies +davis davit davits davy @@ -36891,6 +36922,7 @@ deboner deboners debones deboning +deborah debouch debouche debouched @@ -36898,6 +36930,7 @@ debouches debouching debouchment debouchments +debra debride debrided debridement @@ -38870,6 +38903,7 @@ denizening denizens denned denning +dennis denominal denominate denominated @@ -40730,6 +40764,7 @@ diatribe diatribes diatron diatrons +diaz diazepam diazepams diazin @@ -44117,6 +44152,7 @@ dominos doms don dona +donald donas donate donated @@ -46725,6 +46761,8 @@ edulcorates edulcorating edutainment edutainments +edward +edwards eel eelgrass eelgrasses @@ -47497,6 +47535,7 @@ elitist elitists elixir elixirs +elizabeth elk elkhound elkhounds @@ -48003,6 +48042,7 @@ emigration emigrations emigre emigres +emily eminence eminences eminencies @@ -50386,6 +50426,7 @@ ergotisms ergotized ergots ergs +eric erica ericaceous ericas @@ -51418,6 +51459,7 @@ evanish evanished evanishes evanishing +evans evaporate evaporated evaporates @@ -56726,6 +56768,7 @@ florals floras florence florences +flores florescence florescences florescent @@ -60597,6 +60640,7 @@ garboards garboil garboils garbs +garcia garcon garcons gardant @@ -60719,6 +60763,7 @@ garth garths garvey garveys +gary gas gasalier gasaliers @@ -61552,6 +61597,7 @@ geoponic geopressured geoprobe geoprobes +george georgette georgettes georgic @@ -63184,6 +63230,7 @@ gomerel gomerels gomeril gomerils +gomez gomuti gomutis gonad @@ -63253,6 +63300,8 @@ gonopores gonorrhea gonorrheal gonorrheas +gonzales +gonzalez gonzo goo goober @@ -64279,6 +64328,7 @@ gregariously gregariousness gregariousnesses grego +gregory gregos greige greiges @@ -65333,6 +65383,7 @@ gusty gut gutbucket gutbuckets +gutierrez gutless gutlessness gutlessnesses @@ -66709,6 +66760,7 @@ harried harrier harriers harries +harris harrow harrowed harrower @@ -68182,6 +68234,7 @@ hermitry hermits herms hern +hernandez hernia herniae hernial @@ -70366,6 +70419,7 @@ hoverers hovering hovers how +howard howbeit howdah howdahs @@ -70474,6 +70528,7 @@ hugged hugger huggers hugging +hughes hugs huh huic @@ -78906,11 +78961,13 @@ jackscrew jackscrews jacksmelt jacksmelts +jackson jackstay jackstays jackstraw jackstraws jacky +jacob jacobin jacobins jacobus @@ -79019,6 +79076,7 @@ jambing jamboree jamborees jambs +james jammed jammer jammers @@ -79119,6 +79177,7 @@ jasmin jasmine jasmines jasmins +jason jasper jaspers jasperware @@ -79242,6 +79301,7 @@ jees jeez jefe jefes +jeffrey jehad jehads jehu @@ -79287,6 +79347,7 @@ jemmying jennet jennets jennies +jennifer jenny jeon jeopard @@ -79349,6 +79410,7 @@ jessant jesse jessed jesses +jessica jessing jest jested @@ -79486,6 +79548,7 @@ jilter jilters jilting jilts +jimenez jiminy jimjams jimmied @@ -79650,6 +79713,7 @@ johnny johnnycake johnnycakes johns +johnson johnsongrass johnsongrasses join @@ -79731,6 +79795,7 @@ joltily jolting jolts jolty +jonathan jones joneses jongleur @@ -79743,6 +79808,7 @@ jordan jordans jorum jorums +jose joseph josephs josh @@ -79751,6 +79817,7 @@ josher joshers joshes joshing +joshua joss josses jostle @@ -80003,6 +80070,7 @@ jukes juking julep juleps +julie julienne julienned juliennes @@ -80155,6 +80223,7 @@ justifiers justifies justify justifying +justin justing justle justled @@ -80387,6 +80456,7 @@ karateist karateists karates karats +karen karma karmas karmic @@ -80453,6 +80523,8 @@ katcina katcinas katharses katharsis +katherine +kathleen kathodal kathode kathodes @@ -80642,6 +80714,7 @@ kenneling kennelled kennelling kennels +kenneth kenning kennings keno @@ -80783,6 +80856,7 @@ kevel kevels kevil kevils +kevin kex kexes key @@ -81083,8 +81157,10 @@ kilting kiltings kilts kilty +kim kimberlite kimberlites +kimberly kimchee kimchees kimchi @@ -81887,6 +81963,7 @@ kybosh kyboshed kyboshes kyboshing +kyle kylikes kylix kymogram @@ -82786,6 +82863,7 @@ larruper larrupers larruping larrups +larry lars larum larums @@ -84775,6 +84853,7 @@ linchpin linchpins lincomycin lincomycins +linda lindane lindanes linden @@ -85089,6 +85168,7 @@ liripipes lirot liroth lis +lisa lisente lisle lisles @@ -86004,6 +86084,7 @@ loped loper lopers lopes +lopez lophophore lophophores loping @@ -88411,6 +88492,7 @@ maremma maremme marengo mares +margaret margaric margarin margarine @@ -88689,6 +88771,7 @@ martians martin martinet martinets +martinez marting martingale martingales @@ -88729,6 +88812,7 @@ marvelousness marvelousnesses marvels marvy +mary maryjane maryjanes marzipan @@ -89096,6 +89180,7 @@ mattering matters mattery mattes +matthew mattin matting mattings @@ -89831,6 +89916,7 @@ melisma melismas melismata melismatic +melissa mell melled mellific @@ -90029,6 +90115,7 @@ mendigo mendigos mending mendings +mendoza mends menfolk menfolks @@ -90978,8 +91065,10 @@ micellar micelle micelles micells +michael miche miched +michelle miches miching mick @@ -93477,6 +93566,7 @@ misyoke misyoked misyokes misyoking +mitchell mite miter mitered @@ -94592,6 +94682,7 @@ moorage moorages moorcock moorcocks +moore moored moorfowl moorfowls @@ -96938,6 +97029,7 @@ natatoriums natatory natch nates +nathan natheless nathless nation @@ -98042,6 +98134,7 @@ nexus nexuses ngultrum ngultrums +nguyen ngwee niacin niacinamide @@ -98078,6 +98171,7 @@ niche niched niches niching +nicholas nick nicked nickel @@ -98109,6 +98203,7 @@ nicknames nicknaming nicks nicol +nicole nicols nicotiana nicotianas @@ -103239,6 +103334,7 @@ orthotics orthotist orthotists orthotropous +ortiz ortolan ortolans orts @@ -107455,6 +107551,7 @@ palynologist palynologists palynology pam +pamela pampa pampas pampean @@ -108965,6 +109062,7 @@ patriarchates patriarchies patriarchs patriarchy +patricia patrician patricians patriciate @@ -108972,6 +109070,7 @@ patriciates patricidal patricide patricides +patrick patrilineal patrimonial patrimonies @@ -109051,6 +109150,7 @@ patzers paucities paucity paughty +paul pauldron pauldrons paulin @@ -110257,6 +110357,7 @@ pereopod pereopods perestroika perestroikas +perez perfect perfecta perfectas @@ -110982,6 +111083,7 @@ peter petered petering peters +peterson petiolar petiolate petiole @@ -111427,6 +111529,7 @@ philistine philistines philistinism philistinisms +phillips phillumenist phillumenists philodendra @@ -122301,6 +122404,7 @@ racewalking racewalkings raceway raceways +rachel rachet rachets rachial @@ -122831,6 +122935,7 @@ ramilie ramilies ramillie ramillies +ramirez ramjet ramjets rammed @@ -122841,6 +122946,7 @@ rammiest ramming rammish rammy +ramos ramose ramosely ramosities @@ -123974,6 +124080,7 @@ rebatos rebbe rebbes rebec +rebecca rebeck rebecks rebecs @@ -130142,6 +130249,7 @@ rewrote rewrought rex rexes +reyes reynard reynards rezone @@ -130450,6 +130558,8 @@ ricercars ricers rices rich +richard +richardson richen richened richening @@ -130952,6 +131062,7 @@ rive rived riven river +rivera riverbank riverbanks riverbed @@ -131065,10 +131176,13 @@ robbing robbins robe robed +robert +roberts robes robin robing robins +robinson roble robles roborant @@ -131183,6 +131297,7 @@ rodman rodmen rodomontade rodomontades +rodriguez rods rodsman rodsmen @@ -131324,6 +131439,7 @@ romping rompish romps roms +ronald rondeau rondeaux rondel @@ -132076,6 +132192,7 @@ ruinously ruinousness ruinousnesses ruins +ruiz rulable rule ruled @@ -132357,6 +132474,7 @@ ruttishness ruttishnesses rutty rya +ryan ryas rye ryegrass @@ -133070,6 +133188,7 @@ salvoing salvor salvors salvos +samantha samara samaras samaritan @@ -133136,6 +133255,7 @@ samsara samsaras samshu samshus +samuel samurai samurais sanative @@ -133144,6 +133264,7 @@ sanatorium sanatoriums sanbenito sanbenitos +sanchez sancta sanctification sanctifications @@ -133251,6 +133372,7 @@ sandpiper sandpipers sandpit sandpits +sandra sands sandshoe sandshoes @@ -133489,6 +133611,7 @@ saraband sarabande sarabandes sarabands +sarah saran sarans sarape @@ -134822,6 +134945,7 @@ scotopia scotopias scotopic scots +scott scottie scotties scoundrel @@ -137557,6 +137681,7 @@ sharkskins sharn sharns sharny +sharon sharp sharped sharpen @@ -145644,8 +145769,10 @@ stepfamilies stepfamily stepfather stepfathers +stephanie stephanotis stephanotises +stephen stepladder stepladders steplike @@ -145816,6 +145943,7 @@ stevedore stevedored stevedores stevedoring +steven stew steward stewarded @@ -145825,6 +145953,7 @@ stewarding stewards stewardship stewardships +stewart stewbum stewbums stewed @@ -150161,6 +150290,7 @@ survivor survivors survivorship survivorships +susan susceptibilities susceptibility susceptible @@ -152507,6 +152637,7 @@ taxpaying taxus taxwise taxying +taylor tazza tazzas tazze @@ -154562,6 +154693,8 @@ tholes tholing tholoi tholos +thomas +thompson thong thonged thongs @@ -156434,6 +156567,7 @@ torrent torrential torrentially torrents +torres torrid torrider torridest @@ -159914,6 +160048,7 @@ tyes tying tyke tykes +tyler tylosin tylosins tymbal @@ -165758,6 +165893,7 @@ vasotocins vasotomies vasotomy vasovagal +vasquez vassal vassalage vassalages @@ -168786,6 +168922,7 @@ watery waterzooi waterzoois wats +watson watt wattage wattages @@ -170229,6 +170366,8 @@ willful willfully willfulness willfulnesses +william +williams willied willies willing @@ -170262,6 +170401,7 @@ willyart willying willywaw willywaws +wilson wilt wilted wilting @@ -172297,6 +172437,7 @@ zabajone zabajones zacaton zacatons +zachary zaddick zaddik zaddikim From fb12441a9a145b1972210492f90fee37dac0cd5c Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 8 Oct 2023 04:01:43 +0200 Subject: [PATCH 154/272] small fix --- src/services/tvCleaner.ts | 5 +++- src/utils/checks.ts | 54 +++++++++++++++++++++++---------------- 2 files changed, 36 insertions(+), 23 deletions(-) diff --git a/src/services/tvCleaner.ts b/src/services/tvCleaner.ts index 612d6ae..6980710 100644 --- a/src/services/tvCleaner.ts +++ b/src/services/tvCleaner.ts @@ -162,7 +162,6 @@ export async function cleanTvScrapes( }); let processedResults = flattenAndRemoveDuplicates(searchResults); processedResults = sortByFileSize(processedResults); - if (processedResults.length < scrapesCount) { await db.saveScrapedResults( `tv:${imdbId}:${seasonNumber}`, @@ -181,6 +180,10 @@ export async function cleanTvScrapes( processedResults.length } results for ${cleanTitle} s${padWithZero(seasonNumber)}` ); + } else { + console.log( + `๐Ÿ“บ No need to remove any results for ${cleanTitle} s${padWithZero(seasonNumber)}` + ); } } } diff --git a/src/utils/checks.ts b/src/utils/checks.ts index db8dc89..b0db4f5 100644 --- a/src/utils/checks.ts +++ b/src/utils/checks.ts @@ -81,15 +81,18 @@ export function matchesTitle(target: string, year: string, test: string) { // if title doesn't contain any spaces, then we can do a simple match if (!target.match(/\s/)) { - // if title is common and title matches perfectly, then we're good + // if title is common and title matches perfectly or not perfect but matches year, then we're good if (countUncommonWords(target) === 0) { return flexEq(test, target, true) || (flexEq(test, target) && containsYear); } // if title is uncommon single word, remove all non-alphanumeric characters - // note: may contain symbols, or just be only symbols + const magicLength = 4; + if (target.length >= magicLength && test.includes(target)) { + return true; + } + // if title is uncommon single word, remove all non-alphanumeric characters let targetTitle2 = naked(target); let testTitle2 = naked(test); - const magicLength = 4; if (targetTitle2.length >= magicLength && testTitle2.includes(targetTitle2)) { return true; } @@ -102,6 +105,7 @@ export function matchesTitle(target: string, year: string, test: string) { let targetTitle2 = target.replace(/\s/g, ''); let testTitle2 = test.replace(/\s/g, ''); const magicLength = 5; + // console.log('๐ŸŽฏ Comparison:', targetTitle2, testTitle2, targetTitle2.length >= magicLength && testTitle2.includes(targetTitle2), flexEq(testTitle2, targetTitle2) && containsYear); if (targetTitle2.length >= magicLength && testTitle2.includes(targetTitle2)) { return true; } else if (flexEq(testTitle2, targetTitle2) && containsYear) { @@ -125,32 +129,34 @@ export function matchesTitle(target: string, year: string, test: string) { // last chance const splits = target.split(/\s+/); if (splits.length > 4) { - let target2 = target; + let test2 = test; const actual = splits.filter((term) => { - let newTitle = target2.replace(term, ''); - if (newTitle !== target2) { - target2 = newTitle; + let newTest = test2.replace(term, ''); + if (newTest !== test2) { + test2 = newTest; return true; } - newTitle = target2.replace(removeDiacritics(term), ''); - if (newTitle !== target2) { - target2 = newTitle; + newTest = test2.replace(removeDiacritics(term), ''); + if (newTest !== test2) { + test2 = newTest; return true; } - newTitle = target2.replace(removeRepeats(term), ''); - if (newTitle !== target2) { - target2 = newTitle; + newTest = test2.replace(removeRepeats(term), ''); + if (newTest !== test2) { + test2 = newTest; return true; } return false; - }).length; - if (actual + 1 >= splits.length) { + }); + // console.log('๐ŸŽฏ Comparison3:', actual, splits.length); + if (actual.length + 1 >= splits.length) { return true; } } - const mustHaveTerms: string[] = splits.filter((word) => !dictionary.has(word)); + const mustHaveTerms: string[] = splits; + // console.log('๐ŸŽฏ Comparison2:', mustHaveTerms, test, containsYear); return containsYear && includesMustHaveTerms(mustHaveTerms, test); } @@ -194,6 +200,10 @@ export function meetsTitleConditions( year: string, testTitle: string ): boolean { + // console.log('๐ŸŽฏ Target title:', targetTitle); + // console.log('๐ŸŽฏ Test title:', testTitle); + // console.log('๐ŸŽฏ Year:', year); + // console.log('๐ŸŽฏ matchesTitle:', matchesTitle(targetTitle, year, testTitle)); return matchesTitle(targetTitle, year, testTitle) && hasNoBannedTerms(targetTitle, testTitle); } @@ -400,14 +410,14 @@ export function getAllPossibleTitles(titles: (string | undefined)[]) { titles.forEach((title) => { if (title) { ret.push(title); - if (title.match(/\b&\b/)) { - ret.push(title.replace(/\b&\b/g, 'and')); + if (title.match(/[a-z\s]&/i)) { + ret.push(title.replace(/&/g, ' and ')); } - if (title.match(/\b\+\b/)) { - ret.push(title.replace(/\b\+\b/g, 'and')); + if (title.match(/[a-z\s]\+/i)) { + ret.push(title.replace(/\+/g, ' and ')); } - if (title.match(/\b@\b/)) { - ret.push(title.replace(/\b@\b/g, 'at')); + if (title.match(/[a-z\s]@/i)) { + ret.push(title.replace(/@/g, ' at ')); } } }); From 17326da5184805a6799f72a2878deda4c8b45eed Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 8 Oct 2023 04:33:09 +0200 Subject: [PATCH 155/272] small fix 2 --- src/services/movieCleaner.ts | 2 +- src/services/tvCleaner.ts | 2 +- src/utils/checks.ts | 12 ++++++++++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/services/movieCleaner.ts b/src/services/movieCleaner.ts index c12ef3a..f6efc58 100644 --- a/src/services/movieCleaner.ts +++ b/src/services/movieCleaner.ts @@ -132,7 +132,7 @@ export async function cleanMovieScrapes( processedResults = sortByFileSize(processedResults); if (processedResults.length < scrapesCount) { - await db.saveScrapedResults(`movie:${imdbId}`, processedResults, false, true); + await db.saveScrapedResults(`movie:${imdbId}`, processedResults, true, true); await db.markAsDone(imdbId); console.log( scrapes diff --git a/src/services/tvCleaner.ts b/src/services/tvCleaner.ts index 6980710..150e764 100644 --- a/src/services/tvCleaner.ts +++ b/src/services/tvCleaner.ts @@ -166,7 +166,7 @@ export async function cleanTvScrapes( await db.saveScrapedResults( `tv:${imdbId}:${seasonNumber}`, processedResults, - false, + true, true ); await db.markAsDone(imdbId); diff --git a/src/utils/checks.ts b/src/utils/checks.ts index b0db4f5..c06d47e 100644 --- a/src/utils/checks.ts +++ b/src/utils/checks.ts @@ -155,9 +155,17 @@ export function matchesTitle(target: string, year: string, test: string) { return true; } } - const mustHaveTerms: string[] = splits; + const uncommonTerms: string[] = splits.filter((s) => !dictionary.has(s)); + const commonTerms: string[] = splits.filter((s) => dictionary.has(s)); + if ( + (uncommonTerms.join('').length >= commonTerms.join('').length || + uncommonTerms.length > 1) && + includesMustHaveTerms(uncommonTerms, test) + ) { + return true; + } // console.log('๐ŸŽฏ Comparison2:', mustHaveTerms, test, containsYear); - return containsYear && includesMustHaveTerms(mustHaveTerms, test); + return containsYear && includesMustHaveTerms(splits, test); } export function includesMustHaveTerms(mustHaveTerms: string[], testTitle: string) { From 22141c1c3f79cb39347453f1fd9c8565a3c6c2d3 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 8 Oct 2023 13:22:18 +0200 Subject: [PATCH 156/272] clean on scrape --- src/pages/api/moviecleaner.ts | 4 ++-- src/pages/api/tvcleaner.ts | 4 ++-- src/services/scrapeJobs.ts | 4 ++++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/pages/api/moviecleaner.ts b/src/pages/api/moviecleaner.ts index 4d22245..8dc9a1f 100644 --- a/src/pages/api/moviecleaner.ts +++ b/src/pages/api/moviecleaner.ts @@ -6,7 +6,7 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword } = req.query; + const { scrapePassword, id } = req.query; if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { res.status(403).json({ status: 'error', @@ -15,7 +15,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< return; } - let imdbIds = await db.getAllImdbIds('movie'); + let imdbIds = !!id ? [id as string] : await db.getAllImdbIds('movie'); if (!imdbIds) { console.log( '[moviecleaner] There must be something wrong with the database, waiting 60 seconds' diff --git a/src/pages/api/tvcleaner.ts b/src/pages/api/tvcleaner.ts index a4dbd35..84af6ac 100644 --- a/src/pages/api/tvcleaner.ts +++ b/src/pages/api/tvcleaner.ts @@ -6,7 +6,7 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword } = req.query; + const { scrapePassword, id } = req.query; if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { res.status(403).json({ status: 'error', @@ -15,7 +15,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< return; } - let imdbIds = await db.getAllImdbIds('tv'); + let imdbIds = !!id ? [id as string] : await db.getAllImdbIds('tv'); if (!imdbIds) { console.log( '[moviecleaner] There must be something wrong with the database, waiting 60 seconds' diff --git a/src/services/scrapeJobs.ts b/src/services/scrapeJobs.ts index d02ce70..c178bee 100644 --- a/src/services/scrapeJobs.ts +++ b/src/services/scrapeJobs.ts @@ -1,6 +1,8 @@ import axios from 'axios'; +import { cleanMovieScrapes } from './movieCleaner'; import { scrapeMovies } from './movieScraper'; import { PlanetScaleCache } from './planetscale'; +import { cleanTvScrapes } from './tvCleaner'; import { scrapeTv } from './tvScraper'; const tmdbKey = process.env.TMDB_KEY; @@ -46,6 +48,7 @@ export async function generateScrapeJobs(imdbId: string, replaceOldScrape: boole try { const tmdbId = mdbInfo.data.tmdbid ?? tmdbSearch.data.movie_results[0]?.id; const tmdbInfo = await axios.get(getTmdbMovieInfo(tmdbId)); + if (!replaceOldScrape) await cleanMovieScrapes(imdbId, tmdbInfo.data, mdbInfo.data, db); await scrapeMovies(imdbId, tmdbInfo.data, mdbInfo.data, db, replaceOldScrape); return; } catch (error: any) { @@ -68,6 +71,7 @@ export async function generateScrapeJobs(imdbId: string, replaceOldScrape: boole try { const tmdbId = mdbInfo.data.tmdbid ?? tmdbSearch.data.tv_results[0]?.id; const tmdbInfo = await axios.get(getTmdbTvInfo(tmdbId)); + if (!replaceOldScrape) await cleanTvScrapes(imdbId, tmdbInfo.data, mdbInfo.data, db); await scrapeTv(imdbId, tmdbInfo.data, mdbInfo.data, db, replaceOldScrape); return; } catch (error: any) { From b2c9e2ee441cecd8fa97854df56cc9c02a0fc058 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Fri, 20 Oct 2023 14:11:14 +0200 Subject: [PATCH 157/272] 3.8.1 (#87) * clean on scrape * rework slow definition * Add help texts * Version bump --- .gitignore | 2 + package-lock.json | 1433 +++++++++++++++++++++++++++------ package.json | 8 +- src/pages/api/moviecleaner.ts | 4 +- src/pages/api/tvcleaner.ts | 4 +- src/pages/index.tsx | 2 +- src/pages/library.tsx | 61 +- src/services/realDebrid.ts | 1 + src/services/scrapeJobs.ts | 4 + src/utils/search.test.ts | 26 + src/utils/search.ts | 7 + 11 files changed, 1289 insertions(+), 263 deletions(-) create mode 100644 src/utils/search.test.ts diff --git a/.gitignore b/.gitignore index d713860..41ad2e9 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,5 @@ src/utils/parser.ts tmp/ temp/ + +pscale_dump_dmm_main/ diff --git a/package-lock.json b/package-lock.json index b88b525..d212652 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "3.8.0", + "version": "3.8.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "3.8.0", + "version": "3.8.1", "dependencies": { "@ctrl/video-filename-parser": "^5.0.0", "@octokit/rest": "^19.0.7", @@ -47,7 +47,8 @@ "prisma": "^5.2.0", "tailwindcss": "^3.2.7", "ts-node": "10.7.0", - "typescript": "^5.2.2" + "typescript": "^5.2.2", + "vitest": "^0.34.6" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -72,9 +73,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.23.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.1.tgz", - "integrity": "sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", + "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -105,13 +106,365 @@ } }, "node_modules/@ctrl/video-filename-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@ctrl/video-filename-parser/-/video-filename-parser-5.0.0.tgz", - "integrity": "sha512-lbalCIDCU+59kgTYf243g+kTx8l2sqae0PbM76VZWDZdmP2cAu4SALN055iXRB0MnEQ90u9vxzhR9sJ14uM3yQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@ctrl/video-filename-parser/-/video-filename-parser-5.1.0.tgz", + "integrity": "sha512-hKW0ReDDl7HYfnz6I2e6ZSRyUMkeIaU1wuVjlbgkFxfV7LX0Epat5VVGgJ9cwhz8tX4NzfioVxpYj2RbummXbw==", "engines": { "node": ">=18" } }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -160,21 +513,21 @@ } }, "node_modules/@eslint/js": { - "version": "8.50.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", - "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", + "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.12.tgz", + "integrity": "sha512-NlGesA1usRNn6ctHCZ21M4/dKPgW9Nn1FypRdIKKgZOKzkVV4T1FlK5mBiLhHBCDmEbdQG0idrcXlbZfksJ+RA==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", + "@humanwhocodes/object-schema": "^2.0.0", "debug": "^4.1.1", "minimatch": "^3.0.5" }, @@ -196,11 +549,23 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.0.tgz", + "integrity": "sha512-9S9QrXY2K0L4AGDcSgTi9vgiCcG8VcBv4Mp7/1hDPYoswIy6Z6KO5blYto82BT8M0MZNRWmCFLpCs3HlpYGGdw==", "dev": true }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -240,9 +605,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -250,23 +615,23 @@ } }, "node_modules/@next/env": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.3.tgz", - "integrity": "sha512-X4te86vsbjsB7iO4usY9jLPtZ827Mbx+WcwNBGUOIuswuTAKQtzsuoxc/6KLxCMvogKG795MhrR1LDhYgDvasg==" + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.6.tgz", + "integrity": "sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==" }, "node_modules/@next/eslint-plugin-next": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.3.tgz", - "integrity": "sha512-lbZOoEjzSuTtpk9UgV9rOmxYw+PsSfNR+00mZcInqooiDMZ1u+RqT1YQYLsEZPW1kumZoQe5+exkCBtZ2xn0uw==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.6.tgz", + "integrity": "sha512-ng7pU/DDsxPgT6ZPvuprxrkeew3XaRf4LAT4FabaEO/hAbvVx4P7wqnqdbTdDn1kgTvsI4tpIgT4Awn/m0bGbg==", "dev": true, "dependencies": { "glob": "7.1.7" } }, "node_modules/@next/swc-darwin-arm64": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.3.tgz", - "integrity": "sha512-6hiYNJxJmyYvvKGrVThzo4nTcqvqUTA/JvKim7Auaj33NexDqSNwN5YrrQu+QhZJCIpv2tULSHt+lf+rUflLSw==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.6.tgz", + "integrity": "sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA==", "cpu": [ "arm64" ], @@ -279,9 +644,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.3.tgz", - "integrity": "sha512-UpBKxu2ob9scbpJyEq/xPgpdrgBgN3aLYlxyGqlYX5/KnwpJpFuIHU2lx8upQQ7L+MEmz+fA1XSgesoK92ppwQ==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.6.tgz", + "integrity": "sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA==", "cpu": [ "x64" ], @@ -294,9 +659,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.3.tgz", - "integrity": "sha512-5AzM7Yx1Ky+oLY6pHs7tjONTF22JirDPd5Jw/3/NazJ73uGB05NqhGhB4SbeCchg7SlVYVBeRMrMSZwJwq/xoA==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.6.tgz", + "integrity": "sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg==", "cpu": [ "arm64" ], @@ -309,9 +674,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.3.tgz", - "integrity": "sha512-A/C1shbyUhj7wRtokmn73eBksjTM7fFQoY2v/0rTM5wehpkjQRLOXI8WJsag2uLhnZ4ii5OzR1rFPwoD9cvOgA==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.6.tgz", + "integrity": "sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q==", "cpu": [ "arm64" ], @@ -324,9 +689,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.3.tgz", - "integrity": "sha512-FubPuw/Boz8tKkk+5eOuDHOpk36F80rbgxlx4+xty/U71e3wZZxVYHfZXmf0IRToBn1Crb8WvLM9OYj/Ur815g==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.6.tgz", + "integrity": "sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw==", "cpu": [ "x64" ], @@ -339,9 +704,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.3.tgz", - "integrity": "sha512-DPw8nFuM1uEpbX47tM3wiXIR0Qa+atSzs9Q3peY1urkhofx44o7E1svnq+a5Q0r8lAcssLrwiM+OyJJgV/oj7g==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.6.tgz", + "integrity": "sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ==", "cpu": [ "x64" ], @@ -354,9 +719,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.3.tgz", - "integrity": "sha512-zBPSP8cHL51Gub/YV8UUePW7AVGukp2D8JU93IHbVDu2qmhFAn9LWXiOOLKplZQKxnIPUkJTQAJDCWBWU4UWUA==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.6.tgz", + "integrity": "sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg==", "cpu": [ "arm64" ], @@ -369,9 +734,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.3.tgz", - "integrity": "sha512-ONcL/lYyGUj4W37D4I2I450SZtSenmFAvapkJQNIJhrPMhzDU/AdfLkW98NvH1D2+7FXwe7yclf3+B7v28uzBQ==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.6.tgz", + "integrity": "sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg==", "cpu": [ "ia32" ], @@ -384,9 +749,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.3.tgz", - "integrity": "sha512-2Vz2tYWaLqJvLcWbbTlJ5k9AN6JD7a5CN2pAeIzpbecK8ZF/yobA39cXtv6e+Z8c5UJuVOmaTldEAIxvsIux/Q==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.6.tgz", + "integrity": "sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ==", "cpu": [ "x64" ], @@ -591,12 +956,12 @@ } }, "node_modules/@prisma/client": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.3.1.tgz", - "integrity": "sha512-ArOKjHwdFZIe1cGU56oIfy7wRuTn0FfZjGuU/AjgEBOQh+4rDkB6nF+AGHP8KaVpkBIiHGPQh3IpwQ3xDMdO0Q==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.4.2.tgz", + "integrity": "sha512-2xsPaz4EaMKj1WS9iW6MlPhmbqtBsXAOeVttSePp8vTFTtvzh2hZbDgswwBdSCgPzmmwF+tLB259QzggvCmJqA==", "hasInstallScript": true, "dependencies": { - "@prisma/engines-version": "5.3.1-2.61e140623197a131c2a6189271ffee05a7aa9a59" + "@prisma/engines-version": "5.4.1-2.ac9d7041ed77bcc8a8dbd2ab6616b39013829574" }, "engines": { "node": ">=16.13" @@ -611,16 +976,16 @@ } }, "node_modules/@prisma/engines": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.3.1.tgz", - "integrity": "sha512-6QkILNyfeeN67BNEPEtkgh3Xo2tm6D7V+UhrkBbRHqKw9CTaz/vvTP/ROwYSP/3JT2MtIutZm/EnhxUiuOPVDA==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.4.2.tgz", + "integrity": "sha512-fqeucJ3LH0e1eyFdT0zRx+oETLancu5+n4lhiYECyEz6H2RDskPJHJYHkVc0LhkU4Uv7fuEnppKU3nVKNzMh8g==", "devOptional": true, "hasInstallScript": true }, "node_modules/@prisma/engines-version": { - "version": "5.3.1-2.61e140623197a131c2a6189271ffee05a7aa9a59", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.3.1-2.61e140623197a131c2a6189271ffee05a7aa9a59.tgz", - "integrity": "sha512-y5qbUi3ql2Xg7XraqcXEdMHh0MocBfnBzDn5GbV1xk23S3Mq8MGs+VjacTNiBh3dtEdUERCrUUG7Z3QaJ+h79w==" + "version": "5.4.1-2.ac9d7041ed77bcc8a8dbd2ab6616b39013829574", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.4.1-2.ac9d7041ed77bcc8a8dbd2ab6616b39013829574.tgz", + "integrity": "sha512-wvupDL4AA1vf4TQNANg7kR7y98ITqPsk6aacfBxZKtrJKRIsWjURHkZCGcQliHdqCiW/hGreO6d6ZuSv9MhdAA==" }, "node_modules/@rushstack/eslint-patch": { "version": "1.5.1", @@ -628,6 +993,12 @@ "integrity": "sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==", "dev": true }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, "node_modules/@swc/helpers": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", @@ -671,18 +1042,33 @@ } }, "node_modules/@types/bencode": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/bencode/-/bencode-2.0.2.tgz", - "integrity": "sha512-VuSChzKjaBz+TbiX4dEbVkSMhUDN1mfqzhNM6m3tGMalaTo3X8rWn2rQyFv6iC/M4u+4OCpXrl6qdGGNoSw3gQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/bencode/-/bencode-2.0.3.tgz", + "integrity": "sha512-P+Cy8Fy93mWOuM3jcx5qxSainBWsZrcoDN4TAqI+06Jq/uX0seaqs+BWfXBHKoHCIbL6wlpaNqN8tMYqal46YQ==", "dev": true, "dependencies": { "@types/node": "*" } }, + "node_modules/@types/chai": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.9.tgz", + "integrity": "sha512-69TtiDzu0bcmKQv3yg1Zx409/Kd7r0b5F1PfpYJfSHzLGtB53547V4u+9iqKYsTu/O2ai6KTb0TInNpvuQ3qmg==", + "dev": true + }, + "node_modules/@types/chai-subset": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.4.tgz", + "integrity": "sha512-CCWNXrJYSUIojZ1149ksLl3AN9cmZ5djf+yUoVVV+NuYrtydItQVlL2ZDqyC6M6O9LWRnVf8yYDxbXHO2TfQZg==", + "dev": true, + "dependencies": { + "@types/chai": "*" + } + }, "node_modules/@types/file-saver": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.5.tgz", - "integrity": "sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.6.tgz", + "integrity": "sha512-Mw671DVqoMHbjw0w4v2iiOro01dlT/WhWp5uwecBa0Wg8c+bcZOjgF1ndBnlaxhtvFCgTRBtsGivSVhrK/vnag==", "dev": true }, "node_modules/@types/json5": { @@ -692,10 +1078,13 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.8.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.2.tgz", - "integrity": "sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w==", - "dev": true + "version": "20.8.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz", + "integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==", + "dev": true, + "dependencies": { + "undici-types": "~5.25.1" + } }, "node_modules/@types/prettier": { "version": "2.7.3", @@ -704,21 +1093,21 @@ "dev": true }, "node_modules/@types/prop-types": { - "version": "15.7.8", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.8.tgz", - "integrity": "sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ==", + "version": "15.7.9", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.9.tgz", + "integrity": "sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==", "dev": true }, "node_modules/@types/qs": { - "version": "6.9.8", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", - "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==", + "version": "6.9.9", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.9.tgz", + "integrity": "sha512-wYLxw35euwqGvTDx6zfY1vokBFnsK0HNrzc6xNHchxfO2hpuRg74GbkEW7e3sSmPvj0TjCDT1VCa6OtHXnubsg==", "dev": true }, "node_modules/@types/react": { - "version": "18.2.24", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.24.tgz", - "integrity": "sha512-Ee0Jt4sbJxMu1iDcetZEIKQr99J1Zfb6D4F3qfUWoR1JpInkY1Wdg4WwCyBjL257D0+jGqSl1twBjV8iCaC0Aw==", + "version": "18.2.30", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.30.tgz", + "integrity": "sha512-OfqdJnDsSo4UNw0bqAjFCuBpLYQM7wvZidz0hVxHRjrEkzRlvZL1pJVyOSY55HMiKvRNEo9DUBRuEl7FNlJ/Vg==", "dev": true, "dependencies": { "@types/prop-types": "*", @@ -727,42 +1116,42 @@ } }, "node_modules/@types/react-dom": { - "version": "18.2.8", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.8.tgz", - "integrity": "sha512-bAIvO5lN/U8sPGvs1Xm61rlRHHaq5rp5N3kp9C+NJ/Q41P8iqjkXSu0+/qu8POsjH9pNWb0OYabFez7taP7omw==", + "version": "18.2.14", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.14.tgz", + "integrity": "sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==", "dev": true, "dependencies": { "@types/react": "*" } }, "node_modules/@types/scheduler": { - "version": "0.16.4", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.4.tgz", - "integrity": "sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ==", + "version": "0.16.5", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.5.tgz", + "integrity": "sha512-s/FPdYRmZR8SjLWGMCuax7r3qCWQw9QKHzXVukAuuIJkXkDRwp+Pu5LMIVFi0Fxbav35WURicYr8u1QsoybnQw==", "dev": true }, "node_modules/@types/user-agents": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/user-agents/-/user-agents-1.0.2.tgz", - "integrity": "sha512-WOoL2UJTI6RxV8RB2kS3ZhxjjijI5G1i7mgU7mtlm4LsC1XGCfiV56h+GV4VZnAUkkkLQ4gbFGR/dggT01n0RA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/user-agents/-/user-agents-1.0.3.tgz", + "integrity": "sha512-miVcTQ9pocoBWBhhY3GoT3nY2PqKHtpZ9NrGqlAhVBML/Xy4ObB9n7CPJo93O+sBwYtPxBOxEeniuqkbqkOSyA==", "dev": true }, "node_modules/@types/uuid": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.4.tgz", - "integrity": "sha512-zAuJWQflfx6dYJM62vna+Sn5aeSWhh3OB+wfUEACNcqUSc0AGc5JKl+ycL1vrH7frGTXhJchYjE1Hak8L819dA==", + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.6.tgz", + "integrity": "sha512-BT2Krtx4xaO6iwzwMFUYvWBWkV2pr37zD68Vmp1CDV196MzczBRxuEpD6Pr395HAgebC/co7hOphs53r8V7jew==", "dev": true }, "node_modules/@typescript-eslint/parser": { - "version": "6.7.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.4.tgz", - "integrity": "sha512-I5zVZFY+cw4IMZUeNCU7Sh2PO5O57F7Lr0uyhgCJmhN/BuTlnc55KxPonR4+EM3GBdfiCyGZye6DgMjtubQkmA==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.8.0.tgz", + "integrity": "sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.7.4", - "@typescript-eslint/types": "6.7.4", - "@typescript-eslint/typescript-estree": "6.7.4", - "@typescript-eslint/visitor-keys": "6.7.4", + "@typescript-eslint/scope-manager": "6.8.0", + "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/typescript-estree": "6.8.0", + "@typescript-eslint/visitor-keys": "6.8.0", "debug": "^4.3.4" }, "engines": { @@ -782,13 +1171,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.7.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.4.tgz", - "integrity": "sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz", + "integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.4", - "@typescript-eslint/visitor-keys": "6.7.4" + "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/visitor-keys": "6.8.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -799,9 +1188,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.7.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.4.tgz", - "integrity": "sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz", + "integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -812,13 +1201,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.7.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.4.tgz", - "integrity": "sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz", + "integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.4", - "@typescript-eslint/visitor-keys": "6.7.4", + "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/visitor-keys": "6.8.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -839,12 +1228,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.7.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.4.tgz", - "integrity": "sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", + "integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/types": "6.8.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -855,6 +1244,101 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@vitest/expect": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.6.tgz", + "integrity": "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==", + "dev": true, + "dependencies": { + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.6.tgz", + "integrity": "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==", + "dev": true, + "dependencies": { + "@vitest/utils": "0.34.6", + "p-limit": "^4.0.0", + "pathe": "^1.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/runner/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/snapshot": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.6.tgz", + "integrity": "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==", + "dev": true, + "dependencies": { + "magic-string": "^0.30.1", + "pathe": "^1.1.1", + "pretty-format": "^29.5.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.6.tgz", + "integrity": "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==", + "dev": true, + "dependencies": { + "tinyspy": "^2.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.6.tgz", + "integrity": "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==", + "dev": true, + "dependencies": { + "diff-sequences": "^29.4.3", + "loupe": "^2.3.6", + "pretty-format": "^29.5.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -1123,6 +1607,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -1439,13 +1932,23 @@ "node": ">= 0.8" } }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1470,9 +1973,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001542", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001542.tgz", - "integrity": "sha512-UrtAXVcj1mvPBFQ4sKd38daP8dEcXXr5sQe6QNNinaPd0iA/cxg9/l3VrSdL73jgw5sKyuQ6jNgiKO12W3SsVA==", + "version": "1.0.30001551", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001551.tgz", + "integrity": "sha512-vtBAez47BoGMMzlbYhfXrMV1kvRF2WP/lqiMuDu1Sb4EE4LKEgjopFDSRtZfdVnslNRpOqV/woE+Xgrwj6VQlg==", "funding": [ { "type": "opencollective", @@ -1488,6 +1991,24 @@ } ] }, + "node_modules/chai": { + "version": "4.3.10", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", + "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1504,6 +2025,18 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -1721,6 +2254,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -1736,10 +2281,9 @@ "dev": true }, "node_modules/define-data-property": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", - "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", - "dev": true, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", "dependencies": { "get-intrinsic": "^1.2.1", "gopd": "^1.0.1", @@ -1836,6 +2380,15 @@ "node": ">=0.3.1" } }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -1893,9 +2446,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.539", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.539.tgz", - "integrity": "sha512-wRmWJ8F7rgmINuI32S6r2SLrw/h/bJQsDSvBiq9GBfvc2Lh73qTOwn73r3Cf67mjVgFGJYcYtmERzySa5jIWlg==", + "version": "1.4.561", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.561.tgz", + "integrity": "sha512-eS5t4ulWOBfVHdq9SW2dxEaFarj1lPjvJ8PaYMOjY0DecBaj/t4ARziL2IPpDr4atyWwjLFGQ2vo/VCgQFezVQ==", "dev": true }, "node_modules/emoji-regex": { @@ -2042,10 +2595,47 @@ "is-symbol": "^1.0.2" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" } }, "node_modules/escalade": { @@ -2075,15 +2665,15 @@ } }, "node_modules/eslint": { - "version": "8.50.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", - "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", + "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.50.0", + "@eslint/js": "8.51.0", "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -2129,12 +2719,12 @@ } }, "node_modules/eslint-config-next": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.3.tgz", - "integrity": "sha512-VN2qbCpq2DMWgs7SVF8KTmc8bVaWz3s4nmcFqRLs7PNBt5AXejOhJuZ4zg2sCEHOvz5RvqdwLeI++NSCV6qHVg==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.6.tgz", + "integrity": "sha512-o8pQsUHTo9aHqJ2YiZDym5gQAMRf7O2HndHo/JZeY7TDD+W4hk6Ma8Vw54RHiBeb7OWWO5dPirQB+Is/aVQ7Kg==", "dev": true, "dependencies": { - "@next/eslint-plugin-next": "13.5.3", + "@next/eslint-plugin-next": "13.5.6", "@rushstack/eslint-patch": "^1.3.3", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", "eslint-import-resolver-node": "^0.3.6", @@ -2380,12 +2970,12 @@ } }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -2712,12 +3302,12 @@ } }, "node_modules/flat-cache": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", - "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", + "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", "dev": true, "dependencies": { - "flatted": "^3.2.7", + "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" }, @@ -2781,9 +3371,9 @@ } }, "node_modules/fraction.js": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.6.tgz", - "integrity": "sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true, "engines": { "node": "*" @@ -2827,9 +3417,12 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { "version": "1.1.6", @@ -2858,6 +3451,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/get-intrinsic": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", @@ -2943,9 +3545,9 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, "node_modules/globals": { - "version": "13.22.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", - "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -3004,7 +3606,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -3024,12 +3625,9 @@ "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==", - "dependencies": { - "function-bind": "^1.1.1" - }, + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", "engines": { "node": ">= 0.4.0" } @@ -3056,7 +3654,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, "dependencies": { "get-intrinsic": "^1.1.1" }, @@ -3647,6 +4244,12 @@ "json5": "lib/cli.js" } }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -3663,9 +4266,9 @@ } }, "node_modules/keyv": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "dependencies": { "json-buffer": "3.0.1" @@ -3714,6 +4317,18 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "node_modules/local-pkg": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -3751,6 +4366,15 @@ "loose-envify": "cli.js" } }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -3770,6 +4394,18 @@ "lz-string": "bin/bin.js" } }, + "node_modules/magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -3885,6 +4521,18 @@ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, + "node_modules/mlly": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz", + "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", + "dev": true, + "dependencies": { + "acorn": "^8.10.0", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "ufo": "^1.3.0" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -3938,18 +4586,17 @@ } }, "node_modules/next": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/next/-/next-13.5.3.tgz", - "integrity": "sha512-4Nt4HRLYDW/yRpJ/QR2t1v63UOMS55A38dnWv3UDOWGezuY0ZyFO1ABNbD7mulVzs9qVhgy2+ppjdsANpKP1mg==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/next/-/next-13.5.6.tgz", + "integrity": "sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw==", "dependencies": { - "@next/env": "13.5.3", + "@next/env": "13.5.6", "@swc/helpers": "0.5.2", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", + "postcss": "8.4.31", "styled-jsx": "5.1.1", - "watchpack": "2.4.0", - "zod": "3.21.4" + "watchpack": "2.4.0" }, "bin": { "next": "dist/bin/next" @@ -3958,15 +4605,15 @@ "node": ">=16.14.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "13.5.3", - "@next/swc-darwin-x64": "13.5.3", - "@next/swc-linux-arm64-gnu": "13.5.3", - "@next/swc-linux-arm64-musl": "13.5.3", - "@next/swc-linux-x64-gnu": "13.5.3", - "@next/swc-linux-x64-musl": "13.5.3", - "@next/swc-win32-arm64-msvc": "13.5.3", - "@next/swc-win32-ia32-msvc": "13.5.3", - "@next/swc-win32-x64-msvc": "13.5.3" + "@next/swc-darwin-arm64": "13.5.6", + "@next/swc-darwin-x64": "13.5.6", + "@next/swc-linux-arm64-gnu": "13.5.6", + "@next/swc-linux-arm64-musl": "13.5.6", + "@next/swc-linux-x64-gnu": "13.5.6", + "@next/swc-linux-x64-musl": "13.5.6", + "@next/swc-win32-arm64-msvc": "13.5.6", + "@next/swc-win32-ia32-msvc": "13.5.6", + "@next/swc-win32-x64-msvc": "13.5.6" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -3983,33 +4630,10 @@ } } }, - "node_modules/next/node_modules/postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", - "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/node-abi": { - "version": "3.47.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.47.0.tgz", - "integrity": "sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==", + "version": "3.51.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz", + "integrity": "sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==", "dependencies": { "semver": "^7.3.5" }, @@ -4084,9 +4708,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4324,6 +4948,21 @@ "node": ">=8" } }, + "node_modules/pathe": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", + "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", + "dev": true + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -4359,11 +4998,21 @@ "node": ">= 6" } }, + "node_modules/pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, "node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -4600,14 +5249,46 @@ "prettier": "^2.3.2" } }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/prisma": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.3.1.tgz", - "integrity": "sha512-Wp2msQIlMPHe+5k5Od6xnsI/WNG7UJGgFUJgqv/ygc7kOECZapcSz/iU4NIEzISs3H1W9sFLjAPbg/gOqqtB7A==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.4.2.tgz", + "integrity": "sha512-GDMZwZy7mysB2oXU+angQqJ90iaPFdD0rHaZNkn+dio5NRkGLmMqmXs31//tg/qXT3iB0cTQwnGGQNuirhSTZg==", "devOptional": true, "hasInstallScript": true, "dependencies": { - "@prisma/engines": "5.3.1" + "@prisma/engines": "5.4.2" }, "bin": { "prisma": "build/index.js" @@ -4875,9 +5556,9 @@ } }, "node_modules/resolve": { - "version": "1.22.6", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", - "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { "is-core-module": "^2.13.0", @@ -4934,6 +5615,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -5090,6 +5787,20 @@ "node": ">= 0.8.0" } }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/set-function-name": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", @@ -5165,6 +5876,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, "node_modules/simple-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", @@ -5268,6 +5985,12 @@ "node": ">=0.10.0" } }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -5276,6 +5999,12 @@ "node": ">= 0.8" } }, + "node_modules/std-env": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.4.3.tgz", + "integrity": "sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==", + "dev": true + }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -5399,6 +6128,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strip-literal": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", + "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", + "dev": true, + "dependencies": { + "acorn": "^8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/styled-jsx": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", @@ -5580,6 +6321,30 @@ "node": ">=0.8" } }, + "node_modules/tinybench": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", + "integrity": "sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==", + "dev": true + }, + "node_modules/tinypool": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", + "integrity": "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz", + "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -5712,6 +6477,15 @@ "node": ">= 0.8.0" } }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -5814,6 +6588,12 @@ "node": ">=14.17" } }, + "node_modules/ufo": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.1.tgz", + "integrity": "sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==", + "dev": true + }, "node_modules/uint8-util": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/uint8-util/-/uint8-util-2.2.4.tgz", @@ -5850,6 +6630,12 @@ "underscore": "*" } }, + "node_modules/undici-types": { + "version": "5.25.3", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", + "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", + "dev": true + }, "node_modules/universal-user-agent": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", @@ -5950,6 +6736,161 @@ "node": ">= 0.8" } }, + "node_modules/vite": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", + "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.6.tgz", + "integrity": "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "mlly": "^1.4.0", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.6.tgz", + "integrity": "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==", + "dev": true, + "dependencies": { + "@types/chai": "^4.3.5", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "@vitest/expect": "0.34.6", + "@vitest/runner": "0.34.6", + "@vitest/snapshot": "0.34.6", + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", + "acorn": "^8.9.0", + "acorn-walk": "^8.2.0", + "cac": "^6.7.14", + "chai": "^4.3.10", + "debug": "^4.3.4", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.1", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.3.3", + "strip-literal": "^1.0.1", + "tinybench": "^2.5.0", + "tinypool": "^0.7.0", + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", + "vite-node": "0.34.6", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/browser": "*", + "@vitest/ui": "*", + "happy-dom": "*", + "jsdom": "*", + "playwright": "*", + "safaridriver": "*", + "webdriverio": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true + }, + "webdriverio": { + "optional": true + } + } + }, "node_modules/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", @@ -6049,13 +6990,13 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.4", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" @@ -6067,6 +7008,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/why-is-node-running": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", + "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "dev": true, + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -6078,9 +7035,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", - "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz", + "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==", "dev": true, "engines": { "node": ">= 14" @@ -6106,14 +7063,6 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/zod": { - "version": "3.21.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", - "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } } } } diff --git a/package.json b/package.json index 1d549e2..8b28bb0 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,14 @@ { "name": "debrid-media-manager", - "version": "3.8.0", + "version": "3.8.1", "private": false, "scripts": { "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint", - "format": "prettier --write 'src/**/*.{js,jsx,ts,tsx,json,md}'" + "format": "prettier --write 'src/**/*.{js,jsx,ts,tsx,json,md}'", + "test": "vitest" }, "dependencies": { "@ctrl/video-filename-parser": "^5.0.0", @@ -49,6 +50,7 @@ "prisma": "^5.2.0", "tailwindcss": "^3.2.7", "ts-node": "10.7.0", - "typescript": "^5.2.2" + "typescript": "^5.2.2", + "vitest": "^0.34.6" } } diff --git a/src/pages/api/moviecleaner.ts b/src/pages/api/moviecleaner.ts index 4d22245..8dc9a1f 100644 --- a/src/pages/api/moviecleaner.ts +++ b/src/pages/api/moviecleaner.ts @@ -6,7 +6,7 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword } = req.query; + const { scrapePassword, id } = req.query; if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { res.status(403).json({ status: 'error', @@ -15,7 +15,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< return; } - let imdbIds = await db.getAllImdbIds('movie'); + let imdbIds = !!id ? [id as string] : await db.getAllImdbIds('movie'); if (!imdbIds) { console.log( '[moviecleaner] There must be something wrong with the database, waiting 60 seconds' diff --git a/src/pages/api/tvcleaner.ts b/src/pages/api/tvcleaner.ts index a4dbd35..84af6ac 100644 --- a/src/pages/api/tvcleaner.ts +++ b/src/pages/api/tvcleaner.ts @@ -6,7 +6,7 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword } = req.query; + const { scrapePassword, id } = req.query; if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { res.status(403).json({ status: 'error', @@ -15,7 +15,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< return; } - let imdbIds = await db.getAllImdbIds('tv'); + let imdbIds = !!id ? [id as string] : await db.getAllImdbIds('tv'); if (!imdbIds) { console.log( '[moviecleaner] There must be something wrong with the database, waiting 60 seconds' diff --git a/src/pages/index.tsx b/src/pages/index.tsx index ddcb0c9..b0dc683 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -132,7 +132,7 @@ function IndexPage() { className="mr-2 bg-orange-500 hover:bg-orange-700 text-white font-bold py-2 px-4 rounded text-sm" onClick={() => router.push('/troubleshooting')} > - Troubleshoot + Missing library items? {rdUser && (

+ {helpText !== '' &&
{helpText}
}
{rdLoading || adLoading || grouping || filtering ? (
@@ -961,14 +996,14 @@ function TorrentsPage() { {sortBy.column === 'bytes' && (sortBy.direction === 'asc' ? 'โ†‘' : 'โ†“')} -
+ */} - + */} - {torrent.mediaType === 'tv' ? '๐Ÿ“บ' : '๐ŸŽฅ'} + + {torrent.mediaType === 'tv' + ? '๐Ÿ“บ' + : '๐ŸŽฅ'} +  {torrent.title}{' '} {filterText} {' '} Search again @@ -1095,9 +1108,11 @@ function TorrentsPage() { {torrent.score.toFixed(1)} */} {sortedData().map((t) => { - const groupCount = getGroupings(t.mediaType)[ - getMediaId(t.info, t.mediaType) - ]; + const groupCount = getGroupings(t.mediaType)[t.filename]; const filterText = groupCount > 1 && !router.query.filter ? `${groupCount - 1} other file${ @@ -462,20 +451,14 @@ function TorrentsPage() { {t.title}{' '} {filterText} {' '} Search again @@ -485,7 +468,6 @@ function TorrentsPage() { - */} + diff --git a/src/services/realDebrid.ts b/src/services/realDebrid.ts index 6bea25e..21df278 100644 --- a/src/services/realDebrid.ts +++ b/src/services/realDebrid.ts @@ -45,6 +45,7 @@ export interface UserTorrentResponse { host: string; split: number; progress: number; + speed: number; status: string; added: string; links: string[]; diff --git a/src/utils/mediaType.ts b/src/utils/mediaType.ts index 4f8a2b0..a008dc6 100644 --- a/src/utils/mediaType.ts +++ b/src/utils/mediaType.ts @@ -1,5 +1,5 @@ export const getTypeByName = (filename: string): 'tv' | 'movie' => { - return /(season|episode)s?.?\d/i.test(filename) || + return /(season|episode)s?.?\d?/i.test(filename) || /[se]\d\d/i.test(filename) || /\b(tv|complete)/i.test(filename) || /\b(saison|stage).?\d/i.test(filename) || @@ -20,7 +20,7 @@ export const getTypeByNameAndFileCount = (filename: string, linkCount: number): ) { return 'tv'; } - if (linkCount > 3) { + if (linkCount > 4) { return 'tv'; } return 'movie'; diff --git a/src/utils/speed.ts b/src/utils/speed.ts new file mode 100644 index 0000000..7d4e545 --- /dev/null +++ b/src/utils/speed.ts @@ -0,0 +1,18 @@ +export function shortenNumber(num: number): string { + if (num < 1000) { + // For numbers less than 1000, we want to return the number with a maximum of one decimal place. + return num.toFixed(1); + } else if (num < 1000000) { + // Divide by 1000 for thousands, remove decimal places. + return (num / 1000).toFixed() + ' K'; + } else if (num < 1000000000) { + // Divide by 1000000 for millions, remove decimal places. + return (num / 1000000).toFixed() + ' M'; + } else if (num < 1000000000000) { + // Use 'G' for billions, divide by 1000000000, remove decimal places. + return (num / 1000000000).toFixed() + ' G'; + } else { + // If the number is a trillion or more, just return the full number as a string. + return num.toString(); + } +} From 86b1f623f25be523ef74abf1d8d7414ef406d459 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Wed, 15 Nov 2023 02:16:02 +0100 Subject: [PATCH 176/272] Revert dockerfile change --- Dockerfile | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1449844..7b0da43 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,29 +1,24 @@ -# Use a single stage for dependencies and build, as they share the same base image -FROM node:18-alpine AS build - -# Install additional tools (curl and grep) only once -RUN apk --no-cache add curl grep +FROM node:18-alpine AS dependencies WORKDIR /app - -# Copy package files and install dependencies COPY package.json package-lock.json ./ RUN npm ci -# Copy source files -COPY . . +FROM node:18-alpine AS build -# Generate prisma client and build the project -RUN npx prisma generate && npm run build +WORKDIR /app +COPY --from=dependencies /app/node_modules ./node_modules +COPY . . -# Set environment variables for the deploy stage -ENV NODE_ENV production -ENV PORT 3000 -ENV HOSTNAME "0.0.0.0" +RUN npx prisma generate +RUN npm run build -# Copy only necessary files for the deploy stage FROM node:18-alpine AS deploy + WORKDIR /app + +ENV NODE_ENV production + COPY --from=build /app/public ./public COPY --from=build /app/package.json ./package.json COPY --from=build /app/prisma ./prisma @@ -32,8 +27,15 @@ COPY --from=build /app/.next/standalone . EXPOSE 3000 +ENV PORT 3000 +# set hostname to localhost +ENV HOSTNAME "0.0.0.0" + +CMD ["node", "server.js"] + +# Install additional tools (curl and grep) +RUN apk --no-cache add curl grep + # Healthcheck HEALTHCHECK --interval=30s --timeout=1s --start-period=3s --retries=1 \ CMD curl -s http://localhost:3000/api/healthz | grep -qm1 ok - -CMD ["node", "server.js"] From 0161702cfbc8b06c81c77d09fbd2ea8745dc6c63 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Wed, 15 Nov 2023 03:30:16 +0100 Subject: [PATCH 177/272] Make it work for alldebrid --- src/pages/hashlist.tsx | 133 ++++++++++++++++++++++++++++++++++++-- src/pages/library.tsx | 9 ++- src/services/allDebrid.ts | 1 - 3 files changed, 135 insertions(+), 8 deletions(-) diff --git a/src/pages/hashlist.tsx b/src/pages/hashlist.tsx index a8b7667..6e603ee 100644 --- a/src/pages/hashlist.tsx +++ b/src/pages/hashlist.tsx @@ -1,8 +1,21 @@ import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; import { useDownloadsCache } from '@/hooks/cache'; -import { uploadMagnet } from '@/services/allDebrid'; -import { addHashAsMagnet, deleteTorrent, getTorrentInfo, selectFiles } from '@/services/realDebrid'; +import { + AdInstantAvailabilityResponse, + MagnetFile, + adInstantCheck, + uploadMagnet, +} from '@/services/allDebrid'; +import { + RdInstantAvailabilityResponse, + addHashAsMagnet, + deleteTorrent, + getTorrentInfo, + rdInstantCheck, + selectFiles, +} from '@/services/realDebrid'; import { runConcurrentFunctions } from '@/utils/batch'; +import { groupBy } from '@/utils/groupBy'; import { getMediaId } from '@/utils/mediaId'; import { getTypeByName } from '@/utils/mediaType'; import getReleaseTags from '@/utils/score'; @@ -12,7 +25,7 @@ import lzString from 'lz-string'; import Head from 'next/head'; import Link from 'next/link'; import { useRouter } from 'next/router'; -import { useEffect, useState } from 'react'; +import { Dispatch, SetStateAction, useEffect, useState } from 'react'; import { Toaster, toast } from 'react-hot-toast'; import { FaDownload, FaTimes } from 'react-icons/fa'; @@ -29,6 +42,9 @@ interface UserTorrent extends TorrentHash { score: number; mediaType: 'movie' | 'tv'; info: ParsedFilename; + noVideos: boolean; + rdAvailable: boolean; + adAvailable: boolean; } interface SortBy { @@ -36,6 +52,88 @@ interface SortBy { direction: 'asc' | 'desc'; } +const instantCheckInRd = async ( + rdKey: string, + hashes: string[], + setSearchResults: Dispatch> +): Promise => { + let instantCount = 0; + const setInstantFromRd = (resp: RdInstantAvailabilityResponse) => { + setSearchResults((prevSearchResults) => { + const newSearchResults = [...prevSearchResults]; + for (const torrent of newSearchResults) { + if (torrent.noVideos) continue; + if (torrent.hash in resp === false) continue; + if ('rd' in resp[torrent.hash] === false) continue; + const variants = resp[torrent.hash]['rd']; + if (!variants.length) continue; + torrent.noVideos = variants.reduce((noVideo, variant) => { + if (!noVideo) return false; + return !Object.values(variant).some((file) => + isVideoOrSubs({ path: file.filename }) + ); + }, true); + // because it has variants and there's at least 1 video file + if (!torrent.noVideos) { + torrent.rdAvailable = true; + instantCount += 1; + } + } + return newSearchResults; + }); + }; + + for (const hashGroup of groupBy(100, hashes)) { + if (rdKey) await rdInstantCheck(rdKey, hashGroup).then(setInstantFromRd); + } + + return instantCount; +}; + +export const instantCheckInAd = async ( + adKey: string, + hashes: string[], + setSearchResults: Dispatch> +): Promise => { + let instantCount = 0; + const setInstantFromAd = (resp: AdInstantAvailabilityResponse) => { + setSearchResults((prevSearchResults) => { + const newSearchResults = [...prevSearchResults]; + for (const magnetData of resp.data.magnets) { + const masterHash = magnetData.hash; + const torrent = newSearchResults.find((r) => r.hash === masterHash); + if (!torrent) continue; + if (torrent.noVideos) continue; + if (!magnetData.files) continue; + + const checkVideoInFiles = (files: MagnetFile[]): boolean => { + return files.reduce((noVideo: boolean, curr: MagnetFile) => { + if (!noVideo) return false; // If we've already found a video, no need to continue checking + if (!curr.n) return false; // If 'n' property doesn't exist, it's not a video + if (curr.e) { + // If 'e' property exists, check it recursively + return checkVideoInFiles(curr.e); + } + return !isVideoOrSubs({ path: curr.n }); + }, true); + }; + + torrent.noVideos = checkVideoInFiles(magnetData.files); + if (!torrent.noVideos) { + torrent.adAvailable = magnetData.instant; + instantCount += 1; + } + } + return newSearchResults; + }); + }; + + for (const hashGroup of groupBy(100, hashes)) { + if (adKey) await adInstantCheck(adKey, hashGroup).then(setInstantFromAd); + } + return instantCount; +}; + function TorrentsPage() { const router = useRouter(); const [query, setQuery] = useState(''); @@ -88,6 +186,11 @@ function TorrentsPage() { }) as UserTorrent[]; setUserTorrentsList(torrents); + + if (!torrents.length) return; + // const hashArr = torrents.map((r) => r.hash); + // if (rdKey) wrapLoading('RD', instantCheckInRd(rdKey, hashArr, setUserTorrentsList)); + // if (adKey) wrapLoading('AD', instantCheckInAd(adKey, hashArr, setUserTorrentsList)); } catch (error) { alert(error); setUserTorrentsList([]); @@ -136,13 +239,14 @@ function TorrentsPage() { // set the list you see useEffect(() => { setFiltering(true); + const notYetDownloaded = filterOutAlreadyDownloaded(userTorrentsList); if (Object.keys(router.query).length === 0) { - setFilteredList(applyQuickSearch(userTorrentsList)); + setFilteredList(applyQuickSearch(notYetDownloaded)); setFiltering(false); return; } const { filter: titleFilter, mediaType } = router.query; - let tmpList = userTorrentsList; + let tmpList = notYetDownloaded; if (titleFilter) { const decodedTitleFilter = decodeURIComponent(titleFilter as string); tmpList = tmpList.filter((t) => decodedTitleFilter === t.title); @@ -163,6 +267,16 @@ function TorrentsPage() { }); } + function filterOutAlreadyDownloaded(unfiltered: UserTorrent[]) { + return unfiltered.filter( + (t) => + !rd.isDownloaded(t.hash) && + !ad.isDownloaded(t.hash) && + !rd.isDownloading(t.hash) && + !ad.isDownloading(t.hash) + ); + } + function applyQuickSearch(unfiltered: UserTorrent[]) { let regexFilters: RegExp[] = []; for (const q of query.split(' ')) { @@ -394,6 +508,15 @@ function TorrentsPage() { Reset )} + + {(rdKey || adKey) && filteredList.length && ( + + + {userTorrentsList.length - filteredList.length} torrents hidden + {' '} + because its already in your library + + )}
{loading || grouping || filtering ? ( diff --git a/src/pages/library.tsx b/src/pages/library.tsx index d9eef28..8e84327 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -196,9 +196,14 @@ function TorrentsPage() { filename: torrent.filename, hash: torrent.hash, bytes: torrent.size, - progress: torrent.processingPerc, + progress: + torrent.statusCode === 4 + ? 100 + : (torrent.downloaded / torrent.size) * 100, status, added: formattedDate, + speed: torrent.downloadSpeed || 0, + links: torrent.links.map((l) => l.link), }; }) as UserTorrent[]; @@ -422,7 +427,7 @@ function TorrentsPage() { // If comparison is 0 and the column is 'progress', then compare by the length of the links property if (comparison === 0 && sortBy.column === 'progress') { - comparison = a.links.length - b.links.length; + comparison = (a.links || []).length - (b.links || []).length; } return isAsc ? comparison : comparison * -1; diff --git a/src/services/allDebrid.ts b/src/services/allDebrid.ts index da49195..a2889ef 100644 --- a/src/services/allDebrid.ts +++ b/src/services/allDebrid.ts @@ -128,7 +128,6 @@ interface MagnetStatus { uploaded: number; seeders: number; downloadSpeed: number; - processingPerc: number; uploadSpeed: number; uploadDate: number; completionDate: number; From d09ac7651b2775fa46d4872d17f1c302e04ad33f Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Wed, 15 Nov 2023 06:11:47 +0100 Subject: [PATCH 178/272] Fix show cached --- src/pages/browse/[search].tsx | 2 +- src/pages/browse/recent.tsx | 4 +-- src/pages/hashlist.tsx | 4 +-- src/pages/library.tsx | 7 ++--- src/pages/movie/[imdbid].tsx | 40 ++++++++++--------------- src/pages/search.tsx | 8 ++--- src/pages/show/[imdbid]/[seasonNum].tsx | 37 +++++++++++------------ src/utils/instantChecks.ts | 8 +++-- 8 files changed, 50 insertions(+), 60 deletions(-) diff --git a/src/pages/browse/[search].tsx b/src/pages/browse/[search].tsx index 8407023..2dccfa6 100644 --- a/src/pages/browse/[search].tsx +++ b/src/pages/browse/[search].tsx @@ -34,7 +34,7 @@ export const Browse: FunctionComponent = ({ response }) => { {Object.keys(response).map((listName: string, idx: number) => { return ( <> -

+

{idx + 1} {listName}

diff --git a/src/pages/browse/recent.tsx b/src/pages/browse/recent.tsx index 74b26a4..4395df9 100644 --- a/src/pages/browse/recent.tsx +++ b/src/pages/browse/recent.tsx @@ -63,14 +63,14 @@ function RecentlyUpdated() { {searchResults.length > 0 && ( <>
- {searchResults.map((key: string) => { + {searchResults.map((key: string, idx: number) => { const match = key.match(/^(movie|tv):(.+)/); if (match) { const mediaType = match[1] === 'movie' ? 'movie' : 'show'; const imdbid = match[2]; return ( - +
- {sortedData().map((t) => { + {sortedData().map((t, i) => { const groupCount = getGroupings(t.mediaType)[t.filename]; const filterText = groupCount > 1 && !router.query.filter @@ -557,7 +557,7 @@ function TorrentsPage() { : ''; return ( { + .map((torrent, i) => { const groupCount = getGroupings(torrent.mediaType)[ torrent.title ]; @@ -1081,10 +1081,7 @@ function TorrentsPage() { ? `${groupCount} of same title` : ''; return ( - + diff --git a/src/pages/movie/[imdbid].tsx b/src/pages/movie/[imdbid].tsx index 73fc834..9b7497a 100644 --- a/src/pages/movie/[imdbid].tsx +++ b/src/pages/movie/[imdbid].tsx @@ -37,7 +37,6 @@ const MovieSearch: FunctionComponent = ({ const { publicRuntimeConfig: config } = getConfig(); const [searchState, setSearchState] = useState('loading'); const [searchResults, setSearchResults] = useState([]); - const [filteredResults, setFilteredResults] = useState([]); const [errorMessage, setErrorMessage] = useState(''); const rdKey = useRealDebridAccessToken(); const adKey = useAllDebridApiKey(); @@ -63,19 +62,6 @@ const MovieSearch: FunctionComponent = ({ // eslint-disable-next-line react-hooks/exhaustive-deps }, [imdbid]); - useEffect(() => { - if (searchResults.length > 0) { - const filtered = searchResults.filter((result) => { - if (onlyShowCached) { - return result.rdAvailable || result.adAvailable; - } - return true; - }); - setFilteredResults(filtered); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [searchResults, onlyShowCached]); - const fetchData = async (imdbId: string) => { setSearchResults([]); setErrorMessage(''); @@ -93,12 +79,7 @@ const MovieSearch: FunctionComponent = ({ setSearchState('loaded'); } - setSearchResults( - response.data.results?.map((r) => ({ - ...r, - available: 'unavailable', - })) || [] - ); + setSearchResults(response.data.results || []); if (response.data.results?.length) { toast(`Found ${response.data.results.length} results`, searchToastOptions); @@ -351,7 +332,14 @@ const MovieSearch: FunctionComponent = ({ Auto - {filteredResults.length} / {searchResults.length} shown + { + searchResults.filter( + (r) => + (onlyShowCached && (r.rdAvailable || r.adAvailable)) || + !onlyShowCached + ).length + }{' '} + / {searchResults.length} shown = ({ )}
- {searchState !== 'loading' && - filteredResults.map((r: SearchResult) => ( + {searchResults + .filter( + (result) => + !onlyShowCached || result.rdAvailable || result.adAvailable + ) + .map((r: SearchResult, i: number) => (
- {searchResults.map((result: MdbSearchResult) => ( -
+ {searchResults.map((result: MdbSearchResult, i: number) => ( +
i + 1 - ).map((season) => ( + ).map((season, idx) => ( diff --git a/src/pages/show/[imdbid]/[seasonNum].tsx b/src/pages/show/[imdbid]/[seasonNum].tsx index ee639ae..4c3cc69 100644 --- a/src/pages/show/[imdbid]/[seasonNum].tsx +++ b/src/pages/show/[imdbid]/[seasonNum].tsx @@ -39,7 +39,6 @@ const TvSearch: FunctionComponent = ({ const { publicRuntimeConfig: config } = getConfig(); const [searchState, setSearchState] = useState('loading'); const [searchResults, setSearchResults] = useState([]); - const [filteredResults, setFilteredResults] = useState([]); const [errorMessage, setErrorMessage] = useState(''); const rdKey = useRealDebridAccessToken(); const adKey = useAllDebridApiKey(); @@ -65,19 +64,6 @@ const TvSearch: FunctionComponent = ({ // eslint-disable-next-line react-hooks/exhaustive-deps }, [imdbid, seasonNum]); - useEffect(() => { - if (searchResults.length > 0) { - const filtered = searchResults.filter((result) => { - if (onlyShowCached) { - return result.rdAvailable || result.adAvailable; - } - return true; - }); - setFilteredResults(filtered); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [searchResults, onlyShowCached]); - const fetchData = async (imdbId: string, seasonNum: number) => { setSearchResults([]); setErrorMessage(''); @@ -255,11 +241,11 @@ const TvSearch: FunctionComponent = ({ )} <> {Array.from({ length: season_count || 0 }, (_, i) => i + 1).map( - (season) => { + (season, idx) => { const color = intSeasonNum === season ? 'red' : 'yellow'; return ( @@ -378,7 +364,14 @@ const TvSearch: FunctionComponent = ({ Auto - {filteredResults.length} / {searchResults.length} shown + { + searchResults.filter( + (r) => + (onlyShowCached && (r.rdAvailable || r.adAvailable)) || + !onlyShowCached + ).length + }{' '} + / {searchResults.length} shown = ({ )}
- {searchState !== 'loading' && - filteredResults.map((r: SearchResult) => { + {searchResults + .filter( + (result) => + !onlyShowCached || result.rdAvailable || result.adAvailable + ) + .map((r: SearchResult, i: number) => { const rdColor = r.noVideos ? 'gray' : r.rdAvailable @@ -414,7 +411,7 @@ const TvSearch: FunctionComponent = ({ : 'blue'; return (
Date: Wed, 15 Nov 2023 14:41:23 +0100 Subject: [PATCH 179/272] Add clean up function --- src/pages/hashlist.tsx | 17 ++-- src/pages/library.tsx | 124 +++++++++++++++--------- src/pages/movie/[imdbid].tsx | 4 +- src/pages/show/[imdbid]/[seasonNum].tsx | 4 +- src/utils/batch.ts | 2 +- src/utils/instantChecks.ts | 8 +- src/utils/selectable.ts | 13 ++- 7 files changed, 104 insertions(+), 68 deletions(-) diff --git a/src/pages/hashlist.tsx b/src/pages/hashlist.tsx index ba547cf..04991b8 100644 --- a/src/pages/hashlist.tsx +++ b/src/pages/hashlist.tsx @@ -19,7 +19,7 @@ import { groupBy } from '@/utils/groupBy'; import { getMediaId } from '@/utils/mediaId'; import { getTypeByName } from '@/utils/mediaType'; import getReleaseTags from '@/utils/score'; -import { getSelectableFiles, isVideoOrSubs } from '@/utils/selectable'; +import { getSelectableFiles, isVideo } from '@/utils/selectable'; import { ParsedFilename, filenameParse } from '@ctrl/video-filename-parser'; import lzString from 'lz-string'; import Head from 'next/head'; @@ -69,9 +69,7 @@ const instantCheckInRd = async ( if (!variants.length) continue; torrent.noVideos = variants.reduce((noVideo, variant) => { if (!noVideo) return false; - return !Object.values(variant).some((file) => - isVideoOrSubs({ path: file.filename }) - ); + return !Object.values(variant).some((file) => isVideo({ path: file.filename })); }, true); // because it has variants and there's at least 1 video file if (!torrent.noVideos) { @@ -114,7 +112,7 @@ export const instantCheckInAd = async ( // If 'e' property exists, check it recursively return checkVideoInFiles(curr.e); } - return !isVideoOrSubs({ path: curr.n }); + return !isVideo({ path: curr.n }); }, true); }; @@ -409,7 +407,7 @@ function TorrentsPage() { if (!rdKey) throw new Error('no_rd_key'); const response = await getTorrentInfo(rdKey, id.substring(3)); - const selectedFiles = getSelectableFiles(response.files.filter(isVideoOrSubs)).map( + const selectedFiles = getSelectableFiles(response.files.filter(isVideo)).map( (file) => file.id ); if (selectedFiles.length === 0) { @@ -509,7 +507,7 @@ function TorrentsPage() { )} - {(rdKey || adKey) && filteredList.length && ( + {(rdKey || adKey) && !!filteredList.length && ( {userTorrentsList.length - filteredList.length} torrents hidden @@ -571,7 +569,10 @@ function TorrentsPage() { `} >
` + : ''; + const speedRow = + info.status === 'downloading' + ? `` + : ''; + const seedersRow = + info.status === 'downloading' + ? `` + : ''; + + Swal.fire({ + icon: 'info', + html: ` +

${info.filename}

+
+
Date: Sun, 23 Apr 2023 22:25:40 +0200 Subject: [PATCH 027/272] 2.3.0 (#27) * Show AD/RD download buttons even if status=downloaded * 2.3.0 --- TODO.md | 3 +- package-lock.json | 4 +- package.json | 2 +- src/hooks/cache.ts | 67 +++++++++ src/pages/hashlist.tsx | 109 ++++++++------- src/pages/library.tsx | 67 +++++---- src/pages/realdebrid/login.tsx | 2 +- src/pages/search.tsx | 241 ++++++++++++++------------------- src/pages/start.tsx | 2 +- src/utils/cachedTorrentInfo.ts | 3 +- 10 files changed, 270 insertions(+), 230 deletions(-) create mode 100644 src/hooks/cache.ts diff --git a/TODO.md b/TODO.md index a0c0f7a..67dfc52 100644 --- a/TODO.md +++ b/TODO.md @@ -20,4 +20,5 @@ - [] 2.4.0: Add instant check in AD on search page (removed due to performance impact) - [] 2.5.0: Rescan library button in all other pages except library - [] 2.6.0: Add title filter buttons on search page -- [] 3.0.0: Refactor pages into different components +- [] 3.0.0: Add tests +- [] 4.0.0: Refactor pages into different components diff --git a/package-lock.json b/package-lock.json index c6df7d6..54bfd14 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "2.2.0", + "version": "2.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "2.2.0", + "version": "2.3.0", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index dcb1549..4eca713 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.2.0", + "version": "2.3.0", "private": false, "scripts": { "dev": "next dev", diff --git a/src/hooks/cache.ts b/src/hooks/cache.ts new file mode 100644 index 0000000..078223f --- /dev/null +++ b/src/hooks/cache.ts @@ -0,0 +1,67 @@ +import { CachedTorrentInfo } from '@/utils/cachedTorrentInfo'; +import useLocalStorage from './localStorage'; + +export const useDownloadsCache = (providerKey: string) => { + type cacheType = Record; + + const [cache, setCache] = useLocalStorage(`${providerKey}:downloads`, {}); + + const addOneToCache = (id: string, hash: string, status?: string) => { + if (cache && hash in cache === true) { + setCache((prev) => ({ + ...prev, + [hash]: { + ...prev[hash], + status: status === 'downloaded' ? 'downloaded' : 'downloading', + }, + })); + } else { + setCache((prev) => ({ + ...prev, + [hash]: { + id, + hash, + progress: 0, + status: status === 'downloaded' ? 'downloaded' : 'downloading', + }, + })); + } + }; + + const addManyToCache = (torrents: CachedTorrentInfo[]) => { + setCache((prev) => ({ + ...prev, + ...torrents.reduce((acc: cacheType, curr: CachedTorrentInfo) => { + acc[curr.hash] = curr; + return acc; + }, {}), + })); + }; + + const removeFromCache = (id: string) => { + if (!cache) return; + setCache((prev) => { + const hash = Object.keys(prev).find((key) => prev[key].id === id); + const newCache = { ...prev }; + if (!hash) return newCache; + delete newCache[hash]; + return newCache; + }); + }; + + const cacheUtils = { + inLibrary: (hash: string): boolean => hash in cache!, + notInLibrary: (hash: string): boolean => !cacheUtils.inLibrary(hash), + isDownloaded: (hash: string): boolean => + cacheUtils.inLibrary(hash) && cache![hash].status === 'downloaded', + isDownloading: (hash: string): boolean => + cacheUtils.inLibrary(hash) && cache![hash].status !== 'downloaded', + }; + + const adder = { + single: addOneToCache, + many: addManyToCache, + }; + + return [cache, cacheUtils, adder, removeFromCache] as const; +}; diff --git a/src/pages/hashlist.tsx b/src/pages/hashlist.tsx index 1542f13..d521d7b 100644 --- a/src/pages/hashlist.tsx +++ b/src/pages/hashlist.tsx @@ -1,9 +1,8 @@ import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; -import useLocalStorage from '@/hooks/localStorage'; -import { deleteMagnet, uploadMagnet } from '@/services/allDebrid'; +import { useDownloadsCache } from '@/hooks/cache'; +import { uploadMagnet } from '@/services/allDebrid'; import { addHashAsMagnet, deleteTorrent, getTorrentInfo, selectFiles } from '@/services/realDebrid'; import { runConcurrentFunctions } from '@/utils/batch'; -import { CachedTorrentInfo } from '@/utils/cachedTorrentInfo'; import { getMediaId } from '@/utils/mediaId'; import { getMediaType } from '@/utils/mediaType'; import getReleaseTags from '@/utils/score'; @@ -16,6 +15,7 @@ import Link from 'next/link'; import { useRouter } from 'next/router'; import { useEffect, useState } from 'react'; import { toast, Toaster } from 'react-hot-toast'; +import { FaDownload, FaTimes } from 'react-icons/fa'; const ONE_GIGABYTE = 1024 * 1024 * 1024; @@ -57,10 +57,8 @@ function TorrentsPage() { const [tvGroupingByTitle] = useState>({}); const [hasDupes] = useState>([]); const [totalBytes, setTotalBytes] = useState(0); - const [torrentCache, setTorrentCache] = useLocalStorage>( - 'userTorrentsList', - {} - ); + const [rdCache, rd, rdCacheAdder, removeFromRdCache] = useDownloadsCache('rd'); + const [adCache, ad, adCacheAdder, removeFromAdCache] = useDownloadsCache('ad'); const getUserTorrentsList = async (): Promise => { const hash = window.location.hash; @@ -197,14 +195,8 @@ function TorrentsPage() { if (!rdKey) throw new Error('no_rd_key'); const id = await addHashAsMagnet(rdKey, hash); if (!disableToast) toast.success('Successfully added as magnet!'); - setTorrentCache( - (prev) => - ({ ...prev, [hash]: { hash, status: 'downloading' } } as Record< - string, - CachedTorrentInfo - >) - ); - handleSelectFiles(id, true); + rdCacheAdder.single(`rd:${id}`, hash); + handleSelectFiles(`rd:${id}`, true); } catch (error) { if (!disableToast) toast.error( @@ -216,16 +208,12 @@ function TorrentsPage() { const handleAddAsMagnetInAd = async (hash: string, disableToast: boolean = false) => { try { - if (!rdKey) throw new Error('no_rd_key'); - await uploadMagnet(rdKey, [hash]); + if (!adKey) throw new Error('no_ad_key'); + const resp = await uploadMagnet(adKey, [hash]); + if (resp.data.magnets.length === 0 || resp.data.magnets[0].error) + throw new Error('no_magnets'); if (!disableToast) toast.success('Successfully added as magnet!'); - setTorrentCache( - (prev) => - ({ ...prev, [hash]: { hash, status: 'downloading' } } as Record< - string, - CachedTorrentInfo - >) - ); + adCacheAdder.single(`ad:${resp.data.magnets[0].id}`, hash); } catch (error) { if (!disableToast) toast.error('There was an error adding as magnet in AllDebrid. Please try again.'); @@ -242,7 +230,7 @@ function TorrentsPage() { } async function downloadNonDupeTorrentsInRd() { - const libraryHashes = Object.keys(torrentCache!); + const libraryHashes = Object.keys(rdCache!); const yetToDownload = filteredList .filter((t) => !libraryHashes.includes(t.hash)) .map(wrapDownloadFilesInRdFn); @@ -259,7 +247,7 @@ function TorrentsPage() { } async function downloadNonDupeTorrentsInAd() { - const libraryHashes = Object.keys(torrentCache!); + const libraryHashes = Object.keys(rdCache!); const yetToDownload = filteredList .filter((t) => !libraryHashes.includes(t.hash)) .map(wrapDownloadFilesInAdFn); @@ -275,25 +263,14 @@ function TorrentsPage() { } } - const inLibrary = (hash: string) => hash in torrentCache!; - const notInLibrary = (hash: string) => !inLibrary(hash); - const isDownloaded = (hash: string) => - inLibrary(hash) && torrentCache![hash].status === 'downloaded'; - const isDownloading = (hash: string) => - inLibrary(hash) && torrentCache![hash].status !== 'downloaded'; - const handleDeleteTorrent = async (id: string, disableToast: boolean = false) => { try { if (!rdKey && !adKey) throw new Error('no_keys'); if (rdKey && id.startsWith('rd:')) await deleteTorrent(rdKey, id.substring(3)); - if (adKey && id.startsWith('ad:')) await deleteMagnet(adKey, id.substring(3)); + if (adKey && id.startsWith('ad:')) await deleteTorrent(adKey, id.substring(3)); if (!disableToast) toast.success(`Download canceled (${id})`); - setTorrentCache((prevCache) => { - const updatedCache = { ...prevCache }; - const hash = Object.keys(updatedCache).find((key) => updatedCache[key].id === id); - delete updatedCache[hash!]; - return updatedCache; - }); + if (id.startsWith('rd:')) removeFromRdCache(id.substring(3)); + if (id.startsWith('ad:')) removeFromAdCache(id.substring(3)); } catch (error) { if (!disableToast) toast.error(`Error deleting torrent (${id})`); throw error; @@ -440,17 +417,26 @@ function TorrentsPage() { groupCount === 1 ? '' : 's' }` : ''; + console.log( + rd.isDownloaded(t.hash) || ad.isDownloaded(t.hash), + rd.isDownloading(t.hash) || ad.isDownloading(t.hash) + ); return (
+ {t.title}{' '} {t.score.toFixed(1)} - {(isDownloaded(t.hash) || isDownloading(t.hash)) && - `${torrentCache![t.hash].status}`} - {rdKey && notInLibrary(t.hash) && ( + {rd.isDownloading(t.hash) && rdCache![t.hash].id && ( + + )} + {rdKey && rd.notInLibrary(t.hash) && ( + )} + + {ad.isDownloading(t.hash) && adCache![t.hash].id && ( + )} - {adKey && notInLibrary(t.hash) && ( + {adKey && rd.notInLibrary(t.hash) && ( )}
{torrent.id} + {torrent.id} + {!['Invalid Magnet', 'Magnet'].includes( torrent.filename diff --git a/src/pages/realdebrid/login.tsx b/src/pages/realdebrid/login.tsx index 4092521..f9437b4 100644 --- a/src/pages/realdebrid/login.tsx +++ b/src/pages/realdebrid/login.tsx @@ -25,8 +25,8 @@ export default function RealDebridLoginPage() { // Save user code to clipboard try { await navigator.clipboard.writeText(deviceCodeResponse.user_code); - } catch (error) { setIsCopied(true); + } catch (error) { console.error('Error saving user code to clipboard:', (error as any).message); } diff --git a/src/pages/search.tsx b/src/pages/search.tsx index 2b871a7..0867951 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -1,6 +1,6 @@ import useMyAccount, { MyAccount } from '@/hooks/account'; import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; -import useLocalStorage from '@/hooks/localStorage'; +import { useDownloadsCache } from '@/hooks/cache'; import { AdInstantAvailabilityResponse, adInstantCheck, @@ -16,7 +16,6 @@ import { rdInstantCheck, selectFiles, } from '@/services/realDebrid'; -import { CachedTorrentInfo } from '@/utils/cachedTorrentInfo'; import { getMediaId } from '@/utils/mediaId'; import { getSelectableFiles, isVideo } from '@/utils/selectable'; import { withAuth } from '@/utils/withAuth'; @@ -28,7 +27,7 @@ import Link from 'next/link'; import { useRouter } from 'next/router'; import { useCallback, useEffect, useState } from 'react'; import toast, { Toaster } from 'react-hot-toast'; -import { FaDownload, FaFastForward } from 'react-icons/fa'; +import { FaDownload, FaFastForward, FaTimes } from 'react-icons/fa'; import { SearchApiResponse } from './api/search'; type Availability = 'all:available' | 'rd:available' | 'ad:available' | 'unavailable' | 'no_videos'; @@ -53,10 +52,8 @@ function Search() { const [loading, setLoading] = useState(false); const [cancelTokenSource, setCancelTokenSource] = useState(null); const [myAccount, setMyAccount] = useMyAccount(); - const [torrentCache, setTorrentCache] = useLocalStorage>( - 'userTorrentsList', - {} - ); + const [rdCache, rd, rdCacheAdder, removeFromRdCache] = useDownloadsCache('rd'); + const [adCache, ad, adCacheAdder, removeFromAdCache] = useDownloadsCache('ad'); const router = useRouter(); @@ -253,18 +250,7 @@ function Search() { if (!rdKey) throw new Error('no_rd_key'); const id = await addHashAsMagnet(rdKey, hash); if (!disableToast) toast.success('Successfully added as magnet!'); - setTorrentCache( - (prev) => - ({ - ...prev, - [hash]: { - id, - hash, - status: instantDownload ? 'downloaded' : 'downloading', - progress: 0, - }, - } as Record) - ); + rdCacheAdder.single(`rd:${id}`, hash, instantDownload ? 'downloaded' : 'downloading'); handleSelectFiles(`rd:${id}`, true); // add rd: to account for substr(3) in handleSelectFiles } catch (error) { if (!disableToast) @@ -280,19 +266,14 @@ function Search() { ) => { try { if (!adKey) throw new Error('no_ad_key'); - const id = await uploadMagnet(adKey, [hash]); + const resp = await uploadMagnet(adKey, [hash]); + if (resp.data.magnets.length === 0 || resp.data.magnets[0].error) + throw new Error('no_magnets'); if (!disableToast) toast.success('Successfully added as magnet!'); - setTorrentCache( - (prev) => - ({ - ...prev, - [hash]: { - id, - hash, - status: instantDownload ? 'downloaded' : 'downloading', - progress: 0, - }, - } as Record) + adCacheAdder.single( + `ad:${resp.data.magnets[0].id}`, + hash, + instantDownload ? 'downloaded' : 'downloading' ); } catch (error) { if (!disableToast) @@ -301,16 +282,10 @@ function Search() { } }; - const inLibrary = (hash: string) => hash in torrentCache!; - const notInLibrary = (hash: string) => !inLibrary(hash); - const isDownloaded = (hash: string) => - inLibrary(hash) && torrentCache![hash].status === 'downloaded'; - const isDownloading = (hash: string) => - inLibrary(hash) && torrentCache![hash].status !== 'downloaded'; - const isAvailableInAd = (result: SearchResult) => - result.available === 'ad:available' || result.available === 'all:available'; const isAvailableInRd = (result: SearchResult) => result.available === 'rd:available' || result.available === 'all:available'; + const isAvailableInAd = (result: SearchResult) => + result.available === 'ad:available' || result.available === 'all:available'; const handleDeleteTorrent = async (id: string, disableToast: boolean = false) => { try { @@ -318,12 +293,8 @@ function Search() { if (rdKey && id.startsWith('rd:')) await deleteTorrent(rdKey, id.substring(3)); if (adKey && id.startsWith('ad:')) await deleteMagnet(adKey, id.substring(3)); if (!disableToast) toast.success(`Download canceled (${id})`); - setTorrentCache((prevCache) => { - const updatedCache = { ...prevCache }; - const hash = Object.keys(updatedCache).find((key) => updatedCache[key].id === id); - delete updatedCache[hash!]; - return updatedCache; - }); + if (id.startsWith('rd:')) removeFromRdCache(id.substring(3)); + if (id.startsWith('ad:')) removeFromAdCache(id.substring(3)); } catch (error) { if (!disableToast) toast.error(`Error deleting torrent (${id})`); throw error; @@ -416,7 +387,7 @@ function Search() { <>

Search Results

- +
@@ -425,109 +396,107 @@ function Search() { - {searchResults.map((result: SearchResult) => ( + {searchResults.map((r: SearchResult) => ( - diff --git a/src/pages/start.tsx b/src/pages/start.tsx index 3efd1df..0c2978e 100644 --- a/src/pages/start.tsx +++ b/src/pages/start.tsx @@ -76,7 +76,7 @@ export default function StartPage() { Login with AllDebrid Date: Mon, 24 Apr 2023 01:08:29 +0200 Subject: [PATCH 028/272] 2.4.0 (#28) * update todo * add search speed --- .env | 1 + TODO.md | 8 ++++---- src/pages/api/search.ts | 20 ++++++++++++++++---- src/pages/api/slowsearch.ts | 4 +--- src/services/btdigg.ts | 28 +++++++++++++++++++++------- 5 files changed, 43 insertions(+), 18 deletions(-) diff --git a/.env b/.env index 01d4c04..7530edc 100644 --- a/.env +++ b/.env @@ -1,5 +1,6 @@ GH_PAT=github-access-token PROXY=socks5h://tor:9050 +SEARCH_SPEED_PASSWORD=123456 REDIS_SENTINEL_HOST=redis-sentinel REDIS_PASSWORD=dmm123456 diff --git a/TODO.md b/TODO.md index 67dfc52..35399d2 100644 --- a/TODO.md +++ b/TODO.md @@ -16,9 +16,9 @@ - [โœ”๏ธ] Dockerize with tor - [โœ”๏ธ] Make the architecture more scalable using docker swarm - [โœ”๏ธ] Find cached and selectable download on search -- [] 2.3.0: Show AD/RD download buttons even if status=downloaded -- [] 2.4.0: Add instant check in AD on search page (removed due to performance impact) -- [] 2.5.0: Rescan library button in all other pages except library -- [] 2.6.0: Add title filter buttons on search page +- [โœ”๏ธ] 2.3.0: Show AD/RD download buttons even if status=downloaded +- [] 2.5.0: Add instant check in AD on search page (removed due to performance impact) +- [] 2.7.0: Rescan library button in all other pages except library +- [] 2.9.0: Add title filter buttons on search page - [] 3.0.0: Add tests - [] 4.0.0: Refactor pages into different components diff --git a/src/pages/api/search.ts b/src/pages/api/search.ts index 25d1f11..4819832 100644 --- a/src/pages/api/search.ts +++ b/src/pages/api/search.ts @@ -4,8 +4,8 @@ import { flattenAndRemoveDuplicates, groupByParsedTitle, SearchResult, + searchSpeedType, } from '@/services/btdigg'; -import { RedisCache } from '@/services/cache'; import { cleanSearchQuery, getLibraryTypes } from '@/utils/search'; import { NextApiRequest, NextApiResponse } from 'next'; import { SocksProxyAgent } from 'socks-proxy-agent'; @@ -16,13 +16,12 @@ export type SearchApiResponse = { }; const agent = new SocksProxyAgent(process.env.PROXY!, { timeout: 3000 }); -const cache = new RedisCache(); export default async function handler( req: NextApiRequest, res: NextApiResponse ) { - const { search, libraryType } = req.query; + const { search, libraryType, searchSpeedPassword, searchSpeed } = req.query; if (!search || search instanceof Array) { res.status(400).json({ errorMessage: 'Missing "search" query parameter' }); @@ -34,14 +33,27 @@ export default async function handler( return; } + if (searchSpeed instanceof Array) { + res.status(400).json({ errorMessage: 'Missing "searchSpeed" query parameter' }); + return; + } + const finalQuery = cleanSearchQuery(search); const libraryTypes = getLibraryTypes(libraryType); const client = createAxiosInstance(agent); + let speed: searchSpeedType = 'veryfast'; + if (process.env.SEARCH_SPEED_PASSWORD) { + speed = + searchSpeedPassword === process.env.SEARCH_SPEED_PASSWORD + ? (searchSpeed as searchSpeedType) + : speed; + } + try { const results = []; for (const lType of libraryTypes) { - results.push(await fetchSearchResults('fast', client, finalQuery, lType, cache)); + results.push(await fetchSearchResults(speed, client, finalQuery, lType)); } let processedResults = flattenAndRemoveDuplicates(results); if (processedResults.length) processedResults = groupByParsedTitle(processedResults); diff --git a/src/pages/api/slowsearch.ts b/src/pages/api/slowsearch.ts index 0512e94..3aec946 100644 --- a/src/pages/api/slowsearch.ts +++ b/src/pages/api/slowsearch.ts @@ -5,7 +5,6 @@ import { groupByParsedTitle, SearchResult, } from '@/services/btdigg'; -import { RedisCache } from '@/services/cache'; import { cleanSearchQuery, getLibraryTypes } from '@/utils/search'; import { NextApiRequest, NextApiResponse } from 'next'; import { SocksProxyAgent } from 'socks-proxy-agent'; @@ -16,7 +15,6 @@ export type SlowSearchApiResponse = { }; const agent = new SocksProxyAgent(process.env.PROXY!, { timeout: 3000 }); -const cache = new RedisCache(); export default async function handler( req: NextApiRequest, @@ -41,7 +39,7 @@ export default async function handler( try { const results = []; for (const lType of libraryTypes) { - results.push(await fetchSearchResults('veryslow', client, finalQuery, lType, cache)); + results.push(await fetchSearchResults('veryslow', client, finalQuery, lType)); } let processedResults = flattenAndRemoveDuplicates(results); if (processedResults.length) processedResults = groupByParsedTitle(processedResults); diff --git a/src/services/btdigg.ts b/src/services/btdigg.ts index c876ec0..8fa44b7 100644 --- a/src/services/btdigg.ts +++ b/src/services/btdigg.ts @@ -21,6 +21,8 @@ export type SearchResult = { info: ParsedFilename; }; +const cache = new RedisCache(); + export const createAxiosInstance = (agent: SocksProxyAgent) => { return axios.create({ httpAgent: agent, @@ -81,12 +83,19 @@ export const groupByParsedTitle = (results: SearchResult[]): SearchResult[] => { const dhtSearchHostname = 'http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion'; +export type searchSpeedType = + | 'veryfast' + | 'fast' + | 'normal' + | 'slow' + | 'veryslow' + | 'veryslowoverride'; + export async function fetchSearchResults( - speed: 'veryfast' | 'fast' | 'normal' | 'slow' | 'veryslow', + speed: searchSpeedType, client: AxiosInstance, searchQuery: string, - libraryType: string, - cache: RedisCache + libraryType: string ): Promise { try { const finalQuery = `${searchQuery}${ @@ -94,9 +103,13 @@ export async function fetchSearchResults( }`; try { - const cached = await cache.getCachedJsonValue(finalQuery.split(' ')); - if (cached) { - return cached; + if (speed !== 'veryslowoverride') { + const cached = await cache.getCachedJsonValue( + finalQuery.split(' ') + ); + if (cached) { + return cached; + } } } catch (e: any) { console.warn(e); @@ -130,6 +143,7 @@ export async function fetchSearchResults( upperThreshold = (skipped: number): number => 80 + Math.floor(skipped / 10); break; case 'veryslow': + case 'veryslowoverride': upperThreshold = (_: any) => 100; break; } @@ -193,7 +207,7 @@ export async function fetchSearchResults( // immediately check if filesize makes sense const fileSize = parseFloat(fileSizeStr); - if (mediaType === 'movie' && fileSize > 128) { + if (mediaType === 'movie' && fileSize > 150) { skippedResults++; continue; } From 9f180d57e7cdb93f144e5fca3dda3dd9439f0a73 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Mon, 24 Apr 2023 01:28:44 +0200 Subject: [PATCH 029/272] 2.4.0 (#29) * update todo * add search speed * 2.4.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 54bfd14..f570f2f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "2.3.0", + "version": "2.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "2.3.0", + "version": "2.4.0", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 4eca713..e22b957 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.3.0", + "version": "2.4.0", "private": false, "scripts": { "dev": "next dev", From c2079eabe19bf740983f9d4b81a0530448638130 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Mon, 24 Apr 2023 02:20:17 +0200 Subject: [PATCH 030/272] 2.4.1 (#30) * Add normal and slow overrides * 2.4.1 --- package-lock.json | 4 ++-- package.json | 2 +- src/services/btdigg.ts | 6 +++++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index f570f2f..dc65cb0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "2.4.0", + "version": "2.4.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "2.4.0", + "version": "2.4.1", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index e22b957..def07ea 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.4.0", + "version": "2.4.1", "private": false, "scripts": { "dev": "next dev", diff --git a/src/services/btdigg.ts b/src/services/btdigg.ts index 8fa44b7..aedfe22 100644 --- a/src/services/btdigg.ts +++ b/src/services/btdigg.ts @@ -87,7 +87,9 @@ export type searchSpeedType = | 'veryfast' | 'fast' | 'normal' + | 'normaloverride' | 'slow' + | 'slowoverride' | 'veryslow' | 'veryslowoverride'; @@ -103,7 +105,7 @@ export async function fetchSearchResults( }`; try { - if (speed !== 'veryslowoverride') { + if (!speed.includes('override')) { const cached = await cache.getCachedJsonValue( finalQuery.split(' ') ); @@ -137,9 +139,11 @@ export async function fetchSearchResults( upperThreshold = (skipped: number): number => 40 + Math.floor(skipped / 10); break; case 'normal': + case 'normaloverride': upperThreshold = (skipped: number): number => 60 + Math.floor(skipped / 10); break; case 'slow': + case 'slowoverride': upperThreshold = (skipped: number): number => 80 + Math.floor(skipped / 10); break; case 'veryslow': From 358fa6c907a5b0031f36ce914f66a732cf426eea Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Mon, 24 Apr 2023 02:50:09 +0200 Subject: [PATCH 031/272] 2.4.2 (#31) * update threshold * 2.4.2 --- package-lock.json | 4 ++-- package.json | 2 +- src/utils/selectable.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index dc65cb0..68a92da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "2.4.1", + "version": "2.4.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "2.4.1", + "version": "2.4.2", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index def07ea..bd97e58 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.4.1", + "version": "2.4.2", "private": false, "scripts": { "dev": "next dev", diff --git a/src/utils/selectable.ts b/src/utils/selectable.ts index e0583c5..bb107f3 100644 --- a/src/utils/selectable.ts +++ b/src/utils/selectable.ts @@ -1,6 +1,6 @@ import { TorrentInfoResponse } from '@/services/realDebrid'; -const FILE_SIZE_PCT_THRESHOLD = 0.4; +const FILE_SIZE_PCT_THRESHOLD = 0.25; export function isVideo(file: { path: string }) { const filePath = file.path.toLowerCase(); From e7049f80134ddd1800bed6e3a437b9292e235b89 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Wed, 26 Apr 2023 20:57:50 +0200 Subject: [PATCH 032/272] 2.5.0 (#32) * Add search filters, add AD insta check * 2.5.0 * add groupby util * use system ids * add proper title and biggest size * add search filter buttons * update todo --- TODO.md | 4 +- package-lock.json | 4 +- package.json | 2 +- src/pages/hashlist.tsx | 12 +- src/pages/library.tsx | 8 +- src/pages/search.tsx | 317 ++++++++++++++++++++++++++++++----------- src/services/btdigg.ts | 5 +- src/utils/groupBy.ts | 4 + src/utils/mediaId.ts | 4 +- 9 files changed, 254 insertions(+), 106 deletions(-) create mode 100644 src/utils/groupBy.ts diff --git a/TODO.md b/TODO.md index 35399d2..ba82d8e 100644 --- a/TODO.md +++ b/TODO.md @@ -17,8 +17,8 @@ - [โœ”๏ธ] Make the architecture more scalable using docker swarm - [โœ”๏ธ] Find cached and selectable download on search - [โœ”๏ธ] 2.3.0: Show AD/RD download buttons even if status=downloaded -- [] 2.5.0: Add instant check in AD on search page (removed due to performance impact) +- [โœ”๏ธ] 2.5.0: Add instant check in AD on search page (removed due to performance impact) - [] 2.7.0: Rescan library button in all other pages except library -- [] 2.9.0: Add title filter buttons on search page +- [โœ”๏ธ] 2.9.0: Add title filter buttons on search page - [] 3.0.0: Add tests - [] 4.0.0: Refactor pages into different components diff --git a/package-lock.json b/package-lock.json index 68a92da..8030e5b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "2.4.2", + "version": "2.5.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "2.4.2", + "version": "2.5.0", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index bd97e58..95ad102 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.4.2", + "version": "2.5.0", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/hashlist.tsx b/src/pages/hashlist.tsx index d521d7b..f3b83be 100644 --- a/src/pages/hashlist.tsx +++ b/src/pages/hashlist.tsx @@ -269,8 +269,8 @@ function TorrentsPage() { if (rdKey && id.startsWith('rd:')) await deleteTorrent(rdKey, id.substring(3)); if (adKey && id.startsWith('ad:')) await deleteTorrent(adKey, id.substring(3)); if (!disableToast) toast.success(`Download canceled (${id})`); - if (id.startsWith('rd:')) removeFromRdCache(id.substring(3)); - if (id.startsWith('ad:')) removeFromAdCache(id.substring(3)); + if (id.startsWith('rd:')) removeFromRdCache(id); + if (id.startsWith('ad:')) removeFromAdCache(id); } catch (error) { if (!disableToast) toast.error(`Error deleting torrent (${id})`); throw error; @@ -312,7 +312,7 @@ function TorrentsPage() { {(totalBytes / ONE_GIGABYTE / 1024).toFixed(1)} TB - +

Share this page ({userTorrentsList.length} files in total; size:{' '} @@ -366,7 +366,7 @@ function TorrentsPage() { href="/hashlist" className="mr-2 mb-2 bg-yellow-400 hover:bg-yellow-500 text-black py-2 px-4 rounded" > - Clear filter + Reset )}

@@ -417,10 +417,6 @@ function TorrentsPage() { groupCount === 1 ? '' : 's' }` : ''; - console.log( - rd.isDownloaded(t.hash) || ad.isDownloaded(t.hash), - rd.isDownloading(t.hash) || ad.isDownloading(t.hash) - ); return (
Debrid Media Manager - Library - +

My Library ({userTorrentsList.length} downloads in total; size:{' '} @@ -649,7 +649,7 @@ function TorrentsPage() { : '' }`} > - Clear filter + Reset

diff --git a/src/pages/search.tsx b/src/pages/search.tsx index 0867951..839c98b 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -1,6 +1,7 @@ import useMyAccount, { MyAccount } from '@/hooks/account'; import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; import { useDownloadsCache } from '@/hooks/cache'; +import useLocalStorage from '@/hooks/localStorage'; import { AdInstantAvailabilityResponse, adInstantCheck, @@ -16,6 +17,7 @@ import { rdInstantCheck, selectFiles, } from '@/services/realDebrid'; +import { groupBy } from '@/utils/groupBy'; import { getMediaId } from '@/utils/mediaId'; import { getSelectableFiles, isVideo } from '@/utils/selectable'; import { withAuth } from '@/utils/withAuth'; @@ -31,8 +33,10 @@ import { FaDownload, FaFastForward, FaTimes } from 'react-icons/fa'; import { SearchApiResponse } from './api/search'; type Availability = 'all:available' | 'rd:available' | 'ad:available' | 'unavailable' | 'no_videos'; +type HashAvailability = Record; type SearchResult = { + mediaId: string; title: string; fileSize: number; hash: string; @@ -41,19 +45,36 @@ type SearchResult = { available: Availability; }; +type SearchFilter = { + count: number; + title: string; + biggestFileSize: number; +}; + const { publicRuntimeConfig: config } = getConfig(); function Search() { const [query, setQuery] = useState(''); const [searchResults, setSearchResults] = useState([]); + const [filteredResults, setFilteredResults] = useState([]); const [errorMessage, setErrorMessage] = useState(''); const rdKey = useRealDebridAccessToken(); const adKey = useAllDebridApiKey(); const [loading, setLoading] = useState(false); const [cancelTokenSource, setCancelTokenSource] = useState(null); const [myAccount, setMyAccount] = useMyAccount(); + const [masterAvailability, setMasterAvailability] = useState({}); + const [searchFilters, setSearchFilters] = useState>({}); const [rdCache, rd, rdCacheAdder, removeFromRdCache] = useDownloadsCache('rd'); const [adCache, ad, adCacheAdder, removeFromAdCache] = useDownloadsCache('ad'); + const [rdAutoInstantCheck, setRdAutoInstantCheck] = useLocalStorage( + 'rdAutoInstantCheck', + false + ); + // const [adAutoInstantCheck, setAdAutoInstantCheck] = useLocalStorage( + // 'adAutoInstantCheck', + // false + // ); const router = useRouter(); @@ -77,26 +98,42 @@ function Search() { const response = await axios.get(endpoint, { cancelToken: source.token, }); + setSearchResults( - response.data.searchResults?.map((r) => ({ ...r, available: 'unavailable' })) || [] + response.data.searchResults?.map((r) => ({ + ...r, + mediaId: getMediaId(r.info, r.mediaType, false), + available: 'unavailable', + })) || [] + ); + setSearchFilters( + response.data.searchResults?.reduce((acc, r) => { + const mediaId = getMediaId(r.info, r.mediaType, true); + if (acc[mediaId]) { + acc[mediaId].count += 1; + acc[mediaId].biggestFileSize = Math.max( + acc[mediaId].biggestFileSize, + r.fileSize + ); + } else { + acc[mediaId] = { + title: getMediaId(r.info, r.mediaType, false), + biggestFileSize: r.fileSize, + count: 1, + }; + } + return acc; + }, {} as Record)! ); if (response.data.searchResults?.length) { toast(`Found ${response.data.searchResults.length} results`, { icon: '๐Ÿ”' }); - const availability = await instantCheckInRd( - response.data.searchResults.map((result) => result.hash) - ); - toast( - `Found ${ - Object.values(availability).filter((a) => a.includes(':available')).length - } available in RD`, - { icon: '๐Ÿ”' } - ); - setSearchResults((prev) => - prev.map((r) => ({ ...r, available: availability[r.hash] })) - ); + + // instant checks + const hashArr = response.data.searchResults.map((r) => r.hash); + if (rdKey && rdAutoInstantCheck) await instantCheckInRd(hashArr); + // if (adKey && adAutoInstantCheck) await instantCheckInAd(hashArr); } else { toast(`No results found`, { icon: '๐Ÿ”' }); - setSearchResults([]); } } catch (error) { if (axios.isCancel(error)) { @@ -129,38 +166,56 @@ function Search() { const { query: searchQuery } = router.query; if (!searchQuery) return; const decodedQuery = decodeURIComponent(searchQuery as string); + if (decodedQuery === query) return; setQuery(decodedQuery); fetchData(decodedQuery); // eslint-disable-next-line react-hooks/exhaustive-deps }, [router.query, myAccount]); + useEffect(() => { + setSearchResults((prev) => + prev.map((r) => ({ + ...r, + available: masterAvailability[r.hash], + })) + ); + }, [masterAvailability]); + + useEffect(() => { + const { filter } = router.query; + if (!filter) { + setFilteredResults(searchResults); + } else { + const decodedFilter = decodeURIComponent(filter as string); + setFilteredResults( + searchResults.filter((r) => r.mediaId.toLocaleLowerCase() === decodedFilter) + ); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [router.query, searchResults]); + useEffect(() => { return () => { if (cancelTokenSource) cancelTokenSource.cancel(); }; }, [cancelTokenSource]); - type HashAvailability = Record; - - const instantCheckInRd = async (hashes: string[]): Promise => { - const availability = hashes.reduce((acc: HashAvailability, curr: string) => { - acc[curr] = 'unavailable'; - return acc; - }, {}); + const instantCheckInRd = async (hashes: string[]): Promise => { + const rdAvailability = {} as HashAvailability; - if (!rdKey) return availability; - - const setInstantFromRd = (rdAvailabilityResp: RdInstantAvailabilityResponse) => { - for (const masterHash in rdAvailabilityResp) { - if ('rd' in rdAvailabilityResp[masterHash] === false) continue; - const variants = rdAvailabilityResp[masterHash]['rd']; - if (variants.length) availability[masterHash] = 'no_videos'; + const setInstantFromRd = (resp: RdInstantAvailabilityResponse) => { + for (const masterHash in resp) { + if ('rd' in resp[masterHash] === false) continue; + if (masterAvailability[masterHash] === 'no_videos') continue; + const variants = resp[masterHash]['rd']; + if (!variants.length) rdAvailability[masterHash] = 'no_videos'; for (const variant of variants) { for (const fileId in variant) { const file = variant[fileId]; if (isVideo({ path: file.filename })) { - availability[masterHash] = - availability[masterHash] === 'ad:available' + rdAvailability[masterHash] = + masterAvailability[masterHash] === 'ad:available' || + masterAvailability[masterHash] === 'all:available' ? 'all:available' : 'rd:available'; break; @@ -170,16 +225,17 @@ function Search() { } }; - const groupBy = (itemLimit: number, hashes: string[]) => - Array.from({ length: Math.ceil(hashes.length / itemLimit) }, (_, i) => - hashes.slice(i * itemLimit, (i + 1) * itemLimit) - ); - try { for (const hashGroup of groupBy(100, hashes)) { if (rdKey) await rdInstantCheck(rdKey, hashGroup).then(setInstantFromRd); } - return availability; + toast( + `Found ${ + Object.values(rdAvailability).filter((a) => a.includes(':available')).length + } available in RD`, + { icon: '๐Ÿ”' } + ); + setMasterAvailability({ ...masterAvailability, ...rdAvailability }); } catch (error) { toast.error( 'There was an error checking availability in Real-Debrid. Please try again.' @@ -188,27 +244,15 @@ function Search() { } }; - // TODO: Add AD instant check-in support - const instantCheckInAd = async ( - hashes: string[], - existingAvailability?: HashAvailability - ): Promise => { - const availability = - existingAvailability || - hashes.reduce((acc: HashAvailability, curr: string) => { - acc[curr] = 'unavailable'; - return acc; - }, {}); + const instantCheckInAd = async (hashes: string[]): Promise => { + const adAvailability = {} as HashAvailability; - if (!adKey) return availability; - - const setInstantFromAd = (adAvailabilityResp: AdInstantAvailabilityResponse) => { - for (const magnetData of adAvailabilityResp.data.magnets) { + const setInstantFromAd = (resp: AdInstantAvailabilityResponse) => { + for (const magnetData of resp.data.magnets) { const masterHash = magnetData.hash; - const instant = magnetData.instant; - - if (masterHash in availability && instant === true) { - availability[masterHash] = magnetData.files?.reduce( + if (masterAvailability[masterHash] === 'no_videos') continue; + if (magnetData.instant) { + adAvailability[masterHash] = magnetData.files?.reduce( (acc: boolean, curr: MagnetFile) => { if (isVideo({ path: curr.n })) { return true; @@ -217,7 +261,8 @@ function Search() { }, false ) - ? availability[masterHash] === 'rd:available' + ? masterAvailability[masterHash] === 'rd:available' || + masterAvailability[masterHash] === 'all:available' ? 'all:available' : 'ad:available' : 'no_videos'; @@ -225,16 +270,17 @@ function Search() { } }; - const groupBy = (itemLimit: number, hashes: string[]) => - Array.from({ length: Math.ceil(hashes.length / itemLimit) }, (_, i) => - hashes.slice(i * itemLimit, (i + 1) * itemLimit) - ); - try { for (const hashGroup of groupBy(30, hashes)) { if (adKey) await adInstantCheck(adKey, hashGroup).then(setInstantFromAd); } - return availability; + toast( + `Found ${ + Object.values(adAvailability).filter((a) => a.includes(':available')).length + } available in AD`, + { icon: '๐Ÿ”' } + ); + setMasterAvailability({ ...masterAvailability, ...adAvailability }); } catch (error) { toast.error('There was an error checking availability in AllDebrid. Please try again.'); throw error; @@ -286,6 +332,7 @@ function Search() { result.available === 'rd:available' || result.available === 'all:available'; const isAvailableInAd = (result: SearchResult) => result.available === 'ad:available' || result.available === 'all:available'; + const hasNoVideos = (result: SearchResult) => result.available === 'no_videos'; const handleDeleteTorrent = async (id: string, disableToast: boolean = false) => { try { @@ -293,8 +340,8 @@ function Search() { if (rdKey && id.startsWith('rd:')) await deleteTorrent(rdKey, id.substring(3)); if (adKey && id.startsWith('ad:')) await deleteMagnet(adKey, id.substring(3)); if (!disableToast) toast.success(`Download canceled (${id})`); - if (id.startsWith('rd:')) removeFromRdCache(id.substring(3)); - if (id.startsWith('ad:')) removeFromAdCache(id.substring(3)); + if (id.startsWith('rd:')) removeFromRdCache(id); + if (id.startsWith('ad:')) removeFromAdCache(id); } catch (error) { if (!disableToast) toast.error(`Error deleting torrent (${id})`); throw error; @@ -330,11 +377,11 @@ function Search() { }; return ( -
+
Debrid Media Manager - Search: {query} - +

Search

-
+
- {loading && ( -
-
-
- )} - {errorMessage && ( -
- Error: - {errorMessage} -
- )} + {loading && ( +
+
+
+ )} + {errorMessage && ( +
+ Error: + {errorMessage} +
+ )} {searchResults.length > 0 && ( <> + {!loading && ( +
+ + { + const isChecked = event.target.checked; + setRdAutoInstantCheck(isChecked); + }} + />{' '} + + + {/* { + const isChecked = event.target.checked; + setAdAutoInstantCheck(isChecked); + }} + />{' '} + */} + + Reset + + {Object.keys(searchFilters).map((mediaId) => ( + + ))} +
+ )}

Search Results

Title
+ - {getMediaId(result.info, result.mediaType, false)} + {getMediaId(r.info, r.mediaType, false)}
- {result.title} + {r.title}
- {result.fileSize} GB + {r.fileSize} GB - {(isDownloaded(result.hash) || - (inLibrary(result.hash) && - !torrentCache![result.hash].id)) && - `${torrentCache![result.hash].status}`} - {isDownloading(result.hash) && - torrentCache![result.hash].id && ( - - )} - {notInLibrary(result.hash) && ( - <> - {rdKey && ( - + {rd.isDownloading(r.hash) && rdCache![r.hash].id && ( + + )} + {rdKey && rd.notInLibrary(r.hash) && ( + + + )} + {ad.isDownloading(r.hash) && adCache![r.hash].id && ( + + )} + {adKey && ad.notInLibrary(r.hash) && ( + )}
@@ -396,7 +527,7 @@ function Search() { - {searchResults.map((r: SearchResult) => ( + {filteredResults.map((r: SearchResult) => ( @@ -436,9 +565,17 @@ function Search() { {rdKey && rd.notInLibrary(r.hash) && (
- - {getMediaId(r.info, r.mediaType, false)} - + {r.mediaId}
{r.title}
From 36ef089689ca42b2459c49ae7886d996520f1e4d Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Wed, 26 Apr 2023 23:53:45 +0200 Subject: [PATCH 034/272] 2.5.1 (#34) --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8030e5b..af88981 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "2.5.0", + "version": "2.5.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "2.5.0", + "version": "2.5.1", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 95ad102..2520dd5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.5.0", + "version": "2.5.1", "private": false, "scripts": { "dev": "next dev", From 290c6c0bba123d021ed1782b46351b4b87f5a847 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Fri, 28 Apr 2023 02:52:44 +0200 Subject: [PATCH 035/272] 2.5.2 (#35) * add github check for version bumps * fix filtering issue * Add todo * 2.5.2 * main vs pr branch * compare to main branch * refer to origin/main * fetch-depth to 9 --- .github/workflows/check-version.yml | 38 +++++++++++++++++++++++++++++ TODO.md | 1 + package-lock.json | 4 +-- package.json | 2 +- src/pages/search.tsx | 7 ++++-- src/utils/mediaId.ts | 16 ++++++++---- 6 files changed, 58 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/check-version.yml diff --git a/.github/workflows/check-version.yml b/.github/workflows/check-version.yml new file mode 100644 index 0000000..ed7a17d --- /dev/null +++ b/.github/workflows/check-version.yml @@ -0,0 +1,38 @@ +name: Check Package Version + +on: + pull_request: + branches: [main] + +jobs: + check-package-version: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + with: + fetch-depth: 0 + - name: Check for version update in package.json + id: check-version + run: | + changed_files=$(git diff --name-only origin/main) + if echo "$changed_files" | grep --quiet 'package.json'; then + # Extract the version field value using jq + version=$(jq -r '.version' package.json) + if [[ "$version" != "$(git show origin/main:package.json | jq -r '.version')" ]]; then + echo "::set-output name=changed::true" + else + echo "::set-output name=changed::false" + fi + else + echo "::set-output name=changed::false" + fi + - name: Fail if version was not updated + if: steps.check-version.outputs.changed == 'false' + run: | + echo "The package.json version was not updated." + exit 1 + - name: Pass if version was updated + if: steps.check-version.outputs.changed == 'true' + run: | + echo "The package.json version was updated." diff --git a/TODO.md b/TODO.md index ba82d8e..436c1c7 100644 --- a/TODO.md +++ b/TODO.md @@ -20,5 +20,6 @@ - [โœ”๏ธ] 2.5.0: Add instant check in AD on search page (removed due to performance impact) - [] 2.7.0: Rescan library button in all other pages except library - [โœ”๏ธ] 2.9.0: Add title filter buttons on search page +- [] 3.0.0: Add similarity search "Did you mean... ?" - [] 3.0.0: Add tests - [] 4.0.0: Refactor pages into different components diff --git a/package-lock.json b/package-lock.json index af88981..7e4c585 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "2.5.1", + "version": "2.5.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "2.5.1", + "version": "2.5.2", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 2520dd5..fd8257a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.5.1", + "version": "2.5.2", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/search.tsx b/src/pages/search.tsx index c15e0f4..0386018 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -157,7 +157,7 @@ function Search() { if (e) e.preventDefault(); if (!typedQuery) return; router.push({ - query: { ...router.query, query: encodeURIComponent(typedQuery) }, + query: { ...router.query, query: typedQuery }, }); }, [router, typedQuery] @@ -168,6 +168,7 @@ function Search() { if (!searchQuery) return; const decodedQuery = decodeURIComponent(searchQuery as string); if (decodedQuery === query) return; + setTypedQuery(decodedQuery); setQuery(decodedQuery); fetchData(decodedQuery); // eslint-disable-next-line react-hooks/exhaustive-deps @@ -662,7 +663,9 @@ function Search() { )} {Object.keys(router.query).length !== 0 && searchResults.length === 0 && !loading && ( <> -

No results found

+

+ No results found for "{query}" +

)} diff --git a/src/utils/mediaId.ts b/src/utils/mediaId.ts index 63463dd..ed2b307 100644 --- a/src/utils/mediaId.ts +++ b/src/utils/mediaId.ts @@ -19,12 +19,18 @@ export const getMediaId = ( return titleStr; } if (seasons.length === 0) return titleStr; + const season = systemOnlyId ? 's' : 'S'; + const episode = systemOnlyId ? 'e' : 'E'; if (fullSeason) { - return `${titleStr} ${prefix('S', seasons[0])}`; + return `${titleStr} ${prefix(season, Math.min(...seasons))}`; } else if (isMultiSeason) { - return `${titleStr} ${prefix('S', seasons[0])}${'-'} - ${prefix('S', seasons[seasons.length - 1])}`; + return `${titleStr} ${prefix(season, Math.min(...seasons))}${'-'}${prefix( + season, + Math.max(...seasons) + )}`; } - return `${titleStr} ${prefix('S', seasons[0])}${' '} - ${prefix('E', episodeNumbers[0])}`; + return `${titleStr} ${prefix(season, Math.min(...seasons))}${prefix( + episode, + episodeNumbers[0] + )}`; }; From 09376c96a3515b743d10bea3ff3222d8f0fde56b Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Wed, 3 May 2023 06:42:19 +0200 Subject: [PATCH 036/272] 2.5.3 (#37) * Add token check and clear * Fix search issue * 2.5.3 --- package-lock.json | 4 ++-- package.json | 2 +- src/hooks/auth.ts | 19 +++++++++++++------ src/pages/library.tsx | 2 +- src/pages/realdebrid/login.tsx | 19 +++++++++++++------ src/utils/clearLocalStorage.ts | 9 +++++++++ 6 files changed, 39 insertions(+), 16 deletions(-) create mode 100644 src/utils/clearLocalStorage.ts diff --git a/package-lock.json b/package-lock.json index 7e4c585..5c486ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "2.5.2", + "version": "2.5.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "2.5.2", + "version": "2.5.3", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index fd8257a..808783d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.5.2", + "version": "2.5.3", "private": false, "scripts": { "dev": "next dev", diff --git a/src/hooks/auth.ts b/src/hooks/auth.ts index 21ae6b2..91b1666 100644 --- a/src/hooks/auth.ts +++ b/src/hooks/auth.ts @@ -1,5 +1,6 @@ import { getAllDebridUser } from '@/services/allDebrid'; import { getCurrentUser as getRealDebridUser, getToken } from '@/services/realDebrid'; +import { clearRdKeys } from '@/utils/clearLocalStorage'; import { useRouter } from 'next/router'; import { useEffect, useState } from 'react'; import useLocalStorage from './localStorage'; @@ -54,12 +55,18 @@ export const useRealDebridAccessToken = () => { useEffect(() => { (async () => { if (!accessToken && refreshToken && clientId && clientSecret) { - // Refresh token is available, so try to get new tokens - const response = await getToken(clientId, clientSecret, refreshToken); - if (response) { - // New tokens obtained, save them and return authenticated - const { access_token, expires_in } = response; - setAccessToken(access_token, expires_in); + try { + // Refresh token is available, so try to get new tokens + const response = await getToken(clientId, clientSecret, refreshToken); + if (response) { + // New tokens obtained, save them and return authenticated + const { access_token, expires_in } = response; + setAccessToken(access_token, expires_in); + } else { + throw new Error('Unable to get proper response'); + } + } catch (error) { + clearRdKeys(); } } })(); diff --git a/src/pages/library.tsx b/src/pages/library.tsx index a1db6bc..71c6d2f 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -326,7 +326,7 @@ function TorrentsPage() { let regexFilters: RegExp[] = []; for (const q of query.split(' ')) { try { - regexFilters.push(new RegExp(q, 'ig')); + regexFilters.push(new RegExp(q, 'i')); } catch (error) { continue; } diff --git a/src/pages/realdebrid/login.tsx b/src/pages/realdebrid/login.tsx index f9437b4..04630be 100644 --- a/src/pages/realdebrid/login.tsx +++ b/src/pages/realdebrid/login.tsx @@ -1,5 +1,6 @@ import useLocalStorage from '@/hooks/localStorage'; import { getCredentials, getDeviceCode, getToken } from '@/services/realDebrid'; +import { clearRdKeys } from '@/utils/clearLocalStorage'; import Head from 'next/head'; import { useRouter } from 'next/router'; import { useEffect, useRef, useState } from 'react'; @@ -58,12 +59,18 @@ export default function RealDebridLoginPage() { useEffect(() => { const fetchAccessToken = async () => { - // Refresh token is available, so try to get new tokens - const response = await getToken(clientId!, clientSecret!, refreshToken!); - if (response) { - // New tokens obtained, save them and return authenticated - const { access_token, expires_in } = response; - setAccessToken(access_token, expires_in); + try { + // Refresh token is available, so try to get new tokens + const response = await getToken(clientId!, clientSecret!, refreshToken!); + if (response) { + // New tokens obtained, save them and return authenticated + const { access_token, expires_in } = response; + setAccessToken(access_token, expires_in); + } else { + throw new Error('Unable to get proper response'); + } + } catch (error) { + clearRdKeys(); } }; if (!accessToken && refreshToken && clientId && clientSecret) fetchAccessToken(); diff --git a/src/utils/clearLocalStorage.ts b/src/utils/clearLocalStorage.ts new file mode 100644 index 0000000..45a487f --- /dev/null +++ b/src/utils/clearLocalStorage.ts @@ -0,0 +1,9 @@ +export const clearRdKeys = () => { + const prefix = 'rd:'; + for (let i = 0; i < window.localStorage.length; i++) { + const key = window.localStorage.key(i); + if (key && key.startsWith(prefix)) { + window.localStorage.removeItem(key); + } + } +}; From fff7e3a6c7f0e14dbc566d56971c4ac3d1811b13 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Thu, 4 May 2023 01:06:31 +0200 Subject: [PATCH 037/272] 2.5.4 (#38) * Get best downwload option, fix filter behavior on search * 2.5.4 * Add tor with healthcheck * Update compose stack --- .github/workflows/build-tor.yml | 31 +++++++++++++++++++++++++++++++ docker-compose.yml | 2 +- package-lock.json | 4 ++-- package.json | 2 +- src/pages/search.tsx | 19 +++++++++++++++---- src/services/availability.ts | 7 +++++++ src/utils/bestDownloadOption.ts | 22 ++++++++++++++++++++++ tor.Dockerfile | 16 ++++++++++++++++ 8 files changed, 95 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/build-tor.yml create mode 100644 src/services/availability.ts create mode 100644 src/utils/bestDownloadOption.ts create mode 100644 tor.Dockerfile diff --git a/.github/workflows/build-tor.yml b/.github/workflows/build-tor.yml new file mode 100644 index 0000000..43862b5 --- /dev/null +++ b/.github/workflows/build-tor.yml @@ -0,0 +1,31 @@ +name: Build Tor + +on: + push: + branches: + - main + +jobs: + tor-build-and-push: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Login to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push Docker image + id: build-image + uses: docker/build-push-action@v2 + with: + context: . + file: tor.Dockerfile + platform: linux/amd64 + push: true + tags: | + debridmediamanager/tor:latest diff --git a/docker-compose.yml b/docker-compose.yml index f6dc0e9..b687bb2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,7 +9,7 @@ services: replicas: 1 tor: - image: dockage/tor-privoxy:latest + image: debridmediamanager/tor:latest deploy: replicas: 1 diff --git a/package-lock.json b/package-lock.json index 5c486ea..f98d0df 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "2.5.3", + "version": "2.5.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "2.5.3", + "version": "2.5.4", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 808783d..9a4cd1a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.5.3", + "version": "2.5.4", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/search.tsx b/src/pages/search.tsx index 0386018..85bd4d2 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -9,6 +9,7 @@ import { MagnetFile, uploadMagnet, } from '@/services/allDebrid'; +import { Availability, HashAvailability } from '@/services/availability'; import { addHashAsMagnet, deleteTorrent, @@ -17,6 +18,7 @@ import { rdInstantCheck, selectFiles, } from '@/services/realDebrid'; +import { getBestDownloadOption } from '@/utils/bestDownloadOption'; import { groupBy } from '@/utils/groupBy'; import { getMediaId } from '@/utils/mediaId'; import { getSelectableFiles, isVideo } from '@/utils/selectable'; @@ -32,9 +34,6 @@ import toast, { Toaster } from 'react-hot-toast'; import { FaDownload, FaFastForward, FaTimes } from 'react-icons/fa'; import { SearchApiResponse } from './api/search'; -type Availability = 'all:available' | 'rd:available' | 'ad:available' | 'unavailable' | 'no_videos'; -type HashAvailability = Record; - type SearchResult = { mediaId: string; title: string; @@ -43,6 +42,7 @@ type SearchResult = { mediaType: 'movie' | 'tv'; info: ParsedFilename; available: Availability; + score: number; }; type SearchFilter = { @@ -157,7 +157,7 @@ function Search() { if (e) e.preventDefault(); if (!typedQuery) return; router.push({ - query: { ...router.query, query: typedQuery }, + query: { query: typedQuery }, }); }, [router, typedQuery] @@ -220,6 +220,7 @@ function Search() { masterAvailability[masterHash] === 'all:available' ? 'all:available' : 'rd:available'; + break; } } @@ -289,6 +290,16 @@ function Search() { } }; + // find the best download option + useEffect(() => { + const bestHash = getBestDownloadOption(searchResults, masterAvailability); + if (!bestHash) return; + // const bestResultIdx = searchResults.findIndex((r) => r.hash === bestHash); + // const bestResult = searchResults.splice(bestResultIdx, 1)[0]; + // setSearchResults([bestResult, ...searchResults]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [masterAvailability, searchResults]); + const handleAddAsMagnetInRd = async ( hash: string, instantDownload: boolean = false, diff --git a/src/services/availability.ts b/src/services/availability.ts new file mode 100644 index 0000000..82f7eac --- /dev/null +++ b/src/services/availability.ts @@ -0,0 +1,7 @@ +export type Availability = + | 'all:available' + | 'rd:available' + | 'ad:available' + | 'unavailable' + | 'no_videos'; +export type HashAvailability = Record; diff --git a/src/utils/bestDownloadOption.ts b/src/utils/bestDownloadOption.ts new file mode 100644 index 0000000..1892cbd --- /dev/null +++ b/src/utils/bestDownloadOption.ts @@ -0,0 +1,22 @@ +import { HashAvailability } from '@/services/availability'; + +export const getBestDownloadOption = ( + searchResults: { hash: string; score: number }[], + masterAvailability: HashAvailability +): string | undefined => { + if (!searchResults.length) return; + const availableHashes = Object.keys(masterAvailability).filter((key) => + masterAvailability[key].endsWith(':available') + ); + if (!availableHashes.length) return; + let bestScore = 0; + const bestHash = availableHashes.reduce((acc: string, curr: string) => { + const currScore = searchResults.find((r) => r.hash === curr)?.score || 0; + if (currScore > bestScore) { + bestScore = currScore; + return curr; + } + return acc; + }, availableHashes[0]); + return bestHash; +}; diff --git a/tor.Dockerfile b/tor.Dockerfile new file mode 100644 index 0000000..a4ca7d9 --- /dev/null +++ b/tor.Dockerfile @@ -0,0 +1,16 @@ +FROM alpine:latest + +RUN apk --no-cache --update --upgrade add tor \ + && mv /etc/tor/torrc.sample /etc/tor/torrc \ + && mkdir /etc/torrc.d \ + && sed -i \ + -e 's/#SOCKSPort 192.168.0.1:9100/SOCKSPort 0.0.0.0:9050/g' \ + -e 's/#ControlPort 9051/ControlPort 9051/g' \ + -e 's/#%include \/etc\/torrc\.d\/\*\.conf/%include \/etc\/torrc\.d\/\*\.conf/g' \ + /etc/tor/torrc \ + && rc-update add tor + +EXPOSE 9050/tcp 9051/tcp + +HEALTHCHECK --interval=10s --timeout=3s \ + CMD curl -s --socks5-hostname 127.0.0.1:9050 https://check.torproject.org/ | grep -q Congratulations || exit 1 From f0191da48fc74d6e3be3acb3c4612c3f7f2c6531 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Thu, 4 May 2023 03:03:35 +0200 Subject: [PATCH 038/272] 2.5.5 (#39) * Readd buildx * Build tor as test * Fix tor image * 2.5.5 * Build tor only in main --- .github/workflows/build-tor.yml | 3 +++ package-lock.json | 4 ++-- package.json | 2 +- tor.Dockerfile | 8 ++++---- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build-tor.yml b/.github/workflows/build-tor.yml index 43862b5..de000c6 100644 --- a/.github/workflows/build-tor.yml +++ b/.github/workflows/build-tor.yml @@ -13,6 +13,9 @@ jobs: - name: Checkout code uses: actions/checkout@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + - name: Login to Docker Hub uses: docker/login-action@v1 with: diff --git a/package-lock.json b/package-lock.json index f98d0df..e4533e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "2.5.4", + "version": "2.5.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "2.5.4", + "version": "2.5.5", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 9a4cd1a..55c442b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.5.4", + "version": "2.5.5", "private": false, "scripts": { "dev": "next dev", diff --git a/tor.Dockerfile b/tor.Dockerfile index a4ca7d9..d4e523b 100644 --- a/tor.Dockerfile +++ b/tor.Dockerfile @@ -2,13 +2,13 @@ FROM alpine:latest RUN apk --no-cache --update --upgrade add tor \ && mv /etc/tor/torrc.sample /etc/tor/torrc \ - && mkdir /etc/torrc.d \ && sed -i \ -e 's/#SOCKSPort 192.168.0.1:9100/SOCKSPort 0.0.0.0:9050/g' \ -e 's/#ControlPort 9051/ControlPort 9051/g' \ - -e 's/#%include \/etc\/torrc\.d\/\*\.conf/%include \/etc\/torrc\.d\/\*\.conf/g' \ - /etc/tor/torrc \ - && rc-update add tor + /etc/tor/torrc +RUN chown root:root /var/lib/tor + +ENTRYPOINT tor EXPOSE 9050/tcp 9051/tcp From 1f02116467eff2364d0bdade7e17a8993e341b7d Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Thu, 4 May 2023 03:56:05 +0200 Subject: [PATCH 039/272] 2.5.6 (#40) * 2.5.6 * Fix tor image --- package-lock.json | 4 ++-- package.json | 2 +- tor.Dockerfile | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index e4533e1..03b5470 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "2.5.5", + "version": "2.5.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "2.5.5", + "version": "2.5.6", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 55c442b..b29003f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.5.5", + "version": "2.5.6", "private": false, "scripts": { "dev": "next dev", diff --git a/tor.Dockerfile b/tor.Dockerfile index d4e523b..d946f57 100644 --- a/tor.Dockerfile +++ b/tor.Dockerfile @@ -4,13 +4,13 @@ RUN apk --no-cache --update --upgrade add tor \ && mv /etc/tor/torrc.sample /etc/tor/torrc \ && sed -i \ -e 's/#SOCKSPort 192.168.0.1:9100/SOCKSPort 0.0.0.0:9050/g' \ - -e 's/#ControlPort 9051/ControlPort 9051/g' \ - /etc/tor/torrc -RUN chown root:root /var/lib/tor + /etc/tor/torrc \ + && chown -R tor /var/lib/tor +USER tor ENTRYPOINT tor -EXPOSE 9050/tcp 9051/tcp +EXPOSE 9050/tcp HEALTHCHECK --interval=10s --timeout=3s \ CMD curl -s --socks5-hostname 127.0.0.1:9050 https://check.torproject.org/ | grep -q Congratulations || exit 1 From 6caf8d7256ee06109bc50b712e8d1f30374a919f Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Fri, 25 Aug 2023 20:13:39 +0000 Subject: [PATCH 040/272] latest changes --- docker-compose.yml | 16 ++++++++-------- tor.Dockerfile | 5 +++-- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index b687bb2..0bbd464 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,15 +3,15 @@ services: debugger: image: ubuntu volumes: - - redis_data:/userdata + - redis_data2:/userdata entrypoint: ['tail', '-f', '/dev/null'] deploy: replicas: 1 tor: - image: debridmediamanager/tor:latest + image: dockage/tor-privoxy deploy: - replicas: 1 + replicas: 8 web: image: debridmediamanager/debrid-media-manager:latest @@ -24,7 +24,7 @@ services: - tor - redis-sentinel deploy: - replicas: 1 + replicas: 8 restart_policy: condition: on-failure @@ -34,7 +34,7 @@ services: - REDIS_REPLICATION_MODE=master - REDIS_PASSWORD=dmm123456 volumes: - - redis_data:/bitnami/redis/data + - redis_data2:/bitnami/redis/data ports: - 6379 deploy: @@ -50,11 +50,11 @@ services: depends_on: - redis-master volumes: - - redis_data:/bitnami/redis/data + - redis_data2:/bitnami/redis/data ports: - 6379 deploy: - replicas: 1 + replicas: 8 redis-sentinel: image: bitnami/redis-sentinel:latest @@ -70,5 +70,5 @@ services: replicas: 1 volumes: - redis_data: + redis_data2: external: true diff --git a/tor.Dockerfile b/tor.Dockerfile index d946f57..75de467 100644 --- a/tor.Dockerfile +++ b/tor.Dockerfile @@ -12,5 +12,6 @@ ENTRYPOINT tor EXPOSE 9050/tcp -HEALTHCHECK --interval=10s --timeout=3s \ - CMD curl -s --socks5-hostname 127.0.0.1:9050 https://check.torproject.org/ | grep -q Congratulations || exit 1 +HEALTHCHECK --interval=120s --timeout=30s --start-period=60s --retries=5 \ + CMD curl --silent --location --socks5-hostname 127.0.0.1:9050 https://check.torproject.org/?lang=en_US | \ + grep -qm1 Congratulations From 74668189669b517b7beb51e872ab8e60db2982a2 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 26 Aug 2023 09:12:47 +0200 Subject: [PATCH 041/272] Add items to TODO --- TODO.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/TODO.md b/TODO.md index 436c1c7..a98f1ce 100644 --- a/TODO.md +++ b/TODO.md @@ -18,8 +18,10 @@ - [โœ”๏ธ] Find cached and selectable download on search - [โœ”๏ธ] 2.3.0: Show AD/RD download buttons even if status=downloaded - [โœ”๏ธ] 2.5.0: Add instant check in AD on search page (removed due to performance impact) +- [โœ”๏ธ] 2.5.0: Add title filter buttons on search page - [] 2.7.0: Rescan library button in all other pages except library -- [โœ”๏ธ] 2.9.0: Add title filter buttons on search page +- [] 2.7.0: Add Auto-DL checkbox to download the "best" option from search +- [] 2.9.0: New page: "Sync mdblist.com list" - [] 3.0.0: Add similarity search "Did you mean... ?" - [] 3.0.0: Add tests - [] 4.0.0: Refactor pages into different components From 8bbed8c3d2293f286b0fbe5d92c0811112b47072 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 26 Aug 2023 11:39:43 +0000 Subject: [PATCH 042/272] update volume and replica count --- docker-compose.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 0bbd464..77a4a48 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,7 +3,7 @@ services: debugger: image: ubuntu volumes: - - redis_data2:/userdata + - redis_data:/userdata entrypoint: ['tail', '-f', '/dev/null'] deploy: replicas: 1 @@ -11,7 +11,7 @@ services: tor: image: dockage/tor-privoxy deploy: - replicas: 8 + replicas: 4 web: image: debridmediamanager/debrid-media-manager:latest @@ -24,7 +24,7 @@ services: - tor - redis-sentinel deploy: - replicas: 8 + replicas: 4 restart_policy: condition: on-failure @@ -34,7 +34,7 @@ services: - REDIS_REPLICATION_MODE=master - REDIS_PASSWORD=dmm123456 volumes: - - redis_data2:/bitnami/redis/data + - redis_data:/bitnami/redis/data ports: - 6379 deploy: @@ -50,11 +50,11 @@ services: depends_on: - redis-master volumes: - - redis_data2:/bitnami/redis/data + - redis_data:/bitnami/redis/data ports: - 6379 deploy: - replicas: 8 + replicas: 4 redis-sentinel: image: bitnami/redis-sentinel:latest @@ -70,5 +70,5 @@ services: replicas: 1 volumes: - redis_data2: + redis_data: external: true From e0d24f65c2510fb761d58f8f021722493b858abf Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 26 Aug 2023 13:41:58 +0200 Subject: [PATCH 043/272] Support for firestore as cache --- .env | 4 + package.json | 1 + src/services/firestore.ts | 65 + yarn.lock | 4004 +++++++++++++++++++++++++++++++++++++ 4 files changed, 4074 insertions(+) create mode 100644 src/services/firestore.ts create mode 100644 yarn.lock diff --git a/.env b/.env index 7530edc..e27b9f2 100644 --- a/.env +++ b/.env @@ -4,3 +4,7 @@ SEARCH_SPEED_PASSWORD=123456 REDIS_SENTINEL_HOST=redis-sentinel REDIS_PASSWORD=dmm123456 + +FIREBASE_PROJECT_ID=project-id +FIREBASE_CLIENT_EMAIL=client@example.com +FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n" diff --git a/package.json b/package.json index b29003f..d7c4038 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ }, "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", + "@google-cloud/firestore": "^6.7.0", "@octokit/rest": "^19.0.7", "@types/ioredis": "^5.0.0", "@types/node": "18.15.10", diff --git a/src/services/firestore.ts b/src/services/firestore.ts new file mode 100644 index 0000000..df98fec --- /dev/null +++ b/src/services/firestore.ts @@ -0,0 +1,65 @@ +import { Firestore, Settings } from '@google-cloud/firestore'; + +const firebaseSettings: Settings = { + projectId: process.env.FIREBASE_PROJECT_ID, // 'debrid-media-manager', + credentials: { + client_email: process.env.FIREBASE_CLIENT_EMAIL, // 'client@example.com', + private_key: process.env.FIREBASE_PRIVATE_KEY, // '-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n' + }, + ssl: true, + maxIdleChannels: 2, + ignoreUndefinedProperties: true, + preferRest: false, +}; + +export class FirestoreCache { + private db: Firestore; + + constructor() { + this.db = new Firestore(firebaseSettings); + } + + public async cacheJsonValue(key: string[], value: T) { + const sortedKey = key.sort(); + const firestoreKey = sortedKey.join(':'); + + await this.db.runTransaction(async (t) => { + const counterDoc = this.db.doc('counters/cache'); + const counterSnap = await t.get(counterDoc); + const newCount = (counterSnap.data()?.count || 0) + 1; + + t.set(this.db.collection('cache').doc(firestoreKey), { value }); + t.set(counterDoc, { count: newCount }); + }); + } + + public async getCachedJsonValue(key: string[]): Promise { + const sortedKey = key.sort(); + const firestoreKey = sortedKey.join(':'); + const doc = await this.db.collection('cache').doc(firestoreKey).get(); + if (!doc.exists) { + return undefined; + } else { + return doc.data()?.value as T; + } + } + + public async deleteCachedJsonValue(key: string[]): Promise { + const sortedKey = key.sort(); + const firestoreKey = sortedKey.join(':'); + + await this.db.runTransaction(async (t) => { + const counterDoc = this.db.doc('counters/cache'); + const counterSnap = await t.get(counterDoc); + const newCount = (counterSnap.data()?.count || 0) - 1; + + t.delete(this.db.collection('cache').doc(firestoreKey)); + t.set(counterDoc, { count: newCount }); + }); + } + + public async getDbSize(): Promise { + const counterDoc = await this.db.doc('counters/cache').get(); + return counterDoc.data()?.count || 0; + } +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..184bdf3 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,4004 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + +"@alloc/quick-lru@^5.2.0": + version "5.2.0" + resolved "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" + integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== + +"@babel/parser@^7.20.15": + version "7.22.11" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.22.11.tgz#becf8ee33aad2a35ed5607f521fe6e72a615f905" + integrity sha512-R5zb8eJIBPJriQtbH/htEQy4k7E2dHWlD2Y2VT07JCzwYZHBxV5ZYtM0UhXSNMT74LyxuM+b1jdL7pSesXbC/g== + +"@babel/runtime@^7.20.7": + version "7.22.11" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.11.tgz#7a9ba3bbe406ad6f9e8dd4da2ece453eb23a77a4" + integrity sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA== + dependencies: + regenerator-runtime "^0.14.0" + +"@cspotcode/source-map-consumer@0.8.0": + version "0.8.0" + resolved "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" + integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== + +"@cspotcode/source-map-support@0.7.0": + version "0.7.0" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5" + integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA== + dependencies: + "@cspotcode/source-map-consumer" "0.8.0" + +"@ctrl/video-filename-parser@^4.12.0": + version "4.14.0" + resolved "https://registry.npmjs.org/@ctrl/video-filename-parser/-/video-filename-parser-4.14.0.tgz#7fd07f3eed9c27745885832190a30c898e1d2f31" + integrity sha512-9GI1ckDboHNLBeq8dF2B1fLBNr9pbiAkOhQaumDDW6EmqnVH3tnhVlWZi3Z20DjPxYRzzxhWXdbYwd8oGdbxOg== + +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0": + version "4.8.0" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.0.tgz#11195513186f68d42fbf449f9a7136b2c0c92005" + integrity sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg== + +"@eslint/eslintrc@^2.0.1": + version "2.1.2" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" + integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.36.0": + version "8.36.0" + resolved "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz#9837f768c03a1e4a30bd304a64fb8844f0e72efe" + integrity sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg== + +"@google-cloud/firestore@^6.7.0": + version "6.7.0" + resolved "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-6.7.0.tgz#9b6105442f972307ffc252b372ba7e67e38243fd" + integrity sha512-bkH2jb5KkQSUa+NAvpip9HQ+rpYhi77IaqHovWuN07adVmvNXX08gPpvPWEzoXYa/wDjEVI7LiAtCWkJJEYTNg== + dependencies: + fast-deep-equal "^3.1.1" + functional-red-black-tree "^1.0.1" + google-gax "^3.5.7" + protobufjs "^7.0.0" + +"@grpc/grpc-js@~1.8.0": + version "1.8.21" + resolved "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.21.tgz#d282b122c71227859bf6c5866f4c40f4a2696513" + integrity sha512-KeyQeZpxeEBSqFVTi3q2K7PiPXmgBfECc4updA1ejCLjYmoAlvvM3ZMp5ztTDUCUQmoY3CpDxvchjO1+rFkoHg== + dependencies: + "@grpc/proto-loader" "^0.7.0" + "@types/node" ">=12.12.47" + +"@grpc/proto-loader@^0.7.0": + version "0.7.9" + resolved "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.9.tgz#3ca68236f1a0d77566dafa53c715eb31d096279a" + integrity sha512-YJsOehVXzgurc+lLAxYnlSMc1p/Gu6VAvnfx0ATi2nzvr0YZcjhmZDeY8SeAKv1M7zE3aEJH0Xo9mK1iZ8GYoQ== + dependencies: + lodash.camelcase "^4.3.0" + long "^5.0.0" + protobufjs "^7.2.4" + yargs "^17.7.2" + +"@humanwhocodes/config-array@^0.11.8": + version "0.11.10" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" + integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@ioredis/commands@^1.1.1": + version "1.2.0" + resolved "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" + integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== + +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.9": + version "0.3.19" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" + integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@jsdoc/salty@^0.2.1": + version "0.2.5" + resolved "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz#1b2fa5bb8c66485b536d86eee877c263d322f692" + integrity sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw== + dependencies: + lodash "^4.17.21" + +"@next/env@13.2.4": + version "13.2.4" + resolved "https://registry.npmjs.org/@next/env/-/env-13.2.4.tgz#8b763700262b2445140a44a8c8d088cef676dbae" + integrity sha512-+Mq3TtpkeeKFZanPturjcXt+KHfKYnLlX6jMLyCrmpq6OOs4i1GqBOAauSkii9QeKCMTYzGppar21JU57b/GEA== + +"@next/eslint-plugin-next@13.2.4": + version "13.2.4" + resolved "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.2.4.tgz#3e124cd10ce24dab5d3448ce04104b4f1f4c6ca7" + integrity sha512-ck1lI+7r1mMJpqLNa3LJ5pxCfOB1lfJncKmRJeJxcJqcngaFwylreLP7da6Rrjr6u2gVRTfmnkSkjc80IiQCwQ== + dependencies: + glob "7.1.7" + +"@next/swc-android-arm-eabi@13.2.4": + version "13.2.4" + resolved "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.2.4.tgz#758d0403771e549f9cee71cbabc0cb16a6c947c0" + integrity sha512-DWlalTSkLjDU11MY11jg17O1gGQzpRccM9Oes2yTqj2DpHndajrXHGxj9HGtJ+idq2k7ImUdJVWS2h2l/EDJOw== + +"@next/swc-android-arm64@13.2.4": + version "13.2.4" + resolved "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.2.4.tgz#834d586523045110d5602e0c8aae9028835ac427" + integrity sha512-sRavmUImUCf332Gy+PjIfLkMhiRX1Ez4SI+3vFDRs1N5eXp+uNzjFUK/oLMMOzk6KFSkbiK/3Wt8+dHQR/flNg== + +"@next/swc-darwin-arm64@13.2.4": + version "13.2.4" + resolved "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.2.4.tgz#5006fca179a36ef3a24d293abadec7438dbb48c6" + integrity sha512-S6vBl+OrInP47TM3LlYx65betocKUUlTZDDKzTiRDbsRESeyIkBtZ6Qi5uT2zQs4imqllJznVjFd1bXLx3Aa6A== + +"@next/swc-darwin-x64@13.2.4": + version "13.2.4" + resolved "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.2.4.tgz#6549c7c04322766acc3264ccdb3e1b43fcaf7946" + integrity sha512-a6LBuoYGcFOPGd4o8TPo7wmv5FnMr+Prz+vYHopEDuhDoMSHOnC+v+Ab4D7F0NMZkvQjEJQdJS3rqgFhlZmKlw== + +"@next/swc-freebsd-x64@13.2.4": + version "13.2.4" + resolved "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.2.4.tgz#0bbe28979e3e868debc2cc06e45e186ce195b7f4" + integrity sha512-kkbzKVZGPaXRBPisoAQkh3xh22r+TD+5HwoC5bOkALraJ0dsOQgSMAvzMXKsN3tMzJUPS0tjtRf1cTzrQ0I5vQ== + +"@next/swc-linux-arm-gnueabihf@13.2.4": + version "13.2.4" + resolved "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.2.4.tgz#1d28d2203f5a7427d6e7119d7bcb5fc40959fb3e" + integrity sha512-7qA1++UY0fjprqtjBZaOA6cas/7GekpjVsZn/0uHvquuITFCdKGFCsKNBx3S0Rpxmx6WYo0GcmhNRM9ru08BGg== + +"@next/swc-linux-arm64-gnu@13.2.4": + version "13.2.4" + resolved "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.2.4.tgz#eb26448190948cdf4c44b8f34110a3ecea32f1d0" + integrity sha512-xzYZdAeq883MwXgcwc72hqo/F/dwUxCukpDOkx/j1HTq/J0wJthMGjinN9wH5bPR98Mfeh1MZJ91WWPnZOedOg== + +"@next/swc-linux-arm64-musl@13.2.4": + version "13.2.4" + resolved "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.2.4.tgz#c4227c0acd94a420bb14924820710e6284d234d3" + integrity sha512-8rXr3WfmqSiYkb71qzuDP6I6R2T2tpkmf83elDN8z783N9nvTJf2E7eLx86wu2OJCi4T05nuxCsh4IOU3LQ5xw== + +"@next/swc-linux-x64-gnu@13.2.4": + version "13.2.4" + resolved "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.2.4.tgz#6bcb540944ee9b0209b33bfc23b240c2044dfc3e" + integrity sha512-Ngxh51zGSlYJ4EfpKG4LI6WfquulNdtmHg1yuOYlaAr33KyPJp4HeN/tivBnAHcZkoNy0hh/SbwDyCnz5PFJQQ== + +"@next/swc-linux-x64-musl@13.2.4": + version "13.2.4" + resolved "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.2.4.tgz#ce21e43251eaf09a09df39372b2c3e38028c30ff" + integrity sha512-gOvwIYoSxd+j14LOcvJr+ekd9fwYT1RyMAHOp7znA10+l40wkFiMONPLWiZuHxfRk+Dy7YdNdDh3ImumvL6VwA== + +"@next/swc-win32-arm64-msvc@13.2.4": + version "13.2.4" + resolved "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.2.4.tgz#68220063d8e5e082f5465498675640dedb670ff1" + integrity sha512-q3NJzcfClgBm4HvdcnoEncmztxrA5GXqKeiZ/hADvC56pwNALt3ngDC6t6qr1YW9V/EPDxCYeaX4zYxHciW4Dw== + +"@next/swc-win32-ia32-msvc@13.2.4": + version "13.2.4" + resolved "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.2.4.tgz#7c120ab54a081be9566df310bed834f168252990" + integrity sha512-/eZ5ncmHUYtD2fc6EUmAIZlAJnVT2YmxDsKs1Ourx0ttTtvtma/WKlMV5NoUsyOez0f9ExLyOpeCoz5aj+MPXw== + +"@next/swc-win32-x64-msvc@13.2.4": + version "13.2.4" + resolved "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.2.4.tgz#5abda92fe12b9829bf7951c4a221282c56041144" + integrity sha512-0MffFmyv7tBLlji01qc0IaPP/LVExzvj7/R5x1Jph1bTAIj4Vu81yFQWHHQAP6r4ff9Ukj1mBK6MDNVXm7Tcvw== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@octokit/auth-token@^3.0.0": + version "3.0.4" + resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz#70e941ba742bdd2b49bdb7393e821dea8520a3db" + integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== + +"@octokit/core@^4.2.1": + version "4.2.4" + resolved "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz#d8769ec2b43ff37cc3ea89ec4681a20ba58ef907" + integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ== + dependencies: + "@octokit/auth-token" "^3.0.0" + "@octokit/graphql" "^5.0.0" + "@octokit/request" "^6.0.0" + "@octokit/request-error" "^3.0.0" + "@octokit/types" "^9.0.0" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^7.0.0": + version "7.0.6" + resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz#791f65d3937555141fb6c08f91d618a7d645f1e2" + integrity sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg== + dependencies: + "@octokit/types" "^9.0.0" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^5.0.0": + version "5.0.6" + resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz#9eac411ac4353ccc5d3fca7d76736e6888c5d248" + integrity sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw== + dependencies: + "@octokit/request" "^6.0.0" + "@octokit/types" "^9.0.0" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^18.0.0": + version "18.0.0" + resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz#f43d765b3c7533fd6fb88f3f25df079c24fccf69" + integrity sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw== + +"@octokit/plugin-paginate-rest@^6.1.2": + version "6.1.2" + resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz#f86456a7a1fe9e58fec6385a85cf1b34072341f8" + integrity sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ== + dependencies: + "@octokit/tsconfig" "^1.0.2" + "@octokit/types" "^9.2.3" + +"@octokit/plugin-request-log@^1.0.4": + version "1.0.4" + resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" + integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== + +"@octokit/plugin-rest-endpoint-methods@^7.1.2": + version "7.2.3" + resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz#37a84b171a6cb6658816c82c4082ac3512021797" + integrity sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA== + dependencies: + "@octokit/types" "^10.0.0" + +"@octokit/request-error@^3.0.0": + version "3.0.3" + resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" + integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== + dependencies: + "@octokit/types" "^9.0.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^6.0.0": + version "6.2.8" + resolved "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz#aaf480b32ab2b210e9dadd8271d187c93171d8eb" + integrity sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw== + dependencies: + "@octokit/endpoint" "^7.0.0" + "@octokit/request-error" "^3.0.0" + "@octokit/types" "^9.0.0" + is-plain-object "^5.0.0" + node-fetch "^2.6.7" + universal-user-agent "^6.0.0" + +"@octokit/rest@^19.0.7": + version "19.0.13" + resolved "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.13.tgz#e799393264edc6d3c67eeda9e5bd7832dcf974e4" + integrity sha512-/EzVox5V9gYGdbAI+ovYj3nXQT1TtTHRT+0eZPcuC05UFSWO3mdO9UY1C0i2eLF9Un1ONJkAk+IEtYGAC+TahA== + dependencies: + "@octokit/core" "^4.2.1" + "@octokit/plugin-paginate-rest" "^6.1.2" + "@octokit/plugin-request-log" "^1.0.4" + "@octokit/plugin-rest-endpoint-methods" "^7.1.2" + +"@octokit/tsconfig@^1.0.2": + version "1.0.2" + resolved "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz#59b024d6f3c0ed82f00d08ead5b3750469125af7" + integrity sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA== + +"@octokit/types@^10.0.0": + version "10.0.0" + resolved "https://registry.npmjs.org/@octokit/types/-/types-10.0.0.tgz#7ee19c464ea4ada306c43f1a45d444000f419a4a" + integrity sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg== + dependencies: + "@octokit/openapi-types" "^18.0.0" + +"@octokit/types@^9.0.0", "@octokit/types@^9.2.3": + version "9.3.2" + resolved "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz#3f5f89903b69f6a2d196d78ec35f888c0013cac5" + integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== + dependencies: + "@octokit/openapi-types" "^18.0.0" + +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== + +"@rushstack/eslint-patch@^1.1.3": + version "1.3.3" + resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.3.tgz#16ab6c727d8c2020a5b6e4a176a243ecd88d8d69" + integrity sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw== + +"@swc/helpers@0.4.14": + version "0.4.14" + resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" + integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== + dependencies: + tslib "^2.4.0" + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@types/glob@*": + version "8.1.0" + resolved "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz#b63e70155391b0584dce44e7ea25190bbc38f2fc" + integrity sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w== + dependencies: + "@types/minimatch" "^5.1.2" + "@types/node" "*" + +"@types/ioredis@^5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@types/ioredis/-/ioredis-5.0.0.tgz#c1ea7e2f3e2c5a942a27cfee6f62ddcfb23fb3e7" + integrity sha512-zJbJ3FVE17CNl5KXzdeSPtdltc4tMT3TzC6fxQS0sQngkbFZ6h+0uTafsRqu+eSLIugf6Yb0Ea0SUuRr42Nk9g== + dependencies: + ioredis "*" + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/linkify-it@*": + version "3.0.2" + resolved "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz#fd2cd2edbaa7eaac7e7f3c1748b52a19143846c9" + integrity sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA== + +"@types/long@^4.0.0": + version "4.0.2" + resolved "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" + integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== + +"@types/markdown-it@^12.2.3": + version "12.2.3" + resolved "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz#0d6f6e5e413f8daaa26522904597be3d6cd93b51" + integrity sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ== + dependencies: + "@types/linkify-it" "*" + "@types/mdurl" "*" + +"@types/mdurl@*": + version "1.0.2" + resolved "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" + integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== + +"@types/minimatch@^5.1.2": + version "5.1.2" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== + +"@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0": + version "20.5.6" + resolved "https://registry.npmjs.org/@types/node/-/node-20.5.6.tgz#5e9aaa86be03a09decafd61b128d6cec64a5fe40" + integrity sha512-Gi5wRGPbbyOTX+4Y2iULQ27oUPrefaB0PxGQJnfyWN3kvEDGM3mIB5M/gQLmitZf7A9FmLeaqxD3L1CXpm3VKQ== + +"@types/node@18.15.10": + version "18.15.10" + resolved "https://registry.npmjs.org/@types/node/-/node-18.15.10.tgz#4ee2171c3306a185d1208dad5f44dae3dee4cfe3" + integrity sha512-9avDaQJczATcXgfmMAW3MIWArOO7A+m90vuCFLr8AotWf8igO/mRoYukrk2cqZVtv38tHs33retzHEilM7FpeQ== + +"@types/prettier@^2.7.2": + version "2.7.3" + resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + +"@types/prop-types@*": + version "15.7.5" + resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/qs@^6.9.7": + version "6.9.7" + resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/react-dom@18.0.11": + version "18.0.11" + resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz#321351c1459bc9ca3d216aefc8a167beec334e33" + integrity sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw== + dependencies: + "@types/react" "*" + +"@types/react@*": + version "18.2.21" + resolved "https://registry.npmjs.org/@types/react/-/react-18.2.21.tgz#774c37fd01b522d0b91aed04811b58e4e0514ed9" + integrity sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/react@18.0.29": + version "18.0.29" + resolved "https://registry.npmjs.org/@types/react/-/react-18.0.29.tgz#4cead505172c0020c5b51940199e31fc6ff2f63a" + integrity sha512-wXHktgUABxplw1+UnljseDq4+uztQyp2tlWZRIxHlpchsCFqiYkvaDS8JR7eKOQm8wziTH/el5qL7D6gYNkYcw== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/rimraf@^3.0.2": + version "3.0.2" + resolved "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.2.tgz#a63d175b331748e5220ad48c901d7bbf1f44eef8" + integrity sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ== + dependencies: + "@types/glob" "*" + "@types/node" "*" + +"@types/scheduler@*": + version "0.16.3" + resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" + integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== + +"@types/uuid@^9.0.1": + version "9.0.2" + resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.2.tgz#ede1d1b1e451548d44919dc226253e32a6952c4b" + integrity sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ== + +"@typescript-eslint/parser@^5.42.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" + integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== + dependencies: + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.4.1, acorn@^8.9.0: + version "8.10.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +arg@^5.0.2: + version "5.0.2" + resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@^5.1.3: + version "5.3.0" + resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== + dependencies: + dequal "^2.0.3" + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.findlastindex@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz#bc229aef98f6bd0533a2bc61ff95209875526c9b" + integrity sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.1.3" + +array.prototype.flat@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.tosorted@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" + integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.1.3" + +arraybuffer.prototype.slice@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz#9b5ea3868a6eebc30273da577eb888381c0044bb" + integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + +arrify@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== + +asynciterator.prototype@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" + integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== + dependencies: + has-symbols "^1.0.3" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +autoprefixer@^10.4.14: + version "10.4.15" + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz#a1230f4aeb3636b89120b34a1f513e2f6834d530" + integrity sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew== + dependencies: + browserslist "^4.21.10" + caniuse-lite "^1.0.30001520" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +axe-core@^4.6.2: + version "4.7.2" + resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" + integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== + +axios@^1.3.5: + version "1.4.0" + resolved "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" + integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +axobject-query@^3.1.1: + version "3.2.1" + resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" + integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== + dependencies: + dequal "^2.0.3" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.0: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +before-after-hook@^2.2.0: + version "2.2.3" + resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" + integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== + +bignumber.js@^9.0.0: + version "9.1.1" + resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" + integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.21.10: + version "4.21.10" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" + integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== + dependencies: + caniuse-lite "^1.0.30001517" + electron-to-chromium "^1.4.477" + node-releases "^2.0.13" + update-browserslist-db "^1.0.11" + +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001517, caniuse-lite@^1.0.30001520: + version "1.0.30001523" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001523.tgz#b838f70b1a98c556776b998fafb47d2b64146d4f" + integrity sha512-I5q5cisATTPZ1mc588Z//pj/Ox80ERYDfR71YnvY7raS/NOk8xXlZcB0sF7JdqaV//kOaa6aus7lRfpdnt1eBA== + +catharsis@^0.9.0: + version "0.9.0" + resolved "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz#40382a168be0e6da308c277d3a2b3eb40c7d2121" + integrity sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A== + dependencies: + lodash "^4.17.15" + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +client-only@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" + integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +cluster-key-slot@^1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" + integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +csstype@^3.0.2: + version "3.1.2" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== + +damerau-levenshtein@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +denque@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" + integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +deprecation@^2.0.0: + version "2.3.1" + resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +didyoumean@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dlv@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +duplexify@^4.0.0: + version "4.1.2" + resolved "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" + integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== + dependencies: + end-of-stream "^1.4.1" + inherits "^2.0.3" + readable-stream "^3.1.1" + stream-shift "^1.0.0" + +ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: + version "1.0.11" + resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.4.477: + version "1.4.503" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.503.tgz#7bd43927ea9b4198697672d28d8fbd0da016a7a1" + integrity sha512-LF2IQit4B0VrUHFeQkWhZm97KuJSGF2WJqq1InpY+ECpFRkXd8yTIaTtJxsO0OKDmiBYwWqcrNaXOurn2T2wiA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^5.12.0: + version "5.15.0" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" + integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" + integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== + +es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2, es-abstract@^1.21.3: + version "1.22.1" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" + integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.1" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.2.1" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.3" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.0" + safe-array-concat "^1.0.0" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.10" + +es-iterator-helpers@^1.0.12: + version "1.0.13" + resolved "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.13.tgz#72101046ffc19baf9996adc70e6177a26e6e8084" + integrity sha512-LK3VGwzvaPWobO8xzXXGRUOGw8Dcjyfk62CsY/wfHN75CwsJPbuypOYJxK6g5RyEL8YDjIWcl6jgd8foO6mmrA== + dependencies: + asynciterator.prototype "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.21.3" + es-set-tostringtag "^2.0.1" + function-bind "^1.1.1" + get-intrinsic "^1.2.1" + globalthis "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + iterator.prototype "^1.1.0" + safe-array-concat "^1.0.0" + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escodegen@^1.13.0: + version "1.14.3" + resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-next@13.2.4: + version "13.2.4" + resolved "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.2.4.tgz#8aa4d42da3a575a814634ba9c88c8d25266c5fdd" + integrity sha512-lunIBhsoeqw6/Lfkd6zPt25w1bn0znLA/JCL+au1HoEpSb4/PpsOYsYtgV/q+YPsoKIOzFyU5xnb04iZnXjUvg== + dependencies: + "@next/eslint-plugin-next" "13.2.4" + "@rushstack/eslint-patch" "^1.1.3" + "@typescript-eslint/parser" "^5.42.0" + eslint-import-resolver-node "^0.3.6" + eslint-import-resolver-typescript "^3.5.2" + eslint-plugin-import "^2.26.0" + eslint-plugin-jsx-a11y "^6.5.1" + eslint-plugin-react "^7.31.7" + eslint-plugin-react-hooks "^4.5.0" + +eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.7: + version "0.3.9" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-import-resolver-typescript@^3.5.2: + version "3.6.0" + resolved "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz#36f93e1eb65a635e688e16cae4bead54552e3bbd" + integrity sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg== + dependencies: + debug "^4.3.4" + enhanced-resolve "^5.12.0" + eslint-module-utils "^2.7.4" + fast-glob "^3.3.1" + get-tsconfig "^4.5.0" + is-core-module "^2.11.0" + is-glob "^4.0.3" + +eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: + version "2.8.0" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + dependencies: + debug "^3.2.7" + +eslint-plugin-import@^2.26.0: + version "2.28.1" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz#63b8b5b3c409bfc75ebaf8fb206b07ab435482c4" + integrity sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A== + dependencies: + array-includes "^3.1.6" + array.prototype.findlastindex "^1.2.2" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.8.0" + has "^1.0.3" + is-core-module "^2.13.0" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.6" + object.groupby "^1.0.0" + object.values "^1.1.6" + semver "^6.3.1" + tsconfig-paths "^3.14.2" + +eslint-plugin-jsx-a11y@^6.5.1: + version "6.7.1" + resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" + integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== + dependencies: + "@babel/runtime" "^7.20.7" + aria-query "^5.1.3" + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + ast-types-flow "^0.0.7" + axe-core "^4.6.2" + axobject-query "^3.1.1" + damerau-levenshtein "^1.0.8" + emoji-regex "^9.2.2" + has "^1.0.3" + jsx-ast-utils "^3.3.3" + language-tags "=1.0.5" + minimatch "^3.1.2" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + semver "^6.3.0" + +eslint-plugin-react-hooks@^4.5.0: + version "4.6.0" + resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== + +eslint-plugin-react@^7.31.7: + version "7.33.2" + resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" + integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== + dependencies: + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + array.prototype.tosorted "^1.1.1" + doctrine "^2.1.0" + es-iterator-helpers "^1.0.12" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + object.hasown "^1.1.2" + object.values "^1.1.6" + prop-types "^15.8.1" + resolve "^2.0.0-next.4" + semver "^6.3.1" + string.prototype.matchall "^4.0.8" + +eslint-scope@^7.1.1: + version "7.2.2" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: + version "3.4.3" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@8.36.0: + version "8.36.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz#1bd72202200a5492f91803b113fb8a83b11285cf" + integrity sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + "@eslint/eslintrc" "^2.0.1" + "@eslint/js" "8.36.0" + "@humanwhocodes/config-array" "^0.11.8" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-visitor-keys "^3.3.0" + espree "^9.5.0" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.0.0, espree@^9.5.0, espree@^9.6.0: + version "9.6.1" + resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +express@^4.18.2: + version "4.18.2" + resolved "https://registry.npmjs.org/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.1: + version "3.3.1" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-text-encoding@^1.0.0, fast-text-encoding@^1.0.3: + version "1.0.6" + resolved "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz#0aa25f7f638222e3396d72bf936afcf1d42d6867" + integrity sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w== + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.1.0" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" + integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== + dependencies: + flatted "^3.2.7" + keyv "^4.5.3" + rimraf "^3.0.2" + +flatted@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +follow-redirects@^1.15.0: + version "1.15.2" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fraction.js@^4.2.0: + version "4.2.1" + resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.1.tgz#14b4cc886575a5684f8d5fd5759c5db376bb7bb8" + integrity sha512-/KxoyCnPM0GwYI4NN0Iag38Tqt+od3/mLuguepLgCAKPn0ZhC544nssAW0tG2/00zXEYl9W+7hwAIpLHo6Oc7Q== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +functions-have-names@^1.2.2, functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gaxios@^5.0.0, gaxios@^5.0.1: + version "5.1.3" + resolved "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz#f7fa92da0fe197c846441e5ead2573d4979e9013" + integrity sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA== + dependencies: + extend "^3.0.2" + https-proxy-agent "^5.0.0" + is-stream "^2.0.0" + node-fetch "^2.6.9" + +gcp-metadata@^5.3.0: + version "5.3.0" + resolved "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz#6f45eb473d0cb47d15001476b48b663744d25408" + integrity sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w== + dependencies: + gaxios "^5.0.0" + json-bigint "^1.0.0" + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-proto "^1.0.1" + has-symbols "^1.0.3" + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-tsconfig@^4.5.0: + version "4.7.0" + resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz#06ce112a1463e93196aa90320c35df5039147e34" + integrity sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw== + dependencies: + resolve-pkg-maps "^1.0.0" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@7.1.6: + version "7.1.6" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@7.1.7: + version "7.1.7" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.0.0: + version "8.1.0" + resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +globals@^13.19.0: + version "13.21.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571" + integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +goober@^2.1.10: + version "2.1.13" + resolved "https://registry.npmjs.org/goober/-/goober-2.1.13.tgz#e3c06d5578486212a76c9eba860cbc3232ff6d7c" + integrity sha512-jFj3BQeleOoy7t93E9rZ2de+ScC4lQICLwiAQmKMg9F6roKGaLSHoCDYKkWlSafg138jejvq/mTdvmnwDQgqoQ== + +google-auth-library@^8.0.2: + version "8.9.0" + resolved "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz#15a271eb2ec35d43b81deb72211bd61b1ef14dd0" + integrity sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg== + dependencies: + arrify "^2.0.0" + base64-js "^1.3.0" + ecdsa-sig-formatter "^1.0.11" + fast-text-encoding "^1.0.0" + gaxios "^5.0.0" + gcp-metadata "^5.3.0" + gtoken "^6.1.0" + jws "^4.0.0" + lru-cache "^6.0.0" + +google-gax@^3.5.7: + version "3.6.1" + resolved "https://registry.npmjs.org/google-gax/-/google-gax-3.6.1.tgz#02c78fc496f5adf86f2ca9145545f4b6575f6118" + integrity sha512-g/lcUjGcB6DSw2HxgEmCDOrI/CByOwqRvsuUvNalHUK2iPPPlmAIpbMbl62u0YufGMr8zgE3JL7th6dCb1Ry+w== + dependencies: + "@grpc/grpc-js" "~1.8.0" + "@grpc/proto-loader" "^0.7.0" + "@types/long" "^4.0.0" + "@types/rimraf" "^3.0.2" + abort-controller "^3.0.0" + duplexify "^4.0.0" + fast-text-encoding "^1.0.3" + google-auth-library "^8.0.2" + is-stream-ended "^0.1.4" + node-fetch "^2.6.1" + object-hash "^3.0.0" + proto3-json-serializer "^1.0.0" + protobufjs "7.2.4" + protobufjs-cli "1.1.1" + retry-request "^5.0.0" + +google-p12-pem@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz#82841798253c65b7dc2a4e5fe9df141db670172a" + integrity sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ== + dependencies: + node-forge "^1.3.1" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.1.9, graceful-fs@^4.2.4: + version "4.2.11" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +gtoken@^6.1.0: + version "6.1.2" + resolved "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz#aeb7bdb019ff4c3ba3ac100bbe7b6e74dce0e8bc" + integrity sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ== + dependencies: + gaxios "^5.0.1" + google-p12-pem "^4.0.0" + jws "^4.0.0" + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +internal-slot@^1.0.3, internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + +ioredis@*, ioredis@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/ioredis/-/ioredis-5.3.2.tgz#9139f596f62fc9c72d873353ac5395bcf05709f7" + integrity sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA== + dependencies: + "@ioredis/commands" "^1.1.1" + cluster-key-slot "^1.1.0" + debug "^4.3.4" + denque "^2.1.0" + lodash.defaults "^4.2.0" + lodash.isarguments "^3.1.0" + redis-errors "^1.2.0" + redis-parser "^3.0.0" + standard-as-callback "^2.1.0" + +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.9.0: + version "2.13.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1, is-date-object@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-finalizationregistry@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" + integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== + dependencies: + call-bind "^1.0.2" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-function@^1.0.10: + version "1.0.10" + resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-map@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-set@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-stream-ended@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz#f50224e95e06bce0e356d440a4827cd35b267eda" + integrity sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + +is-weakmap@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" + integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-weakset@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" + integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +iterator.prototype@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.0.tgz#690c88b043d821f783843aaf725d7ac3b62e3b46" + integrity sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw== + dependencies: + define-properties "^1.1.4" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + has-tostringtag "^1.0.0" + reflect.getprototypeof "^1.0.3" + +jiti@^1.18.2: + version "1.19.3" + resolved "https://registry.npmjs.org/jiti/-/jiti-1.19.3.tgz#ef554f76465b3c2b222dc077834a71f0d4a37569" + integrity sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w== + +js-sdsl@^4.1.4: + version "4.4.2" + resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" + integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +js2xmlparser@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz#2a1fdf01e90585ef2ae872a01bc169c6a8d5e60a" + integrity sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA== + dependencies: + xmlcreate "^2.0.4" + +jsdoc@^4.0.0: + version "4.0.2" + resolved "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz#a1273beba964cf433ddf7a70c23fd02c3c60296e" + integrity sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg== + dependencies: + "@babel/parser" "^7.20.15" + "@jsdoc/salty" "^0.2.1" + "@types/markdown-it" "^12.2.3" + bluebird "^3.7.2" + catharsis "^0.9.0" + escape-string-regexp "^2.0.0" + js2xmlparser "^4.0.2" + klaw "^3.0.0" + markdown-it "^12.3.2" + markdown-it-anchor "^8.4.1" + marked "^4.0.10" + mkdirp "^1.0.4" + requizzle "^0.2.3" + strip-json-comments "^3.1.0" + underscore "~1.13.2" + +json-bigint@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" + integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== + dependencies: + bignumber.js "^9.0.0" + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: + version "3.3.5" + resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" + +jwa@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc" + integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4" + integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== + dependencies: + jwa "^2.0.0" + safe-buffer "^5.0.1" + +keyv@^4.5.3: + version "4.5.3" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" + integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + dependencies: + json-buffer "3.0.1" + +klaw@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz#b11bec9cf2492f06756d6e809ab73a2910259146" + integrity sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g== + dependencies: + graceful-fs "^4.1.9" + +language-subtag-registry@~0.3.2: + version "0.3.22" + resolved "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" + integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== + +language-tags@=1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== + dependencies: + language-subtag-registry "~0.3.2" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lilconfig@^2.0.5, lilconfig@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +linkify-it@^3.0.1: + version "3.0.3" + resolved "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz#a98baf44ce45a550efb4d49c769d07524cc2fa2e" + integrity sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ== + dependencies: + uc.micro "^1.0.1" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== + +lodash.isarguments@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.15, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +long@^5.0.0: + version "5.2.3" + resolved "https://registry.npmjs.org/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" + integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== + +loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lz-string@^1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" + integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +markdown-it-anchor@^8.4.1: + version "8.6.7" + resolved "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz#ee6926daf3ad1ed5e4e3968b1740eef1c6399634" + integrity sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA== + +markdown-it@^12.3.2: + version "12.3.2" + resolved "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz#bf92ac92283fe983fe4de8ff8abfb5ad72cd0c90" + integrity sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg== + dependencies: + argparse "^2.0.1" + entities "~2.1.0" + linkify-it "^3.0.1" + mdurl "^1.0.1" + uc.micro "^1.0.5" + +marked@^4.0.10: + version "4.3.0" + resolved "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" + integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== + +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanoid@^3.3.4, nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +next@13.2.4: + version "13.2.4" + resolved "https://registry.npmjs.org/next/-/next-13.2.4.tgz#2363330392b0f7da02ab41301f60857ffa7f67d6" + integrity sha512-g1I30317cThkEpvzfXujf0O4wtaQHtDCLhlivwlTJ885Ld+eOgcz7r3TGQzeU+cSRoNHtD8tsJgzxVdYojFssw== + dependencies: + "@next/env" "13.2.4" + "@swc/helpers" "0.4.14" + caniuse-lite "^1.0.30001406" + postcss "8.4.14" + styled-jsx "5.1.1" + optionalDependencies: + "@next/swc-android-arm-eabi" "13.2.4" + "@next/swc-android-arm64" "13.2.4" + "@next/swc-darwin-arm64" "13.2.4" + "@next/swc-darwin-x64" "13.2.4" + "@next/swc-freebsd-x64" "13.2.4" + "@next/swc-linux-arm-gnueabihf" "13.2.4" + "@next/swc-linux-arm64-gnu" "13.2.4" + "@next/swc-linux-arm64-musl" "13.2.4" + "@next/swc-linux-x64-gnu" "13.2.4" + "@next/swc-linux-x64-musl" "13.2.4" + "@next/swc-win32-arm64-msvc" "13.2.4" + "@next/swc-win32-ia32-msvc" "13.2.4" + "@next/swc-win32-x64-msvc" "13.2.4" + +node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@^2.6.9: + version "2.7.0" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-releases@^2.0.13: + version "2.0.13" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" + integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +object-assign@^4.0.1, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + +object-inspect@^1.12.3, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.6: + version "1.1.6" + resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" + integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.fromentries@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" + integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.groupby@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.0.tgz#cb29259cf90f37e7bac6437686c1ea8c916d12a9" + integrity sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.21.2" + get-intrinsic "^1.2.1" + +object.hasown@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" + integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== + dependencies: + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +once@^1.3.0, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.9.1: + version "0.9.3" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pirates@^4.0.1: + version "4.0.6" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +postcss-import@^15.1.0: + version "15.1.0" + resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" + integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-js@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" + integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== + dependencies: + camelcase-css "^2.0.1" + +postcss-load-config@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd" + integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== + dependencies: + lilconfig "^2.0.5" + yaml "^2.1.1" + +postcss-nested@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c" + integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== + dependencies: + postcss-selector-parser "^6.0.11" + +postcss-selector-parser@^6.0.11: + version "6.0.13" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" + integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@8.4.14: + version "8.4.14" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +postcss@^8.4.21, postcss@^8.4.23: + version "8.4.28" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz#c6cc681ed00109072816e1557f889ef51cf950a5" + integrity sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + +prettier-plugin-organize-imports@^3.2.2: + version "3.2.3" + resolved "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-3.2.3.tgz#6b0141ac71f7ee9a673ce83e95456319e3a7cf0d" + integrity sha512-KFvk8C/zGyvUaE3RvxN2MhCLwzV6OBbFSkwZ2OamCrs9ZY4i5L77jQ/w4UmUr+lqX8qbaqVq6bZZkApn+IgJSg== + +prettier-plugin-sort-json@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/prettier-plugin-sort-json/-/prettier-plugin-sort-json-1.0.0.tgz#fe677d5537b6d79d12ffaf1604046a3d3ee2427c" + integrity sha512-XgcaF/Sojax1vD6j53wNIByx0rp7ecang+A8W0eM+Ks3yBFu/qXjJNvUtC1lEWeYbNfmRs/d8FyYJCYozAVENw== + dependencies: + "@types/prettier" "^2.7.2" + +prettier@^2.8.7: + version "2.8.8" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +proto3-json-serializer@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.1.tgz#1b5703152b6ce811c5cdcc6468032caf53521331" + integrity sha512-AwAuY4g9nxx0u52DnSMkqqgyLHaW/XaPLtaAo3y/ZCfeaQB/g4YDH4kb8Wc/mWzWvu0YjOznVnfn373MVZZrgw== + dependencies: + protobufjs "^7.0.0" + +protobufjs-cli@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.1.1.tgz#f531201b1c8c7772066aa822bf9a08318b24a704" + integrity sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA== + dependencies: + chalk "^4.0.0" + escodegen "^1.13.0" + espree "^9.0.0" + estraverse "^5.1.0" + glob "^8.0.0" + jsdoc "^4.0.0" + minimist "^1.2.0" + semver "^7.1.2" + tmp "^0.2.1" + uglify-js "^3.7.7" + +protobufjs@7.2.4: + version "7.2.4" + resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz#3fc1ec0cdc89dd91aef9ba6037ba07408485c3ae" + integrity sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/node" ">=13.7.0" + long "^5.0.0" + +protobufjs@^7.0.0, protobufjs@^7.2.4: + version "7.2.5" + resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz#45d5c57387a6d29a17aab6846dcc283f9b8e7f2d" + integrity sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/node" ">=13.7.0" + long "^5.0.0" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +qs@^6.11.1: + version "6.11.2" + resolved "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== + dependencies: + side-channel "^1.0.4" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-dom@18.2.0: + version "18.2.0" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + +react-hot-toast@^2.4.0: + version "2.4.1" + resolved "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.4.1.tgz#df04295eda8a7b12c4f968e54a61c8d36f4c0994" + integrity sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ== + dependencies: + goober "^2.1.10" + +react-icons@^4.8.0: + version "4.10.1" + resolved "https://registry.npmjs.org/react-icons/-/react-icons-4.10.1.tgz#3f3b5eec1f63c1796f6a26174a1091ca6437a500" + integrity sha512-/ngzDP/77tlCfqthiiGNZeYFACw85fUjZtLbedmJ5DTlNDIwETxhwBzdOJ21zj4iJdvc0J3y7yOsX3PpxAJzrw== + +react-is@^16.13.1: + version "16.13.1" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react@18.2.0: + version "18.2.0" + resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== + dependencies: + pify "^2.3.0" + +readable-stream@^3.1.1: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +redis-errors@^1.0.0, redis-errors@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" + integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== + +redis-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" + integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== + dependencies: + redis-errors "^1.0.0" + +reflect.getprototypeof@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz#2738fd896fcc3477ffbd4190b40c2458026b6928" + integrity sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.1" + globalthis "^1.0.3" + which-builtin-type "^1.1.3" + +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + +regexp.prototype.flags@^1.4.3, regexp.prototype.flags@^1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + functions-have-names "^1.2.3" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +requizzle@^0.2.3: + version "0.2.4" + resolved "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz#319eb658b28c370f0c20f968fa8ceab98c13d27c" + integrity sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw== + dependencies: + lodash "^4.17.21" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + +resolve@^1.1.7, resolve@^1.22.2, resolve@^1.22.4: + version "1.22.4" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" + integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^2.0.0-next.4: + version "2.0.0-next.4" + resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" + integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +retry-request@^5.0.0: + version "5.0.2" + resolved "https://registry.npmjs.org/retry-request/-/retry-request-5.0.2.tgz#143d85f90c755af407fcc46b7166a4ba520e44da" + integrity sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ== + dependencies: + debug "^4.1.1" + extend "^3.0.2" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-array-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" + integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + +semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.1.2, semver@^7.3.7: + version "7.5.4" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.7.1" + resolved "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +standard-as-callback@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" + integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.matchall@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" + integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.4.3" + side-channel "^1.0.4" + +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +styled-jsx@5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f" + integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw== + dependencies: + client-only "0.0.1" + +sucrase@^3.32.0: + version "3.34.0" + resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f" + integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + glob "7.1.6" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tailwindcss@^3.2.7: + version "3.3.3" + resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz#90da807393a2859189e48e9e7000e6880a736daf" + integrity sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w== + dependencies: + "@alloc/quick-lru" "^5.2.0" + arg "^5.0.2" + chokidar "^3.5.3" + didyoumean "^1.2.2" + dlv "^1.1.3" + fast-glob "^3.2.12" + glob-parent "^6.0.2" + is-glob "^4.0.3" + jiti "^1.18.2" + lilconfig "^2.1.0" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-hash "^3.0.0" + picocolors "^1.0.0" + postcss "^8.4.23" + postcss-import "^15.1.0" + postcss-js "^4.0.1" + postcss-load-config "^4.0.1" + postcss-nested "^6.0.1" + postcss-selector-parser "^6.0.11" + resolve "^1.22.2" + sucrase "^3.32.0" + +tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +tmp@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + +ts-node@10.7.0: + version "10.7.0" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz#35d503d0fab3e2baa672a0e94f4b40653c2463f5" + integrity sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A== + dependencies: + "@cspotcode/source-map-support" "0.7.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.0" + yn "3.1.1" + +tsconfig-paths@^3.14.2: + version "3.14.2" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.4.0: + version "2.6.2" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typescript@5.0.2: + version "5.0.2" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz#891e1a90c5189d8506af64b9ef929fca99ba1ee5" + integrity sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw== + +uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.6" + resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== + +uglify-js@^3.7.7: + version "3.17.4" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +underscore@~1.13.2: + version "1.13.6" + resolved "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441" + integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== + +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-browserslist-db@^1.0.11: + version "1.0.11" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@^1.0.1, util-deprecate@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + +v8-compile-cache-lib@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-builtin-type@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" + integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== + dependencies: + function.prototype.name "^1.1.5" + has-tostringtag "^1.0.0" + is-async-function "^2.0.0" + is-date-object "^1.0.5" + is-finalizationregistry "^1.0.2" + is-generator-function "^1.0.10" + is-regex "^1.1.4" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + +which-collection@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" + integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + dependencies: + is-map "^2.0.1" + is-set "^2.0.1" + is-weakmap "^2.0.1" + is-weakset "^2.0.1" + +which-typed-array@^1.1.10, which-typed-array@^1.1.11, which-typed-array@^1.1.9: + version "1.1.11" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" + integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@~1.2.3: + version "1.2.5" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +xmlcreate@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz#0c5ab0f99cdd02a81065fa9cd8f8ae87624889be" + integrity sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^2.1.1: + version "2.3.1" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" + integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.7.2: + version "17.7.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 63fadff05a48aa684c168f4eae1f64f85f01c2c2 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 26 Aug 2023 13:45:39 +0200 Subject: [PATCH 044/272] update refs to firestore cache --- src/pages/api/dbsize.ts | 4 ++-- src/services/btdigg.ts | 4 ++-- src/services/firestore.ts | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/pages/api/dbsize.ts b/src/pages/api/dbsize.ts index 022a18f..37e4024 100644 --- a/src/pages/api/dbsize.ts +++ b/src/pages/api/dbsize.ts @@ -1,7 +1,7 @@ -import { RedisCache } from '@/services/cache'; +import { FirestoreCache } from '@/services/firestore'; import { NextApiHandler } from 'next'; -const cache = new RedisCache(); +const cache = new FirestoreCache(); const handler: NextApiHandler = async (req, res) => { try { diff --git a/src/services/btdigg.ts b/src/services/btdigg.ts index 5382b45..5ef1054 100644 --- a/src/services/btdigg.ts +++ b/src/services/btdigg.ts @@ -4,7 +4,7 @@ import getReleaseTags from '@/utils/score'; import { filenameParse, ParsedFilename } from '@ctrl/video-filename-parser'; import axios, { AxiosInstance } from 'axios'; import { SocksProxyAgent } from 'socks-proxy-agent'; -import { RedisCache } from './cache'; +import { FirestoreCache } from './firestore'; export type SearchResult = { title: string; @@ -21,7 +21,7 @@ export type SearchResult = { info: ParsedFilename; }; -const cache = new RedisCache(); +const cache = new FirestoreCache(); export const createAxiosInstance = (agent: SocksProxyAgent) => { return axios.create({ diff --git a/src/services/firestore.ts b/src/services/firestore.ts index df98fec..0540f43 100644 --- a/src/services/firestore.ts +++ b/src/services/firestore.ts @@ -1,10 +1,10 @@ import { Firestore, Settings } from '@google-cloud/firestore'; const firebaseSettings: Settings = { - projectId: process.env.FIREBASE_PROJECT_ID, // 'debrid-media-manager', + projectId: process.env.FIREBASE_PROJECT_ID, credentials: { - client_email: process.env.FIREBASE_CLIENT_EMAIL, // 'client@example.com', - private_key: process.env.FIREBASE_PRIVATE_KEY, // '-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n' + client_email: process.env.FIREBASE_CLIENT_EMAIL, + private_key: process.env.FIREBASE_PRIVATE_KEY, }, ssl: true, maxIdleChannels: 2, From 7d233fc60995095d297c92524c88ded6433658c7 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 26 Aug 2023 13:53:47 +0200 Subject: [PATCH 045/272] use npm instead of yarn --- package-lock.json | 995 ++++++++++- yarn.lock | 4004 --------------------------------------------- 2 files changed, 989 insertions(+), 4010 deletions(-) delete mode 100644 yarn.lock diff --git a/package-lock.json b/package-lock.json index 03b5470..b92eb1c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "2.5.6", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", + "@google-cloud/firestore": "^6.7.0", "@octokit/rest": "^19.0.7", "@types/ioredis": "^5.0.0", "@types/node": "18.15.10", @@ -44,6 +45,17 @@ "typescript": "4.5.2" } }, + "node_modules/@babel/parser": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.11.tgz", + "integrity": "sha512-R5zb8eJIBPJriQtbH/htEQy4k7E2dHWlD2Y2VT07JCzwYZHBxV5ZYtM0UhXSNMT74LyxuM+b1jdL7pSesXbC/g==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/runtime": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", @@ -136,6 +148,49 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@google-cloud/firestore": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-6.7.0.tgz", + "integrity": "sha512-bkH2jb5KkQSUa+NAvpip9HQ+rpYhi77IaqHovWuN07adVmvNXX08gPpvPWEzoXYa/wDjEVI7LiAtCWkJJEYTNg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "functional-red-black-tree": "^1.0.1", + "google-gax": "^3.5.7", + "protobufjs": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.8.21", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.21.tgz", + "integrity": "sha512-KeyQeZpxeEBSqFVTi3q2K7PiPXmgBfECc4updA1ejCLjYmoAlvvM3ZMp5ztTDUCUQmoY3CpDxvchjO1+rFkoHg==", + "dependencies": { + "@grpc/proto-loader": "^0.7.0", + "@types/node": ">=12.12.47" + }, + "engines": { + "node": "^8.13.0 || >=10.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.9.tgz", + "integrity": "sha512-YJsOehVXzgurc+lLAxYnlSMc1p/Gu6VAvnfx0ATi2nzvr0YZcjhmZDeY8SeAKv1M7zE3aEJH0Xo9mK1iZ8GYoQ==", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.4", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.8", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", @@ -225,6 +280,17 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, + "node_modules/@jsdoc/salty": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz", + "integrity": "sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw==", + "dependencies": { + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=v12.0.0" + } + }, "node_modules/@next/env": { "version": "13.2.4", "resolved": "https://registry.npmjs.org/@next/env/-/env-13.2.4.tgz", @@ -631,6 +697,60 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, "node_modules/@rushstack/eslint-patch": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", @@ -668,6 +788,15 @@ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, + "node_modules/@types/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", + "dependencies": { + "@types/minimatch": "^5.1.2", + "@types/node": "*" + } + }, "node_modules/@types/ioredis": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@types/ioredis/-/ioredis-5.0.0.tgz", @@ -682,11 +811,39 @@ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" }, + "node_modules/@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" + }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, + "node_modules/@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "dependencies": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" + }, "node_modules/@types/node": { "version": "16.18.24", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.24.tgz", - "integrity": "sha512-zvSN2Esek1aeLdKDYuntKAYjti9Z2oT4I8bfkLLhIxHlv3dwZ5vvATxOc31820iYm4hQRCwjUgDpwSMFjfTUnw==", - "dev": true + "integrity": "sha512-zvSN2Esek1aeLdKDYuntKAYjti9Z2oT4I8bfkLLhIxHlv3dwZ5vvATxOc31820iYm4hQRCwjUgDpwSMFjfTUnw==" }, "node_modules/@types/prettier": { "version": "2.7.2", @@ -723,6 +880,15 @@ "@types/react": "*" } }, + "node_modules/@types/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==", + "dependencies": { + "@types/glob": "*", + "@types/node": "*" + } + }, "node_modules/@types/scheduler": { "version": "0.16.3", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", @@ -829,6 +995,17 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -1044,6 +1221,14 @@ "get-intrinsic": "^1.1.3" } }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "engines": { + "node": ">=8" + } + }, "node_modules/ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -1129,11 +1314,38 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/before-after-hook": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" }, + "node_modules/bignumber.js": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", + "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -1143,6 +1355,11 @@ "node": ">=8" } }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, "node_modules/body-parser": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", @@ -1241,6 +1458,11 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -1297,6 +1519,17 @@ } ] }, + "node_modules/catharsis": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", + "dependencies": { + "lodash": "^4.17.15" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1356,6 +1589,19 @@ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/cluster-key-slot": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", @@ -1630,6 +1876,25 @@ "node": ">=6.0.0" } }, + "node_modules/duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -1654,6 +1919,14 @@ "node": ">= 0.8" } }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/enhanced-resolve": { "version": "5.13.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz", @@ -1666,6 +1939,14 @@ "node": ">=10.13.0" } }, + "node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/es-abstract": { "version": "1.21.2", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", @@ -1773,7 +2054,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, "engines": { "node": ">=6" } @@ -1794,6 +2074,82 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/eslint": { "version": "8.36.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz", @@ -2179,6 +2535,18 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esquery": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", @@ -2225,6 +2593,14 @@ "node": ">= 0.6" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/express": { "version": "4.18.2", "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", @@ -2293,6 +2669,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2334,6 +2715,11 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, + "node_modules/fast-text-encoding": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" + }, "node_modules/fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -2536,6 +2922,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -2544,6 +2935,40 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gaxios": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", + "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/gcp-metadata": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", + "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", + "dependencies": { + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-intrinsic": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", @@ -2675,6 +3100,91 @@ "csstype": "^3.0.10" } }, + "node_modules/google-auth-library": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz", + "integrity": "sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==", + "dependencies": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^5.0.0", + "gcp-metadata": "^5.3.0", + "gtoken": "^6.1.0", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/google-gax": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.6.1.tgz", + "integrity": "sha512-g/lcUjGcB6DSw2HxgEmCDOrI/CByOwqRvsuUvNalHUK2iPPPlmAIpbMbl62u0YufGMr8zgE3JL7th6dCb1Ry+w==", + "dependencies": { + "@grpc/grpc-js": "~1.8.0", + "@grpc/proto-loader": "^0.7.0", + "@types/long": "^4.0.0", + "@types/rimraf": "^3.0.2", + "abort-controller": "^3.0.0", + "duplexify": "^4.0.0", + "fast-text-encoding": "^1.0.3", + "google-auth-library": "^8.0.2", + "is-stream-ended": "^0.1.4", + "node-fetch": "^2.6.1", + "object-hash": "^3.0.0", + "proto3-json-serializer": "^1.0.0", + "protobufjs": "7.2.4", + "protobufjs-cli": "1.1.1", + "retry-request": "^5.0.0" + }, + "bin": { + "compileProtos": "build/tools/compileProtos.js", + "minifyProtoJson": "build/tools/minify.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/google-gax/node_modules/protobufjs": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", + "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/google-p12-pem": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", + "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", + "dependencies": { + "node-forge": "^1.3.1" + }, + "bin": { + "gp12-pem": "build/src/bin/gp12-pem.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -2696,6 +3206,19 @@ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" }, + "node_modules/gtoken": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", + "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", + "dependencies": { + "gaxios": "^5.0.1", + "google-p12-pem": "^4.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -2785,6 +3308,18 @@ "node": ">= 0.8" } }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -3014,6 +3549,14 @@ "node": ">=0.10.0" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -3116,6 +3659,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-stream-ended": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", + "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" + }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -3248,6 +3807,58 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", + "dependencies": { + "xmlcreate": "^2.0.4" + } + }, + "node_modules/jsdoc": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", + "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", + "dependencies": { + "@babel/parser": "^7.20.15", + "@jsdoc/salty": "^0.2.1", + "@types/markdown-it": "^12.2.3", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^3.0.0", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "underscore": "~1.13.2" + }, + "bin": { + "jsdoc": "jsdoc.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jsdoc/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -3281,6 +3892,33 @@ "node": ">=4.0" } }, + "node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dependencies": { + "graceful-fs": "^4.1.9" + } + }, "node_modules/language-subtag-registry": { "version": "0.3.22", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", @@ -3321,6 +3959,14 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dependencies": { + "uc.micro": "^1.0.1" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -3335,6 +3981,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, "node_modules/lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", @@ -3350,6 +4006,11 @@ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, + "node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -3386,6 +4047,46 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dependencies": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it-anchor": { + "version": "8.6.7", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", + "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" + } + }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -3476,6 +4177,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -3619,6 +4331,14 @@ } } }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } + }, "node_modules/node-releases": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", @@ -3655,7 +4375,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, "engines": { "node": ">= 6" } @@ -4138,6 +4857,104 @@ "react-is": "^16.13.1" } }, + "node_modules/proto3-json-serializer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.1.tgz", + "integrity": "sha512-AwAuY4g9nxx0u52DnSMkqqgyLHaW/XaPLtaAo3y/ZCfeaQB/g4YDH4kb8Wc/mWzWvu0YjOznVnfn373MVZZrgw==", + "dependencies": { + "protobufjs": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/protobufjs": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", + "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/protobufjs-cli": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.1.1.tgz", + "integrity": "sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA==", + "dependencies": { + "chalk": "^4.0.0", + "escodegen": "^1.13.0", + "espree": "^9.0.0", + "estraverse": "^5.1.0", + "glob": "^8.0.0", + "jsdoc": "^4.0.0", + "minimist": "^1.2.0", + "semver": "^7.1.2", + "tmp": "^0.2.1", + "uglify-js": "^3.7.7" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "protobufjs": "^7.0.0" + } + }, + "node_modules/protobufjs-cli/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/protobufjs-cli/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/protobufjs-cli/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -4290,6 +5107,19 @@ "pify": "^2.3.0" } }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -4342,6 +5172,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", + "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", + "dependencies": { + "lodash": "^4.17.21" + } + }, "node_modules/resolve": { "version": "1.22.2", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", @@ -4366,6 +5212,18 @@ "node": ">=4" } }, + "node_modules/retry-request": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-5.0.2.tgz", + "integrity": "sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ==", + "dependencies": { + "debug": "^4.1.1", + "extend": "^3.0.2" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -4605,6 +5463,15 @@ "node": ">= 10" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -4637,6 +5504,37 @@ "node": ">= 0.4" } }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, "node_modules/string.prototype.matchall": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", @@ -4913,6 +5811,17 @@ "globrex": "^0.1.2" } }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -5086,6 +5995,22 @@ "node": ">=4.2.0" } }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -5100,6 +6025,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + }, "node_modules/universal-user-agent": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", @@ -5154,8 +6084,7 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/utils-merge": { "version": "1.0.1", @@ -5271,11 +6200,40 @@ "node": ">=0.10.0" } }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "node_modules/xmlcreate": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -5290,6 +6248,31 @@ "node": ">= 6" } }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 184bdf3..0000000 --- a/yarn.lock +++ /dev/null @@ -1,4004 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@alloc/quick-lru@^5.2.0": - version "5.2.0" - resolved "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" - integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== - -"@babel/parser@^7.20.15": - version "7.22.11" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.22.11.tgz#becf8ee33aad2a35ed5607f521fe6e72a615f905" - integrity sha512-R5zb8eJIBPJriQtbH/htEQy4k7E2dHWlD2Y2VT07JCzwYZHBxV5ZYtM0UhXSNMT74LyxuM+b1jdL7pSesXbC/g== - -"@babel/runtime@^7.20.7": - version "7.22.11" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.11.tgz#7a9ba3bbe406ad6f9e8dd4da2ece453eb23a77a4" - integrity sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA== - dependencies: - regenerator-runtime "^0.14.0" - -"@cspotcode/source-map-consumer@0.8.0": - version "0.8.0" - resolved "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" - integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== - -"@cspotcode/source-map-support@0.7.0": - version "0.7.0" - resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5" - integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA== - dependencies: - "@cspotcode/source-map-consumer" "0.8.0" - -"@ctrl/video-filename-parser@^4.12.0": - version "4.14.0" - resolved "https://registry.npmjs.org/@ctrl/video-filename-parser/-/video-filename-parser-4.14.0.tgz#7fd07f3eed9c27745885832190a30c898e1d2f31" - integrity sha512-9GI1ckDboHNLBeq8dF2B1fLBNr9pbiAkOhQaumDDW6EmqnVH3tnhVlWZi3Z20DjPxYRzzxhWXdbYwd8oGdbxOg== - -"@eslint-community/eslint-utils@^4.2.0": - version "4.4.0" - resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.4.0": - version "4.8.0" - resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.0.tgz#11195513186f68d42fbf449f9a7136b2c0c92005" - integrity sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg== - -"@eslint/eslintrc@^2.0.1": - version "2.1.2" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@8.36.0": - version "8.36.0" - resolved "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz#9837f768c03a1e4a30bd304a64fb8844f0e72efe" - integrity sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg== - -"@google-cloud/firestore@^6.7.0": - version "6.7.0" - resolved "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-6.7.0.tgz#9b6105442f972307ffc252b372ba7e67e38243fd" - integrity sha512-bkH2jb5KkQSUa+NAvpip9HQ+rpYhi77IaqHovWuN07adVmvNXX08gPpvPWEzoXYa/wDjEVI7LiAtCWkJJEYTNg== - dependencies: - fast-deep-equal "^3.1.1" - functional-red-black-tree "^1.0.1" - google-gax "^3.5.7" - protobufjs "^7.0.0" - -"@grpc/grpc-js@~1.8.0": - version "1.8.21" - resolved "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.21.tgz#d282b122c71227859bf6c5866f4c40f4a2696513" - integrity sha512-KeyQeZpxeEBSqFVTi3q2K7PiPXmgBfECc4updA1ejCLjYmoAlvvM3ZMp5ztTDUCUQmoY3CpDxvchjO1+rFkoHg== - dependencies: - "@grpc/proto-loader" "^0.7.0" - "@types/node" ">=12.12.47" - -"@grpc/proto-loader@^0.7.0": - version "0.7.9" - resolved "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.9.tgz#3ca68236f1a0d77566dafa53c715eb31d096279a" - integrity sha512-YJsOehVXzgurc+lLAxYnlSMc1p/Gu6VAvnfx0ATi2nzvr0YZcjhmZDeY8SeAKv1M7zE3aEJH0Xo9mK1iZ8GYoQ== - dependencies: - lodash.camelcase "^4.3.0" - long "^5.0.0" - protobufjs "^7.2.4" - yargs "^17.7.2" - -"@humanwhocodes/config-array@^0.11.8": - version "0.11.10" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" - integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@ioredis/commands@^1.1.1": - version "1.2.0" - resolved "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" - integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== - -"@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@jsdoc/salty@^0.2.1": - version "0.2.5" - resolved "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz#1b2fa5bb8c66485b536d86eee877c263d322f692" - integrity sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw== - dependencies: - lodash "^4.17.21" - -"@next/env@13.2.4": - version "13.2.4" - resolved "https://registry.npmjs.org/@next/env/-/env-13.2.4.tgz#8b763700262b2445140a44a8c8d088cef676dbae" - integrity sha512-+Mq3TtpkeeKFZanPturjcXt+KHfKYnLlX6jMLyCrmpq6OOs4i1GqBOAauSkii9QeKCMTYzGppar21JU57b/GEA== - -"@next/eslint-plugin-next@13.2.4": - version "13.2.4" - resolved "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.2.4.tgz#3e124cd10ce24dab5d3448ce04104b4f1f4c6ca7" - integrity sha512-ck1lI+7r1mMJpqLNa3LJ5pxCfOB1lfJncKmRJeJxcJqcngaFwylreLP7da6Rrjr6u2gVRTfmnkSkjc80IiQCwQ== - dependencies: - glob "7.1.7" - -"@next/swc-android-arm-eabi@13.2.4": - version "13.2.4" - resolved "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.2.4.tgz#758d0403771e549f9cee71cbabc0cb16a6c947c0" - integrity sha512-DWlalTSkLjDU11MY11jg17O1gGQzpRccM9Oes2yTqj2DpHndajrXHGxj9HGtJ+idq2k7ImUdJVWS2h2l/EDJOw== - -"@next/swc-android-arm64@13.2.4": - version "13.2.4" - resolved "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.2.4.tgz#834d586523045110d5602e0c8aae9028835ac427" - integrity sha512-sRavmUImUCf332Gy+PjIfLkMhiRX1Ez4SI+3vFDRs1N5eXp+uNzjFUK/oLMMOzk6KFSkbiK/3Wt8+dHQR/flNg== - -"@next/swc-darwin-arm64@13.2.4": - version "13.2.4" - resolved "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.2.4.tgz#5006fca179a36ef3a24d293abadec7438dbb48c6" - integrity sha512-S6vBl+OrInP47TM3LlYx65betocKUUlTZDDKzTiRDbsRESeyIkBtZ6Qi5uT2zQs4imqllJznVjFd1bXLx3Aa6A== - -"@next/swc-darwin-x64@13.2.4": - version "13.2.4" - resolved "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.2.4.tgz#6549c7c04322766acc3264ccdb3e1b43fcaf7946" - integrity sha512-a6LBuoYGcFOPGd4o8TPo7wmv5FnMr+Prz+vYHopEDuhDoMSHOnC+v+Ab4D7F0NMZkvQjEJQdJS3rqgFhlZmKlw== - -"@next/swc-freebsd-x64@13.2.4": - version "13.2.4" - resolved "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.2.4.tgz#0bbe28979e3e868debc2cc06e45e186ce195b7f4" - integrity sha512-kkbzKVZGPaXRBPisoAQkh3xh22r+TD+5HwoC5bOkALraJ0dsOQgSMAvzMXKsN3tMzJUPS0tjtRf1cTzrQ0I5vQ== - -"@next/swc-linux-arm-gnueabihf@13.2.4": - version "13.2.4" - resolved "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.2.4.tgz#1d28d2203f5a7427d6e7119d7bcb5fc40959fb3e" - integrity sha512-7qA1++UY0fjprqtjBZaOA6cas/7GekpjVsZn/0uHvquuITFCdKGFCsKNBx3S0Rpxmx6WYo0GcmhNRM9ru08BGg== - -"@next/swc-linux-arm64-gnu@13.2.4": - version "13.2.4" - resolved "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.2.4.tgz#eb26448190948cdf4c44b8f34110a3ecea32f1d0" - integrity sha512-xzYZdAeq883MwXgcwc72hqo/F/dwUxCukpDOkx/j1HTq/J0wJthMGjinN9wH5bPR98Mfeh1MZJ91WWPnZOedOg== - -"@next/swc-linux-arm64-musl@13.2.4": - version "13.2.4" - resolved "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.2.4.tgz#c4227c0acd94a420bb14924820710e6284d234d3" - integrity sha512-8rXr3WfmqSiYkb71qzuDP6I6R2T2tpkmf83elDN8z783N9nvTJf2E7eLx86wu2OJCi4T05nuxCsh4IOU3LQ5xw== - -"@next/swc-linux-x64-gnu@13.2.4": - version "13.2.4" - resolved "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.2.4.tgz#6bcb540944ee9b0209b33bfc23b240c2044dfc3e" - integrity sha512-Ngxh51zGSlYJ4EfpKG4LI6WfquulNdtmHg1yuOYlaAr33KyPJp4HeN/tivBnAHcZkoNy0hh/SbwDyCnz5PFJQQ== - -"@next/swc-linux-x64-musl@13.2.4": - version "13.2.4" - resolved "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.2.4.tgz#ce21e43251eaf09a09df39372b2c3e38028c30ff" - integrity sha512-gOvwIYoSxd+j14LOcvJr+ekd9fwYT1RyMAHOp7znA10+l40wkFiMONPLWiZuHxfRk+Dy7YdNdDh3ImumvL6VwA== - -"@next/swc-win32-arm64-msvc@13.2.4": - version "13.2.4" - resolved "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.2.4.tgz#68220063d8e5e082f5465498675640dedb670ff1" - integrity sha512-q3NJzcfClgBm4HvdcnoEncmztxrA5GXqKeiZ/hADvC56pwNALt3ngDC6t6qr1YW9V/EPDxCYeaX4zYxHciW4Dw== - -"@next/swc-win32-ia32-msvc@13.2.4": - version "13.2.4" - resolved "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.2.4.tgz#7c120ab54a081be9566df310bed834f168252990" - integrity sha512-/eZ5ncmHUYtD2fc6EUmAIZlAJnVT2YmxDsKs1Ourx0ttTtvtma/WKlMV5NoUsyOez0f9ExLyOpeCoz5aj+MPXw== - -"@next/swc-win32-x64-msvc@13.2.4": - version "13.2.4" - resolved "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.2.4.tgz#5abda92fe12b9829bf7951c4a221282c56041144" - integrity sha512-0MffFmyv7tBLlji01qc0IaPP/LVExzvj7/R5x1Jph1bTAIj4Vu81yFQWHHQAP6r4ff9Ukj1mBK6MDNVXm7Tcvw== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@octokit/auth-token@^3.0.0": - version "3.0.4" - resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz#70e941ba742bdd2b49bdb7393e821dea8520a3db" - integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== - -"@octokit/core@^4.2.1": - version "4.2.4" - resolved "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz#d8769ec2b43ff37cc3ea89ec4681a20ba58ef907" - integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ== - dependencies: - "@octokit/auth-token" "^3.0.0" - "@octokit/graphql" "^5.0.0" - "@octokit/request" "^6.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - before-after-hook "^2.2.0" - universal-user-agent "^6.0.0" - -"@octokit/endpoint@^7.0.0": - version "7.0.6" - resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz#791f65d3937555141fb6c08f91d618a7d645f1e2" - integrity sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg== - dependencies: - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/graphql@^5.0.0": - version "5.0.6" - resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz#9eac411ac4353ccc5d3fca7d76736e6888c5d248" - integrity sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw== - dependencies: - "@octokit/request" "^6.0.0" - "@octokit/types" "^9.0.0" - universal-user-agent "^6.0.0" - -"@octokit/openapi-types@^18.0.0": - version "18.0.0" - resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz#f43d765b3c7533fd6fb88f3f25df079c24fccf69" - integrity sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw== - -"@octokit/plugin-paginate-rest@^6.1.2": - version "6.1.2" - resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz#f86456a7a1fe9e58fec6385a85cf1b34072341f8" - integrity sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ== - dependencies: - "@octokit/tsconfig" "^1.0.2" - "@octokit/types" "^9.2.3" - -"@octokit/plugin-request-log@^1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" - integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== - -"@octokit/plugin-rest-endpoint-methods@^7.1.2": - version "7.2.3" - resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz#37a84b171a6cb6658816c82c4082ac3512021797" - integrity sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA== - dependencies: - "@octokit/types" "^10.0.0" - -"@octokit/request-error@^3.0.0": - version "3.0.3" - resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" - integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== - dependencies: - "@octokit/types" "^9.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^6.0.0": - version "6.2.8" - resolved "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz#aaf480b32ab2b210e9dadd8271d187c93171d8eb" - integrity sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw== - dependencies: - "@octokit/endpoint" "^7.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - node-fetch "^2.6.7" - universal-user-agent "^6.0.0" - -"@octokit/rest@^19.0.7": - version "19.0.13" - resolved "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.13.tgz#e799393264edc6d3c67eeda9e5bd7832dcf974e4" - integrity sha512-/EzVox5V9gYGdbAI+ovYj3nXQT1TtTHRT+0eZPcuC05UFSWO3mdO9UY1C0i2eLF9Un1ONJkAk+IEtYGAC+TahA== - dependencies: - "@octokit/core" "^4.2.1" - "@octokit/plugin-paginate-rest" "^6.1.2" - "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^7.1.2" - -"@octokit/tsconfig@^1.0.2": - version "1.0.2" - resolved "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz#59b024d6f3c0ed82f00d08ead5b3750469125af7" - integrity sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA== - -"@octokit/types@^10.0.0": - version "10.0.0" - resolved "https://registry.npmjs.org/@octokit/types/-/types-10.0.0.tgz#7ee19c464ea4ada306c43f1a45d444000f419a4a" - integrity sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg== - dependencies: - "@octokit/openapi-types" "^18.0.0" - -"@octokit/types@^9.0.0", "@octokit/types@^9.2.3": - version "9.3.2" - resolved "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz#3f5f89903b69f6a2d196d78ec35f888c0013cac5" - integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== - dependencies: - "@octokit/openapi-types" "^18.0.0" - -"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" - integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== - -"@protobufjs/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" - integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== - -"@protobufjs/codegen@^2.0.4": - version "2.0.4" - resolved "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" - integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== - -"@protobufjs/eventemitter@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" - integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== - -"@protobufjs/fetch@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" - integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== - dependencies: - "@protobufjs/aspromise" "^1.1.1" - "@protobufjs/inquire" "^1.1.0" - -"@protobufjs/float@^1.0.2": - version "1.0.2" - resolved "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" - integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== - -"@protobufjs/inquire@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" - integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== - -"@protobufjs/path@^1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" - integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== - -"@protobufjs/pool@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" - integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== - -"@protobufjs/utf8@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" - integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== - -"@rushstack/eslint-patch@^1.1.3": - version "1.3.3" - resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.3.tgz#16ab6c727d8c2020a5b6e4a176a243ecd88d8d69" - integrity sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw== - -"@swc/helpers@0.4.14": - version "0.4.14" - resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" - integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== - dependencies: - tslib "^2.4.0" - -"@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - -"@types/glob@*": - version "8.1.0" - resolved "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz#b63e70155391b0584dce44e7ea25190bbc38f2fc" - integrity sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w== - dependencies: - "@types/minimatch" "^5.1.2" - "@types/node" "*" - -"@types/ioredis@^5.0.0": - version "5.0.0" - resolved "https://registry.npmjs.org/@types/ioredis/-/ioredis-5.0.0.tgz#c1ea7e2f3e2c5a942a27cfee6f62ddcfb23fb3e7" - integrity sha512-zJbJ3FVE17CNl5KXzdeSPtdltc4tMT3TzC6fxQS0sQngkbFZ6h+0uTafsRqu+eSLIugf6Yb0Ea0SUuRr42Nk9g== - dependencies: - ioredis "*" - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/linkify-it@*": - version "3.0.2" - resolved "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz#fd2cd2edbaa7eaac7e7f3c1748b52a19143846c9" - integrity sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA== - -"@types/long@^4.0.0": - version "4.0.2" - resolved "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" - integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== - -"@types/markdown-it@^12.2.3": - version "12.2.3" - resolved "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz#0d6f6e5e413f8daaa26522904597be3d6cd93b51" - integrity sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ== - dependencies: - "@types/linkify-it" "*" - "@types/mdurl" "*" - -"@types/mdurl@*": - version "1.0.2" - resolved "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" - integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== - -"@types/minimatch@^5.1.2": - version "5.1.2" - resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" - integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== - -"@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0": - version "20.5.6" - resolved "https://registry.npmjs.org/@types/node/-/node-20.5.6.tgz#5e9aaa86be03a09decafd61b128d6cec64a5fe40" - integrity sha512-Gi5wRGPbbyOTX+4Y2iULQ27oUPrefaB0PxGQJnfyWN3kvEDGM3mIB5M/gQLmitZf7A9FmLeaqxD3L1CXpm3VKQ== - -"@types/node@18.15.10": - version "18.15.10" - resolved "https://registry.npmjs.org/@types/node/-/node-18.15.10.tgz#4ee2171c3306a185d1208dad5f44dae3dee4cfe3" - integrity sha512-9avDaQJczATcXgfmMAW3MIWArOO7A+m90vuCFLr8AotWf8igO/mRoYukrk2cqZVtv38tHs33retzHEilM7FpeQ== - -"@types/prettier@^2.7.2": - version "2.7.3" - resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== - -"@types/prop-types@*": - version "15.7.5" - resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== - -"@types/qs@^6.9.7": - version "6.9.7" - resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== - -"@types/react-dom@18.0.11": - version "18.0.11" - resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz#321351c1459bc9ca3d216aefc8a167beec334e33" - integrity sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw== - dependencies: - "@types/react" "*" - -"@types/react@*": - version "18.2.21" - resolved "https://registry.npmjs.org/@types/react/-/react-18.2.21.tgz#774c37fd01b522d0b91aed04811b58e4e0514ed9" - integrity sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/react@18.0.29": - version "18.0.29" - resolved "https://registry.npmjs.org/@types/react/-/react-18.0.29.tgz#4cead505172c0020c5b51940199e31fc6ff2f63a" - integrity sha512-wXHktgUABxplw1+UnljseDq4+uztQyp2tlWZRIxHlpchsCFqiYkvaDS8JR7eKOQm8wziTH/el5qL7D6gYNkYcw== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/rimraf@^3.0.2": - version "3.0.2" - resolved "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.2.tgz#a63d175b331748e5220ad48c901d7bbf1f44eef8" - integrity sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ== - dependencies: - "@types/glob" "*" - "@types/node" "*" - -"@types/scheduler@*": - version "0.16.3" - resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" - integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== - -"@types/uuid@^9.0.1": - version "9.0.2" - resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.2.tgz#ede1d1b1e451548d44919dc226253e32a6952c4b" - integrity sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ== - -"@typescript-eslint/parser@^5.42.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" - integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== - dependencies: - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== - -"@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== - dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^8.4.1, acorn@^8.9.0: - version "8.10.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -ajv@^6.10.0, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -arg@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" - integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -aria-query@^5.1.3: - version "5.3.0" - resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" - integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== - dependencies: - dequal "^2.0.3" - -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-includes@^3.1.6: - version "3.1.6" - resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" - integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array.prototype.findlastindex@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz#bc229aef98f6bd0533a2bc61ff95209875526c9b" - integrity sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.1.3" - -array.prototype.flat@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" - integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" - integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - -array.prototype.tosorted@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" - integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.1.3" - -arraybuffer.prototype.slice@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz#9b5ea3868a6eebc30273da577eb888381c0044bb" - integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" - is-shared-array-buffer "^1.0.2" - -arrify@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== - -ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== - -asynciterator.prototype@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" - integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== - dependencies: - has-symbols "^1.0.3" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -autoprefixer@^10.4.14: - version "10.4.15" - resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz#a1230f4aeb3636b89120b34a1f513e2f6834d530" - integrity sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew== - dependencies: - browserslist "^4.21.10" - caniuse-lite "^1.0.30001520" - fraction.js "^4.2.0" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -axe-core@^4.6.2: - version "4.7.2" - resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" - integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== - -axios@^1.3.5: - version "1.4.0" - resolved "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" - integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== - dependencies: - follow-redirects "^1.15.0" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -axobject-query@^3.1.1: - version "3.2.1" - resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" - integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== - dependencies: - dequal "^2.0.3" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.0: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -before-after-hook@^2.2.0: - version "2.2.3" - resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" - integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== - -bignumber.js@^9.0.0: - version "9.1.1" - resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" - integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bluebird@^3.7.2: - version "3.7.2" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.21.10: - version "4.21.10" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" - integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== - dependencies: - caniuse-lite "^1.0.30001517" - electron-to-chromium "^1.4.477" - node-releases "^2.0.13" - update-browserslist-db "^1.0.11" - -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase-css@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" - integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== - -caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001517, caniuse-lite@^1.0.30001520: - version "1.0.30001523" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001523.tgz#b838f70b1a98c556776b998fafb47d2b64146d4f" - integrity sha512-I5q5cisATTPZ1mc588Z//pj/Ox80ERYDfR71YnvY7raS/NOk8xXlZcB0sF7JdqaV//kOaa6aus7lRfpdnt1eBA== - -catharsis@^0.9.0: - version "0.9.0" - resolved "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz#40382a168be0e6da308c277d3a2b3eb40c7d2121" - integrity sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A== - dependencies: - lodash "^4.17.15" - -chalk@^4.0.0: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -client-only@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" - integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -cluster-key-slot@^1.1.0: - version "1.1.2" - resolved "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" - integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4: - version "1.0.5" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -csstype@^3.0.2: - version "3.1.2" - resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== - -damerau-levenshtein@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" - integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -deep-is@^0.1.3, deep-is@~0.1.3: - version "0.1.4" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -denque@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" - integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -deprecation@^2.0.0: - version "2.3.1" - resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - -dequal@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -didyoumean@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" - integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dlv@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" - integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -duplexify@^4.0.0: - version "4.1.2" - resolved "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" - integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== - dependencies: - end-of-stream "^1.4.1" - inherits "^2.0.3" - readable-stream "^3.1.1" - stream-shift "^1.0.0" - -ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: - version "1.0.11" - resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.4.477: - version "1.4.503" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.503.tgz#7bd43927ea9b4198697672d28d8fbd0da016a7a1" - integrity sha512-LF2IQit4B0VrUHFeQkWhZm97KuJSGF2WJqq1InpY+ECpFRkXd8yTIaTtJxsO0OKDmiBYwWqcrNaXOurn2T2wiA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^5.12.0: - version "5.15.0" - resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -entities@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" - integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== - -es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2, es-abstract@^1.21.3: - version "1.22.1" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" - integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.1" - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.2.1" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.10" - is-weakref "^1.0.2" - object-inspect "^1.12.3" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.0" - safe-array-concat "^1.0.0" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.7" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.10" - -es-iterator-helpers@^1.0.12: - version "1.0.13" - resolved "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.13.tgz#72101046ffc19baf9996adc70e6177a26e6e8084" - integrity sha512-LK3VGwzvaPWobO8xzXXGRUOGw8Dcjyfk62CsY/wfHN75CwsJPbuypOYJxK6g5RyEL8YDjIWcl6jgd8foO6mmrA== - dependencies: - asynciterator.prototype "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.21.3" - es-set-tostringtag "^2.0.1" - function-bind "^1.1.1" - get-intrinsic "^1.2.1" - globalthis "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - iterator.prototype "^1.1.0" - safe-array-concat "^1.0.0" - -es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== - dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" - has-tostringtag "^1.0.0" - -es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== - dependencies: - has "^1.0.3" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escodegen@^1.13.0: - version "1.14.3" - resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-next@13.2.4: - version "13.2.4" - resolved "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.2.4.tgz#8aa4d42da3a575a814634ba9c88c8d25266c5fdd" - integrity sha512-lunIBhsoeqw6/Lfkd6zPt25w1bn0znLA/JCL+au1HoEpSb4/PpsOYsYtgV/q+YPsoKIOzFyU5xnb04iZnXjUvg== - dependencies: - "@next/eslint-plugin-next" "13.2.4" - "@rushstack/eslint-patch" "^1.1.3" - "@typescript-eslint/parser" "^5.42.0" - eslint-import-resolver-node "^0.3.6" - eslint-import-resolver-typescript "^3.5.2" - eslint-plugin-import "^2.26.0" - eslint-plugin-jsx-a11y "^6.5.1" - eslint-plugin-react "^7.31.7" - eslint-plugin-react-hooks "^4.5.0" - -eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.7: - version "0.3.9" - resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== - dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-import-resolver-typescript@^3.5.2: - version "3.6.0" - resolved "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz#36f93e1eb65a635e688e16cae4bead54552e3bbd" - integrity sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg== - dependencies: - debug "^4.3.4" - enhanced-resolve "^5.12.0" - eslint-module-utils "^2.7.4" - fast-glob "^3.3.1" - get-tsconfig "^4.5.0" - is-core-module "^2.11.0" - is-glob "^4.0.3" - -eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: - version "2.8.0" - resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== - dependencies: - debug "^3.2.7" - -eslint-plugin-import@^2.26.0: - version "2.28.1" - resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz#63b8b5b3c409bfc75ebaf8fb206b07ab435482c4" - integrity sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A== - dependencies: - array-includes "^3.1.6" - array.prototype.findlastindex "^1.2.2" - array.prototype.flat "^1.3.1" - array.prototype.flatmap "^1.3.1" - debug "^3.2.7" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.7" - eslint-module-utils "^2.8.0" - has "^1.0.3" - is-core-module "^2.13.0" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.fromentries "^2.0.6" - object.groupby "^1.0.0" - object.values "^1.1.6" - semver "^6.3.1" - tsconfig-paths "^3.14.2" - -eslint-plugin-jsx-a11y@^6.5.1: - version "6.7.1" - resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" - integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== - dependencies: - "@babel/runtime" "^7.20.7" - aria-query "^5.1.3" - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - ast-types-flow "^0.0.7" - axe-core "^4.6.2" - axobject-query "^3.1.1" - damerau-levenshtein "^1.0.8" - emoji-regex "^9.2.2" - has "^1.0.3" - jsx-ast-utils "^3.3.3" - language-tags "=1.0.5" - minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - semver "^6.3.0" - -eslint-plugin-react-hooks@^4.5.0: - version "4.6.0" - resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" - integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== - -eslint-plugin-react@^7.31.7: - version "7.33.2" - resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" - integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== - dependencies: - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - array.prototype.tosorted "^1.1.1" - doctrine "^2.1.0" - es-iterator-helpers "^1.0.12" - estraverse "^5.3.0" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - object.hasown "^1.1.2" - object.values "^1.1.6" - prop-types "^15.8.1" - resolve "^2.0.0-next.4" - semver "^6.3.1" - string.prototype.matchall "^4.0.8" - -eslint-scope@^7.1.1: - version "7.2.2" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: - version "3.4.3" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint@8.36.0: - version "8.36.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz#1bd72202200a5492f91803b113fb8a83b11285cf" - integrity sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.0.1" - "@eslint/js" "8.36.0" - "@humanwhocodes/config-array" "^0.11.8" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-visitor-keys "^3.3.0" - espree "^9.5.0" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-sdsl "^4.1.4" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.1" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - -espree@^9.0.0, espree@^9.5.0, espree@^9.6.0: - version "9.6.1" - resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.2.0: - version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: - version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -express@^4.18.2: - version "4.18.2" - resolved "https://registry.npmjs.org/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -extend@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.1: - version "3.3.1" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fast-text-encoding@^1.0.0, fast-text-encoding@^1.0.3: - version "1.0.6" - resolved "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz#0aa25f7f638222e3396d72bf936afcf1d42d6867" - integrity sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w== - -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.1.0" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" - integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== - dependencies: - flatted "^3.2.7" - keyv "^4.5.3" - rimraf "^3.0.2" - -flatted@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - -follow-redirects@^1.15.0: - version "1.15.2" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fraction.js@^4.2.0: - version "4.2.1" - resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.1.tgz#14b4cc886575a5684f8d5fd5759c5db376bb7bb8" - integrity sha512-/KxoyCnPM0GwYI4NN0Iag38Tqt+od3/mLuguepLgCAKPn0ZhC544nssAW0tG2/00zXEYl9W+7hwAIpLHo6Oc7Q== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - -functions-have-names@^1.2.2, functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -gaxios@^5.0.0, gaxios@^5.0.1: - version "5.1.3" - resolved "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz#f7fa92da0fe197c846441e5ead2573d4979e9013" - integrity sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA== - dependencies: - extend "^3.0.2" - https-proxy-agent "^5.0.0" - is-stream "^2.0.0" - node-fetch "^2.6.9" - -gcp-metadata@^5.3.0: - version "5.3.0" - resolved "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz#6f45eb473d0cb47d15001476b48b663744d25408" - integrity sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w== - dependencies: - gaxios "^5.0.0" - json-bigint "^1.0.0" - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -get-tsconfig@^4.5.0: - version "4.7.0" - resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz#06ce112a1463e93196aa90320c35df5039147e34" - integrity sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw== - dependencies: - resolve-pkg-maps "^1.0.0" - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@7.1.6: - version "7.1.6" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@7.1.7: - version "7.1.7" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^8.0.0: - version "8.1.0" - resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -globals@^13.19.0: - version "13.21.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571" - integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== - dependencies: - type-fest "^0.20.2" - -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -goober@^2.1.10: - version "2.1.13" - resolved "https://registry.npmjs.org/goober/-/goober-2.1.13.tgz#e3c06d5578486212a76c9eba860cbc3232ff6d7c" - integrity sha512-jFj3BQeleOoy7t93E9rZ2de+ScC4lQICLwiAQmKMg9F6roKGaLSHoCDYKkWlSafg138jejvq/mTdvmnwDQgqoQ== - -google-auth-library@^8.0.2: - version "8.9.0" - resolved "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz#15a271eb2ec35d43b81deb72211bd61b1ef14dd0" - integrity sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg== - dependencies: - arrify "^2.0.0" - base64-js "^1.3.0" - ecdsa-sig-formatter "^1.0.11" - fast-text-encoding "^1.0.0" - gaxios "^5.0.0" - gcp-metadata "^5.3.0" - gtoken "^6.1.0" - jws "^4.0.0" - lru-cache "^6.0.0" - -google-gax@^3.5.7: - version "3.6.1" - resolved "https://registry.npmjs.org/google-gax/-/google-gax-3.6.1.tgz#02c78fc496f5adf86f2ca9145545f4b6575f6118" - integrity sha512-g/lcUjGcB6DSw2HxgEmCDOrI/CByOwqRvsuUvNalHUK2iPPPlmAIpbMbl62u0YufGMr8zgE3JL7th6dCb1Ry+w== - dependencies: - "@grpc/grpc-js" "~1.8.0" - "@grpc/proto-loader" "^0.7.0" - "@types/long" "^4.0.0" - "@types/rimraf" "^3.0.2" - abort-controller "^3.0.0" - duplexify "^4.0.0" - fast-text-encoding "^1.0.3" - google-auth-library "^8.0.2" - is-stream-ended "^0.1.4" - node-fetch "^2.6.1" - object-hash "^3.0.0" - proto3-json-serializer "^1.0.0" - protobufjs "7.2.4" - protobufjs-cli "1.1.1" - retry-request "^5.0.0" - -google-p12-pem@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz#82841798253c65b7dc2a4e5fe9df141db670172a" - integrity sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ== - dependencies: - node-forge "^1.3.1" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.9, graceful-fs@^4.2.4: - version "4.2.11" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - -gtoken@^6.1.0: - version "6.1.2" - resolved "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz#aeb7bdb019ff4c3ba3ac100bbe7b6e74dce0e8bc" - integrity sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ== - dependencies: - gaxios "^5.0.1" - google-p12-pem "^4.0.0" - jws "^4.0.0" - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.3: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -internal-slot@^1.0.3, internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== - dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" - side-channel "^1.0.4" - -ioredis@*, ioredis@^5.3.2: - version "5.3.2" - resolved "https://registry.npmjs.org/ioredis/-/ioredis-5.3.2.tgz#9139f596f62fc9c72d873353ac5395bcf05709f7" - integrity sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA== - dependencies: - "@ioredis/commands" "^1.1.1" - cluster-key-slot "^1.1.0" - debug "^4.3.4" - denque "^2.1.0" - lodash.defaults "^4.2.0" - lodash.isarguments "^3.1.0" - redis-errors "^1.2.0" - redis-parser "^3.0.0" - standard-as-callback "^2.1.0" - -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" - -is-async-function@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" - integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== - dependencies: - has-tostringtag "^1.0.0" - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.9.0: - version "2.13.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== - dependencies: - has "^1.0.3" - -is-date-object@^1.0.1, is-date-object@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-finalizationregistry@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" - integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== - dependencies: - call-bind "^1.0.2" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-function@^1.0.10: - version "1.0.10" - resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-map@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-set@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-stream-ended@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz#f50224e95e06bce0e356d440a4827cd35b267eda" - integrity sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.10, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== - dependencies: - which-typed-array "^1.1.11" - -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -iterator.prototype@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.0.tgz#690c88b043d821f783843aaf725d7ac3b62e3b46" - integrity sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw== - dependencies: - define-properties "^1.1.4" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - has-tostringtag "^1.0.0" - reflect.getprototypeof "^1.0.3" - -jiti@^1.18.2: - version "1.19.3" - resolved "https://registry.npmjs.org/jiti/-/jiti-1.19.3.tgz#ef554f76465b3c2b222dc077834a71f0d4a37569" - integrity sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w== - -js-sdsl@^4.1.4: - version "4.4.2" - resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" - integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== - -"js-tokens@^3.0.0 || ^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -js2xmlparser@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz#2a1fdf01e90585ef2ae872a01bc169c6a8d5e60a" - integrity sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA== - dependencies: - xmlcreate "^2.0.4" - -jsdoc@^4.0.0: - version "4.0.2" - resolved "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz#a1273beba964cf433ddf7a70c23fd02c3c60296e" - integrity sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg== - dependencies: - "@babel/parser" "^7.20.15" - "@jsdoc/salty" "^0.2.1" - "@types/markdown-it" "^12.2.3" - bluebird "^3.7.2" - catharsis "^0.9.0" - escape-string-regexp "^2.0.0" - js2xmlparser "^4.0.2" - klaw "^3.0.0" - markdown-it "^12.3.2" - markdown-it-anchor "^8.4.1" - marked "^4.0.10" - mkdirp "^1.0.4" - requizzle "^0.2.3" - strip-json-comments "^3.1.0" - underscore "~1.13.2" - -json-bigint@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" - integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== - dependencies: - bignumber.js "^9.0.0" - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: - version "3.3.5" - resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" - integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== - dependencies: - array-includes "^3.1.6" - array.prototype.flat "^1.3.1" - object.assign "^4.1.4" - object.values "^1.1.6" - -jwa@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc" - integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4" - integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== - dependencies: - jwa "^2.0.0" - safe-buffer "^5.0.1" - -keyv@^4.5.3: - version "4.5.3" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== - dependencies: - json-buffer "3.0.1" - -klaw@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz#b11bec9cf2492f06756d6e809ab73a2910259146" - integrity sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g== - dependencies: - graceful-fs "^4.1.9" - -language-subtag-registry@~0.3.2: - version "0.3.22" - resolved "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" - integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== - -language-tags@=1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" - integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== - dependencies: - language-subtag-registry "~0.3.2" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lilconfig@^2.0.5, lilconfig@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -linkify-it@^3.0.1: - version "3.0.3" - resolved "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz#a98baf44ce45a550efb4d49c769d07524cc2fa2e" - integrity sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ== - dependencies: - uc.micro "^1.0.1" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== - -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== - -lodash.isarguments@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash@^4.17.15, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -long@^5.0.0: - version "5.2.3" - resolved "https://registry.npmjs.org/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" - integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== - -loose-envify@^1.1.0, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lz-string@^1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" - integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -markdown-it-anchor@^8.4.1: - version "8.6.7" - resolved "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz#ee6926daf3ad1ed5e4e3968b1740eef1c6399634" - integrity sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA== - -markdown-it@^12.3.2: - version "12.3.2" - resolved "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz#bf92ac92283fe983fe4de8ff8abfb5ad72cd0c90" - integrity sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg== - dependencies: - argparse "^2.0.1" - entities "~2.1.0" - linkify-it "^3.0.1" - mdurl "^1.0.1" - uc.micro "^1.0.5" - -marked@^4.0.10: - version "4.3.0" - resolved "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" - integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== - -mdurl@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.0, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nanoid@^3.3.4, nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -next@13.2.4: - version "13.2.4" - resolved "https://registry.npmjs.org/next/-/next-13.2.4.tgz#2363330392b0f7da02ab41301f60857ffa7f67d6" - integrity sha512-g1I30317cThkEpvzfXujf0O4wtaQHtDCLhlivwlTJ885Ld+eOgcz7r3TGQzeU+cSRoNHtD8tsJgzxVdYojFssw== - dependencies: - "@next/env" "13.2.4" - "@swc/helpers" "0.4.14" - caniuse-lite "^1.0.30001406" - postcss "8.4.14" - styled-jsx "5.1.1" - optionalDependencies: - "@next/swc-android-arm-eabi" "13.2.4" - "@next/swc-android-arm64" "13.2.4" - "@next/swc-darwin-arm64" "13.2.4" - "@next/swc-darwin-x64" "13.2.4" - "@next/swc-freebsd-x64" "13.2.4" - "@next/swc-linux-arm-gnueabihf" "13.2.4" - "@next/swc-linux-arm64-gnu" "13.2.4" - "@next/swc-linux-arm64-musl" "13.2.4" - "@next/swc-linux-x64-gnu" "13.2.4" - "@next/swc-linux-x64-musl" "13.2.4" - "@next/swc-win32-arm64-msvc" "13.2.4" - "@next/swc-win32-ia32-msvc" "13.2.4" - "@next/swc-win32-x64-msvc" "13.2.4" - -node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@^2.6.9: - version "2.7.0" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-forge@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" - integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== - -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - -object-assign@^4.0.1, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-hash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" - integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== - -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.entries@^1.1.6: - version "1.1.6" - resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" - integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -object.fromentries@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" - integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -object.groupby@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.0.tgz#cb29259cf90f37e7bac6437686c1ea8c916d12a9" - integrity sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.21.2" - get-intrinsic "^1.2.1" - -object.hasown@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" - integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== - dependencies: - define-properties "^1.1.4" - es-abstract "^1.20.4" - -object.values@^1.1.6: - version "1.1.6" - resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" - integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -once@^1.3.0, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -optionator@^0.9.1: - version "0.9.3" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== - dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pirates@^4.0.1: - version "4.0.6" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -postcss-import@^15.1.0: - version "15.1.0" - resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" - integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-js@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" - integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== - dependencies: - camelcase-css "^2.0.1" - -postcss-load-config@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd" - integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== - dependencies: - lilconfig "^2.0.5" - yaml "^2.1.1" - -postcss-nested@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c" - integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== - dependencies: - postcss-selector-parser "^6.0.11" - -postcss-selector-parser@^6.0.11: - version "6.0.13" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@8.4.14: - version "8.4.14" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" - integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== - dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -postcss@^8.4.21, postcss@^8.4.23: - version "8.4.28" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz#c6cc681ed00109072816e1557f889ef51cf950a5" - integrity sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== - -prettier-plugin-organize-imports@^3.2.2: - version "3.2.3" - resolved "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-3.2.3.tgz#6b0141ac71f7ee9a673ce83e95456319e3a7cf0d" - integrity sha512-KFvk8C/zGyvUaE3RvxN2MhCLwzV6OBbFSkwZ2OamCrs9ZY4i5L77jQ/w4UmUr+lqX8qbaqVq6bZZkApn+IgJSg== - -prettier-plugin-sort-json@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/prettier-plugin-sort-json/-/prettier-plugin-sort-json-1.0.0.tgz#fe677d5537b6d79d12ffaf1604046a3d3ee2427c" - integrity sha512-XgcaF/Sojax1vD6j53wNIByx0rp7ecang+A8W0eM+Ks3yBFu/qXjJNvUtC1lEWeYbNfmRs/d8FyYJCYozAVENw== - dependencies: - "@types/prettier" "^2.7.2" - -prettier@^2.8.7: - version "2.8.8" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -proto3-json-serializer@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.1.tgz#1b5703152b6ce811c5cdcc6468032caf53521331" - integrity sha512-AwAuY4g9nxx0u52DnSMkqqgyLHaW/XaPLtaAo3y/ZCfeaQB/g4YDH4kb8Wc/mWzWvu0YjOznVnfn373MVZZrgw== - dependencies: - protobufjs "^7.0.0" - -protobufjs-cli@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.1.1.tgz#f531201b1c8c7772066aa822bf9a08318b24a704" - integrity sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA== - dependencies: - chalk "^4.0.0" - escodegen "^1.13.0" - espree "^9.0.0" - estraverse "^5.1.0" - glob "^8.0.0" - jsdoc "^4.0.0" - minimist "^1.2.0" - semver "^7.1.2" - tmp "^0.2.1" - uglify-js "^3.7.7" - -protobufjs@7.2.4: - version "7.2.4" - resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz#3fc1ec0cdc89dd91aef9ba6037ba07408485c3ae" - integrity sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/node" ">=13.7.0" - long "^5.0.0" - -protobufjs@^7.0.0, protobufjs@^7.2.4: - version "7.2.5" - resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz#45d5c57387a6d29a17aab6846dcc283f9b8e7f2d" - integrity sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/node" ">=13.7.0" - long "^5.0.0" - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -punycode@^2.1.0: - version "2.3.0" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -qs@^6.11.1: - version "6.11.2" - resolved "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== - dependencies: - side-channel "^1.0.4" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -react-dom@18.2.0: - version "18.2.0" - resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" - -react-hot-toast@^2.4.0: - version "2.4.1" - resolved "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.4.1.tgz#df04295eda8a7b12c4f968e54a61c8d36f4c0994" - integrity sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ== - dependencies: - goober "^2.1.10" - -react-icons@^4.8.0: - version "4.10.1" - resolved "https://registry.npmjs.org/react-icons/-/react-icons-4.10.1.tgz#3f3b5eec1f63c1796f6a26174a1091ca6437a500" - integrity sha512-/ngzDP/77tlCfqthiiGNZeYFACw85fUjZtLbedmJ5DTlNDIwETxhwBzdOJ21zj4iJdvc0J3y7yOsX3PpxAJzrw== - -react-is@^16.13.1: - version "16.13.1" - resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react@18.2.0: - version "18.2.0" - resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" - -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" - integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== - dependencies: - pify "^2.3.0" - -readable-stream@^3.1.1: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -redis-errors@^1.0.0, redis-errors@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" - integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== - -redis-parser@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" - integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== - dependencies: - redis-errors "^1.0.0" - -reflect.getprototypeof@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz#2738fd896fcc3477ffbd4190b40c2458026b6928" - integrity sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.1" - globalthis "^1.0.3" - which-builtin-type "^1.1.3" - -regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - -regexp.prototype.flags@^1.4.3, regexp.prototype.flags@^1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - functions-have-names "^1.2.3" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -requizzle@^0.2.3: - version "0.2.4" - resolved "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz#319eb658b28c370f0c20f968fa8ceab98c13d27c" - integrity sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw== - dependencies: - lodash "^4.17.21" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-pkg-maps@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" - integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== - -resolve@^1.1.7, resolve@^1.22.2, resolve@^1.22.4: - version "1.22.4" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" - integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^2.0.0-next.4: - version "2.0.0-next.4" - resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" - integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -retry-request@^5.0.0: - version "5.0.2" - resolved "https://registry.npmjs.org/retry-request/-/retry-request-5.0.2.tgz#143d85f90c755af407fcc46b7166a4ba520e44da" - integrity sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ== - dependencies: - debug "^4.1.1" - extend "^3.0.2" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-array-concat@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" - integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== - dependencies: - loose-envify "^1.1.0" - -semver@^6.3.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.1.2, semver@^7.3.7: - version "7.5.4" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" - integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.6.2: - version "2.7.1" - resolved "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" - -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -standard-as-callback@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" - integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string.prototype.matchall@^4.0.8: - version "4.0.8" - resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" - integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.3" - side-channel "^1.0.4" - -string.prototype.trim@^1.2.7: - version "1.2.7" - resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" - integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -styled-jsx@5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f" - integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw== - dependencies: - client-only "0.0.1" - -sucrase@^3.32.0: - version "3.34.0" - resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f" - integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.2" - commander "^4.0.0" - glob "7.1.6" - lines-and-columns "^1.1.6" - mz "^2.7.0" - pirates "^4.0.1" - ts-interface-checker "^0.1.9" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -tailwindcss@^3.2.7: - version "3.3.3" - resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz#90da807393a2859189e48e9e7000e6880a736daf" - integrity sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w== - dependencies: - "@alloc/quick-lru" "^5.2.0" - arg "^5.0.2" - chokidar "^3.5.3" - didyoumean "^1.2.2" - dlv "^1.1.3" - fast-glob "^3.2.12" - glob-parent "^6.0.2" - is-glob "^4.0.3" - jiti "^1.18.2" - lilconfig "^2.1.0" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-hash "^3.0.0" - picocolors "^1.0.0" - postcss "^8.4.23" - postcss-import "^15.1.0" - postcss-js "^4.0.1" - postcss-load-config "^4.0.1" - postcss-nested "^6.0.1" - postcss-selector-parser "^6.0.11" - resolve "^1.22.2" - sucrase "^3.32.0" - -tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -tmp@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -ts-interface-checker@^0.1.9: - version "0.1.13" - resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" - integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== - -ts-node@10.7.0: - version "10.7.0" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz#35d503d0fab3e2baa672a0e94f4b40653c2463f5" - integrity sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A== - dependencies: - "@cspotcode/source-map-support" "0.7.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.0" - yn "3.1.1" - -tsconfig-paths@^3.14.2: - version "3.14.2" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" - integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.4.0: - version "2.6.2" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== - dependencies: - prelude-ls "~1.1.2" - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" - -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - is-typed-array "^1.1.9" - -typescript@5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz#891e1a90c5189d8506af64b9ef929fca99ba1ee5" - integrity sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw== - -uc.micro@^1.0.1, uc.micro@^1.0.5: - version "1.0.6" - resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" - integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== - -uglify-js@^3.7.7: - version "3.17.4" - resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -underscore@~1.13.2: - version "1.13.6" - resolved "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441" - integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== - -universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -update-browserslist-db@^1.0.11: - version "1.0.11" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -util-deprecate@^1.0.1, util-deprecate@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" - integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== - -v8-compile-cache-lib@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-builtin-type@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" - integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== - dependencies: - function.prototype.name "^1.1.5" - has-tostringtag "^1.0.0" - is-async-function "^2.0.0" - is-date-object "^1.0.5" - is-finalizationregistry "^1.0.2" - is-generator-function "^1.0.10" - is-regex "^1.1.4" - is-weakref "^1.0.2" - isarray "^2.0.5" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" - -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== - dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" - -which-typed-array@^1.1.10, which-typed-array@^1.1.11, which-typed-array@^1.1.9: - version "1.1.11" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -word-wrap@~1.2.3: - version "1.2.5" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -xmlcreate@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz#0c5ab0f99cdd02a81065fa9cd8f8ae87624889be" - integrity sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^2.1.1: - version "2.3.1" - resolved "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" - integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^17.7.2: - version "17.7.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 1c62a828914e43745b759e49c31de5f55f58f59b Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 26 Aug 2023 13:59:30 +0200 Subject: [PATCH 046/272] Change image --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2b078d0..4375adf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,11 @@ -FROM node:16-alpine as builder +FROM node:alpine as builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build -FROM node:16-alpine as production +FROM node:alpine as production WORKDIR /app COPY package*.json ./ RUN npm ci From cf794f1818ffcfdf25ffd1f6e4ba7adc2be6dad2 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 26 Aug 2023 14:06:30 +0200 Subject: [PATCH 047/272] build for multiple platform --- .github/workflows/build-and-push.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-and-push.yml b/.github/workflows/build-and-push.yml index be57329..aede273 100644 --- a/.github/workflows/build-and-push.yml +++ b/.github/workflows/build-and-push.yml @@ -41,8 +41,8 @@ jobs: uses: docker/build-push-action@v2 with: context: . - platform: linux/amd64 push: true + platforms: linux/amd64,linux/arm64,linux/arm/v7 tags: | debridmediamanager/debrid-media-manager:latest debridmediamanager/debrid-media-manager:${{ env.version }} From a71157d25ab364bbc18f626f24bfe79e9c86260a Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 26 Aug 2023 14:14:44 +0200 Subject: [PATCH 048/272] build in a matrix --- .github/workflows/build-and-push.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-and-push.yml b/.github/workflows/build-and-push.yml index aede273..f9889e3 100644 --- a/.github/workflows/build-and-push.yml +++ b/.github/workflows/build-and-push.yml @@ -4,10 +4,15 @@ on: push: branches: - main + paths-ignore: + - '**.md' jobs: build-and-push: runs-on: ubuntu-latest + strategy: + matrix: + platform: [linux/amd64, linux/arm64, linux/arm/v7] steps: - name: Checkout code @@ -42,7 +47,9 @@ jobs: with: context: . push: true - platforms: linux/amd64,linux/arm64,linux/arm/v7 + platforms: ${{ matrix.platform }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache tags: | debridmediamanager/debrid-media-manager:latest debridmediamanager/debrid-media-manager:${{ env.version }} From 09ccb971301062ee2d4300d8e20910ba4bea4bb1 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 26 Aug 2023 14:52:24 +0200 Subject: [PATCH 049/272] increase timeout --- .github/workflows/build-and-push.yml | 2 +- src/services/btdigg.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-and-push.yml b/.github/workflows/build-and-push.yml index f9889e3..6fd2707 100644 --- a/.github/workflows/build-and-push.yml +++ b/.github/workflows/build-and-push.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - platform: [linux/amd64, linux/arm64, linux/arm/v7] + platform: [linux/amd64, linux/arm64] steps: - name: Checkout code diff --git a/src/services/btdigg.ts b/src/services/btdigg.ts index 5ef1054..163afc5 100644 --- a/src/services/btdigg.ts +++ b/src/services/btdigg.ts @@ -43,7 +43,7 @@ export const createAxiosInstance = (agent: SocksProxyAgent) => { 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36', }, - timeout: 3000, + timeout: 30000, }); }; From 1b22f1580d807126584ae003d0cfcc438099f1b9 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 26 Aug 2023 15:50:04 +0200 Subject: [PATCH 050/272] proper processing of private key env value --- src/services/firestore.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/firestore.ts b/src/services/firestore.ts index 0540f43..44cd026 100644 --- a/src/services/firestore.ts +++ b/src/services/firestore.ts @@ -4,7 +4,7 @@ const firebaseSettings: Settings = { projectId: process.env.FIREBASE_PROJECT_ID, credentials: { client_email: process.env.FIREBASE_CLIENT_EMAIL, - private_key: process.env.FIREBASE_PRIVATE_KEY, + private_key: process.env.FIREBASE_PRIVATE_KEY?.split(String.raw`\n`).join('\n'), }, ssl: true, maxIdleChannels: 2, From 496afb1a78f0fcff46a2d64fe0157b8c6e88ff33 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 26 Aug 2023 18:03:18 +0200 Subject: [PATCH 051/272] Config request timeout on env --- .env | 1 + next.config.js | 2 +- src/services/btdigg.ts | 2 +- src/services/firestore.ts | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.env b/.env index e27b9f2..dc6be8b 100644 --- a/.env +++ b/.env @@ -1,3 +1,4 @@ +REQUEST_TIMEOUT=3000 GH_PAT=github-access-token PROXY=socks5h://tor:9050 SEARCH_SPEED_PASSWORD=123456 diff --git a/next.config.js b/next.config.js index cbb13b5..007c293 100644 --- a/next.config.js +++ b/next.config.js @@ -3,7 +3,7 @@ const nextConfig = { reactStrictMode: false, publicRuntimeConfig: { // Will be available on both server and client - externalSearchApiHostname: 'https://debridmediamanager.com', + // externalSearchApiHostname: 'http://debridmediamanager.com', realDebridHostname: 'https://corsproxy.org/?https://api.real-debrid.com', allDebridHostname: 'https://api.alldebrid.com', allDebridAgent: 'debridMediaManager', diff --git a/src/services/btdigg.ts b/src/services/btdigg.ts index 163afc5..c84e8f5 100644 --- a/src/services/btdigg.ts +++ b/src/services/btdigg.ts @@ -43,7 +43,7 @@ export const createAxiosInstance = (agent: SocksProxyAgent) => { 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36', }, - timeout: 30000, + timeout: parseInt(process.env.REQUEST_TIMEOUT || '3000', 10), }); }; diff --git a/src/services/firestore.ts b/src/services/firestore.ts index 44cd026..0540f43 100644 --- a/src/services/firestore.ts +++ b/src/services/firestore.ts @@ -4,7 +4,7 @@ const firebaseSettings: Settings = { projectId: process.env.FIREBASE_PROJECT_ID, credentials: { client_email: process.env.FIREBASE_CLIENT_EMAIL, - private_key: process.env.FIREBASE_PRIVATE_KEY?.split(String.raw`\n`).join('\n'), + private_key: process.env.FIREBASE_PRIVATE_KEY, }, ssl: true, maxIdleChannels: 2, From 37eb6e37a51c01d04b4adb1b8be09f735f1857de Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 26 Aug 2023 20:57:22 +0200 Subject: [PATCH 052/272] Integrate prisma --- .env | 2 ++ package-lock.json | 50 +++++++++++++++++++++++++++++++++ package.json | 5 +++- prisma/schema.prisma | 24 ++++++++++++++++ src/services/planetscale.ts | 56 +++++++++++++++++++++++++++++++++++++ 5 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 prisma/schema.prisma create mode 100644 src/services/planetscale.ts diff --git a/.env b/.env index dc6be8b..78fc4fa 100644 --- a/.env +++ b/.env @@ -9,3 +9,5 @@ REDIS_PASSWORD=dmm123456 FIREBASE_PROJECT_ID=project-id FIREBASE_CLIENT_EMAIL=client@example.com FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n" + +DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public" diff --git a/package-lock.json b/package-lock.json index b92eb1c..5e23990 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@ctrl/video-filename-parser": "^4.12.0", "@google-cloud/firestore": "^6.7.0", "@octokit/rest": "^19.0.7", + "@prisma/client": "^5.2.0", "@types/ioredis": "^5.0.0", "@types/node": "18.15.10", "@types/react": "18.0.29", @@ -40,6 +41,7 @@ "prettier": "^2.8.7", "prettier-plugin-organize-imports": "^3.2.2", "prettier-plugin-sort-json": "^1.0.0", + "prisma": "^5.2.0", "tailwindcss": "^3.2.7", "ts-node": "10.7.0", "typescript": "4.5.2" @@ -697,6 +699,38 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/@prisma/client": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.2.0.tgz", + "integrity": "sha512-AiTjJwR4J5Rh6Z/9ZKrBBLel3/5DzUNntMohOy7yObVnVoTNVFi2kvpLZlFuKO50d7yDspOtW6XBpiAd0BVXbQ==", + "hasInstallScript": true, + "dependencies": { + "@prisma/engines-version": "5.2.0-25.2804dc98259d2ea960602aca6b8e7fdc03c1758f" + }, + "engines": { + "node": ">=16.13" + }, + "peerDependencies": { + "prisma": "*" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + } + } + }, + "node_modules/@prisma/engines": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.2.0.tgz", + "integrity": "sha512-dT7FOLUCdZmq+AunLqB1Iz+ZH/IIS1Fz2THmKZQ6aFONrQD/BQ5ecJ7g2wGS2OgyUFf4OaLam6/bxmgdOBDqig==", + "devOptional": true, + "hasInstallScript": true + }, + "node_modules/@prisma/engines-version": { + "version": "5.2.0-25.2804dc98259d2ea960602aca6b8e7fdc03c1758f", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.2.0-25.2804dc98259d2ea960602aca6b8e7fdc03c1758f.tgz", + "integrity": "sha512-jsnKT5JIDIE01lAeCj2ghY9IwxkedhKNvxQeoyLs6dr4ZXynetD0vTy7u6wMJt8vVPv8I5DPy/I4CFaoXAgbtg==" + }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", @@ -4847,6 +4881,22 @@ "prettier": "^2.3.2" } }, + "node_modules/prisma": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.2.0.tgz", + "integrity": "sha512-FfFlpjVCkZwrqxDnP4smlNYSH1so+CbfjgdpioFzGGqlQAEm6VHAYSzV7jJgC3ebtY9dNOhDMS2+4/1DDSM7bQ==", + "devOptional": true, + "hasInstallScript": true, + "dependencies": { + "@prisma/engines": "5.2.0" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": ">=16.13" + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", diff --git a/package.json b/package.json index d7c4038..32dccad 100644 --- a/package.json +++ b/package.json @@ -7,12 +7,14 @@ "build": "next build", "start": "next start", "lint": "next lint", - "format": "prettier --write 'src/**/*.{js,jsx,ts,tsx,json,md}'" + "format": "prettier --write 'src/**/*.{js,jsx,ts,tsx,json,md}'", + "postinstall": "prisma generate" }, "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@google-cloud/firestore": "^6.7.0", "@octokit/rest": "^19.0.7", + "@prisma/client": "^5.2.0", "@types/ioredis": "^5.0.0", "@types/node": "18.15.10", "@types/react": "18.0.29", @@ -42,6 +44,7 @@ "prettier": "^2.8.7", "prettier-plugin-organize-imports": "^3.2.2", "prettier-plugin-sort-json": "^1.0.0", + "prisma": "^5.2.0", "tailwindcss": "^3.2.7", "ts-node": "10.7.0", "typescript": "4.5.2" diff --git a/prisma/schema.prisma b/prisma/schema.prisma new file mode 100644 index 0000000..ab0268a --- /dev/null +++ b/prisma/schema.prisma @@ -0,0 +1,24 @@ +// This is your Prisma schema file, +// learn more about it in the docs: https://pris.ly/d/prisma-schema + +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "mysql" + url = env("DATABASE_URL") + relationMode = "prisma" +} + +model Cache { + key String @id + value Json + updatedAt DateTime @updatedAt +} + +model Counter { + id String @id @default("cache") + count Int + updatedAt DateTime @updatedAt +} diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts new file mode 100644 index 0000000..8e1d9f8 --- /dev/null +++ b/src/services/planetscale.ts @@ -0,0 +1,56 @@ +import { PrismaClient } from '@prisma/client'; + +export class PlanetScaleCache { + private prisma: PrismaClient; + + constructor() { + this.prisma = new PrismaClient(); + } + + public async cacheJsonValue(key: string[], value: T) { + const sortedKey = key.sort(); + const planetScaleKey = sortedKey.join(':'); + + const counter = await this.prisma.counter.findUnique({ where: { id: 'cache' } }); + + await this.prisma.$transaction([ + this.prisma.cache.upsert({ + where: { key: planetScaleKey }, + update: { value }, + create: { key: planetScaleKey, value }, + }), + this.prisma.counter.update({ + where: { id: 'cache' }, + data: { count: (counter?.count || 0) + 1 }, + }), + ]); + } + + public async getCachedJsonValue(key: string[]): Promise { + const sortedKey = key.sort(); + const planetScaleKey = sortedKey.join(':'); + + const cacheEntry = await this.prisma.cache.findUnique({ where: { key: planetScaleKey } }); + return cacheEntry?.value as T | undefined; + } + + public async deleteCachedJsonValue(key: string[]): Promise { + const sortedKey = key.sort(); + const planetScaleKey = sortedKey.join(':'); + + const counter = await this.prisma.counter.findUnique({ where: { id: 'cache' } }); + + await this.prisma.$transaction([ + this.prisma.cache.delete({ where: { key: planetScaleKey } }), + this.prisma.counter.update({ + where: { id: 'cache' }, + data: { count: (counter?.count || 0) - 1 }, + }), + ]); + } + + public async getDbSize(): Promise { + const counter = await this.prisma.counter.findUnique({ where: { id: 'cache' } }); + return counter?.count || 0; + } +} From 388daaf9a815d1ede1d038bd5e2c260d57894fcf Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 26 Aug 2023 21:13:54 +0200 Subject: [PATCH 053/272] integrate planetscale --- prisma/schema.prisma | 6 ------ src/pages/api/dbsize.ts | 4 ++-- src/services/btdigg.ts | 4 ++-- src/services/planetscale.ts | 32 ++++++++------------------------ 4 files changed, 12 insertions(+), 34 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index ab0268a..20fe316 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -16,9 +16,3 @@ model Cache { value Json updatedAt DateTime @updatedAt } - -model Counter { - id String @id @default("cache") - count Int - updatedAt DateTime @updatedAt -} diff --git a/src/pages/api/dbsize.ts b/src/pages/api/dbsize.ts index 37e4024..ca01652 100644 --- a/src/pages/api/dbsize.ts +++ b/src/pages/api/dbsize.ts @@ -1,7 +1,7 @@ -import { FirestoreCache } from '@/services/firestore'; +import { PlanetScaleCache } from '@/services/planetscale'; import { NextApiHandler } from 'next'; -const cache = new FirestoreCache(); +const cache = new PlanetScaleCache(); const handler: NextApiHandler = async (req, res) => { try { diff --git a/src/services/btdigg.ts b/src/services/btdigg.ts index c84e8f5..27457c8 100644 --- a/src/services/btdigg.ts +++ b/src/services/btdigg.ts @@ -4,7 +4,7 @@ import getReleaseTags from '@/utils/score'; import { filenameParse, ParsedFilename } from '@ctrl/video-filename-parser'; import axios, { AxiosInstance } from 'axios'; import { SocksProxyAgent } from 'socks-proxy-agent'; -import { FirestoreCache } from './firestore'; +import { PlanetScaleCache } from './planetscale'; export type SearchResult = { title: string; @@ -21,7 +21,7 @@ export type SearchResult = { info: ParsedFilename; }; -const cache = new FirestoreCache(); +const cache = new PlanetScaleCache(); export const createAxiosInstance = (agent: SocksProxyAgent) => { return axios.create({ diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index 8e1d9f8..3dee59c 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -11,19 +11,11 @@ export class PlanetScaleCache { const sortedKey = key.sort(); const planetScaleKey = sortedKey.join(':'); - const counter = await this.prisma.counter.findUnique({ where: { id: 'cache' } }); - - await this.prisma.$transaction([ - this.prisma.cache.upsert({ - where: { key: planetScaleKey }, - update: { value }, - create: { key: planetScaleKey, value }, - }), - this.prisma.counter.update({ - where: { id: 'cache' }, - data: { count: (counter?.count || 0) + 1 }, - }), - ]); + await this.prisma.cache.upsert({ + where: { key: planetScaleKey }, + update: { value } as any, + create: { key: planetScaleKey, value } as any, + }); } public async getCachedJsonValue(key: string[]): Promise { @@ -38,19 +30,11 @@ export class PlanetScaleCache { const sortedKey = key.sort(); const planetScaleKey = sortedKey.join(':'); - const counter = await this.prisma.counter.findUnique({ where: { id: 'cache' } }); - - await this.prisma.$transaction([ - this.prisma.cache.delete({ where: { key: planetScaleKey } }), - this.prisma.counter.update({ - where: { id: 'cache' }, - data: { count: (counter?.count || 0) - 1 }, - }), - ]); + await this.prisma.cache.delete({ where: { key: planetScaleKey } }); } public async getDbSize(): Promise { - const counter = await this.prisma.counter.findUnique({ where: { id: 'cache' } }); - return counter?.count || 0; + const count = await this.prisma.cache.count(); + return count; } } From 676b43610b980baea71a5f61027d3b5522a38221 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 26 Aug 2023 21:19:46 +0200 Subject: [PATCH 054/272] upgrade typescript --- package-lock.json | 12 ++++++------ package.json | 3 +-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5e23990..1237b54 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,7 @@ "": { "name": "debrid-media-manager", "version": "2.5.6", + "hasInstallScript": true, "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@google-cloud/firestore": "^6.7.0", @@ -30,7 +31,6 @@ "react-hot-toast": "^2.4.0", "react-icons": "^4.8.0", "socks-proxy-agent": "^7.0.0", - "typescript": "5.0.2", "uuid": "^9.0.0" }, "devDependencies": { @@ -44,7 +44,7 @@ "prisma": "^5.2.0", "tailwindcss": "^3.2.7", "ts-node": "10.7.0", - "typescript": "4.5.2" + "typescript": "^5.2.2" } }, "node_modules/@babel/parser": { @@ -6034,15 +6034,15 @@ } }, "node_modules/typescript": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz", - "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/uc.micro": { diff --git a/package.json b/package.json index 32dccad..ee404b0 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,6 @@ "react-hot-toast": "^2.4.0", "react-icons": "^4.8.0", "socks-proxy-agent": "^7.0.0", - "typescript": "5.0.2", "uuid": "^9.0.0" }, "devDependencies": { @@ -47,6 +46,6 @@ "prisma": "^5.2.0", "tailwindcss": "^3.2.7", "ts-node": "10.7.0", - "typescript": "4.5.2" + "typescript": "^5.2.2" } } From 43537e45b5673ab978992d6ea3ad118e45042384 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 26 Aug 2023 21:21:44 +0200 Subject: [PATCH 055/272] upgrade next --- package-lock.json | 221 ++++++++++++++++++++-------------------------- package.json | 2 +- 2 files changed, 99 insertions(+), 124 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1237b54..f79980c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "express": "^4.18.2", "ioredis": "^5.3.2", "lz-string": "^1.5.0", - "next": "13.2.4", + "next": "^13.4.19", "qs": "^6.11.1", "react": "18.2.0", "react-dom": "18.2.0", @@ -294,9 +294,9 @@ } }, "node_modules/@next/env": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.2.4.tgz", - "integrity": "sha512-+Mq3TtpkeeKFZanPturjcXt+KHfKYnLlX6jMLyCrmpq6OOs4i1GqBOAauSkii9QeKCMTYzGppar21JU57b/GEA==" + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.19.tgz", + "integrity": "sha512-FsAT5x0jF2kkhNkKkukhsyYOrRqtSxrEhfliniIq0bwWbuXLgyt3Gv0Ml+b91XwjwArmuP7NxCiGd++GGKdNMQ==" }, "node_modules/@next/eslint-plugin-next": { "version": "13.2.4", @@ -306,40 +306,10 @@ "glob": "7.1.7" } }, - "node_modules/@next/swc-android-arm-eabi": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.2.4.tgz", - "integrity": "sha512-DWlalTSkLjDU11MY11jg17O1gGQzpRccM9Oes2yTqj2DpHndajrXHGxj9HGtJ+idq2k7ImUdJVWS2h2l/EDJOw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-android-arm64": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.2.4.tgz", - "integrity": "sha512-sRavmUImUCf332Gy+PjIfLkMhiRX1Ez4SI+3vFDRs1N5eXp+uNzjFUK/oLMMOzk6KFSkbiK/3Wt8+dHQR/flNg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@next/swc-darwin-arm64": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.2.4.tgz", - "integrity": "sha512-S6vBl+OrInP47TM3LlYx65betocKUUlTZDDKzTiRDbsRESeyIkBtZ6Qi5uT2zQs4imqllJznVjFd1bXLx3Aa6A==", + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.19.tgz", + "integrity": "sha512-vv1qrjXeGbuF2mOkhkdxMDtv9np7W4mcBtaDnHU+yJG+bBwa6rYsYSCI/9Xm5+TuF5SbZbrWO6G1NfTh1TMjvQ==", "cpu": [ "arm64" ], @@ -352,9 +322,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.2.4.tgz", - "integrity": "sha512-a6LBuoYGcFOPGd4o8TPo7wmv5FnMr+Prz+vYHopEDuhDoMSHOnC+v+Ab4D7F0NMZkvQjEJQdJS3rqgFhlZmKlw==", + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.19.tgz", + "integrity": "sha512-jyzO6wwYhx6F+7gD8ddZfuqO4TtpJdw3wyOduR4fxTUCm3aLw7YmHGYNjS0xRSYGAkLpBkH1E0RcelyId6lNsw==", "cpu": [ "x64" ], @@ -366,40 +336,10 @@ "node": ">= 10" } }, - "node_modules/@next/swc-freebsd-x64": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.2.4.tgz", - "integrity": "sha512-kkbzKVZGPaXRBPisoAQkh3xh22r+TD+5HwoC5bOkALraJ0dsOQgSMAvzMXKsN3tMzJUPS0tjtRf1cTzrQ0I5vQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm-gnueabihf": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.2.4.tgz", - "integrity": "sha512-7qA1++UY0fjprqtjBZaOA6cas/7GekpjVsZn/0uHvquuITFCdKGFCsKNBx3S0Rpxmx6WYo0GcmhNRM9ru08BGg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.2.4.tgz", - "integrity": "sha512-xzYZdAeq883MwXgcwc72hqo/F/dwUxCukpDOkx/j1HTq/J0wJthMGjinN9wH5bPR98Mfeh1MZJ91WWPnZOedOg==", + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.19.tgz", + "integrity": "sha512-vdlnIlaAEh6H+G6HrKZB9c2zJKnpPVKnA6LBwjwT2BTjxI7e0Hx30+FoWCgi50e+YO49p6oPOtesP9mXDRiiUg==", "cpu": [ "arm64" ], @@ -412,9 +352,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.2.4.tgz", - "integrity": "sha512-8rXr3WfmqSiYkb71qzuDP6I6R2T2tpkmf83elDN8z783N9nvTJf2E7eLx86wu2OJCi4T05nuxCsh4IOU3LQ5xw==", + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.19.tgz", + "integrity": "sha512-aU0HkH2XPgxqrbNRBFb3si9Ahu/CpaR5RPmN2s9GiM9qJCiBBlZtRTiEca+DC+xRPyCThTtWYgxjWHgU7ZkyvA==", "cpu": [ "arm64" ], @@ -427,9 +367,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.2.4.tgz", - "integrity": "sha512-Ngxh51zGSlYJ4EfpKG4LI6WfquulNdtmHg1yuOYlaAr33KyPJp4HeN/tivBnAHcZkoNy0hh/SbwDyCnz5PFJQQ==", + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.19.tgz", + "integrity": "sha512-htwOEagMa/CXNykFFeAHHvMJeqZfNQEoQvHfsA4wgg5QqGNqD5soeCer4oGlCol6NGUxknrQO6VEustcv+Md+g==", "cpu": [ "x64" ], @@ -442,9 +382,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.2.4.tgz", - "integrity": "sha512-gOvwIYoSxd+j14LOcvJr+ekd9fwYT1RyMAHOp7znA10+l40wkFiMONPLWiZuHxfRk+Dy7YdNdDh3ImumvL6VwA==", + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.19.tgz", + "integrity": "sha512-4Gj4vvtbK1JH8ApWTT214b3GwUh9EKKQjY41hH/t+u55Knxi/0wesMzwQRhppK6Ddalhu0TEttbiJ+wRcoEj5Q==", "cpu": [ "x64" ], @@ -457,9 +397,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.2.4.tgz", - "integrity": "sha512-q3NJzcfClgBm4HvdcnoEncmztxrA5GXqKeiZ/hADvC56pwNALt3ngDC6t6qr1YW9V/EPDxCYeaX4zYxHciW4Dw==", + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.19.tgz", + "integrity": "sha512-bUfDevQK4NsIAHXs3/JNgnvEY+LRyneDN788W2NYiRIIzmILjba7LaQTfihuFawZDhRtkYCv3JDC3B4TwnmRJw==", "cpu": [ "arm64" ], @@ -472,9 +412,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.2.4.tgz", - "integrity": "sha512-/eZ5ncmHUYtD2fc6EUmAIZlAJnVT2YmxDsKs1Ourx0ttTtvtma/WKlMV5NoUsyOez0f9ExLyOpeCoz5aj+MPXw==", + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.19.tgz", + "integrity": "sha512-Y5kikILFAr81LYIFaw6j/NrOtmiM4Sf3GtOc0pn50ez2GCkr+oejYuKGcwAwq3jiTKuzF6OF4iT2INPoxRycEA==", "cpu": [ "ia32" ], @@ -487,9 +427,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.2.4.tgz", - "integrity": "sha512-0MffFmyv7tBLlji01qc0IaPP/LVExzvj7/R5x1Jph1bTAIj4Vu81yFQWHHQAP6r4ff9Ukj1mBK6MDNVXm7Tcvw==", + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.19.tgz", + "integrity": "sha512-YzA78jBDXMYiINdPdJJwGgPNT3YqBNNGhsthsDoWHL9p24tEJn9ViQf/ZqTbwSpX/RrkPupLfuuTH2sf73JBAw==", "cpu": [ "x64" ], @@ -791,9 +731,9 @@ "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==" }, "node_modules/@swc/helpers": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", - "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz", + "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==", "dependencies": { "tslib": "^2.4.0" } @@ -1497,6 +1437,17 @@ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -3069,6 +3020,11 @@ "node": ">=10.13.0" } }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, "node_modules/globals": { "version": "13.20.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", @@ -4269,41 +4225,38 @@ } }, "node_modules/next": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/next/-/next-13.2.4.tgz", - "integrity": "sha512-g1I30317cThkEpvzfXujf0O4wtaQHtDCLhlivwlTJ885Ld+eOgcz7r3TGQzeU+cSRoNHtD8tsJgzxVdYojFssw==", + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/next/-/next-13.4.19.tgz", + "integrity": "sha512-HuPSzzAbJ1T4BD8e0bs6B9C1kWQ6gv8ykZoRWs5AQoiIuqbGHHdQO7Ljuvg05Q0Z24E2ABozHe6FxDvI6HfyAw==", "dependencies": { - "@next/env": "13.2.4", - "@swc/helpers": "0.4.14", + "@next/env": "13.4.19", + "@swc/helpers": "0.5.1", + "busboy": "1.6.0", "caniuse-lite": "^1.0.30001406", "postcss": "8.4.14", - "styled-jsx": "5.1.1" + "styled-jsx": "5.1.1", + "watchpack": "2.4.0", + "zod": "3.21.4" }, "bin": { "next": "dist/bin/next" }, "engines": { - "node": ">=14.6.0" + "node": ">=16.8.0" }, "optionalDependencies": { - "@next/swc-android-arm-eabi": "13.2.4", - "@next/swc-android-arm64": "13.2.4", - "@next/swc-darwin-arm64": "13.2.4", - "@next/swc-darwin-x64": "13.2.4", - "@next/swc-freebsd-x64": "13.2.4", - "@next/swc-linux-arm-gnueabihf": "13.2.4", - "@next/swc-linux-arm64-gnu": "13.2.4", - "@next/swc-linux-arm64-musl": "13.2.4", - "@next/swc-linux-x64-gnu": "13.2.4", - "@next/swc-linux-x64-musl": "13.2.4", - "@next/swc-win32-arm64-msvc": "13.2.4", - "@next/swc-win32-ia32-msvc": "13.2.4", - "@next/swc-win32-x64-msvc": "13.2.4" + "@next/swc-darwin-arm64": "13.4.19", + "@next/swc-darwin-x64": "13.4.19", + "@next/swc-linux-arm64-gnu": "13.4.19", + "@next/swc-linux-arm64-musl": "13.4.19", + "@next/swc-linux-x64-gnu": "13.4.19", + "@next/swc-linux-x64-musl": "13.4.19", + "@next/swc-win32-arm64-msvc": "13.4.19", + "@next/swc-win32-ia32-msvc": "13.4.19", + "@next/swc-win32-x64-msvc": "13.4.19" }, "peerDependencies": { - "@opentelemetry/api": "^1.4.0", - "fibers": ">= 3.1.0", - "node-sass": "^6.0.0 || ^7.0.0", + "@opentelemetry/api": "^1.1.0", "react": "^18.2.0", "react-dom": "^18.2.0", "sass": "^1.3.0" @@ -4312,12 +4265,6 @@ "@opentelemetry/api": { "optional": true }, - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, "sass": { "optional": true } @@ -5559,6 +5506,14 @@ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -6166,6 +6121,18 @@ "node": ">= 0.8" } }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -6342,6 +6309,14 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zod": { + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", + "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/package.json b/package.json index ee404b0..ee2f804 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "express": "^4.18.2", "ioredis": "^5.3.2", "lz-string": "^1.5.0", - "next": "13.2.4", + "next": "^13.4.19", "qs": "^6.11.1", "react": "18.2.0", "react-dom": "18.2.0", From e6e84e654f391398c69f0b91b724ef5c2d486372 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 26 Aug 2023 21:41:31 +0200 Subject: [PATCH 056/272] Refactor dockerfile --- Dockerfile | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4375adf..af0f4ba 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,31 @@ -FROM node:alpine as builder +# ---- Base Node ---- +FROM node:14-alpine AS base WORKDIR /app COPY package*.json ./ -RUN npm ci + +# ---- Dependencies ---- +FROM base AS dependencies +RUN npm set progress=false && npm config set depth 0 +RUN npm install --only=production +# copy production node_modules aside +RUN cp -R node_modules prod_node_modules +# install ALL node_modules, including 'devDependencies' +RUN npm install + +# ---- Build ---- +FROM dependencies AS build COPY . . RUN npm run build -FROM node:alpine as production -WORKDIR /app -COPY package*.json ./ -RUN npm ci -COPY --from=builder /app/.next ./.next -COPY ./public ./public -ENV NODE_ENV=production +# --- Release ---- +FROM base AS release +# copy production node_modules +COPY --from=dependencies /app/prod_node_modules ./node_modules +# copy app sources +COPY . . +# copy build files from build image +COPY --from=build /app/.next ./.next +COPY --from=build /app/public ./public +# Expose the listening port EXPOSE 3000 -CMD [ "npm", "start" ] +CMD ["npm", "start"] From c431126ead11f099a9b992f831bfc59fd2a47413 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 26 Aug 2023 21:47:46 +0200 Subject: [PATCH 057/272] use newer version of node --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index af0f4ba..5b8e7b1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # ---- Base Node ---- -FROM node:14-alpine AS base +FROM node:alpine AS base WORKDIR /app COPY package*.json ./ From 4ebc9796c066f46b481d542ef8d45f1c465cd9a5 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 26 Aug 2023 21:55:32 +0200 Subject: [PATCH 058/272] Ignore extra dir when building --- tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 32b02c2..8185424 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -23,5 +23,5 @@ "sourceMap": true }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], - "exclude": ["node_modules"] + "exclude": ["node_modules", "prod_node_modules"] } From cec2f8bb9de3a85412f0f222fec257655f66191a Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 26 Aug 2023 22:51:29 +0200 Subject: [PATCH 059/272] update ci --- .github/workflows/build-and-push.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-and-push.yml b/.github/workflows/build-and-push.yml index 6fd2707..6f1006b 100644 --- a/.github/workflows/build-and-push.yml +++ b/.github/workflows/build-and-push.yml @@ -27,13 +27,13 @@ jobs: ${{ runner.os }}-node- - name: Set up QEMU - uses: docker/setup-qemu-action@v1 + uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 - name: Login to Docker Hub - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} @@ -43,13 +43,13 @@ jobs: - name: Build and push Docker image id: build-image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v4 with: context: . push: true platforms: ${{ matrix.platform }} - cache-from: type=local,src=/tmp/.buildx-cache - cache-to: type=local,dest=/tmp/.buildx-cache + cache-from: type=gha + cache-to: type=gha,mode=max tags: | debridmediamanager/debrid-media-manager:latest debridmediamanager/debrid-media-manager:${{ env.version }} From 500c438f6d41d8b6591d78c60cfea1d59474a45e Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 26 Aug 2023 23:09:29 +0200 Subject: [PATCH 060/272] do not use matrix strategy --- .github/workflows/build-and-push.yml | 5 +---- Dockerfile | 3 +++ package.json | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-and-push.yml b/.github/workflows/build-and-push.yml index 6f1006b..ebacf6a 100644 --- a/.github/workflows/build-and-push.yml +++ b/.github/workflows/build-and-push.yml @@ -10,9 +10,6 @@ on: jobs: build-and-push: runs-on: ubuntu-latest - strategy: - matrix: - platform: [linux/amd64, linux/arm64] steps: - name: Checkout code @@ -47,7 +44,7 @@ jobs: with: context: . push: true - platforms: ${{ matrix.platform }} + platforms: linux/amd64,linux/arm64 cache-from: type=gha cache-to: type=gha,mode=max tags: | diff --git a/Dockerfile b/Dockerfile index 5b8e7b1..a76ad7a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,6 +26,9 @@ COPY . . # copy build files from build image COPY --from=build /app/.next ./.next COPY --from=build /app/public ./public + +RUN npm run prisma:generate + # Expose the listening port EXPOSE 3000 CMD ["npm", "start"] diff --git a/package.json b/package.json index ee2f804..4f6a8cf 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "start": "next start", "lint": "next lint", "format": "prettier --write 'src/**/*.{js,jsx,ts,tsx,json,md}'", - "postinstall": "prisma generate" + "prisma:generate": "prisma generate" }, "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", From 9f4827984e11eaf8830b5d90ced7bd0dd2fbaeb1 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 27 Aug 2023 09:23:46 +0200 Subject: [PATCH 061/272] no more redis --- .github/workflows/build-tor.yml | 19 +++++++-- docker-compose.yml | 56 +------------------------- package-lock.json | 71 ++++++++++++++++++++++++++++++++- package.json | 3 ++ src/pages/api/search.ts | 3 +- src/pages/api/slowsearch.ts | 3 +- src/services/btdigg.ts | 30 +++++++------- tor.Dockerfile | 7 ++-- 8 files changed, 110 insertions(+), 82 deletions(-) diff --git a/.github/workflows/build-tor.yml b/.github/workflows/build-tor.yml index de000c6..bc7a335 100644 --- a/.github/workflows/build-tor.yml +++ b/.github/workflows/build-tor.yml @@ -4,6 +4,8 @@ on: push: branches: - main + paths: + - 'tor.Dockerfile' jobs: tor-build-and-push: @@ -13,22 +15,31 @@ jobs: - name: Checkout code uses: actions/checkout@v2 + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 - name: Login to Docker Hub - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Read version from package.json + run: echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_ENV + - name: Build and push Docker image id: build-image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v4 with: context: . file: tor.Dockerfile - platform: linux/amd64 push: true + platforms: linux/amd64,linux/arm64 + cache-from: type=gha + cache-to: type=gha,mode=max tags: | debridmediamanager/tor:latest + debridmediamanager/tor:${{ env.version }} diff --git a/docker-compose.yml b/docker-compose.yml index 77a4a48..590cf0b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,15 +1,7 @@ version: '3.9' services: - debugger: - image: ubuntu - volumes: - - redis_data:/userdata - entrypoint: ['tail', '-f', '/dev/null'] - deploy: - replicas: 1 - tor: - image: dockage/tor-privoxy + image: debridmediamanager/tor deploy: replicas: 4 @@ -22,53 +14,7 @@ services: - .env.local depends_on: - tor - - redis-sentinel deploy: replicas: 4 restart_policy: condition: on-failure - - redis-master: - image: bitnami/redis:latest - environment: - - REDIS_REPLICATION_MODE=master - - REDIS_PASSWORD=dmm123456 - volumes: - - redis_data:/bitnami/redis/data - ports: - - 6379 - deploy: - replicas: 1 - - redis-slave: - image: bitnami/redis:latest - environment: - - REDIS_REPLICATION_MODE=slave - - REDIS_PASSWORD=dmm123456 - - REDIS_MASTER_HOST=redis-master - - REDIS_MASTER_PASSWORD=dmm123456 - depends_on: - - redis-master - volumes: - - redis_data:/bitnami/redis/data - ports: - - 6379 - deploy: - replicas: 4 - - redis-sentinel: - image: bitnami/redis-sentinel:latest - environment: - - REDIS_MASTER_HOST=redis-master - - REDIS_MASTER_PASSWORD=dmm123456 - depends_on: - - redis-master - - redis-slave - ports: - - 26379 - deploy: - replicas: 1 - -volumes: - redis_data: - external: true diff --git a/package-lock.json b/package-lock.json index f79980c..cdeec46 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,6 @@ "": { "name": "debrid-media-manager", "version": "2.5.6", - "hasInstallScript": true, "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@google-cloud/firestore": "^6.7.0", @@ -31,11 +30,14 @@ "react-hot-toast": "^2.4.0", "react-icons": "^4.8.0", "socks-proxy-agent": "^7.0.0", + "user-agents": "^1.0.1444", "uuid": "^9.0.0" }, "devDependencies": { + "@types/axios": "^0.14.0", "@types/node": "^16.11.10", "@types/qs": "^6.9.7", + "@types/user-agents": "^1.0.2", "autoprefixer": "^10.4.14", "postcss": "^8.4.21", "prettier": "^2.8.7", @@ -762,6 +764,16 @@ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, + "node_modules/@types/axios": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@types/axios/-/axios-0.14.0.tgz", + "integrity": "sha512-KqQnQbdYE54D7oa/UmYVMZKq7CO4l8DEENzOKc4aBRwxCXSlJXGz83flFx5L7AWrOQnmuN3kVsRdt+GZPPjiVQ==", + "deprecated": "This is a stub types definition for axios (https://github.com/mzabriskie/axios). axios provides its own type definitions, so you don't need @types/axios installed!", + "dev": true, + "dependencies": { + "axios": "*" + } + }, "node_modules/@types/glob": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", @@ -868,6 +880,12 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" }, + "node_modules/@types/user-agents": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/user-agents/-/user-agents-1.0.2.tgz", + "integrity": "sha512-WOoL2UJTI6RxV8RB2kS3ZhxjjijI5G1i7mgU7mtlm4LsC1XGCfiV56h+GV4VZnAUkkkLQ4gbFGR/dggT01n0RA==", + "dev": true + }, "node_modules/@types/uuid": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz", @@ -1818,6 +1836,14 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-indent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz", + "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==", + "engines": { + "node": ">=8" + } + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -1850,6 +1876,14 @@ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "dev": true }, + "node_modules/docopt": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/docopt/-/docopt-0.6.2.tgz", + "integrity": "sha512-NqTbaYeE4gA/wU1hdKFdU+AFahpDOpgGLzHP42k6H6DKExJd0A55KEVWYhL9FEmHmgeLvEU2vuKXDuU+4yToOw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -1861,6 +1895,19 @@ "node": ">=6.0.0" } }, + "node_modules/dot-json": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/dot-json/-/dot-json-1.3.0.tgz", + "integrity": "sha512-Pu11Prog/Yjf2lBICow82/DSV46n3a2XT1Rqt/CeuhkO1fuacF7xydYhI0SwQx2Ue0jCyLtQzgKPFEO6ewv+bQ==", + "dependencies": { + "detect-indent": "~6.0.0", + "docopt": "~0.6.2", + "underscore-keypath": "~0.0.22" + }, + "bin": { + "dot-json": "bin/dot-json.js" + } + }, "node_modules/duplexify": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", @@ -3981,6 +4028,11 @@ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, "node_modules/lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", @@ -6035,6 +6087,14 @@ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" }, + "node_modules/underscore-keypath": { + "version": "0.0.22", + "resolved": "https://registry.npmjs.org/underscore-keypath/-/underscore-keypath-0.0.22.tgz", + "integrity": "sha512-fU7aYj1J2LQd+jqdQ67AlCOZKK3Pl+VErS8fGYcgZG75XB9/bY+RLM+F2xEcKHhHNtLvqqFyXAoZQlLYfec3Xg==", + "dependencies": { + "underscore": "*" + } + }, "node_modules/universal-user-agent": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", @@ -6086,6 +6146,15 @@ "punycode": "^2.1.0" } }, + "node_modules/user-agents": { + "version": "1.0.1444", + "resolved": "https://registry.npmjs.org/user-agents/-/user-agents-1.0.1444.tgz", + "integrity": "sha512-6WXJ0RZuUKgif1rW5FN02HnpoJ8EzH6COQoXCiVStZEVPz+YnAx3iA48etY3ZD4UwueYN9ALC7j4ayHvYEh7tA==", + "dependencies": { + "dot-json": "^1.3.0", + "lodash.clonedeep": "^4.5.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index 4f6a8cf..c95a5a7 100644 --- a/package.json +++ b/package.json @@ -33,11 +33,14 @@ "react-hot-toast": "^2.4.0", "react-icons": "^4.8.0", "socks-proxy-agent": "^7.0.0", + "user-agents": "^1.0.1444", "uuid": "^9.0.0" }, "devDependencies": { + "@types/axios": "^0.14.0", "@types/node": "^16.11.10", "@types/qs": "^6.9.7", + "@types/user-agents": "^1.0.2", "autoprefixer": "^10.4.14", "postcss": "^8.4.21", "prettier": "^2.8.7", diff --git a/src/pages/api/search.ts b/src/pages/api/search.ts index 4819832..b71794c 100644 --- a/src/pages/api/search.ts +++ b/src/pages/api/search.ts @@ -40,7 +40,6 @@ export default async function handler( const finalQuery = cleanSearchQuery(search); const libraryTypes = getLibraryTypes(libraryType); - const client = createAxiosInstance(agent); let speed: searchSpeedType = 'veryfast'; if (process.env.SEARCH_SPEED_PASSWORD) { @@ -53,7 +52,7 @@ export default async function handler( try { const results = []; for (const lType of libraryTypes) { - results.push(await fetchSearchResults(speed, client, finalQuery, lType)); + results.push(await fetchSearchResults(speed, createAxiosInstance(agent), finalQuery, lType)); } let processedResults = flattenAndRemoveDuplicates(results); if (processedResults.length) processedResults = groupByParsedTitle(processedResults); diff --git a/src/pages/api/slowsearch.ts b/src/pages/api/slowsearch.ts index 3aec946..e9efd71 100644 --- a/src/pages/api/slowsearch.ts +++ b/src/pages/api/slowsearch.ts @@ -34,12 +34,11 @@ export default async function handler( const finalQuery = cleanSearchQuery(search); const libraryTypes = getLibraryTypes(libraryType); - const client = createAxiosInstance(agent); try { const results = []; for (const lType of libraryTypes) { - results.push(await fetchSearchResults('veryslow', client, finalQuery, lType)); + results.push(await fetchSearchResults('veryslow', createAxiosInstance(agent), finalQuery, lType)); } let processedResults = flattenAndRemoveDuplicates(results); if (processedResults.length) processedResults = groupByParsedTitle(processedResults); diff --git a/src/services/btdigg.ts b/src/services/btdigg.ts index 27457c8..f6db7a4 100644 --- a/src/services/btdigg.ts +++ b/src/services/btdigg.ts @@ -5,6 +5,7 @@ import { filenameParse, ParsedFilename } from '@ctrl/video-filename-parser'; import axios, { AxiosInstance } from 'axios'; import { SocksProxyAgent } from 'socks-proxy-agent'; import { PlanetScaleCache } from './planetscale'; +import UserAgent from 'user-agents'; export type SearchResult = { title: string; @@ -27,21 +28,17 @@ export const createAxiosInstance = (agent: SocksProxyAgent) => { return axios.create({ httpAgent: agent, headers: { - authority: 'btdig.com', - accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', - 'accept-language': 'en-US,en;q=0.9', - dnt: '1', - referer: 'https://btdig.com/', - 'sec-ch-ua': '"Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"', - 'sec-ch-ua-mobile': '?0', - 'sec-ch-ua-platform': '"macOS"', + accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', + 'accept-language': 'en-US,en;q=0.5', + 'accept-encoding': 'gzip, deflate, br', + referer: 'http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion/', + connection: 'keep-alive', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'same-origin', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', - 'user-agent': - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36', + 'user-agent': new UserAgent().toString(), }, timeout: parseInt(process.env.REQUEST_TIMEOUT || '3000', 10), }); @@ -170,10 +167,15 @@ export async function fetchSearchResults( break; } catch (error: any) { console.error(`Error scraping page ${pageNum} (${finalQuery})`, error.message); - retries++; - if (retries > MAX_RETRIES) { - console.error(`Max retries reached (${MAX_RETRIES}), aborting search`); - throw error; + if (error.message.includes('status code 429') || error.message.includes('"socket" was not created')) { + console.log('Waiting 5 seconds before retrying...'); + await new Promise((resolve) => setTimeout(resolve, 5000)); + } else { + retries++; + if (retries > MAX_RETRIES) { + console.error(`Max retries reached (${MAX_RETRIES}), aborting search`); + throw error; + } } const delay = RETRY_DELAY * Math.pow(2, retries - 1); await new Promise((resolve) => setTimeout(resolve, delay)); diff --git a/tor.Dockerfile b/tor.Dockerfile index 75de467..4995bc6 100644 --- a/tor.Dockerfile +++ b/tor.Dockerfile @@ -1,6 +1,6 @@ FROM alpine:latest -RUN apk --no-cache --update --upgrade add tor \ +RUN apk --no-cache --update --upgrade add tor curl grep \ && mv /etc/tor/torrc.sample /etc/tor/torrc \ && sed -i \ -e 's/#SOCKSPort 192.168.0.1:9100/SOCKSPort 0.0.0.0:9050/g' \ @@ -12,6 +12,5 @@ ENTRYPOINT tor EXPOSE 9050/tcp -HEALTHCHECK --interval=120s --timeout=30s --start-period=60s --retries=5 \ - CMD curl --silent --location --socks5-hostname 127.0.0.1:9050 https://check.torproject.org/?lang=en_US | \ - grep -qm1 Congratulations +HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=1 \ + CMD curl -x socks5h://127.0.0.1:9050 -s http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion | grep -qm1 Histats From e1768ce8c0ac2868d89b453111878b887e0cc9ac Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 27 Aug 2023 11:03:30 +0200 Subject: [PATCH 062/272] boost and search fix --- src/services/btdigg.ts | 1 + src/services/planetscale.ts | 1 + src/utils/mediaId.ts | 1 - 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/services/btdigg.ts b/src/services/btdigg.ts index f6db7a4..1e0e2fb 100644 --- a/src/services/btdigg.ts +++ b/src/services/btdigg.ts @@ -57,6 +57,7 @@ export const flattenAndRemoveDuplicates = (arr: SearchResult[][]): SearchResult[ export const groupByParsedTitle = (results: SearchResult[]): SearchResult[] => { const frequency: Record = {}; + results = results.filter((result) => result.info.title); for (const result of results) { const mediaId = getMediaId(result.info, result.mediaType, true); if (mediaId in frequency) { diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index 3dee59c..5d434b5 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -5,6 +5,7 @@ export class PlanetScaleCache { constructor() { this.prisma = new PrismaClient(); + this.prisma.$queryRaw`SET @@boost_cached_queries = true` } public async cacheJsonValue(key: string[], value: T) { diff --git a/src/utils/mediaId.ts b/src/utils/mediaId.ts index ed2b307..e510055 100644 --- a/src/utils/mediaId.ts +++ b/src/utils/mediaId.ts @@ -12,7 +12,6 @@ export const getMediaId = ( return `${systemOnlyId ? info.title.toLocaleLowerCase() : info.title}${ info.year ? ` (${info.year})` : '' }`; - const { title, seasons, fullSeason, isMultiSeason, episodeNumbers } = info as ParsedShow; const titleStr = systemOnlyId ? title.toLocaleLowerCase() : title; if (tvShowTitleOnly) { From a092994939d2a0287edb4130a39acf4b9bd2e579 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 27 Aug 2023 14:12:40 +0200 Subject: [PATCH 063/272] Add healthcheck --- Dockerfile | 3 +++ src/pages/api/healthz.ts | 7 +++++++ 2 files changed, 10 insertions(+) create mode 100644 src/pages/api/healthz.ts diff --git a/Dockerfile b/Dockerfile index a76ad7a..fce9eed 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,3 +32,6 @@ RUN npm run prisma:generate # Expose the listening port EXPOSE 3000 CMD ["npm", "start"] + +HEALTHCHECK --interval=30s --timeout=1s --start-period=3s --retries=1 \ + CMD curl -s http://127.0.0.1:3000/api/healthz | grep -qm1 ok diff --git a/src/pages/api/healthz.ts b/src/pages/api/healthz.ts new file mode 100644 index 0000000..5cae90e --- /dev/null +++ b/src/pages/api/healthz.ts @@ -0,0 +1,7 @@ +import { NextApiHandler } from 'next'; + +const handler: NextApiHandler = async (req, res) => { + res.status(200).json({ status: 'ok' }); +}; + +export default handler; From e3a6126a3ce202e5f516e3f70d320ee705ad25bc Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 27 Aug 2023 14:27:40 +0200 Subject: [PATCH 064/272] Add curl and grep to image --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index fce9eed..809506f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -33,5 +33,7 @@ RUN npm run prisma:generate EXPOSE 3000 CMD ["npm", "start"] +RUN apk --no-cache --update --upgrade add curl grep + HEALTHCHECK --interval=30s --timeout=1s --start-period=3s --retries=1 \ CMD curl -s http://127.0.0.1:3000/api/healthz | grep -qm1 ok From 1ff205c308f39f67fcc627d9f0776b7830d9d9c8 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sun, 27 Aug 2023 18:16:11 +0200 Subject: [PATCH 065/272] 2.5.7 (#45) * drop 1080p * bump version --- package.json | 2 +- src/hooks/account.ts | 4 +-- src/pages/api/search.ts | 9 +++++- src/pages/search.tsx | 1 - src/services/btdigg.ts | 62 ++++++++++++++++++++++++++--------------- src/utils/search.ts | 10 +++++-- 6 files changed, 58 insertions(+), 30 deletions(-) diff --git a/package.json b/package.json index c95a5a7..dc7082f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.5.6", + "version": "2.5.7", "private": false, "scripts": { "dev": "next dev", diff --git a/src/hooks/account.ts b/src/hooks/account.ts index 28bb5ba..97f34e0 100644 --- a/src/hooks/account.ts +++ b/src/hooks/account.ts @@ -1,12 +1,12 @@ import useLocalStorage from './localStorage'; export interface MyAccount { - libraryType: '1080p' | '2160p' | '1080pOr2160p'; + libraryType: '2160p' | '1080pOr2160p'; } function useMyAccount() { return useLocalStorage('myAccount', { - libraryType: '2160p', + libraryType: '1080pOr2160p', }); } diff --git a/src/pages/api/search.ts b/src/pages/api/search.ts index b71794c..46c5749 100644 --- a/src/pages/api/search.ts +++ b/src/pages/api/search.ts @@ -52,7 +52,14 @@ export default async function handler( try { const results = []; for (const lType of libraryTypes) { - results.push(await fetchSearchResults(speed, createAxiosInstance(agent), finalQuery, lType)); + results.push( + await fetchSearchResults( + speed, + createAxiosInstance(agent), + `${finalQuery} ${lType}`.trim(), + libraryType + ) + ); } let processedResults = flattenAndRemoveDuplicates(results); if (processedResults.length) processedResults = groupByParsedTitle(processedResults); diff --git a/src/pages/search.tsx b/src/pages/search.tsx index 85bd4d2..5039863 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -420,7 +420,6 @@ function Search() { onChange={handleLibraryTypeChange} className="border rounded p-1 mr-4" > - diff --git a/src/services/btdigg.ts b/src/services/btdigg.ts index 1e0e2fb..e2c793f 100644 --- a/src/services/btdigg.ts +++ b/src/services/btdigg.ts @@ -4,8 +4,8 @@ import getReleaseTags from '@/utils/score'; import { filenameParse, ParsedFilename } from '@ctrl/video-filename-parser'; import axios, { AxiosInstance } from 'axios'; import { SocksProxyAgent } from 'socks-proxy-agent'; -import { PlanetScaleCache } from './planetscale'; import UserAgent from 'user-agents'; +import { PlanetScaleCache } from './planetscale'; export type SearchResult = { title: string; @@ -95,14 +95,10 @@ export type searchSpeedType = export async function fetchSearchResults( speed: searchSpeedType, client: AxiosInstance, - searchQuery: string, + finalQuery: string, libraryType: string ): Promise { try { - const finalQuery = `${searchQuery}${ - !libraryType || libraryType === '1080pOr2160p' ? '' : ` ${libraryType}` - }`; - try { if (!speed.includes('override')) { const cached = await cache.getCachedJsonValue( @@ -119,7 +115,7 @@ export async function fetchSearchResults( let pageNum = 1; const createSearchUrl = (pg: number) => - `${dhtSearchHostname}/search?q=${encodeURIComponent(finalQuery)}&p=${pg - 1}`; + `${dhtSearchHostname}/search?order=0&q=${encodeURIComponent(finalQuery)}&p=${pg - 1}`; const BAD_RESULT_THRESHOLD = 11; let badResults = 0; @@ -168,7 +164,14 @@ export async function fetchSearchResults( break; } catch (error: any) { console.error(`Error scraping page ${pageNum} (${finalQuery})`, error.message); - if (error.message.includes('status code 429') || error.message.includes('"socket" was not created')) { + if (error.message.includes('status code 404') && pageNum === 1) { + console.error('404 error, aborting search'); + throw error; + } + if ( + error.message.includes('status code 429') || + error.message.includes('"socket" was not created') + ) { console.log('Waiting 5 seconds before retrying...'); await new Promise((resolve) => setTimeout(resolve, 5000)); } else { @@ -182,10 +185,6 @@ export async function fetchSearchResults( await new Promise((resolve) => setTimeout(resolve, delay)); } } - console.log( - `Scrape successful for page ${pageNum} (${finalQuery})`, - new Date().getTime() - ); const fileSizes = Array.from( responseData.matchAll( /class=\"torrent_size\"[^>]*>(\d+(?:\.\d+)?)(?:[^A-Z<]+)?([A-Z]+)?/g @@ -194,6 +193,9 @@ export async function fetchSearchResults( const namesAndHashes = Array.from( responseData.matchAll(/magnet:\?xt=urn:btih:([a-z\d]{40})&dn=([^&]+)&/g) ); + console.log( + `Got ${fileSizes.length} tentative items for page ${pageNum} (${finalQuery})` + ); if (fileSizes.length !== namesAndHashes.length) { console.warn('Mismatch in file sizes and names'); @@ -207,9 +209,8 @@ export async function fetchSearchResults( const info = mediaType === 'movie' ? filenameParse(title) : filenameParse(title, true); - // Ignore results that don't have GB in fileSize - if (libraryType !== '1080pOr2160p' && !fileSizeStr.includes('GB')) { - badResults++; + if (libraryType === '2160p' && !fileSizeStr.includes('GB')) { + badResults++; // is 2160p but doesn't have GB in fileSize continue; } @@ -219,20 +220,35 @@ export async function fetchSearchResults( skippedResults++; continue; } + if (fileSizeStr.includes(' B') || fileSizeStr.includes(' KB')) { + skippedResults++; + continue; + } // Check if every term in the query (tokenized by space) is contained in the title const queryTerms = finalQuery.split(' '); - const containsAllTerms = queryTerms.every((term) => - new RegExp(`\\b${term}`).test(title.toLowerCase()) - ); - if (!containsAllTerms) { - badResults++; + const containsMostTerms = + queryTerms.filter((term) => new RegExp(`${term}`).test(title.toLowerCase())) + .length / + queryTerms.length > + 0.6; + if (!containsMostTerms) { + badResults++; // title doesn't contain most terms in the query continue; } - if (libraryType === '1080pOr2160p' && !/1080p|2160p/i.test(title.toLowerCase())) { - badResults++; + if ( + !/\b360p|\b480p|\b576p|\b720p|\b1080p|\b2160p|dvd[^\w]?rip|dvd[^\w]?scr|\bx264\b|\bx265\b|\bxvid\b|\bdivx\b|\bav1\b|bd[^\w]?rip|br[^\w]?rip|hd[^\w]?rip|ppv[^\w]?rip|web[^\w]?rip|cam[^\w]?rip|\bcam\b|\bts\b|\bhdtc\b|\bscreener\b|\br5\b/i.test( + title.toLowerCase() + ) + ) { + badResults++; // doesn't contain video resolution fragments or clues in the title continue; } + if (libraryType === '2160p') { + if (!/\b2160p\b|\buhd\b/i.test(title.toLowerCase())) { + continue; + } + } const hash = namesAndHashes[resIndex][1]; @@ -260,7 +276,7 @@ export async function fetchSearchResults( badResults = 0; } - // Stop execution if the last 5 results were ignored + // Stop execution if the last $BAD_RESULT_THRESHOLD results were ignored if (badResults >= BAD_RESULT_THRESHOLD) { console.log( `Stopped execution after ${pageNum} pages because the last ${BAD_RESULT_THRESHOLD} results were ignored.` diff --git a/src/utils/search.ts b/src/utils/search.ts index e8a3c39..1d61ef7 100644 --- a/src/utils/search.ts +++ b/src/utils/search.ts @@ -40,11 +40,17 @@ export const cleanSearchQuery = (search: string): string => { .replace(/[รฑ]/g, 'n') .replace(/[ลŸ]/g, 's') .replace(/[ฤŸ]/g, 'g') - .replace(/[^\w\s]/g, '') // remove any non-word or non-space characters .replace(/\s+/g, ' ') // replace multiple spaces with a single space .trim(); }; export const getLibraryTypes = (libraryType: string): string[] => { - return libraryType === '1080pOr2160p' ? ['1080p', '2160p', ''] : [libraryType]; + switch (libraryType) { + case '1080pOr2160p': + return ['1080p', '2160p', '']; + case '2160p': + return ['2160p', '']; + default: + return ['1080p', '2160p', '']; + } }; From df87a6634401c1880a0f5b704f19618a8947c766 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sun, 27 Aug 2023 21:13:22 +0200 Subject: [PATCH 066/272] 2.5.8 (#46) * drop 1080p * bump version * Update tor settings * bump version --- .env | 2 +- package.json | 2 +- tor.Dockerfile | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.env b/.env index 78fc4fa..80d6e1f 100644 --- a/.env +++ b/.env @@ -1,4 +1,4 @@ -REQUEST_TIMEOUT=3000 +REQUEST_TIMEOUT=5000 GH_PAT=github-access-token PROXY=socks5h://tor:9050 SEARCH_SPEED_PASSWORD=123456 diff --git a/package.json b/package.json index dc7082f..400e27a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.5.7", + "version": "2.5.8", "private": false, "scripts": { "dev": "next dev", diff --git a/tor.Dockerfile b/tor.Dockerfile index 4995bc6..1854e31 100644 --- a/tor.Dockerfile +++ b/tor.Dockerfile @@ -12,5 +12,5 @@ ENTRYPOINT tor EXPOSE 9050/tcp -HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=1 \ - CMD curl -x socks5h://127.0.0.1:9050 -s http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion | grep -qm1 Histats +HEALTHCHECK --interval=10s --timeout=5s --start-period=5s --retries=1 \ + CMD curl -x socks5h://127.0.0.1:9050 -s http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion/search?q=Kraftfahrzeughaftpflichtversicherung | grep -qm1 Histats From dcefb468cfde3928c53ba2136a1848e31fc45f6c Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sun, 27 Aug 2023 22:55:58 +0200 Subject: [PATCH 067/272] 2.5.9 (#47) * generate sockets proxy on demand * bump version --- package.json | 2 +- src/pages/api/search.ts | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 400e27a..8f995b3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.5.8", + "version": "2.5.9", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/api/search.ts b/src/pages/api/search.ts index 46c5749..506ed7a 100644 --- a/src/pages/api/search.ts +++ b/src/pages/api/search.ts @@ -15,8 +15,6 @@ export type SearchApiResponse = { errorMessage?: string; }; -const agent = new SocksProxyAgent(process.env.PROXY!, { timeout: 3000 }); - export default async function handler( req: NextApiRequest, res: NextApiResponse @@ -55,7 +53,7 @@ export default async function handler( results.push( await fetchSearchResults( speed, - createAxiosInstance(agent), + createAxiosInstance(new SocksProxyAgent(process.env.PROXY!, { timeout: 5000 })), `${finalQuery} ${lType}`.trim(), libraryType ) From fa4b545af6f020a287ae3a816b61097145d4d385 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 27 Aug 2023 23:58:29 +0200 Subject: [PATCH 068/272] add logging --- src/services/btdigg.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/services/btdigg.ts b/src/services/btdigg.ts index e2c793f..7e79da7 100644 --- a/src/services/btdigg.ts +++ b/src/services/btdigg.ts @@ -105,6 +105,7 @@ export async function fetchSearchResults( finalQuery.split(' ') ); if (cached) { + console.log(`Found cached results for ${finalQuery}`, cached.length); return cached; } } From fdfb321a87b32ee0e75b84953f43216ca49c0940 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Mon, 28 Aug 2023 12:09:46 +0200 Subject: [PATCH 069/272] 2.5.10 (#49) * Update tor image * bump version --- package.json | 2 +- src/services/btdigg.ts | 2 +- tor.Dockerfile | 16 +++++++++++----- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 8f995b3..ad30817 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.5.9", + "version": "2.5.10", "private": false, "scripts": { "dev": "next dev", diff --git a/src/services/btdigg.ts b/src/services/btdigg.ts index 7e79da7..f449bcd 100644 --- a/src/services/btdigg.ts +++ b/src/services/btdigg.ts @@ -110,7 +110,7 @@ export async function fetchSearchResults( } } } catch (e: any) { - console.warn(e); + console.warn(`cache read error:`, e.message); } let pageNum = 1; diff --git a/tor.Dockerfile b/tor.Dockerfile index 1854e31..23d45ab 100644 --- a/tor.Dockerfile +++ b/tor.Dockerfile @@ -1,16 +1,22 @@ FROM alpine:latest -RUN apk --no-cache --update --upgrade add tor curl grep \ +RUN apk --no-cache --update --upgrade add tor curl grep netcat-openbsd \ && mv /etc/tor/torrc.sample /etc/tor/torrc \ && sed -i \ -e 's/#SOCKSPort 192.168.0.1:9100/SOCKSPort 0.0.0.0:9050/g' \ /etc/tor/torrc \ - && chown -R tor /var/lib/tor + && chown -R tor /var/lib/tor \ + && echo "#!/bin/sh" > /usr/local/bin/check-and-renew.sh \ + && echo "while true; do" >> /usr/local/bin/check-and-renew.sh \ + && echo " curl -x socks5h://127.0.0.1:9050 -s http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion/search?q=Kraftfahrzeughaftpflichtversicherung | grep -qm1 Histats || (echo -e 'AUTHENTICATE \"\"\\nsignal NEWNYM\\nQUIT' | nc 127.0.0.1 9051)" >> /usr/local/bin/check-and-renew.sh \ + && echo " sleep 30" >> /usr/local/bin/check-and-renew.sh \ + && echo "done" >> /usr/local/bin/check-and-renew.sh \ + && chmod +x /usr/local/bin/check-and-renew.sh USER tor -ENTRYPOINT tor +ENTRYPOINT tor & /usr/local/bin/check-and-renew.sh EXPOSE 9050/tcp -HEALTHCHECK --interval=10s --timeout=5s --start-period=5s --retries=1 \ - CMD curl -x socks5h://127.0.0.1:9050 -s http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion/search?q=Kraftfahrzeughaftpflichtversicherung | grep -qm1 Histats +HEALTHCHECK --interval=60s --timeout=15s --start-period=20s \ + CMD curl -s --socks5 127.0.0.1:9050 'https://check.torproject.org/api/ip' | grep -qm1 -E '"IsTor"\s*:\s*true' From cce8dcfcd5e27289d29b749ddb67f1dd143be3fb Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Tue, 29 Aug 2023 17:27:39 +0200 Subject: [PATCH 070/272] 2.6.0 (#50) add new scrape endpoint --- .env | 8 +- package.json | 2 +- prisma/schema.prisma | 12 ++ src/pages/api/scrape.ts | 196 ++++++++++++++++++++++++++++ src/services/btdigg-v2.ts | 251 ++++++++++++++++++++++++++++++++++++ src/services/planetscale.ts | 29 +++++ src/utils/mediaId.ts | 7 +- 7 files changed, 495 insertions(+), 10 deletions(-) create mode 100644 src/pages/api/scrape.ts create mode 100644 src/services/btdigg-v2.ts diff --git a/.env b/.env index 80d6e1f..7f8eed4 100644 --- a/.env +++ b/.env @@ -3,11 +3,7 @@ GH_PAT=github-access-token PROXY=socks5h://tor:9050 SEARCH_SPEED_PASSWORD=123456 -REDIS_SENTINEL_HOST=redis-sentinel -REDIS_PASSWORD=dmm123456 - -FIREBASE_PROJECT_ID=project-id -FIREBASE_CLIENT_EMAIL=client@example.com -FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n" +TMDB_KEY=abc123 +MDBLIST_KEY=abc123 DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public" diff --git a/package.json b/package.json index ad30817..9b6bad8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.5.10", + "version": "2.6.0", "private": false, "scripts": { "dev": "next dev", diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 20fe316..20af633 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -16,3 +16,15 @@ model Cache { value Json updatedAt DateTime @updatedAt } + +model Scraped { + key String @id + value Json + updatedAt DateTime @updatedAt +} + +model Search { + key String @id + value Json + updatedAt DateTime @updatedAt +} diff --git a/src/pages/api/scrape.ts b/src/pages/api/scrape.ts new file mode 100644 index 0000000..24eda46 --- /dev/null +++ b/src/pages/api/scrape.ts @@ -0,0 +1,196 @@ +import { SearchResult } from '@/services/btdigg-v2'; +import { + createAxiosInstance, + scrapeResults, + flattenAndRemoveDuplicates, + groupByParsedTitle, +} from '@/services/btdigg-v2'; +import { PlanetScaleCache } from '@/services/planetscale'; +import axios from 'axios'; +import { NextApiRequest, NextApiResponse } from 'next'; +import { SocksProxyAgent } from 'socks-proxy-agent'; + +const tmdbKey = process.env.TMDB_KEY; +const mdblistKey = process.env.MDBLIST_KEY; +const getTmdbInfo = (imdbId: string) => + `https://api.themoviedb.org/3/find/${imdbId}?api_key=${tmdbKey}&external_source=imdb_id`; +const getMdbInfo = (imdbId: string) => `https://mdblist.com/api/?apikey=${mdblistKey}&i=${imdbId}`; +function padWithZero(num: number) { + if (num < 10) { + return '0' + num; + } else { + return num.toString(); + } +} +const cleanSearchQuery = (search: string): string => { + return search + .split(/[\s\=:\?\.\-\(\)\/]/) // split the search query into an array of elements + .filter((e) => e !== '') // filter out any empty elements + .map((e) => e.toLowerCase()) // convert each element to lowercase + .join(' ') // join the remaining elements with a single space + .replace(/[รกร รครข]/g, 'a') // replace certain characters with their equivalent + .replace(/[รฉรจรซรช]/g, 'e') + .replace(/[รญรฌรฏรฎ]/g, 'i') + .replace(/[รณรฒรถรด]/g, 'o') + .replace(/[รบรนรผรป]/g, 'u') + .replace(/\s+/g, ' ') // replace multiple spaces with a single space + .trim(); +}; + +const db = new PlanetScaleCache(); + +export type ScrapeResponse = { + status: string; + errorMessage?: string; +}; +1; +export default async function handler( + req: NextApiRequest, + res: NextApiResponse +) { + const { imdbId, scrapePassword, override } = req.query; + if (process.env.SEARCH_SPEED_PASSWORD && scrapePassword !== process.env.SEARCH_SPEED_PASSWORD) { + res.status(403).json({ status: 'error', errorMessage: 'You are not authorized to use this feature' }); + return; + } + + if (!imdbId || !(typeof imdbId === 'string')) { + console.log(imdbId); + res.status(400).json({ status: 'error', errorMessage: 'Missing "imdbId" query parameter' }); + return; + } + + // imdbId to search for + const tmdbResponse = await axios.get(getTmdbInfo(imdbId.toString().trim())); + + const movieTitles: string[] = []; + const tvTitles: string[] = []; + + let tmdbItem: any = {}; + let itemType: 'movie' | 'tv' = 'movie'; + + if (tmdbResponse.data.movie_results.length > 0) { + if (override && override !== 'true') { + const keyExists = await db.keyExists(`movie:${imdbId}`); + if (keyExists) { + res.status(200).json({ status: 'skipped' }); + return; + } + } + + itemType = 'movie'; + tmdbItem = tmdbResponse.data.movie_results[0]; + movieTitles.push(`"${cleanSearchQuery(tmdbItem.title)}"`); + movieTitles.push(`"${cleanSearchQuery(tmdbItem.title)}" ${tmdbItem.release_date.substring(0, 4)}`); + + if (tmdbItem.original_title && tmdbItem.original_title !== tmdbItem.title) { + movieTitles.push(`"${tmdbItem.original_title}"`); + movieTitles.push(`"${tmdbItem.original_title}" ${tmdbItem.release_date.substring(0, 4)}`); + const mdbItem = await axios.get(getMdbInfo(imdbId.toString().trim())); + for (let rating of mdbItem.data.ratings) { + if (rating.source === 'tomatoes') { + const cleanedTitle = ( + itemType === 'movie' ? rating.url.split('/m/') : rating.url.split('/tv/') + )[1].replaceAll('_', ' '); + movieTitles.push(`"${cleanedTitle}"`); + movieTitles.push(`"${cleanedTitle}" ${tmdbItem.release_date.substring(0, 4)}`); + } + } + } + + try { + const results = []; + for (const movieTitle of movieTitles) { + for (const lType of ['720p', '1080p', '2160p', '']) { + results.push( + await scrapeResults( + createAxiosInstance( + new SocksProxyAgent(process.env.PROXY!, { timeout: 10000 }) + ), + `${movieTitle} ${lType}`.trim(), + lType || '1080p', + ) + ); + } + } + let processedResults = flattenAndRemoveDuplicates(results); + if (processedResults.length) processedResults = groupByParsedTitle(processedResults); + + await db.saveScrapedResults(`movie:${imdbId}`, processedResults); + + res.status(200).json({ status: `scraped: ${processedResults.length} items` }); + } catch (error: any) { + res.status(500).json({ + status: 'error', + errorMessage: `An error occurred while scraping Btdigg (${error.message})`, + }); + } + } + + if (tmdbResponse.data.tv_results.length > 0) { + if (override && override !== 'true') { + const keyExists = await db.keyExists(`tv:${imdbId}:1`); + if (keyExists) { + res.status(200).json({ status: 'skipped' }); + return; + } + } + + itemType = 'tv'; + tmdbItem = tmdbResponse.data.tv_results[0]; + tvTitles.push(`"${cleanSearchQuery(tmdbItem.name)}"`); + tvTitles.push(`"${cleanSearchQuery(tmdbItem.name)}" ${tmdbItem.first_air_date.substring(0, 4)}`); + + if (tmdbItem.original_name && tmdbItem.original_name !== tmdbItem.name) { + tvTitles.push(`"${tmdbItem.original_name}"`); + tvTitles.push(`"${tmdbItem.original_name}" ${tmdbItem.first_air_date.substring(0, 4)}`); + } + + let totalResultsCount = 0; + const showResponse = await axios.get(getMdbInfo(imdbId.toString().trim())); + for (const season of showResponse.data.seasons + ? showResponse.data.seasons + : [{ season_number: 1, episode_count: 0 }]) { + if (season.season_number === 0) continue; + let seasonQueries = tvTitles.map((q) => `${q} "s${padWithZero(season.season_number)}"`); + try { + const results = []; + for (const finalQuery of seasonQueries) { + for (const lType of ['720p', '1080p', '2160p', '']) { + results.push( + await scrapeResults( + createAxiosInstance( + new SocksProxyAgent(process.env.PROXY!, { timeout: 10000 }) + ), + `${finalQuery} ${lType}`.trim(), + lType || '1080p', + ) + ); + } + } + let processedResults = flattenAndRemoveDuplicates(results); + if (processedResults.length) processedResults = groupByParsedTitle(processedResults); + + await db.saveScrapedResults(`tv:${imdbId}:${season.season_number}`, processedResults); + + totalResultsCount += processedResults.length; + } catch (error: any) { + res.status(500).json({ + status: 'error', + errorMessage: `An error occurred while scraping Btdigg (${error.message})`, + }); + } + // if (season.episode_count === 0) continue; + // for (let i = 1; i <= season.episode_count; i++) { + // seasonQueries = seasonQueries.concat( + // tvTitles.map( + // (q) => + // `${q} "s${padWithZero(season.season_number)}e${padWithZero(i)}"` + // ) + // ); + // } + } + + res.status(200).json({ status: `scraped: ${totalResultsCount} items` }); + } +} diff --git a/src/services/btdigg-v2.ts b/src/services/btdigg-v2.ts new file mode 100644 index 0000000..1be55cb --- /dev/null +++ b/src/services/btdigg-v2.ts @@ -0,0 +1,251 @@ +import { getMediaId } from '@/utils/mediaId'; +import { getMediaType } from '@/utils/mediaType'; +import { filenameParse } from '@ctrl/video-filename-parser'; +import axios, { AxiosInstance } from 'axios'; +import { SocksProxyAgent } from 'socks-proxy-agent'; +import UserAgent from 'user-agents'; + +export type SearchResult = { + title: string; + fileSize: number; + hash: string; +}; + +export const createAxiosInstance = (agent: SocksProxyAgent) => { + return axios.create({ + httpAgent: agent, + headers: { + accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', + 'accept-language': 'en-US,en;q=0.5', + 'accept-encoding': 'gzip, deflate, br', + referer: 'http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion/', + connection: 'keep-alive', + 'sec-fetch-dest': 'document', + 'sec-fetch-mode': 'navigate', + 'sec-fetch-site': 'same-origin', + 'sec-fetch-user': '?1', + 'upgrade-insecure-requests': '1', + 'user-agent': new UserAgent().toString(), + }, + timeout: parseInt(process.env.REQUEST_TIMEOUT || '3000', 10), + }); +}; + +export const flattenAndRemoveDuplicates = (arr: SearchResult[][]): SearchResult[] => { + const flattened = arr.reduce((acc, val) => acc.concat(val), []); + const unique = new Map(); + flattened.forEach((item) => { + if (!unique.has(item.hash)) { + unique.set(item.hash, item); + } + }); + return Array.from(unique.values()); +}; + +export const groupByParsedTitle = (results: SearchResult[]): SearchResult[] => { + const frequency: Record = {}; + const infoCache: Record = {}; + const getInfoOrTitle = (result: SearchResult) => { + if (result.hash in infoCache && infoCache[result.hash].title) { + return infoCache[result.hash]; + } + return result.title; + } + + for (const result of results) { + // Use the cached info object if it exists, otherwise compute it and store it in the cache + if (!(result.hash in infoCache)) { + infoCache[result.hash] = getMediaType(result.title) === 'movie' ? filenameParse(result.title) : filenameParse(result.title, true); + } + + const mediaId = getMediaId(getInfoOrTitle(result), getMediaType(result.title), true); + + if (mediaId in frequency) { + frequency[mediaId] += result.fileSize; + } else { + frequency[mediaId] = result.fileSize; + } + } + + results.sort((a, b) => { + const frequencyCompare = + frequency[getMediaId(getInfoOrTitle(b), getMediaType(b.title), true)] - + frequency[getMediaId(getInfoOrTitle(a), getMediaType(a.title), true)]; + if (frequencyCompare === 0) { + return b.fileSize - a.fileSize; + } + return frequencyCompare; + }); + + return results; +}; + + +function convertToMB(fileSizeStr: string) { + let fileSize = parseFloat(fileSizeStr); // extracts the numeric part + if (fileSizeStr.includes('GB')) { + fileSize *= 1024; // if GB, convert to MB + } + return Math.round(fileSize); // returns the rounded integer value +} + +const dhtSearchHostname = 'http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion'; + +export async function scrapeResults( + client: AxiosInstance, + finalQuery: string, + libraryType: string +): Promise { + try { + let pageNum = 1; + + const createSearchUrl = (pg: number) => + `${dhtSearchHostname}/search?order=0&q=${encodeURIComponent(finalQuery)}&p=${pg - 1}`; + + const BAD_RESULT_THRESHOLD = 15; + let badResults = 0; + let searchResultsArr: SearchResult[] = []; + + const MAX_RETRIES = 5; // maximum number of retries + const RETRY_DELAY = 1500; // initial delay in ms, doubles with each retry + + while (pageNum <= 100) { + console.log(`Scraping page ${pageNum} (${finalQuery})...`, new Date().getTime()); + let retries = 0; // current number of retries + let responseData = ''; + let numResults = 0; + const searchUrl = createSearchUrl(pageNum); + while (true) { + try { + const response = await client.get(searchUrl); + responseData = response.data; + const numResultsStr = responseData.match(/(\d+) results found/) || []; + numResults = parseInt(numResultsStr[1], 10); + retries = 0; + break; + } catch (error: any) { + console.error(`Error scraping page ${pageNum} (${finalQuery})`, error.message); + if (error.message.includes('status code 404') && pageNum === 1) { + console.error('404 error, aborting search'); + throw error; + } + if ( + error.message.includes('status code 429') || + error.message.includes('"socket" was not created') + ) { + console.log('Waiting 5 seconds before retrying...'); + await new Promise((resolve) => setTimeout(resolve, 5000)); + } else { + retries++; + if (retries > MAX_RETRIES) { + console.error(`Max retries reached (${MAX_RETRIES}), aborting search`); + throw error; + } + } + const delay = RETRY_DELAY * Math.pow(2, retries - 1); + await new Promise((resolve) => setTimeout(resolve, delay)); + } + } + const fileSizes = Array.from( + responseData.matchAll( + /class=\"torrent_size\"[^>]*>(\d+(?:\.\d+)?)(?:[^A-Z<]+)?([A-Z]+)?/g + ) + ); + const namesAndHashes = Array.from( + responseData.matchAll(/magnet:\?xt=urn:btih:([a-z\d]{40})&dn=([^&]+)&/g) + ); + console.log( + `Got ${fileSizes.length} tentative items for page ${pageNum} (${finalQuery})` + ); + + if (fileSizes.length !== namesAndHashes.length) { + console.warn('Mismatch in file sizes and names'); + break; + } + + for (let resIndex = 0; resIndex < fileSizes.length; resIndex++) { + const title = decodeURIComponent(namesAndHashes[resIndex][2].replaceAll('+', ' ')); + const fileSizeStr = `${fileSizes[resIndex][1]} ${fileSizes[resIndex][2] || 'B'}`; + + if ( + !fileSizeStr.includes('GB') && + (libraryType === '2160p' || !fileSizeStr.includes('MB')) + ) { + badResults++; + continue; + } + + // immediately check if filesize makes sense + const fileSize = convertToMB(fileSizeStr); + if (getMediaType(title) === 'movie' && fileSize > 150000) { + badResults++; // movie is too big + continue; + } + // if file size is too small, skip + if (fileSizeStr.includes(' B') || fileSizeStr.includes(' KB')) { + badResults++; + continue; + } + + // Check if every term in the query (tokenized by space) is contained in the title + const queryTerms = finalQuery.replaceAll('"', ' ').split(' ').filter((e) => e !== ''); + let requiredTerms = + queryTerms.length > 3 ? queryTerms.length : queryTerms.length - 1; + const containedTerms = queryTerms.filter((term) => + new RegExp(`${term}`).test(title.toLowerCase()) + ).length; + const containsMostTerms = containedTerms >= requiredTerms; + if (!containsMostTerms) { + badResults++; // title doesn't contain most terms in the query + continue; + } + if ( + !/\b360p|\b480p|\b576p|\b720p|\b1080p|\b2160p|dvd[^\w]?rip|dvd[^\w]?scr|\bx264\b|\bx265\b|\bxvid\b|\bdivx\b|\bav1\b|bd[^\w]?rip|br[^\w]?rip|hd[^\w]?rip|ppv[^\w]?rip|web[^\w]?rip|cam[^\w]?rip|\bcam\b|\bts\b|\bhdtc\b|\bscreener\b|\br5\b/i.test( + title.toLowerCase() + ) + ) { + badResults++; // doesn't contain video resolution fragments or clues in the title + continue; + } + if (libraryType === '2160p') { + if (!/\b2160p\b|\buhd\b/i.test(title.toLowerCase())) { + continue; + } + } + + const hash = namesAndHashes[resIndex][1]; + + let resultObj: SearchResult = { + title, + fileSize, + hash, + }; + searchResultsArr.push(resultObj); + // Reset ignoredResults counter + badResults = 0; + } + + // Stop execution if the last $BAD_RESULT_THRESHOLD results were ignored + if (badResults >= BAD_RESULT_THRESHOLD) { + console.log( + `Stopped execution after ${pageNum} pages because the last ${BAD_RESULT_THRESHOLD} results were ignored.` + ); + break; + } + + if (numResults > pageNum * 10) { + pageNum++; + } else { + // No more pages, exit the loop + break; + } + } + + console.log(`Found ${searchResultsArr.length} results (${finalQuery})`); + + return searchResultsArr; + } catch (error) { + console.error('fetchSearchResults page processing error', error); + throw error; + } +} diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index 5d434b5..09de222 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -38,4 +38,33 @@ export class PlanetScaleCache { const count = await this.prisma.cache.count(); return count; } + + /// + + public async saveScrapedResults(key: string, value: T) { + await this.prisma.scraped.upsert({ + where: { key }, + update: { value } as any, + create: { key, value } as any, + }); + } + + public async getScrapedResults(key: string): Promise { + const cacheEntry = await this.prisma.scraped.findUnique({ where: { key } }); + return cacheEntry?.value as T | undefined; + } + + public async getScrapedDbSize(): Promise { + const count = await this.prisma.scraped.count(); + return count; + } + + public async keyExists(key: string): Promise { + const cacheEntry = await this.prisma.scraped.findFirst({ + where: { key }, + select: { key: true }, + }); + return cacheEntry !== null; + } + } diff --git a/src/utils/mediaId.ts b/src/utils/mediaId.ts index e510055..bf1577b 100644 --- a/src/utils/mediaId.ts +++ b/src/utils/mediaId.ts @@ -3,14 +3,15 @@ import { ParsedMovie, ParsedShow } from '@ctrl/video-filename-parser'; const prefix = (char: string, num: number): string => `${char}${num < 10 ? '0' : ''}${num}`; export const getMediaId = ( - info: ParsedMovie | ParsedShow, + info: ParsedMovie | ParsedShow | string, mediaType: 'tv' | 'movie', systemOnlyId = true, tvShowTitleOnly = false ) => { + const titleId: string = typeof info === 'string' ? info : info.title; if (mediaType === 'movie') - return `${systemOnlyId ? info.title.toLocaleLowerCase() : info.title}${ - info.year ? ` (${info.year})` : '' + return `${systemOnlyId ? titleId.toLocaleLowerCase() : titleId}${ + typeof info !== 'string' && info.year ? ` (${info.year})` : '' }`; const { title, seasons, fullSeason, isMultiSeason, episodeNumbers } = info as ParsedShow; const titleStr = systemOnlyId ? title.toLocaleLowerCase() : title; From f904d1b5665057ffaaae08e4acda55feb524f8a1 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Tue, 29 Aug 2023 21:10:47 +0200 Subject: [PATCH 071/272] 2.7.0 (#51) * add new scrape endpoint * a lot of things --- next.config.js | 16 + package.json | 2 +- src/components/poster.tsx | 38 +++ src/pages/api/keywordsearch.ts | 50 +++ src/pages/api/moviesearch.ts | 28 ++ src/pages/api/scrape.ts | 4 +- src/pages/api/tvsearch.ts | 36 +++ src/pages/movies/[imdbid].tsx | 574 +++++++++++++++++++++++++++++++++ src/pages/search-v2.tsx | 162 ++++++++++ src/services/btdigg-v2.ts | 33 +- src/services/planetscale.ts | 158 +++++---- src/utils/freekeys.ts | 21 ++ 12 files changed, 1022 insertions(+), 100 deletions(-) create mode 100644 src/components/poster.tsx create mode 100644 src/pages/api/keywordsearch.ts create mode 100644 src/pages/api/moviesearch.ts create mode 100644 src/pages/api/tvsearch.ts create mode 100644 src/pages/movies/[imdbid].tsx create mode 100644 src/pages/search-v2.tsx create mode 100644 src/utils/freekeys.ts diff --git a/next.config.js b/next.config.js index 007c293..42d4585 100644 --- a/next.config.js +++ b/next.config.js @@ -1,5 +1,21 @@ /** @type {import('next').NextConfig} */ const nextConfig = { + images: { + remotePatterns: [ + { + protocol: 'https', + hostname: 'image.tmdb.org', + port: '', + pathname: '/t/p/w200/**', + }, + { + protocol: 'https', + hostname: 'picsum.photos', + port: '', + pathname: '/**', + }, + ], + }, reactStrictMode: false, publicRuntimeConfig: { // Will be available on both server and client diff --git a/package.json b/package.json index 9b6bad8..431591c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.6.0", + "version": "2.7.0", "private": false, "scripts": { "dev": "next dev", diff --git a/src/components/poster.tsx b/src/components/poster.tsx new file mode 100644 index 0000000..825702c --- /dev/null +++ b/src/components/poster.tsx @@ -0,0 +1,38 @@ +import React, { useState, useEffect } from 'react'; +import axios from 'axios'; +import Image from 'next/image'; +import { getTmdbKey } from '@/utils/freekeys'; + +const TMDBPoster = ({ imdbId }: Record) => { + const [posterUrl, setPosterUrl] = useState(''); + + useEffect(() => { + const fetchData = async () => { + const response = await axios.get(`https://api.themoviedb.org/3/find/${imdbId}?api_key=${getTmdbKey()}&external_source=imdb_id`); + const baseUrl = 'https://image.tmdb.org/t/p/w200'; + if (response.data.movie_results.length > 0 && response.data.movie_results[0].poster_path) { + setPosterUrl(baseUrl + response.data.movie_results[0].poster_path); + } if (response.data.tv_results.length > 0 && response.data.tv_results[0].poster_path) { + setPosterUrl(baseUrl + response.data.tv_results[0].poster_path); + } else { + // If no poster_path, set a placeholder image URL + setPosterUrl(`https://picsum.photos/seed/${imdbId}/200/300`); + } + }; + + try { + if (imdbId) fetchData(); + else setPosterUrl(`https://picsum.photos/seed/${imdbId}/200/300`); + } catch (error: any) { + setPosterUrl(`https://picsum.photos/seed/${imdbId}/200/300`); + } + }, [imdbId]); + + return ( +
+ {posterUrl && } +
+ ); +}; + +export default TMDBPoster; diff --git a/src/pages/api/keywordsearch.ts b/src/pages/api/keywordsearch.ts new file mode 100644 index 0000000..f020472 --- /dev/null +++ b/src/pages/api/keywordsearch.ts @@ -0,0 +1,50 @@ +import { PlanetScaleCache } from '@/services/planetscale'; +import axios from 'axios'; +import { NextApiHandler } from 'next'; + +const mdblistKey = process.env.MDBLIST_KEY; +const searchMdb = (keyword: string) => `https://mdblist.com/api/?apikey=${mdblistKey}&s=${keyword}`; +const getMdbInfo = (imdbId: string) => `https://mdblist.com/api/?apikey=${mdblistKey}&i=${imdbId}`; +const db = new PlanetScaleCache(); + +const handler: NextApiHandler = async (req, res) => { + const { keyword } = req.query; + + if (!keyword || !(typeof keyword === 'string')) { + res.status(400).json({ status: 'error', errorMessage: 'Missing "keyword" query parameter' }); + return; + } + + try { + const searchResults = await db.getSearchResults(keyword.toString().trim()); + if (searchResults) { + res.status(200).json({ results: searchResults.filter(r => r.imdbid) }); + return; + } + + const searchResponse = await axios.get(searchMdb(keyword.toString().trim())); + const results = ([...searchResponse.data.search]).filter((result: any) => result.imdbid); + + for (let i = 0; i < results.length; i++) { + if (results[i].type === 'show') { + const showResponse = await axios.get(getMdbInfo(results[i].imdbid)); + const seasons = showResponse.data.seasons.filter((season: any) => season.season_number > 0) + .map((season: any) => { + return season.season_number; + }); + results[i].season_count = Math.max(...seasons); + } + } + + console.log('search results', results.length); + + await db.saveSearchResults(keyword.toString().trim(), results); + + res.status(200).json({ results }); + } catch (error: any) { + console.error('encountered a search issue', error); + res.status(500).json({ status: 'error', errorMessage: error.message }); + } +}; + +export default handler; diff --git a/src/pages/api/moviesearch.ts b/src/pages/api/moviesearch.ts new file mode 100644 index 0000000..d3a04f7 --- /dev/null +++ b/src/pages/api/moviesearch.ts @@ -0,0 +1,28 @@ +import { PlanetScaleCache } from '@/services/planetscale'; +import { NextApiHandler } from 'next'; + +const db = new PlanetScaleCache(); + +const handler: NextApiHandler = async (req, res) => { + const { imdbId } = req.query; + + if (!imdbId || !(typeof imdbId === 'string')) { + res.status(400).json({ errorMessage: 'Missing "imdbId" query parameter' }); + return; + } + + try { + const searchResults = await db.getScrapedResults(`movie:${imdbId.toString().trim()}`); + if (searchResults) { + res.status(200).json({ results: searchResults }); + return; + } + + res.status(204).json({ results: [] }); + } catch (error: any) { + console.error('encountered a db issue', error); + res.status(500).json({ errorMessage: error.message }); + } +}; + +export default handler; diff --git a/src/pages/api/scrape.ts b/src/pages/api/scrape.ts index 24eda46..c046632 100644 --- a/src/pages/api/scrape.ts +++ b/src/pages/api/scrape.ts @@ -70,7 +70,7 @@ export default async function handler( let itemType: 'movie' | 'tv' = 'movie'; if (tmdbResponse.data.movie_results.length > 0) { - if (override && override !== 'true') { + if (!override || override !== 'true') { const keyExists = await db.keyExists(`movie:${imdbId}`); if (keyExists) { res.status(200).json({ status: 'skipped' }); @@ -128,7 +128,7 @@ export default async function handler( } if (tmdbResponse.data.tv_results.length > 0) { - if (override && override !== 'true') { + if (!override || override !== 'true') { const keyExists = await db.keyExists(`tv:${imdbId}:1`); if (keyExists) { res.status(200).json({ status: 'skipped' }); diff --git a/src/pages/api/tvsearch.ts b/src/pages/api/tvsearch.ts new file mode 100644 index 0000000..7cbda47 --- /dev/null +++ b/src/pages/api/tvsearch.ts @@ -0,0 +1,36 @@ +import { PlanetScaleCache } from '@/services/planetscale'; +import { NextApiHandler } from 'next'; + +const db = new PlanetScaleCache(); + +const handler: NextApiHandler = async (req, res) => { + const { imdbId, seasonNum } = req.query; + + if (!imdbId || !(typeof imdbId === 'string')) { + res.status(400).json({ errorMessage: 'Missing "imdbId" query parameter' }); + return; + } + if (!seasonNum || !(typeof seasonNum === 'string')) { + res.status(400).json({ + errorMessage: 'Missing "seasonNum" query parameter', + }); + return; + } + + try { + const searchResults = await db.getScrapedResults( + `tv:${imdbId.toString().trim()}:${parseInt(seasonNum.toString().trim(), 10)}` + ); + if (searchResults) { + res.status(200).json({ results: searchResults }); + return; + } + + res.status(204).json({ results: [] }); + } catch (error: any) { + console.error('encountered a db issue', error); + res.status(500).json({ errorMessage: error.message }); + } +}; + +export default handler; diff --git a/src/pages/movies/[imdbid].tsx b/src/pages/movies/[imdbid].tsx new file mode 100644 index 0000000..ef556b1 --- /dev/null +++ b/src/pages/movies/[imdbid].tsx @@ -0,0 +1,574 @@ +import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; +import { useDownloadsCache } from '@/hooks/cache'; +import useLocalStorage from '@/hooks/localStorage'; +import { + AdInstantAvailabilityResponse, + MagnetFile, + adInstantCheck, + deleteMagnet, + uploadMagnet, +} from '@/services/allDebrid'; +import { Availability, HashAvailability } from '@/services/availability'; +import { + RdInstantAvailabilityResponse, + addHashAsMagnet, + deleteTorrent, + getTorrentInfo, + rdInstantCheck, + selectFiles, +} from '@/services/realDebrid'; +import { getTmdbKey } from '@/utils/freekeys'; +import { groupBy } from '@/utils/groupBy'; +import { getSelectableFiles, isVideo } from '@/utils/selectable'; +import { withAuth } from '@/utils/withAuth'; +import axios from 'axios'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import { useRouter } from 'next/router'; +import { useEffect, useState } from 'react'; +import toast, { Toaster } from 'react-hot-toast'; +import { FaDownload, FaFastForward, FaTimes } from 'react-icons/fa'; +import { SearchApiResponse } from '../api/search'; + +type SearchResult = { + title: string; + fileSize: number; + hash: string; + available: Availability; +}; + +type TmdbResponse = { + movie_results: { + title: string; + overview: string; + release_date: string; + poster_path: string; + }[]; +}; + +function Search() { + const [searchResults, setSearchResults] = useState([]); + const [errorMessage, setErrorMessage] = useState(''); + const rdKey = useRealDebridAccessToken(); + const adKey = useAllDebridApiKey(); + const [loading, setLoading] = useState(false); + const [masterAvailability, setMasterAvailability] = useState({}); + const [rdCache, rd, rdCacheAdder, removeFromRdCache] = useDownloadsCache('rd'); + const [adCache, ad, adCacheAdder, removeFromAdCache] = useDownloadsCache('ad'); + const [rdAutoInstantCheck, setRdAutoInstantCheck] = useLocalStorage( + 'rdAutoInstantCheck', + false + ); + const [adAutoInstantCheck, setAdAutoInstantCheck] = useLocalStorage( + 'adAutoInstantCheck', + false + ); + const [movieInfo, setMovieInfo] = useState(null); + + const router = useRouter(); + const { imdbid } = router.query; + + const fetchMovieInfo = async (imdbId: string) => { + try { + const response = await axios.get( + `https://api.themoviedb.org/3/find/${imdbId}?api_key=${getTmdbKey()}&external_source=imdb_id` + ); + setMovieInfo(response.data); + } catch (error) { + setErrorMessage('There was an error fetching movie info. Please try again.'); + console.error(`error fetching movie data`, error); + } + }; + + useEffect(() => { + if (imdbid) { + fetchMovieInfo(imdbid as string); + fetchData(imdbid as string); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [imdbid]); + + const fetchData = async (imdbId: string) => { + setSearchResults([]); + setErrorMessage(''); + setLoading(true); + try { + let endpoint = `/api/moviesearch?imdbId=${encodeURIComponent(imdbId)}`; + const response = await axios.get(endpoint); + + setSearchResults( + response.data.results?.map((r) => ({ + ...r, + available: 'unavailable', + })) || [] + ); + + if (response.data.results?.length) { + toast(`Found ${response.data.results.length} results`, { icon: '๐Ÿ”' }); + + // instant checks + const hashArr = response.data.results.map((r) => r.hash); + if (rdKey && rdAutoInstantCheck) await instantCheckInRd(hashArr); + if (adKey && adAutoInstantCheck) await instantCheckInAd(hashArr); + } else { + toast(`No results found`, { icon: '๐Ÿ”' }); + } + } catch (error) { + console.error(error); + setErrorMessage('There was an error searching for the query. Please try again.'); + } finally { + setLoading(false); + } + }; + + useEffect(() => { + setSearchResults((prev) => + prev.map((r) => ({ + ...r, + available: masterAvailability[r.hash], + })) + ); + }, [masterAvailability]); + + const instantCheckInRd = async (hashes: string[]): Promise => { + const rdAvailability = {} as HashAvailability; + + const setInstantFromRd = (resp: RdInstantAvailabilityResponse) => { + for (const masterHash in resp) { + if ('rd' in resp[masterHash] === false) continue; + if (masterAvailability[masterHash] === 'no_videos') continue; + const variants = resp[masterHash]['rd']; + if (!variants.length) rdAvailability[masterHash] = 'no_videos'; + for (const variant of variants) { + for (const fileId in variant) { + const file = variant[fileId]; + if (isVideo({ path: file.filename })) { + rdAvailability[masterHash] = + masterAvailability[masterHash] === 'ad:available' || + masterAvailability[masterHash] === 'all:available' + ? 'all:available' + : 'rd:available'; + + break; + } + } + } + } + }; + + try { + for (const hashGroup of groupBy(100, hashes)) { + if (rdKey) await rdInstantCheck(rdKey, hashGroup).then(setInstantFromRd); + } + toast( + `Found ${ + Object.values(rdAvailability).filter((a) => a.includes(':available')).length + } available in RD`, + { icon: '๐Ÿ”' } + ); + setMasterAvailability({ ...masterAvailability, ...rdAvailability }); + } catch (error) { + toast.error( + 'There was an error checking availability in Real-Debrid. Please try again.' + ); + throw error; + } + }; + + const instantCheckInAd = async (hashes: string[]): Promise => { + const adAvailability = {} as HashAvailability; + + const setInstantFromAd = (resp: AdInstantAvailabilityResponse) => { + for (const magnetData of resp.data.magnets) { + const masterHash = magnetData.hash; + if (masterAvailability[masterHash] === 'no_videos') continue; + if (magnetData.instant) { + adAvailability[masterHash] = magnetData.files?.reduce( + (acc: boolean, curr: MagnetFile) => { + if (isVideo({ path: curr.n })) { + return true; + } + return acc; + }, + false + ) + ? masterAvailability[masterHash] === 'rd:available' || + masterAvailability[masterHash] === 'all:available' + ? 'all:available' + : 'ad:available' + : 'no_videos'; + } + } + }; + + try { + for (const hashGroup of groupBy(30, hashes)) { + if (adKey) await adInstantCheck(adKey, hashGroup).then(setInstantFromAd); + } + toast( + `Found ${ + Object.values(adAvailability).filter((a) => a.includes(':available')).length + } available in AD`, + { icon: '๐Ÿ”' } + ); + setMasterAvailability({ ...masterAvailability, ...adAvailability }); + } catch (error) { + toast.error('There was an error checking availability in AllDebrid. Please try again.'); + throw error; + } + }; + + const handleAddAsMagnetInRd = async ( + hash: string, + instantDownload: boolean = false, + disableToast: boolean = false + ) => { + try { + if (!rdKey) throw new Error('no_rd_key'); + const id = await addHashAsMagnet(rdKey, hash); + if (!disableToast) toast.success('Successfully added as magnet!'); + rdCacheAdder.single(`rd:${id}`, hash, instantDownload ? 'downloaded' : 'downloading'); + handleSelectFiles(`rd:${id}`, true); // add rd: to account for substr(3) in handleSelectFiles + } catch (error) { + if (!disableToast) + toast.error('There was an error adding as magnet. Please try again.'); + throw error; + } + }; + + const handleAddAsMagnetInAd = async ( + hash: string, + instantDownload: boolean = false, + disableToast: boolean = false + ) => { + try { + if (!adKey) throw new Error('no_ad_key'); + const resp = await uploadMagnet(adKey, [hash]); + if (resp.data.magnets.length === 0 || resp.data.magnets[0].error) + throw new Error('no_magnets'); + if (!disableToast) toast.success('Successfully added as magnet!'); + adCacheAdder.single( + `ad:${resp.data.magnets[0].id}`, + hash, + instantDownload ? 'downloaded' : 'downloading' + ); + } catch (error) { + if (!disableToast) + toast.error('There was an error adding as magnet. Please try again.'); + throw error; + } + }; + + const isAvailableInRd = (result: SearchResult) => + result.available === 'rd:available' || result.available === 'all:available'; + const isAvailableInAd = (result: SearchResult) => + result.available === 'ad:available' || result.available === 'all:available'; + const hasNoVideos = (result: SearchResult) => result.available === 'no_videos'; + + const handleDeleteTorrent = async (id: string, disableToast: boolean = false) => { + try { + if (!rdKey && !adKey) throw new Error('no_keys'); + if (rdKey && id.startsWith('rd:')) await deleteTorrent(rdKey, id.substring(3)); + if (adKey && id.startsWith('ad:')) await deleteMagnet(adKey, id.substring(3)); + if (!disableToast) toast.success(`Download canceled (${id})`); + if (id.startsWith('rd:')) removeFromRdCache(id); + if (id.startsWith('ad:')) removeFromAdCache(id); + } catch (error) { + if (!disableToast) toast.error(`Error deleting torrent (${id})`); + throw error; + } + }; + + const handleSelectFiles = async (id: string, disableToast: boolean = false) => { + try { + if (!rdKey) throw new Error('no_rd_key'); + const response = await getTorrentInfo(rdKey, id.substring(3)); + if (response.filename === 'Magnet') return; // no files yet + + const selectedFiles = getSelectableFiles(response.files.filter(isVideo)).map( + (file) => file.id + ); + if (selectedFiles.length === 0) { + handleDeleteTorrent(id, true); + throw new Error('no_files_for_selection'); + } + + await selectFiles(rdKey, id.substring(3), selectedFiles); + } catch (error) { + if ((error as Error).message === 'no_files_for_selection') { + if (!disableToast) + toast.error(`No files for selection, deleting (${id})`, { + duration: 5000, + }); + } else { + if (!disableToast) toast.error(`Error selecting files (${id})`); + } + throw error; + } + }; + + return ( +
+ + + Debrid Media Manager - Movie - {movieInfo?.movie_results[0].title} ( + {movieInfo?.movie_results[0].release_date.substring(0, 4)}) + + + +
+

+ {movieInfo?.movie_results[0].title}{' '} + {movieInfo?.movie_results[0].release_date.substring(0, 4)} +

+ + Go Home + +
+ {/* Display basic movie info */} + {movieInfo && ( +
+
+ +
+
+

{movieInfo.movie_results[0].title}

+

{movieInfo.movie_results[0].overview}

+
+
+ )} + +
+ + {loading && ( +
+
+
+ )} + {errorMessage && ( +
+ Error: + {errorMessage} +
+ )} + {searchResults.length > 0 && ( + <> + {!loading && ( +
+ + { + const isChecked = event.target.checked; + setRdAutoInstantCheck(isChecked); + }} + />{' '} + + + { + const isChecked = event.target.checked; + setAdAutoInstantCheck(isChecked); + }} + />{' '} + +
+ )} +
+
+ {!loading && + searchResults.map((r: SearchResult) => ( +
+
+

+ {r.title} +

+

+ Size: {(r.fileSize / 1024).toFixed(2)} GB +

+
+ {rd.isDownloading(r.hash) && + rdCache![r.hash].id && ( + + )} + {rdKey && rd.notInLibrary(r.hash) && ( + + )} + {ad.isDownloading(r.hash) && + adCache![r.hash].id && ( + + )} + {adKey && ad.notInLibrary(r.hash) && ( + + )} +
+
+
+ ))} +
+
+ + )} + {Object.keys(router.query).length !== 0 && searchResults.length === 0 && !loading && ( + <> +

+ Processing search request for "{movieInfo?.movie_results[0].title} + ". Try again in a few minutes. +

+ + )} +
+ ); +} + +export default withAuth(Search); diff --git a/src/pages/search-v2.tsx b/src/pages/search-v2.tsx new file mode 100644 index 0000000..cfe2420 --- /dev/null +++ b/src/pages/search-v2.tsx @@ -0,0 +1,162 @@ +import TMDBPoster from '@/components/poster'; +import { withAuth } from '@/utils/withAuth'; +import Head from 'next/head'; +import Link from 'next/link'; +import { useRouter } from 'next/router'; +import { useCallback, useEffect, useState } from 'react'; +import { Toaster } from 'react-hot-toast'; + +type SearchResult = { + id: string; + type: 'movie' | 'show'; + year: number; + score: number; + title: string; + imdbid: string; + tmdbid: number; + tvdbid?: number; + traktid?: number; + season_count?: number; + score_average: number; +}; + +function Search() { + const [query, setQuery] = useState(''); + const [typedQuery, setTypedQuery] = useState(''); + const [searchResults, setSearchResults] = useState([]); + const [loading, setLoading] = useState(false); + const [errorMessage, setErrorMessage] = useState(''); + + const router = useRouter(); + + const fetchData = async (query: string) => { + setLoading(true); + try { + const res = await fetch(`/api/keywordsearch?keyword=${query}`); + const data = await res.json(); + setSearchResults(data.results); + } catch (error: any) { + setErrorMessage(error.message); + } finally { + setLoading(false); + } + }; + + const handleSubmit = useCallback( + (e?: React.FormEvent) => { + if (e) e.preventDefault(); + if (!typedQuery) return; + router.push({ + query: { query: typedQuery }, + }); + }, + [router, typedQuery] + ); + + useEffect(() => { + const { query: searchQuery } = router.query; + if (!searchQuery) return; + const decodedQuery = decodeURIComponent(searchQuery as string); + if (decodedQuery === query) return; + setTypedQuery(decodedQuery); + setQuery(decodedQuery); + fetchData(decodedQuery); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [router.query]); + + return ( +
+ + Debrid Media Manager - Search: {query} + + +
+

Search

+ + Go Home + +
+
+
+ setTypedQuery(e.target.value)} + /> + +
+ + {loading && ( +
+
+
+ )} + {errorMessage && ( +
+ Error: + {errorMessage} +
+ )} + {searchResults.length > 0 && ( + <> +

+ Search Results for "{query}" +

+
+ {searchResults.map((result) => ( +
+ +

{result.title}

+

Year: {result.year}

+

Score: {result.score}

+ {result.type === 'movie' ? ( + + View More + + ) : ( + <> + {Array.from( + { length: result.season_count || 0 }, + (_, i) => i + 1 + ).map((season) => ( + + View Season {season} + + ))} + + )} +
+ ))} +
+ + )} + {Object.keys(router.query).length !== 0 && searchResults.length === 0 && !loading && ( + <> +

+ No results found for "{query}" +

+ + )} +
+ ); +} + +export default withAuth(Search); diff --git a/src/services/btdigg-v2.ts b/src/services/btdigg-v2.ts index 1be55cb..144f221 100644 --- a/src/services/btdigg-v2.ts +++ b/src/services/btdigg-v2.ts @@ -43,40 +43,9 @@ export const flattenAndRemoveDuplicates = (arr: SearchResult[][]): SearchResult[ }; export const groupByParsedTitle = (results: SearchResult[]): SearchResult[] => { - const frequency: Record = {}; - const infoCache: Record = {}; - const getInfoOrTitle = (result: SearchResult) => { - if (result.hash in infoCache && infoCache[result.hash].title) { - return infoCache[result.hash]; - } - return result.title; - } - - for (const result of results) { - // Use the cached info object if it exists, otherwise compute it and store it in the cache - if (!(result.hash in infoCache)) { - infoCache[result.hash] = getMediaType(result.title) === 'movie' ? filenameParse(result.title) : filenameParse(result.title, true); - } - - const mediaId = getMediaId(getInfoOrTitle(result), getMediaType(result.title), true); - - if (mediaId in frequency) { - frequency[mediaId] += result.fileSize; - } else { - frequency[mediaId] = result.fileSize; - } - } - results.sort((a, b) => { - const frequencyCompare = - frequency[getMediaId(getInfoOrTitle(b), getMediaType(b.title), true)] - - frequency[getMediaId(getInfoOrTitle(a), getMediaType(a.title), true)]; - if (frequencyCompare === 0) { - return b.fileSize - a.fileSize; - } - return frequencyCompare; + return b.fileSize - a.fileSize; }); - return results; }; diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index 09de222..cca38ce 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -1,70 +1,98 @@ import { PrismaClient } from '@prisma/client'; export class PlanetScaleCache { - private prisma: PrismaClient; - - constructor() { - this.prisma = new PrismaClient(); - this.prisma.$queryRaw`SET @@boost_cached_queries = true` - } - - public async cacheJsonValue(key: string[], value: T) { - const sortedKey = key.sort(); - const planetScaleKey = sortedKey.join(':'); - - await this.prisma.cache.upsert({ - where: { key: planetScaleKey }, - update: { value } as any, - create: { key: planetScaleKey, value } as any, - }); - } - - public async getCachedJsonValue(key: string[]): Promise { - const sortedKey = key.sort(); - const planetScaleKey = sortedKey.join(':'); - - const cacheEntry = await this.prisma.cache.findUnique({ where: { key: planetScaleKey } }); - return cacheEntry?.value as T | undefined; - } - - public async deleteCachedJsonValue(key: string[]): Promise { - const sortedKey = key.sort(); - const planetScaleKey = sortedKey.join(':'); - - await this.prisma.cache.delete({ where: { key: planetScaleKey } }); - } - - public async getDbSize(): Promise { - const count = await this.prisma.cache.count(); - return count; - } - - /// - - public async saveScrapedResults(key: string, value: T) { - await this.prisma.scraped.upsert({ - where: { key }, - update: { value } as any, - create: { key, value } as any, - }); - } - - public async getScrapedResults(key: string): Promise { - const cacheEntry = await this.prisma.scraped.findUnique({ where: { key } }); - return cacheEntry?.value as T | undefined; - } - - public async getScrapedDbSize(): Promise { - const count = await this.prisma.scraped.count(); - return count; - } - - public async keyExists(key: string): Promise { - const cacheEntry = await this.prisma.scraped.findFirst({ - where: { key }, - select: { key: true }, - }); - return cacheEntry !== null; - } + private prisma: PrismaClient; + constructor() { + this.prisma = new PrismaClient(); + this.prisma.$queryRaw`SET @@boost_cached_queries = true`; + } + + public async cacheJsonValue(key: string[], value: T) { + const sortedKey = key.sort(); + const planetScaleKey = sortedKey.join(':'); + + await this.prisma.cache.upsert({ + where: { key: planetScaleKey }, + update: { value } as any, + create: { key: planetScaleKey, value } as any, + }); + } + + public async getCachedJsonValue(key: string[]): Promise { + const sortedKey = key.sort(); + const planetScaleKey = sortedKey.join(':'); + + const cacheEntry = await this.prisma.cache.findUnique({ where: { key: planetScaleKey } }); + return cacheEntry?.value as T | undefined; + } + + public async deleteCachedJsonValue(key: string[]): Promise { + const sortedKey = key.sort(); + const planetScaleKey = sortedKey.join(':'); + + await this.prisma.cache.delete({ where: { key: planetScaleKey } }); + } + + public async getDbSize(): Promise { + const count = await this.prisma.cache.count(); + return count; + } + + /// scraped results + + public async saveScrapedResults(key: string, value: T) { + await this.prisma.scraped.upsert({ + where: { key }, + update: { value } as any, + create: { key, value } as any, + }); + } + + public async getScrapedResults(key: string): Promise { + const cacheEntry = await this.prisma.scraped.findUnique({ where: { key } }); + return cacheEntry?.value as T | undefined; + } + + public async getScrapedDbSize(): Promise { + const count = await this.prisma.scraped.count(); + return count; + } + + public async keyExists(key: string): Promise { + const cacheEntry = await this.prisma.scraped.findFirst({ + where: { key }, + select: { key: true }, + }); + return cacheEntry !== null; + } + + // search results + + public async saveSearchResults(key: string, value: T) { + await this.prisma.search.upsert({ + where: { key }, + update: { value } as any, + create: { key, value } as any, + }); + } + + public async getSearchResults(key: string): Promise { + const cacheEntry = await this.prisma.search.findUnique({ where: { key } }); + + if (cacheEntry) { + const updatedAt = cacheEntry.updatedAt; + const now = new Date(); + const differenceInHours = + Math.abs(now.getTime() - updatedAt.getTime()) / 1000 / 60 / 60; + + if (differenceInHours > 24) { + return undefined; + } else { + return cacheEntry.value as T; + } + } + + return undefined; + } } diff --git a/src/utils/freekeys.ts b/src/utils/freekeys.ts new file mode 100644 index 0000000..a869710 --- /dev/null +++ b/src/utils/freekeys.ts @@ -0,0 +1,21 @@ +let tmdb_keys = [ + 'fb7bb23f03b6994dafc674c074d01761', + 'e55425032d3d0f371fc776f302e7c09b', + '8301a21598f8b45668d5711a814f01f6', + '8cf43ad9c085135b9479ad5cf6bbcbda', + 'da63548086e399ffc910fbc08526df05', + '13e53ff644a8bd4ba37b3e1044ad24f3', + '269890f657dddf4635473cf4cf456576', + 'a2f888b27315e62e471b2d587048f32e', + '8476a7ab80ad76f0936744df0430e67c', + '5622cafbfe8f8cfe358a29c53e19bba0', + 'ae4bd1b6fce2a5648671bfc171d15ba4', + '257654f35e3dff105574f97fb4b97035', + '2f4038e83265214a0dcd6ec2eb3276f5', + '9e43f45f94705cc8e1d5a0400d19a7b7', + 'af6887753365e14160254ac7f4345dd2', + '06f10fc8741a672af455421c239a1ffc', + 'fb7bb23f03b6994dafc674c074d01761', + '09ad8ace66eec34302943272db0e8d2c' +]; +export const getTmdbKey = () => tmdb_keys[Math.floor(Math.random() * tmdb_keys.length)]; From bf1315419b8e9af241048f1bea8576e3860619dd Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Tue, 29 Aug 2023 22:32:13 +0200 Subject: [PATCH 072/272] 2.7.1 (#52) fix stuffs --- next.config.js | 2 +- package.json | 2 +- src/components/poster.tsx | 44 +- src/pages/api/moviesearch.ts | 2 +- src/pages/api/tvsearch.ts | 2 +- src/pages/movies/[imdbid].tsx | 263 +++++------ src/pages/search-v2.tsx | 75 +-- src/pages/shows/[imdbid]/[seasonNum].tsx | 568 +++++++++++++++++++++++ 8 files changed, 773 insertions(+), 185 deletions(-) create mode 100644 src/pages/shows/[imdbid]/[seasonNum].tsx diff --git a/next.config.js b/next.config.js index 42d4585..fe1ee33 100644 --- a/next.config.js +++ b/next.config.js @@ -6,7 +6,7 @@ const nextConfig = { protocol: 'https', hostname: 'image.tmdb.org', port: '', - pathname: '/t/p/w200/**', + pathname: '/**', }, { protocol: 'https', diff --git a/package.json b/package.json index 431591c..784e8de 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.7.0", + "version": "2.7.1", "private": false, "scripts": { "dev": "next dev", diff --git a/src/components/poster.tsx b/src/components/poster.tsx index 825702c..6b1a91f 100644 --- a/src/components/poster.tsx +++ b/src/components/poster.tsx @@ -1,38 +1,52 @@ -import React, { useState, useEffect } from 'react'; +import React, { useState, useEffect, useRef } from 'react'; import axios from 'axios'; import Image from 'next/image'; import { getTmdbKey } from '@/utils/freekeys'; -const TMDBPoster = ({ imdbId }: Record) => { +const Poster = ({ imdbId }: Record) => { const [posterUrl, setPosterUrl] = useState(''); + const [imgLoaded, setImgLoaded] = useState(false); + const imgRef = useRef(null); useEffect(() => { const fetchData = async () => { const response = await axios.get(`https://api.themoviedb.org/3/find/${imdbId}?api_key=${getTmdbKey()}&external_source=imdb_id`); const baseUrl = 'https://image.tmdb.org/t/p/w200'; - if (response.data.movie_results.length > 0 && response.data.movie_results[0].poster_path) { - setPosterUrl(baseUrl + response.data.movie_results[0].poster_path); - } if (response.data.tv_results.length > 0 && response.data.tv_results[0].poster_path) { - setPosterUrl(baseUrl + response.data.tv_results[0].poster_path); - } else { - // If no poster_path, set a placeholder image URL - setPosterUrl(`https://picsum.photos/seed/${imdbId}/200/300`); - } + const posterPath = response.data.movie_results[0]?.poster_path || response.data.tv_results[0]?.poster_path; + if (!posterPath) setPosterUrl(`https://picsum.photos/seed/${imdbId}/200/300`); + else setPosterUrl(`${baseUrl}${posterPath}`); }; + const imgObserver = new IntersectionObserver((entries, observer) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + fetchData(); + setImgLoaded(true); + observer.disconnect(); + } + }); + }); + try { - if (imdbId) fetchData(); - else setPosterUrl(`https://picsum.photos/seed/${imdbId}/200/300`); + if (imdbId && imgRef.current) { + imgObserver.observe(imgRef.current); + } else { + setPosterUrl(`https://picsum.photos/seed/${imdbId}/200/300`); + } } catch (error: any) { setPosterUrl(`https://picsum.photos/seed/${imdbId}/200/300`); } + + return () => { + imgObserver.disconnect(); + }; }, [imdbId]); return ( -
- {posterUrl && } +
+ {imgLoaded && posterUrl && }
); }; -export default TMDBPoster; +export default Poster; diff --git a/src/pages/api/moviesearch.ts b/src/pages/api/moviesearch.ts index d3a04f7..2c96e28 100644 --- a/src/pages/api/moviesearch.ts +++ b/src/pages/api/moviesearch.ts @@ -18,7 +18,7 @@ const handler: NextApiHandler = async (req, res) => { return; } - res.status(204).json({ results: [] }); + res.status(204).json(null); } catch (error: any) { console.error('encountered a db issue', error); res.status(500).json({ errorMessage: error.message }); diff --git a/src/pages/api/tvsearch.ts b/src/pages/api/tvsearch.ts index 7cbda47..bf002d9 100644 --- a/src/pages/api/tvsearch.ts +++ b/src/pages/api/tvsearch.ts @@ -26,7 +26,7 @@ const handler: NextApiHandler = async (req, res) => { return; } - res.status(204).json({ results: [] }); + res.status(204).json(null); } catch (error: any) { console.error('encountered a db issue', error); res.status(500).json({ errorMessage: error.message }); diff --git a/src/pages/movies/[imdbid].tsx b/src/pages/movies/[imdbid].tsx index ef556b1..b4fc30a 100644 --- a/src/pages/movies/[imdbid].tsx +++ b/src/pages/movies/[imdbid].tsx @@ -29,7 +29,11 @@ import { useRouter } from 'next/router'; import { useEffect, useState } from 'react'; import toast, { Toaster } from 'react-hot-toast'; import { FaDownload, FaFastForward, FaTimes } from 'react-icons/fa'; -import { SearchApiResponse } from '../api/search'; + +export type SearchApiResponse = { + results?: SearchResult[]; + errorMessage?: string; +}; type SearchResult = { title: string; @@ -167,7 +171,7 @@ function Search() { } available in RD`, { icon: '๐Ÿ”' } ); - setMasterAvailability({ ...masterAvailability, ...rdAvailability }); + setMasterAvailability(prevState => ({ ...prevState, ...rdAvailability })); } catch (error) { toast.error( 'There was an error checking availability in Real-Debrid. Please try again.' @@ -212,7 +216,7 @@ function Search() { } available in AD`, { icon: '๐Ÿ”' } ); - setMasterAvailability({ ...masterAvailability, ...adAvailability }); + setMasterAvailability(prevState => ({ ...prevState, ...adAvailability })); } catch (error) { toast.error('There was an error checking availability in AllDebrid. Please try again.'); throw error; @@ -312,16 +316,13 @@ function Search() {
- Debrid Media Manager - Movie - {movieInfo?.movie_results[0].title} ( - {movieInfo?.movie_results[0].release_date.substring(0, 4)}) + Debrid Media Manager - Movie - {movieInfo?.movie_results[0].title} + {movieInfo?.movie_results[0].release_date.substring(0, 4)}
-

- {movieInfo?.movie_results[0].title}{' '} - {movieInfo?.movie_results[0].release_date.substring(0, 4)} -

+

๐ŸŽฅ

- {!loading && - searchResults.map((r: SearchResult) => ( -
-
-

- {r.title} -

-

- Size: {(r.fileSize / 1024).toFixed(2)} GB -

-
- {rd.isDownloading(r.hash) && - rdCache![r.hash].id && ( - - )} - {rdKey && rd.notInLibrary(r.hash) && ( - - )} - {ad.isDownloading(r.hash) && - adCache![r.hash].id && ( - - )} - {adKey && ad.notInLibrary(r.hash) && ( - - )} -
-
-
- ))} +{ + !loading && searchResults.map((r: SearchResult) => ( +
+
+

+ {r.title} +

+

+ Size: {(r.fileSize / 1024).toFixed(2)} GB +

+
+ {rd.isDownloading(r.hash) && rdCache![r.hash].id && ( + + )} + {rdKey && rd.notInLibrary(r.hash) && ( + + )} + {ad.isDownloading(r.hash) && adCache![r.hash].id && ( + + )} + {adKey && ad.notInLibrary(r.hash) && ( + + )} +
+ +
+
+ )) +}
diff --git a/src/pages/search-v2.tsx b/src/pages/search-v2.tsx index cfe2420..3184b28 100644 --- a/src/pages/search-v2.tsx +++ b/src/pages/search-v2.tsx @@ -1,4 +1,4 @@ -import TMDBPoster from '@/components/poster'; +import Poster from '@/components/poster'; import { withAuth } from '@/utils/withAuth'; import Head from 'next/head'; import Link from 'next/link'; @@ -113,36 +113,51 @@ function Search() {

Search Results for "{query}"

-
+
{searchResults.map((result) => ( -
- -

{result.title}

-

Year: {result.year}

-

Score: {result.score}

- {result.type === 'movie' ? ( - - View More - - ) : ( - <> - {Array.from( - { length: result.season_count || 0 }, - (_, i) => i + 1 - ).map((season) => ( - - View Season {season} - - ))} - - )} +
+ +
+

{result.title}

+

Year: {result.year}

+

Score: {result.score}

+ {result.type === 'movie' ? ( + + + ๐ŸŽฅ + {' '} + View + + ) : ( + <> + {Array.from( + { length: result.season_count || 0 }, + (_, i) => i + 1 + ).map((season) => ( + + + ๐Ÿ“บ + {' '} + Season {season} + + ))} + + )} +
))}
diff --git a/src/pages/shows/[imdbid]/[seasonNum].tsx b/src/pages/shows/[imdbid]/[seasonNum].tsx new file mode 100644 index 0000000..799877e --- /dev/null +++ b/src/pages/shows/[imdbid]/[seasonNum].tsx @@ -0,0 +1,568 @@ +import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; +import { useDownloadsCache } from '@/hooks/cache'; +import useLocalStorage from '@/hooks/localStorage'; +import { + AdInstantAvailabilityResponse, + MagnetFile, + adInstantCheck, + deleteMagnet, + uploadMagnet, +} from '@/services/allDebrid'; +import { Availability, HashAvailability } from '@/services/availability'; +import { + RdInstantAvailabilityResponse, + addHashAsMagnet, + deleteTorrent, + getTorrentInfo, + rdInstantCheck, + selectFiles, +} from '@/services/realDebrid'; +import { getTmdbKey } from '@/utils/freekeys'; +import { groupBy } from '@/utils/groupBy'; +import { getSelectableFiles, isVideo } from '@/utils/selectable'; +import { withAuth } from '@/utils/withAuth'; +import axios from 'axios'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import { useRouter } from 'next/router'; +import { useEffect, useState } from 'react'; +import toast, { Toaster } from 'react-hot-toast'; +import { FaDownload, FaFastForward, FaTimes } from 'react-icons/fa'; + +export type SearchApiResponse = { + results?: SearchResult[]; + errorMessage?: string; +}; + +type SearchResult = { + title: string; + fileSize: number; + hash: string; + available: Availability; +}; + +type TmdbResponse = { + tv_results: { + name: string; + overview: string; + first_air_date: string; + poster_path: string; + }[]; +}; + +function Search() { + const [searchResults, setSearchResults] = useState([]); + const [errorMessage, setErrorMessage] = useState(''); + const rdKey = useRealDebridAccessToken(); + const adKey = useAllDebridApiKey(); + const [loading, setLoading] = useState(false); + const [masterAvailability, setMasterAvailability] = useState({}); + const [rdCache, rd, rdCacheAdder, removeFromRdCache] = useDownloadsCache('rd'); + const [adCache, ad, adCacheAdder, removeFromAdCache] = useDownloadsCache('ad'); + const [rdAutoInstantCheck, setRdAutoInstantCheck] = useLocalStorage( + 'rdAutoInstantCheck', + false + ); + const [adAutoInstantCheck, setAdAutoInstantCheck] = useLocalStorage( + 'adAutoInstantCheck', + false + ); + const [showInfo, setShowInfo] = useState(null); + + const router = useRouter(); + const { imdbid, seasonNum } = router.query; + + const fetchShowInfo = async (imdbId: string) => { + try { + const response = await axios.get( + `https://api.themoviedb.org/3/find/${imdbId}?api_key=${getTmdbKey()}&external_source=imdb_id` + ); + setShowInfo(response.data); + } catch (error) { + setErrorMessage('There was an error fetching movie info. Please try again.'); + console.error(`error fetching movie data`, error); + } + }; + + useEffect(() => { + if (imdbid && seasonNum) { + fetchShowInfo(imdbid as string); + fetchData(imdbid as string, parseInt(seasonNum as string)); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [imdbid, seasonNum]); + + const fetchData = async (imdbId: string, seasonNum: number) => { + setSearchResults([]); + setErrorMessage(''); + setLoading(true); + try { + let endpoint = `/api/tvsearch?imdbId=${encodeURIComponent( + imdbId + )}&seasonNum=${seasonNum}`; + const response = await axios.get(endpoint); + + setSearchResults( + response.data.results?.map((r) => ({ + ...r, + available: 'unavailable', + })) || [] + ); + + if (response.data.results?.length) { + toast(`Found ${response.data.results.length} results`, { icon: '๐Ÿ”' }); + + // instant checks + const hashArr = response.data.results.map((r) => r.hash); + if (rdKey && rdAutoInstantCheck) await instantCheckInRd(hashArr); + if (adKey && adAutoInstantCheck) await instantCheckInAd(hashArr); + } else { + toast(`No results found`, { icon: '๐Ÿ”' }); + } + } catch (error) { + console.error(error); + setErrorMessage('There was an error searching for the query. Please try again.'); + } finally { + setLoading(false); + } + }; + + useEffect(() => { + setSearchResults((prev) => + prev.map((r) => ({ + ...r, + available: masterAvailability[r.hash], + })) + ); + }, [masterAvailability]); + + const instantCheckInRd = async (hashes: string[]): Promise => { + const rdAvailability = {} as HashAvailability; + + const setInstantFromRd = (resp: RdInstantAvailabilityResponse) => { + for (const masterHash in resp) { + if ('rd' in resp[masterHash] === false) continue; + if (masterAvailability[masterHash] === 'no_videos') continue; + const variants = resp[masterHash]['rd']; + if (!variants.length) rdAvailability[masterHash] = 'no_videos'; + for (const variant of variants) { + for (const fileId in variant) { + const file = variant[fileId]; + if (isVideo({ path: file.filename })) { + rdAvailability[masterHash] = + masterAvailability[masterHash] === 'ad:available' || + masterAvailability[masterHash] === 'all:available' + ? 'all:available' + : 'rd:available'; + + break; + } + } + } + } + }; + + try { + for (const hashGroup of groupBy(100, hashes)) { + if (rdKey) await rdInstantCheck(rdKey, hashGroup).then(setInstantFromRd); + } + toast( + `Found ${ + Object.values(rdAvailability).filter((a) => a.includes(':available')).length + } available in RD`, + { icon: '๐Ÿ”' } + ); + setMasterAvailability(prevState => ({ ...prevState, ...rdAvailability })); + } catch (error) { + toast.error( + 'There was an error checking availability in Real-Debrid. Please try again.' + ); + throw error; + } + }; + + const instantCheckInAd = async (hashes: string[]): Promise => { + const adAvailability = {} as HashAvailability; + + const setInstantFromAd = (resp: AdInstantAvailabilityResponse) => { + for (const magnetData of resp.data.magnets) { + const masterHash = magnetData.hash; + if (masterAvailability[masterHash] === 'no_videos') continue; + if (magnetData.instant) { + adAvailability[masterHash] = magnetData.files?.reduce( + (acc: boolean, curr: MagnetFile) => { + if (isVideo({ path: curr.n })) { + return true; + } + return acc; + }, + false + ) + ? masterAvailability[masterHash] === 'rd:available' || + masterAvailability[masterHash] === 'all:available' + ? 'all:available' + : 'ad:available' + : 'no_videos'; + } + } + }; + + try { + for (const hashGroup of groupBy(30, hashes)) { + if (adKey) await adInstantCheck(adKey, hashGroup).then(setInstantFromAd); + } + toast( + `Found ${ + Object.values(adAvailability).filter((a) => a.includes(':available')).length + } available in AD`, + { icon: '๐Ÿ”' } + ); + setMasterAvailability(prevState => ({ ...prevState, ...adAvailability })); + } catch (error) { + toast.error('There was an error checking availability in AllDebrid. Please try again.'); + throw error; + } + }; + + const handleAddAsMagnetInRd = async ( + hash: string, + instantDownload: boolean = false, + disableToast: boolean = false + ) => { + try { + if (!rdKey) throw new Error('no_rd_key'); + const id = await addHashAsMagnet(rdKey, hash); + if (!disableToast) toast.success('Successfully added as magnet!'); + rdCacheAdder.single(`rd:${id}`, hash, instantDownload ? 'downloaded' : 'downloading'); + handleSelectFiles(`rd:${id}`, true); // add rd: to account for substr(3) in handleSelectFiles + } catch (error) { + if (!disableToast) + toast.error('There was an error adding as magnet. Please try again.'); + throw error; + } + }; + + const handleAddAsMagnetInAd = async ( + hash: string, + instantDownload: boolean = false, + disableToast: boolean = false + ) => { + try { + if (!adKey) throw new Error('no_ad_key'); + const resp = await uploadMagnet(adKey, [hash]); + if (resp.data.magnets.length === 0 || resp.data.magnets[0].error) + throw new Error('no_magnets'); + if (!disableToast) toast.success('Successfully added as magnet!'); + adCacheAdder.single( + `ad:${resp.data.magnets[0].id}`, + hash, + instantDownload ? 'downloaded' : 'downloading' + ); + } catch (error) { + if (!disableToast) + toast.error('There was an error adding as magnet. Please try again.'); + throw error; + } + }; + + const isAvailableInRd = (result: SearchResult) => + result.available === 'rd:available' || result.available === 'all:available'; + const isAvailableInAd = (result: SearchResult) => + result.available === 'ad:available' || result.available === 'all:available'; + const hasNoVideos = (result: SearchResult) => result.available === 'no_videos'; + + const handleDeleteTorrent = async (id: string, disableToast: boolean = false) => { + try { + if (!rdKey && !adKey) throw new Error('no_keys'); + if (rdKey && id.startsWith('rd:')) await deleteTorrent(rdKey, id.substring(3)); + if (adKey && id.startsWith('ad:')) await deleteMagnet(adKey, id.substring(3)); + if (!disableToast) toast.success(`Download canceled (${id})`); + if (id.startsWith('rd:')) removeFromRdCache(id); + if (id.startsWith('ad:')) removeFromAdCache(id); + } catch (error) { + if (!disableToast) toast.error(`Error deleting torrent (${id})`); + throw error; + } + }; + + const handleSelectFiles = async (id: string, disableToast: boolean = false) => { + try { + if (!rdKey) throw new Error('no_rd_key'); + const response = await getTorrentInfo(rdKey, id.substring(3)); + if (response.filename === 'Magnet') return; // no files yet + + const selectedFiles = getSelectableFiles(response.files.filter(isVideo)).map( + (file) => file.id + ); + if (selectedFiles.length === 0) { + handleDeleteTorrent(id, true); + throw new Error('no_files_for_selection'); + } + + await selectFiles(rdKey, id.substring(3), selectedFiles); + } catch (error) { + if ((error as Error).message === 'no_files_for_selection') { + if (!disableToast) + toast.error(`No files for selection, deleting (${id})`, { + duration: 5000, + }); + } else { + if (!disableToast) toast.error(`Error selecting files (${id})`); + } + throw error; + } + }; + + return ( +
+ + + Debrid Media Manager - TV Show - {showInfo?.tv_results[0].name} - Season{' '} + {seasonNum} + + + +
+

๐Ÿ“บ

+ + Go Home + +
+ {/* Display basic movie info */} + {showInfo && ( +
+
+ +
+
+

{showInfo.tv_results[0].name} - Season{' '} + {seasonNum}

+

{showInfo.tv_results[0].overview}

+
+
+ )} + +
+ + {loading && ( +
+
+
+ )} + {errorMessage && ( +
+ Error: + {errorMessage} +
+ )} + {searchResults.length > 0 && ( + <> + {!loading && ( +
+ + { + const isChecked = event.target.checked; + setRdAutoInstantCheck(isChecked); + }} + />{' '} + + + { + const isChecked = event.target.checked; + setAdAutoInstantCheck(isChecked); + }} + />{' '} + +
+ )} +
+
+{ + !loading && searchResults.map((r: SearchResult) => ( +
+
+

+ {r.title} +

+

+ Size: {(r.fileSize / 1024).toFixed(2)} GB +

+
+ {rd.isDownloading(r.hash) && rdCache![r.hash].id && ( + + )} + {rdKey && rd.notInLibrary(r.hash) && ( + + )} + {ad.isDownloading(r.hash) && adCache![r.hash].id && ( + + )} + {adKey && ad.notInLibrary(r.hash) && ( + + )} +
+ +
+
+ )) +} +
+
+ + )} + {Object.keys(router.query).length !== 0 && searchResults.length === 0 && !loading && ( + <> +

+ Processing search request for "{showInfo?.tv_results[0].name} + ". Try again in a few minutes. +

+ + )} +
+ ); +} + +export default withAuth(Search); From 58eea7f34de73f9671065d1510f6b7975c6446cd Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Wed, 30 Aug 2023 00:39:26 +0200 Subject: [PATCH 073/272] 2.7.2 (#53) improve worker --- package.json | 2 +- src/pages/api/dbsize.ts | 2 +- src/pages/api/moviesearch.ts | 7 + src/pages/api/requested.ts | 192 +++++++++++++++++++++++++ src/pages/api/scrape.ts | 13 +- src/pages/api/tvsearch.ts | 11 +- src/pages/index.tsx | 10 ++ src/services/btdigg-v2.ts | 270 ++++++++++++++++++----------------- src/services/planetscale.ts | 23 +++ tor.Dockerfile | 2 +- 10 files changed, 391 insertions(+), 141 deletions(-) create mode 100644 src/pages/api/requested.ts diff --git a/package.json b/package.json index 784e8de..2b420c6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.7.1", + "version": "2.7.2", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/api/dbsize.ts b/src/pages/api/dbsize.ts index ca01652..6b420fe 100644 --- a/src/pages/api/dbsize.ts +++ b/src/pages/api/dbsize.ts @@ -5,7 +5,7 @@ const cache = new PlanetScaleCache(); const handler: NextApiHandler = async (req, res) => { try { - const size = await cache.getDbSize(); + const size = await cache.getScrapedDbSize(); res.status(200).json({ size }); } catch (err: any) { console.error(err); diff --git a/src/pages/api/moviesearch.ts b/src/pages/api/moviesearch.ts index 2c96e28..17d0ba9 100644 --- a/src/pages/api/moviesearch.ts +++ b/src/pages/api/moviesearch.ts @@ -18,6 +18,13 @@ const handler: NextApiHandler = async (req, res) => { return; } + const isProcessing = await db.keyExists(`processing:${imdbId}`); + if (isProcessing) { + res.status(204).json(null); + return; + } + + await db.saveScrapedResults(`requested:${imdbId.toString().trim()}`, []); res.status(204).json(null); } catch (error: any) { console.error('encountered a db issue', error); diff --git a/src/pages/api/requested.ts b/src/pages/api/requested.ts new file mode 100644 index 0000000..b8efbbd --- /dev/null +++ b/src/pages/api/requested.ts @@ -0,0 +1,192 @@ +import { SearchResult } from '@/services/btdigg-v2'; +import { + createAxiosInstance, + scrapeResults, + flattenAndRemoveDuplicates, + groupByParsedTitle, +} from '@/services/btdigg-v2'; +import { PlanetScaleCache } from '@/services/planetscale'; +import axios from 'axios'; +import { NextApiRequest, NextApiResponse } from 'next'; +import { SocksProxyAgent } from 'socks-proxy-agent'; + +const tmdbKey = process.env.TMDB_KEY; +const mdblistKey = process.env.MDBLIST_KEY; +const getTmdbInfo = (imdbId: string) => + `https://api.themoviedb.org/3/find/${imdbId}?api_key=${tmdbKey}&external_source=imdb_id`; +const getMdbInfo = (imdbId: string) => `https://mdblist.com/api/?apikey=${mdblistKey}&i=${imdbId}`; +function padWithZero(num: number) { + if (num < 10) { + return '0' + num; + } else { + return num.toString(); + } +} +const cleanSearchQuery = (search: string): string => { + return search + .split(/[\s\=:\?\.\-\(\)\/]/) // split the search query into an array of elements + .filter((e) => e !== '') // filter out any empty elements + .map((e) => e.toLowerCase()) // convert each element to lowercase + .join(' ') // join the remaining elements with a single space + .replace(/[รกร รครข]/g, 'a') // replace certain characters with their equivalent + .replace(/[รฉรจรซรช]/g, 'e') + .replace(/[รญรฌรฏรฎ]/g, 'i') + .replace(/[รณรฒรถรด]/g, 'o') + .replace(/[รบรนรผรป]/g, 'u') + .replace(/\s+/g, ' ') // replace multiple spaces with a single space + .trim(); +}; + +const db = new PlanetScaleCache(); + +export type ScrapeResponse = { + status: string; + errorMessage?: string; +}; +1; +export default async function handler( + req: NextApiRequest, + res: NextApiResponse +) { + const { scrapePassword } = req.query; + if (process.env.SEARCH_SPEED_PASSWORD && scrapePassword !== process.env.SEARCH_SPEED_PASSWORD) { + res.status(403).json({ status: 'error', errorMessage: 'You are not authorized to use this feature' }); + return; + } + + const imdbId = await db.getLatestRequest(); + if (!imdbId) { + res.status(200).json({ status: 'done' }); + return; + } + + const isProcessing = await db.keyExists(`processing:${imdbId}`); + if (isProcessing) { + res.status(200).json({ status: 'processing' }); + return; + } + + // imdbId to search for + const tmdbResponse = await axios.get(getTmdbInfo(imdbId)); + + const movieTitles: string[] = []; + const tvTitles: string[] = []; + + let tmdbItem: any = {}; + let itemType: 'movie' | 'tv' = 'movie'; + + if (tmdbResponse.data.movie_results.length > 0) { + itemType = 'movie'; + tmdbItem = tmdbResponse.data.movie_results[0]; + movieTitles.push(`"${cleanSearchQuery(tmdbItem.title)}"`); + movieTitles.push(`"${cleanSearchQuery(tmdbItem.title)}" ${tmdbItem.release_date.substring(0, 4)}`); + + if (tmdbItem.original_title && tmdbItem.original_title !== tmdbItem.title) { + movieTitles.push(`"${tmdbItem.original_title}"`); + movieTitles.push(`"${tmdbItem.original_title}" ${tmdbItem.release_date.substring(0, 4)}`); + const mdbItem = await axios.get(getMdbInfo(imdbId)); + for (let rating of mdbItem.data.ratings) { + if (rating.source === 'tomatoes') { + const cleanedTitle = ( + itemType === 'movie' ? rating.url.split('/m/') : rating.url.split('/tv/') + )[1].replaceAll('_', ' '); + movieTitles.push(`"${cleanedTitle}"`); + movieTitles.push(`"${cleanedTitle}" ${tmdbItem.release_date.substring(0, 4)}`); + } + } + } + + await db.saveScrapedResults(`processing:${imdbId}`, []); + + try { + const results = []; + for (const movieTitle of movieTitles) { + for (const lType of ['720p', '1080p', '2160p', '']) { + results.push( + await scrapeResults( + createAxiosInstance( + new SocksProxyAgent(process.env.PROXY!, { timeout: 10000 }) + ), + `${movieTitle} ${lType}`.trim(), + lType || '1080p', + ) + ); + } + } + let processedResults = flattenAndRemoveDuplicates(results); + if (processedResults.length) processedResults = groupByParsedTitle(processedResults); + + await db.saveScrapedResults(`movie:${imdbId}`, processedResults); + + res.status(200).json({ status: `scraped: ${processedResults.length} items` }); + } catch (error: any) { + res.status(500).json({ + status: 'error', + errorMessage: `An error occurred while scraping Btdigg (${error.message})`, + }); + } + } + + if (tmdbResponse.data.tv_results.length > 0) { + itemType = 'tv'; + tmdbItem = tmdbResponse.data.tv_results[0]; + tvTitles.push(`"${cleanSearchQuery(tmdbItem.name)}"`); + tvTitles.push(`"${cleanSearchQuery(tmdbItem.name)}" ${tmdbItem.first_air_date.substring(0, 4)}`); + + if (tmdbItem.original_name && tmdbItem.original_name !== tmdbItem.name) { + tvTitles.push(`"${tmdbItem.original_name}"`); + tvTitles.push(`"${tmdbItem.original_name}" ${tmdbItem.first_air_date.substring(0, 4)}`); + } + + await db.saveScrapedResults(`processing:${imdbId}`, []); + + let totalResultsCount = 0; + const showResponse = await axios.get(getMdbInfo(imdbId)); + for (const season of showResponse.data.seasons + ? showResponse.data.seasons + : [{ season_number: 1, episode_count: 0 }]) { + if (season.season_number === 0) continue; + let seasonQueries = tvTitles.map((q) => `${q} "s${padWithZero(season.season_number)}"`); + try { + const results = []; + for (const finalQuery of seasonQueries) { + for (const lType of ['720p', '1080p', '2160p', '']) { + results.push( + await scrapeResults( + createAxiosInstance( + new SocksProxyAgent(process.env.PROXY!, { timeout: 10000 }) + ), + `${finalQuery} ${lType}`.trim(), + lType || '1080p', + ) + ); + } + } + let processedResults = flattenAndRemoveDuplicates(results); + if (processedResults.length) processedResults = groupByParsedTitle(processedResults); + + await db.saveScrapedResults(`tv:${imdbId}:${season.season_number}`, processedResults); + + totalResultsCount += processedResults.length; + } catch (error: any) { + res.status(500).json({ + status: 'error', + errorMessage: `An error occurred while scraping Btdigg (${error.message})`, + }); + } + // if (season.episode_count === 0) continue; + // for (let i = 1; i <= season.episode_count; i++) { + // seasonQueries = seasonQueries.concat( + // tvTitles.map( + // (q) => + // `${q} "s${padWithZero(season.season_number)}e${padWithZero(i)}"` + // ) + // ); + // } + } + + res.status(200).json({ status: `scraped: ${totalResultsCount} items` }); + } + + await db.markAsDone(imdbId); +} diff --git a/src/pages/api/scrape.ts b/src/pages/api/scrape.ts index c046632..38361c8 100644 --- a/src/pages/api/scrape.ts +++ b/src/pages/api/scrape.ts @@ -55,11 +55,16 @@ export default async function handler( } if (!imdbId || !(typeof imdbId === 'string')) { - console.log(imdbId); res.status(400).json({ status: 'error', errorMessage: 'Missing "imdbId" query parameter' }); return; } + const isProcessing = await db.keyExists(`processing:${imdbId}`); + if (isProcessing) { + res.status(200).json({ status: 'processing' }); + return; + } + // imdbId to search for const tmdbResponse = await axios.get(getTmdbInfo(imdbId.toString().trim())); @@ -98,6 +103,8 @@ export default async function handler( } } + await db.saveScrapedResults(`processing:${imdbId}`, []); + try { const results = []; for (const movieTitle of movieTitles) { @@ -146,6 +153,8 @@ export default async function handler( tvTitles.push(`"${tmdbItem.original_name}" ${tmdbItem.first_air_date.substring(0, 4)}`); } + await db.saveScrapedResults(`processing:${imdbId}`, []); + let totalResultsCount = 0; const showResponse = await axios.get(getMdbInfo(imdbId.toString().trim())); for (const season of showResponse.data.seasons @@ -193,4 +202,6 @@ export default async function handler( res.status(200).json({ status: `scraped: ${totalResultsCount} items` }); } + + await db.markAsDone(imdbId.toString().trim()); } diff --git a/src/pages/api/tvsearch.ts b/src/pages/api/tvsearch.ts index bf002d9..a8a8d2b 100644 --- a/src/pages/api/tvsearch.ts +++ b/src/pages/api/tvsearch.ts @@ -18,14 +18,19 @@ const handler: NextApiHandler = async (req, res) => { } try { - const searchResults = await db.getScrapedResults( - `tv:${imdbId.toString().trim()}:${parseInt(seasonNum.toString().trim(), 10)}` - ); + const searchResults = await db.getScrapedResults(`tv:${imdbId.toString().trim()}:${parseInt(seasonNum.toString().trim(), 10)}`); if (searchResults) { res.status(200).json({ results: searchResults }); return; } + const isProcessing = await db.keyExists(`processing:${imdbId.toString().trim()}`); + if (isProcessing) { + res.status(204).json(null); + return; + } + + await db.saveScrapedResults(`requested:${imdbId.toString().trim()}`, []); res.status(204).json(null); } catch (error: any) { console.error('encountered a db issue', error); diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 2f5c7cf..05d6cad 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -16,6 +16,10 @@ function IndexPage() { router.push('/search'); }; + const handleSearchV2Click = () => { + router.push('/search-v2'); + }; + const handleLogout = () => { if (typeof window === 'undefined') { // Running on the server, return null @@ -80,6 +84,12 @@ function IndexPage() { > My Library + - + -
- - {loading && ( -
-
-
- )} - {errorMessage && ( -
- Error: - {errorMessage} -
- )} - {searchResults.length > 0 && ( - <> -

- Search Results for "{query}" -

-
- {searchResults.map((result) => ( -
- -
-

{result.title}

-

Year: {result.year}

-

Score: {result.score}

- {result.type === 'movie' ? ( - - - ๐ŸŽฅ - {' '} - View - - ) : ( - <> - {Array.from( - { length: result.season_count || 0 }, - (_, i) => i + 1 - ).map((season) => ( - - - ๐Ÿ“บ - {' '} - Season {season} - - ))} - - )} -
-
- ))} -
- - )} - {Object.keys(router.query).length !== 0 && searchResults.length === 0 && !loading && ( - <> -

- No results found for "{query}" -

- - )} -
- ); -} - -export default withAuth(Search); diff --git a/src/pages/search.tsx b/src/pages/search.tsx index 5039863..610d387 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -1,157 +1,47 @@ -import useMyAccount, { MyAccount } from '@/hooks/account'; -import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; -import { useDownloadsCache } from '@/hooks/cache'; -import useLocalStorage from '@/hooks/localStorage'; -import { - AdInstantAvailabilityResponse, - adInstantCheck, - deleteMagnet, - MagnetFile, - uploadMagnet, -} from '@/services/allDebrid'; -import { Availability, HashAvailability } from '@/services/availability'; -import { - addHashAsMagnet, - deleteTorrent, - getTorrentInfo, - RdInstantAvailabilityResponse, - rdInstantCheck, - selectFiles, -} from '@/services/realDebrid'; -import { getBestDownloadOption } from '@/utils/bestDownloadOption'; -import { groupBy } from '@/utils/groupBy'; -import { getMediaId } from '@/utils/mediaId'; -import { getSelectableFiles, isVideo } from '@/utils/selectable'; +import Poster from '@/components/poster'; import { withAuth } from '@/utils/withAuth'; -import { ParsedFilename } from '@ctrl/video-filename-parser'; -import axios, { CancelTokenSource } from 'axios'; -import getConfig from 'next/config'; import Head from 'next/head'; import Link from 'next/link'; import { useRouter } from 'next/router'; import { useCallback, useEffect, useState } from 'react'; -import toast, { Toaster } from 'react-hot-toast'; -import { FaDownload, FaFastForward, FaTimes } from 'react-icons/fa'; -import { SearchApiResponse } from './api/search'; +import { Toaster } from 'react-hot-toast'; type SearchResult = { - mediaId: string; - title: string; - fileSize: number; - hash: string; - mediaType: 'movie' | 'tv'; - info: ParsedFilename; - available: Availability; + id: string; + type: 'movie' | 'show'; + year: number; score: number; -}; - -type SearchFilter = { - count: number; title: string; - biggestFileSize: number; + imdbid: string; + tmdbid: number; + tvdbid?: number; + traktid?: number; + season_count?: number; + score_average: number; }; -const { publicRuntimeConfig: config } = getConfig(); - function Search() { const [query, setQuery] = useState(''); const [typedQuery, setTypedQuery] = useState(''); const [searchResults, setSearchResults] = useState([]); - const [filteredResults, setFilteredResults] = useState([]); - const [errorMessage, setErrorMessage] = useState(''); - const rdKey = useRealDebridAccessToken(); - const adKey = useAllDebridApiKey(); const [loading, setLoading] = useState(false); - const [cancelTokenSource, setCancelTokenSource] = useState(null); - const [myAccount, setMyAccount] = useMyAccount(); - const [masterAvailability, setMasterAvailability] = useState({}); - const [searchFilters, setSearchFilters] = useState>({}); - const [rdCache, rd, rdCacheAdder, removeFromRdCache] = useDownloadsCache('rd'); - const [adCache, ad, adCacheAdder, removeFromAdCache] = useDownloadsCache('ad'); - const [rdAutoInstantCheck, setRdAutoInstantCheck] = useLocalStorage( - 'rdAutoInstantCheck', - false - ); - // const [adAutoInstantCheck, setAdAutoInstantCheck] = useLocalStorage( - // 'adAutoInstantCheck', - // false - // ); + const [errorMessage, setErrorMessage] = useState(''); const router = useRouter(); - const fetchData = async (searchQuery: string) => { - setSearchResults([]); - setErrorMessage(''); + const fetchData = async (query: string) => { setLoading(true); - const source = axios.CancelToken.source(); - setCancelTokenSource(source); try { - let endpoint = `/api/search?search=${encodeURIComponent(searchQuery)}&libraryType=${ - myAccount?.libraryType - }`; - if ( - config.externalSearchApiHostname && - window.location.origin !== config.externalSearchApiHostname - ) - endpoint = `${config.externalSearchApiHostname}${endpoint}`; - if (config.bypassHostname && !endpoint.startsWith('/')) - endpoint = `${config.bypassHostname}${encodeURIComponent(endpoint)}`; - const response = await axios.get(endpoint, { - cancelToken: source.token, - }); - - setSearchResults( - response.data.searchResults?.map((r) => ({ - ...r, - mediaId: getMediaId(r.info, r.mediaType, false), - available: 'unavailable', - })) || [] - ); - setSearchFilters( - response.data.searchResults?.reduce((acc, r) => { - const mediaId = getMediaId(r.info, r.mediaType, true); - if (acc[mediaId]) { - acc[mediaId].count += 1; - acc[mediaId].biggestFileSize = Math.max( - acc[mediaId].biggestFileSize, - r.fileSize - ); - } else { - acc[mediaId] = { - title: getMediaId(r.info, r.mediaType, false), - biggestFileSize: r.fileSize, - count: 1, - }; - } - return acc; - }, {} as Record)! - ); - if (response.data.searchResults?.length) { - toast(`Found ${response.data.searchResults.length} results`, { icon: '๐Ÿ”' }); - - // instant checks - const hashArr = response.data.searchResults.map((r) => r.hash); - if (rdKey && rdAutoInstantCheck) await instantCheckInRd(hashArr); - // if (adKey && adAutoInstantCheck) await instantCheckInAd(hashArr); - } else { - toast(`No results found`, { icon: '๐Ÿ”' }); - } - } catch (error) { - if (axios.isCancel(error)) { - console.warn('Request canceled:', error); - } else { - console.log(error); - setErrorMessage('There was an error searching for the query. Please try again.'); - } + const res = await fetch(`/api/keywordsearch?keyword=${query}`); + const data = await res.json(); + setSearchResults(data.results); + } catch (error: any) { + setErrorMessage(error.message); } finally { setLoading(false); } }; - const handleLibraryTypeChange = (event: React.ChangeEvent) => { - setMyAccount({ ...myAccount, libraryType: event.target.value as MyAccount['libraryType'] }); - }; - const handleSubmit = useCallback( (e?: React.FormEvent) => { if (e) e.preventDefault(); @@ -172,222 +62,7 @@ function Search() { setQuery(decodedQuery); fetchData(decodedQuery); // eslint-disable-next-line react-hooks/exhaustive-deps - }, [router.query, myAccount]); - - useEffect(() => { - setSearchResults((prev) => - prev.map((r) => ({ - ...r, - available: masterAvailability[r.hash], - })) - ); - }, [masterAvailability]); - - useEffect(() => { - const { filter } = router.query; - if (!filter) { - setFilteredResults(searchResults); - } else { - const decodedFilter = decodeURIComponent(filter as string); - setFilteredResults( - searchResults.filter((r) => r.mediaId.toLocaleLowerCase() === decodedFilter) - ); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [router.query, searchResults]); - - useEffect(() => { - return () => { - if (cancelTokenSource) cancelTokenSource.cancel(); - }; - }, [cancelTokenSource]); - - const instantCheckInRd = async (hashes: string[]): Promise => { - const rdAvailability = {} as HashAvailability; - - const setInstantFromRd = (resp: RdInstantAvailabilityResponse) => { - for (const masterHash in resp) { - if ('rd' in resp[masterHash] === false) continue; - if (masterAvailability[masterHash] === 'no_videos') continue; - const variants = resp[masterHash]['rd']; - if (!variants.length) rdAvailability[masterHash] = 'no_videos'; - for (const variant of variants) { - for (const fileId in variant) { - const file = variant[fileId]; - if (isVideo({ path: file.filename })) { - rdAvailability[masterHash] = - masterAvailability[masterHash] === 'ad:available' || - masterAvailability[masterHash] === 'all:available' - ? 'all:available' - : 'rd:available'; - - break; - } - } - } - } - }; - - try { - for (const hashGroup of groupBy(100, hashes)) { - if (rdKey) await rdInstantCheck(rdKey, hashGroup).then(setInstantFromRd); - } - toast( - `Found ${ - Object.values(rdAvailability).filter((a) => a.includes(':available')).length - } available in RD`, - { icon: '๐Ÿ”' } - ); - setMasterAvailability({ ...masterAvailability, ...rdAvailability }); - } catch (error) { - toast.error( - 'There was an error checking availability in Real-Debrid. Please try again.' - ); - throw error; - } - }; - - const instantCheckInAd = async (hashes: string[]): Promise => { - const adAvailability = {} as HashAvailability; - - const setInstantFromAd = (resp: AdInstantAvailabilityResponse) => { - for (const magnetData of resp.data.magnets) { - const masterHash = magnetData.hash; - if (masterAvailability[masterHash] === 'no_videos') continue; - if (magnetData.instant) { - adAvailability[masterHash] = magnetData.files?.reduce( - (acc: boolean, curr: MagnetFile) => { - if (isVideo({ path: curr.n })) { - return true; - } - return acc; - }, - false - ) - ? masterAvailability[masterHash] === 'rd:available' || - masterAvailability[masterHash] === 'all:available' - ? 'all:available' - : 'ad:available' - : 'no_videos'; - } - } - }; - - try { - for (const hashGroup of groupBy(30, hashes)) { - if (adKey) await adInstantCheck(adKey, hashGroup).then(setInstantFromAd); - } - toast( - `Found ${ - Object.values(adAvailability).filter((a) => a.includes(':available')).length - } available in AD`, - { icon: '๐Ÿ”' } - ); - setMasterAvailability({ ...masterAvailability, ...adAvailability }); - } catch (error) { - toast.error('There was an error checking availability in AllDebrid. Please try again.'); - throw error; - } - }; - - // find the best download option - useEffect(() => { - const bestHash = getBestDownloadOption(searchResults, masterAvailability); - if (!bestHash) return; - // const bestResultIdx = searchResults.findIndex((r) => r.hash === bestHash); - // const bestResult = searchResults.splice(bestResultIdx, 1)[0]; - // setSearchResults([bestResult, ...searchResults]); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [masterAvailability, searchResults]); - - const handleAddAsMagnetInRd = async ( - hash: string, - instantDownload: boolean = false, - disableToast: boolean = false - ) => { - try { - if (!rdKey) throw new Error('no_rd_key'); - const id = await addHashAsMagnet(rdKey, hash); - if (!disableToast) toast.success('Successfully added as magnet!'); - rdCacheAdder.single(`rd:${id}`, hash, instantDownload ? 'downloaded' : 'downloading'); - handleSelectFiles(`rd:${id}`, true); // add rd: to account for substr(3) in handleSelectFiles - } catch (error) { - if (!disableToast) - toast.error('There was an error adding as magnet. Please try again.'); - throw error; - } - }; - - const handleAddAsMagnetInAd = async ( - hash: string, - instantDownload: boolean = false, - disableToast: boolean = false - ) => { - try { - if (!adKey) throw new Error('no_ad_key'); - const resp = await uploadMagnet(adKey, [hash]); - if (resp.data.magnets.length === 0 || resp.data.magnets[0].error) - throw new Error('no_magnets'); - if (!disableToast) toast.success('Successfully added as magnet!'); - adCacheAdder.single( - `ad:${resp.data.magnets[0].id}`, - hash, - instantDownload ? 'downloaded' : 'downloading' - ); - } catch (error) { - if (!disableToast) - toast.error('There was an error adding as magnet. Please try again.'); - throw error; - } - }; - - const isAvailableInRd = (result: SearchResult) => - result.available === 'rd:available' || result.available === 'all:available'; - const isAvailableInAd = (result: SearchResult) => - result.available === 'ad:available' || result.available === 'all:available'; - const hasNoVideos = (result: SearchResult) => result.available === 'no_videos'; - - const handleDeleteTorrent = async (id: string, disableToast: boolean = false) => { - try { - if (!rdKey && !adKey) throw new Error('no_keys'); - if (rdKey && id.startsWith('rd:')) await deleteTorrent(rdKey, id.substring(3)); - if (adKey && id.startsWith('ad:')) await deleteMagnet(adKey, id.substring(3)); - if (!disableToast) toast.success(`Download canceled (${id})`); - if (id.startsWith('rd:')) removeFromRdCache(id); - if (id.startsWith('ad:')) removeFromAdCache(id); - } catch (error) { - if (!disableToast) toast.error(`Error deleting torrent (${id})`); - throw error; - } - }; - - const handleSelectFiles = async (id: string, disableToast: boolean = false) => { - try { - if (!rdKey) throw new Error('no_rd_key'); - const response = await getTorrentInfo(rdKey, id.substring(3)); - if (response.filename === 'Magnet') return; // no files yet - - const selectedFiles = getSelectableFiles(response.files.filter(isVideo)).map( - (file) => file.id - ); - if (selectedFiles.length === 0) { - handleDeleteTorrent(id, true); - throw new Error('no_files_for_selection'); - } - - await selectFiles(rdKey, id.substring(3), selectedFiles); - } catch (error) { - if ((error as Error).message === 'no_files_for_selection') { - if (!disableToast) - toast.error(`No files for selection, deleting (${id})`, { - duration: 5000, - }); - } else { - if (!disableToast) toast.error(`Error selecting files (${id})`); - } - throw error; - } - }; + }, [router.query]); return (
@@ -410,19 +85,10 @@ function Search() { className="appearance-none bg-transparent border-none w-full text-gray-700 mr-3 py-1 px-2 leading-tight focus:outline-none" type="text" id="query" - placeholder="if movie, add year e.g. greatest showman 2017; if tv series, add s01 e.g. game of thrones s01" + placeholder="type a movie or show name" value={typedQuery} onChange={(e) => setTypedQuery(e.target.value)} /> - - { - const isChecked = event.target.checked; - setRdAutoInstantCheck(isChecked); - }} - />{' '} - - - {/* { - const isChecked = event.target.checked; - setAdAutoInstantCheck(isChecked); - }} - />{' '} - */} - - Reset - - {Object.keys(searchFilters) - .sort( - (a, b) => - searchFilters[b].biggestFileSize - - searchFilters[a].biggestFileSize - ) - .map((mediaId) => ( - - ))} -
- )}

Search Results for "{query}"

-
-
- - - - - - - - - {filteredResults.map((r: SearchResult) => ( - - - - - - ))} - -
TitleSize
- {r.mediaId} -
- {r.title} -
- {r.fileSize} GB - - {rd.isDownloading(r.hash) && rdCache![r.hash].id && ( - - )} - {rdKey && rd.notInLibrary(r.hash) && ( - - )} - {ad.isDownloading(r.hash) && adCache![r.hash].id && ( - - )} - {adKey && ad.notInLibrary(r.hash) && ( - - )} -
+ + ๐Ÿ“บ + {' '} + Season {season} + + ))} + + )} +
+ + ))} )} diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index 5eef9a7..6e485b9 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -1,7 +1,7 @@ import { PrismaClient } from '@prisma/client'; export class PlanetScaleCache { - private prisma: PrismaClient; + public prisma: PrismaClient; constructor() { this.prisma = new PrismaClient(); From 5b4c6e9efc518c0d679824eb7314cd1381dcab5f Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Thu, 31 Aug 2023 22:48:36 +0200 Subject: [PATCH 076/272] update tor --- renew-tor.sh | 11 +++-------- tor.Dockerfile | 10 +++++----- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/renew-tor.sh b/renew-tor.sh index 2a2fbdf..2d29a0c 100644 --- a/renew-tor.sh +++ b/renew-tor.sh @@ -1,25 +1,20 @@ -#!/bin/bash +#!/bin/sh -# Define common variables SOCKS_PROXY="socks5h://127.0.0.1:9050" ONION_URL="http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion/search?q=Kraftfahrzeughaftpflichtversicherung" GREP_PATTERN="Histats" TOR_COMMAND_PORT="127.0.0.1 9051" SLEEP_INTERVAL=30 -# Start an infinite loop while true; do - # Fetch the page and store the result + sleep $SLEEP_INTERVAL + PAGE_CONTENT=$(curl -x $SOCKS_PROXY -s $ONION_URL) - # If the curl command was successful, search the page content for the pattern if [[ $? -eq 0 ]]; then (echo "$PAGE_CONTENT" | grep -qm1 $GREP_PATTERN) || (printf 'AUTHENTICATE ""\r\nSIGNAL NEWNYM\r\n' | nc $TOR_COMMAND_PORT) echo "IP address renewed" else echo "Curl command failed. Retrying..." fi - - # Wait for the specified interval before the next iteration - sleep $SLEEP_INTERVAL done diff --git a/tor.Dockerfile b/tor.Dockerfile index d7ba462..961706c 100644 --- a/tor.Dockerfile +++ b/tor.Dockerfile @@ -1,17 +1,17 @@ FROM alpine:latest -COPY renew-tor.sh /usr/local/bin/check-and-renew.sh - RUN apk --no-cache --update --upgrade add tor curl grep netcat-openbsd \ && mv /etc/tor/torrc.sample /etc/tor/torrc \ && sed -i \ -e 's/#SOCKSPort 192.168.0.1:9100/SOCKSPort 0.0.0.0:9050/g' \ -e 's/#ControlPort 9051/ControlPort 9051/g' \ - /etc/tor/torrc \ - && chmod +x /usr/local/bin/check-and-renew.sh + /etc/tor/torrc + +COPY renew-tor.sh /etc/tor/ +RUN chmod +x /etc/tor/renew-tor.sh USER tor -ENTRYPOINT tor & /usr/local/bin/check-and-renew.sh +ENTRYPOINT tor & /etc/tor/renew-tor.sh EXPOSE 9050/tcp From d1d9fddf828b1e94785a16f3e341858ef8bb7530 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Thu, 31 Aug 2023 23:35:49 +0200 Subject: [PATCH 077/272] unbreakable tor --- renew-tor.sh | 17 +++++++++++++++-- tor.Dockerfile | 7 ++++--- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/renew-tor.sh b/renew-tor.sh index 2d29a0c..32f92b6 100644 --- a/renew-tor.sh +++ b/renew-tor.sh @@ -5,6 +5,9 @@ ONION_URL="http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion GREP_PATTERN="Histats" TOR_COMMAND_PORT="127.0.0.1 9051" SLEEP_INTERVAL=30 +CHECK_IP_URL="https://check.torproject.org/api/ip" +RENEW_DELAY=5 +STATUS_FILE="/tmp/status" while true; do sleep $SLEEP_INTERVAL @@ -12,9 +15,19 @@ while true; do PAGE_CONTENT=$(curl -x $SOCKS_PROXY -s $ONION_URL) if [[ $? -eq 0 ]]; then - (echo "$PAGE_CONTENT" | grep -qm1 $GREP_PATTERN) || (printf 'AUTHENTICATE ""\r\nSIGNAL NEWNYM\r\n' | nc $TOR_COMMAND_PORT) - echo "IP address renewed" + echo "$PAGE_CONTENT" | grep -qm1 $GREP_PATTERN + if [[ $? -ne 0 ]]; then + echo "BLOCKED" > $STATUS_FILE + BEFORE_IP=$(curl -s --socks5 $SOCKS_PROXY $CHECK_IP_URL | jq -r '.IP') + printf 'AUTHENTICATE ""\r\nSIGNAL NEWNYM\r\n' | nc $TOR_COMMAND_PORT + sleep $RENEW_DELAY + AFTER_IP=$(curl -s --socks5 $SOCKS_PROXY $CHECK_IP_URL | jq -r '.IP') + echo "IP address renewed from $BEFORE_IP to $AFTER_IP" + else + echo "OK" > $STATUS_FILE + fi else echo "Curl command failed. Retrying..." + echo "FAIL" > $STATUS_FILE fi done diff --git a/tor.Dockerfile b/tor.Dockerfile index 961706c..b66c3dc 100644 --- a/tor.Dockerfile +++ b/tor.Dockerfile @@ -1,6 +1,6 @@ FROM alpine:latest -RUN apk --no-cache --update --upgrade add tor curl grep netcat-openbsd \ +RUN apk --no-cache --update --upgrade add tor curl grep netcat-openbsd jq \ && mv /etc/tor/torrc.sample /etc/tor/torrc \ && sed -i \ -e 's/#SOCKSPort 192.168.0.1:9100/SOCKSPort 0.0.0.0:9050/g' \ @@ -11,9 +11,10 @@ COPY renew-tor.sh /etc/tor/ RUN chmod +x /etc/tor/renew-tor.sh USER tor +RUN echo "OK" > /tmp/status ENTRYPOINT tor & /etc/tor/renew-tor.sh EXPOSE 9050/tcp -HEALTHCHECK --interval=60s --timeout=15s --start-period=20s \ - CMD curl -s --socks5 127.0.0.1:9050 'https://check.torproject.org/api/ip' | grep -qm1 -E '"IsTor"\s*:\s*true' +HEALTHCHECK --interval=30s --timeout=1s --start-period=5s \ + CMD test "$(cat /tmp/status)" = "OK" From 7818ef55c897384e474a30b9c21a60244f0679eb Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Fri, 1 Sep 2023 00:03:47 +0200 Subject: [PATCH 078/272] proper impl of tor --- renew-tor.sh | 5 +---- tor.Dockerfile | 7 +++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/renew-tor.sh b/renew-tor.sh index 32f92b6..0855bd2 100644 --- a/renew-tor.sh +++ b/renew-tor.sh @@ -7,7 +7,6 @@ TOR_COMMAND_PORT="127.0.0.1 9051" SLEEP_INTERVAL=30 CHECK_IP_URL="https://check.torproject.org/api/ip" RENEW_DELAY=5 -STATUS_FILE="/tmp/status" while true; do sleep $SLEEP_INTERVAL @@ -17,17 +16,15 @@ while true; do if [[ $? -eq 0 ]]; then echo "$PAGE_CONTENT" | grep -qm1 $GREP_PATTERN if [[ $? -ne 0 ]]; then - echo "BLOCKED" > $STATUS_FILE BEFORE_IP=$(curl -s --socks5 $SOCKS_PROXY $CHECK_IP_URL | jq -r '.IP') printf 'AUTHENTICATE ""\r\nSIGNAL NEWNYM\r\n' | nc $TOR_COMMAND_PORT sleep $RENEW_DELAY AFTER_IP=$(curl -s --socks5 $SOCKS_PROXY $CHECK_IP_URL | jq -r '.IP') echo "IP address renewed from $BEFORE_IP to $AFTER_IP" else - echo "OK" > $STATUS_FILE + echo "Pattern found. No need to renew IP address." fi else echo "Curl command failed. Retrying..." - echo "FAIL" > $STATUS_FILE fi done diff --git a/tor.Dockerfile b/tor.Dockerfile index b66c3dc..2da8ea3 100644 --- a/tor.Dockerfile +++ b/tor.Dockerfile @@ -11,10 +11,9 @@ COPY renew-tor.sh /etc/tor/ RUN chmod +x /etc/tor/renew-tor.sh USER tor -RUN echo "OK" > /tmp/status -ENTRYPOINT tor & /etc/tor/renew-tor.sh +ENTRYPOINT /etc/tor/renew-tor.sh & tor EXPOSE 9050/tcp -HEALTHCHECK --interval=30s --timeout=1s --start-period=5s \ - CMD test "$(cat /tmp/status)" = "OK" +HEALTHCHECK --interval=60s --timeout=15s --start-period=20s \ + CMD curl -s --socks5 127.0.0.1:9050 'https://check.torproject.org/api/ip' | grep -qm1 -E '"IsTor"\s*:\s*true' From f1611a445c79c8f5b6cf95f8c8d465de535c15b5 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Fri, 1 Sep 2023 12:40:31 +0200 Subject: [PATCH 079/272] 2.7.5 (#56) * scrape jobs * ignore if too common * efficiency * fix logic * bump --- package.json | 2 +- src/pages/api/requested.ts | 200 +++----------------------------- src/pages/api/scrape.ts | 209 +--------------------------------- src/services/btdigg-v2.ts | 2 +- src/services/planetscale.ts | 12 ++ src/services/scrapeJobs.ts | 221 ++++++++++++++++++++++++++++++++++++ 6 files changed, 256 insertions(+), 390 deletions(-) create mode 100644 src/services/scrapeJobs.ts diff --git a/package.json b/package.json index 0e5c027..2d382bc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.7.4", + "version": "2.7.5", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/api/requested.ts b/src/pages/api/requested.ts index e7cf282..884e531 100644 --- a/src/pages/api/requested.ts +++ b/src/pages/api/requested.ts @@ -1,203 +1,39 @@ -import { SearchResult } from '@/services/btdigg-v2'; -import { - createAxiosInstance, - scrapeResults, - flattenAndRemoveDuplicates, - groupByParsedTitle, -} from '@/services/btdigg-v2'; import { PlanetScaleCache } from '@/services/planetscale'; -import axios from 'axios'; +import { ScrapeResponse, generateScrapeJobs } from '@/services/scrapeJobs'; import { NextApiRequest, NextApiResponse } from 'next'; -import { SocksProxyAgent } from 'socks-proxy-agent'; - -const tmdbKey = process.env.TMDB_KEY; -const mdblistKey = process.env.MDBLIST_KEY; -const getTmdbInfo = (imdbId: string) => - `https://api.themoviedb.org/3/find/${imdbId}?api_key=${tmdbKey}&external_source=imdb_id`; -const getMdbInfo = (imdbId: string) => `https://mdblist.com/api/?apikey=${mdblistKey}&i=${imdbId}`; -function padWithZero(num: number) { - if (num < 10) { - return '0' + num; - } else { - return num.toString(); - } -} -const cleanSearchQuery = (search: string): string => { - return search - .split(/[\s\=:\?\.\-\(\)\/]/) // split the search query into an array of elements - .filter((e) => e !== '') // filter out any empty elements - .map((e) => e.toLowerCase()) // convert each element to lowercase - .join(' ') // join the remaining elements with a single space - .replace(/[รกร รครข]/g, 'a') // replace certain characters with their equivalent - .replace(/[รฉรจรซรช]/g, 'e') - .replace(/[รญรฌรฏรฎ]/g, 'i') - .replace(/[รณรฒรถรด]/g, 'o') - .replace(/[รบรนรผรป]/g, 'u') - .replace(/\s+/g, ' ') // replace multiple spaces with a single space - .trim(); -}; const db = new PlanetScaleCache(); -export type ScrapeResponse = { - status: string; - errorMessage?: string; -}; -1; export default async function handler( req: NextApiRequest, res: NextApiResponse ) { - const { scrapePassword } = req.query; + const { scrapePassword, processing } = req.query; if (process.env.SEARCH_SPEED_PASSWORD && scrapePassword !== process.env.SEARCH_SPEED_PASSWORD) { res.status(403).json({ status: 'error', errorMessage: 'You are not authorized to use this feature' }); return; } - const imdbId = await db.getLatestRequest(); - if (!imdbId) { - res.status(200).json({ status: 'done' }); - return; - } - - const isProcessing = await db.keyExists(`processing:${imdbId}`); - if (isProcessing) { - res.status(200).json({ status: 'processing' }); - return; - } - - // imdbId to search for - const tmdbResponse = await axios.get(getTmdbInfo(imdbId)); - - const movieTitles: string[] = []; - const tvTitles: string[] = []; - - let tmdbItem: any = {}; - let itemType: 'movie' | 'tv' = 'movie'; - - if (tmdbResponse.data.movie_results.length > 0) { - itemType = 'movie'; - tmdbItem = tmdbResponse.data.movie_results[0]; - movieTitles.push(`"${cleanSearchQuery(tmdbItem.title)}"`); - movieTitles.push(`"${cleanSearchQuery(tmdbItem.title)}" ${tmdbItem.release_date.substring(0, 4)}`); - - if (tmdbItem.original_title && tmdbItem.original_title !== tmdbItem.title) { - movieTitles.push(`"${tmdbItem.original_title}"`); - movieTitles.push(`"${tmdbItem.original_title}" ${tmdbItem.release_date.substring(0, 4)}`); - const mdbItem = await axios.get(getMdbInfo(imdbId)); - for (let rating of mdbItem.data.ratings) { - if (rating.source === 'tomatoes') { - if (!rating.url) continue; - const cleanedTitle = ( - itemType === 'movie' ? rating.url?.split('/m/') : rating.url?.split('/tv/') - )[1].replaceAll('_', ' '); - movieTitles.push(`"${cleanedTitle}"`); - movieTitles.push(`"${cleanedTitle}" ${tmdbItem.release_date.substring(0, 4)}`); - } - } + let imdbId: string | null = ''; + if (processing === 'true') { + imdbId = await db.getOldestProcessing(); + if (!imdbId) { + res.status(200).json({ status: 'done' }); + return; } - - await db.saveScrapedResults(`processing:${imdbId}`, []); - - try { - const results = []; - for (const movieTitle of movieTitles) { - for (const lType of ['720p', '1080p', '2160p', '']) { - const mustHave = []; - let numbers = movieTitle.match(/\b\d{1,4}\b/g); - if (numbers) mustHave.push(...numbers); - results.push( - await scrapeResults( - createAxiosInstance( - new SocksProxyAgent(process.env.PROXY!, { timeout: 10000 }) - ), - `${movieTitle} ${lType}`.trim(), - movieTitle, - mustHave, - lType || '1080p', - ) - ); - } - } - let processedResults = flattenAndRemoveDuplicates(results); - if (processedResults.length) processedResults = groupByParsedTitle(processedResults); - - await db.saveScrapedResults(`movie:${imdbId}`, processedResults); - - res.status(200).json({ status: `scraped: ${processedResults.length} items` }); - } catch (error: any) { - res.status(500).json({ - status: 'error', - errorMessage: `An error occurred while scraping Btdigg (${error.message})`, - }); - } - } - - if (tmdbResponse.data.tv_results.length > 0) { - itemType = 'tv'; - tmdbItem = tmdbResponse.data.tv_results[0]; - tvTitles.push(`"${cleanSearchQuery(tmdbItem.name)}"`); - tvTitles.push(`"${cleanSearchQuery(tmdbItem.name)}" ${tmdbItem.first_air_date.substring(0, 4)}`); - - if (tmdbItem.original_name && tmdbItem.original_name !== tmdbItem.name) { - tvTitles.push(`"${tmdbItem.original_name}"`); - tvTitles.push(`"${tmdbItem.original_name}" ${tmdbItem.first_air_date.substring(0, 4)}`); + } else { + imdbId = await db.getLatestRequest(); + if (!imdbId) { + res.status(200).json({ status: 'done' }); + return; } - await db.saveScrapedResults(`processing:${imdbId}`, []); - - let totalResultsCount = 0; - const showResponse = await axios.get(getMdbInfo(imdbId)); - for (const season of showResponse.data.seasons - ? showResponse.data.seasons - : [{ season_number: 1, episode_count: 0 }]) { - if (season.season_number === 0) continue; - let seasonQueries = tvTitles.map((q) => `${q} "s${padWithZero(season.season_number)}"`); - try { - const results = []; - for (const finalQuery of seasonQueries) { - for (const lType of ['720p', '1080p', '2160p', '']) { - const mustHave = []; - let numbers = finalQuery.match(/\bs?\d{1,4}\b/g); - if (numbers) mustHave.push(...numbers); - results.push( - await scrapeResults( - createAxiosInstance( - new SocksProxyAgent(process.env.PROXY!, { timeout: 10000 }) - ), - `${finalQuery} ${lType}`.trim(), - finalQuery, - mustHave, - lType || '1080p', - ) - ); - } - } - let processedResults = flattenAndRemoveDuplicates(results); - if (processedResults.length) processedResults = groupByParsedTitle(processedResults); - - await db.saveScrapedResults(`tv:${imdbId}:${season.season_number}`, processedResults); - - totalResultsCount += processedResults.length; - } catch (error: any) { - res.status(500).json({ - status: 'error', - errorMessage: `An error occurred while scraping Btdigg (${error.message})`, - }); - } - // if (season.episode_count === 0) continue; - // for (let i = 1; i <= season.episode_count; i++) { - // seasonQueries = seasonQueries.concat( - // tvTitles.map( - // (q) => - // `${q} "s${padWithZero(season.season_number)}e${padWithZero(i)}"` - // ) - // ); - // } + const isProcessing = await db.keyExists(`processing:${imdbId}`); + if (isProcessing) { + res.status(200).json({ status: 'processing' }); + return; } - - res.status(200).json({ status: `scraped: ${totalResultsCount} items` }); } - await db.markAsDone(imdbId); + await generateScrapeJobs(res, imdbId, false); } diff --git a/src/pages/api/scrape.ts b/src/pages/api/scrape.ts index 3cb6ab6..13b68b8 100644 --- a/src/pages/api/scrape.ts +++ b/src/pages/api/scrape.ts @@ -1,49 +1,7 @@ -import { SearchResult } from '@/services/btdigg-v2'; -import { - createAxiosInstance, - scrapeResults, - flattenAndRemoveDuplicates, - groupByParsedTitle, -} from '@/services/btdigg-v2'; -import { PlanetScaleCache } from '@/services/planetscale'; -import axios from 'axios'; -import { NextApiRequest, NextApiResponse } from 'next'; -import { SocksProxyAgent } from 'socks-proxy-agent'; - -const tmdbKey = process.env.TMDB_KEY; -const mdblistKey = process.env.MDBLIST_KEY; -const getTmdbInfo = (imdbId: string) => - `https://api.themoviedb.org/3/find/${imdbId}?api_key=${tmdbKey}&external_source=imdb_id`; -const getMdbInfo = (imdbId: string) => `https://mdblist.com/api/?apikey=${mdblistKey}&i=${imdbId}`; -function padWithZero(num: number) { - if (num < 10) { - return '0' + num; - } else { - return num.toString(); - } -} -const cleanSearchQuery = (search: string): string => { - return search - .split(/[\s\=:\?\.\-\(\)\/]/) // split the search query into an array of elements - .filter((e) => e !== '') // filter out any empty elements - .map((e) => e.toLowerCase()) // convert each element to lowercase - .join(' ') // join the remaining elements with a single space - .replace(/[รกร รครข]/g, 'a') // replace certain characters with their equivalent - .replace(/[รฉรจรซรช]/g, 'e') - .replace(/[รญรฌรฏรฎ]/g, 'i') - .replace(/[รณรฒรถรด]/g, 'o') - .replace(/[รบรนรผรป]/g, 'u') - .replace(/\s+/g, ' ') // replace multiple spaces with a single space - .trim(); -}; -const db = new PlanetScaleCache(); +import { ScrapeResponse, generateScrapeJobs } from '@/services/scrapeJobs'; +import { NextApiRequest, NextApiResponse } from 'next'; -export type ScrapeResponse = { - status: string; - errorMessage?: string; -}; -1; export default async function handler( req: NextApiRequest, res: NextApiResponse @@ -59,166 +17,5 @@ export default async function handler( return; } - // imdbId to search for - const tmdbResponse = await axios.get(getTmdbInfo(imdbId.toString().trim())); - - const movieTitles: string[] = []; - const tvTitles: string[] = []; - - let tmdbItem: any = {}; - let itemType: 'movie' | 'tv' = 'movie'; - - if (tmdbResponse.data.movie_results.length > 0) { - if (!override || override !== 'true') { - const isProcessing = await db.keyExists(`processing:${imdbId}`); - if (isProcessing) { - res.status(200).json({ status: 'processing' }); - return; - } - const keyExists = await db.keyExists(`movie:${imdbId}`); - if (keyExists) { - res.status(200).json({ status: 'skipped' }); - return; - } - } - - itemType = 'movie'; - tmdbItem = tmdbResponse.data.movie_results[0]; - movieTitles.push(`"${cleanSearchQuery(tmdbItem.title)}"`); - movieTitles.push(`"${cleanSearchQuery(tmdbItem.title)}" ${tmdbItem.release_date.substring(0, 4)}`); - - if (tmdbItem.original_title && tmdbItem.original_title !== tmdbItem.title) { - movieTitles.push(`"${tmdbItem.original_title}"`); - movieTitles.push(`"${tmdbItem.original_title}" ${tmdbItem.release_date.substring(0, 4)}`); - const mdbItem = await axios.get(getMdbInfo(imdbId.toString().trim())); - for (let rating of mdbItem.data.ratings) { - if (rating.source === 'tomatoes') { - if (!rating.url) continue; - const cleanedTitle = ( - itemType === 'movie' ? rating.url.split('/m/') : rating.url.split('/tv/') - )[1].replaceAll('_', ' '); - movieTitles.push(`"${cleanedTitle}"`); - movieTitles.push(`"${cleanedTitle}" ${tmdbItem.release_date.substring(0, 4)}`); - } - } - } - - await db.saveScrapedResults(`processing:${imdbId}`, []); - - try { - const results: SearchResult[][] = []; - for (const movieTitle of movieTitles) { - for (const lType of ['720p', '1080p', '2160p', '']) { - console.log('Scraping >', `${movieTitle} ${lType}`.trim()); - const mustHave = []; - let numbers = movieTitle.match(/\b\d{1,4}\b/g); - if (numbers) mustHave.push(...numbers); - results.push( - await scrapeResults( - createAxiosInstance( - new SocksProxyAgent(process.env.PROXY!, { timeout: 10000 }) - ), - `${movieTitle} ${lType}`.trim(), - movieTitle, - mustHave, - lType || '1080p', - ) - ); - } - } - let processedResults = flattenAndRemoveDuplicates(results); - if (processedResults.length) processedResults = groupByParsedTitle(processedResults); - - await db.saveScrapedResults(`movie:${imdbId}`, processedResults); - - res.status(200).json({ status: `scraped: ${processedResults.length} items` }); - } catch (error: any) { - res.status(500).json({ - status: 'error', - errorMessage: `An error occurred while scraping Btdigg (${error.message})`, - }); - } - } - - if (tmdbResponse.data.tv_results.length > 0) { - if (!override || override !== 'true') { - const isProcessing = await db.keyExists(`processing:${imdbId}`); - if (isProcessing) { - res.status(200).json({ status: 'processing' }); - return; - } - const keyExists = await db.keyExists(`tv:${imdbId}:1`); - if (keyExists) { - res.status(200).json({ status: 'skipped' }); - return; - } - } - - itemType = 'tv'; - tmdbItem = tmdbResponse.data.tv_results[0]; - tvTitles.push(`"${cleanSearchQuery(tmdbItem.name)}"`); - tvTitles.push(`"${cleanSearchQuery(tmdbItem.name)}" ${tmdbItem.first_air_date.substring(0, 4)}`); - - if (tmdbItem.original_name && tmdbItem.original_name !== tmdbItem.name) { - tvTitles.push(`"${tmdbItem.original_name}"`); - tvTitles.push(`"${tmdbItem.original_name}" ${tmdbItem.first_air_date.substring(0, 4)}`); - } - - await db.saveScrapedResults(`processing:${imdbId}`, []); - - let totalResultsCount = 0; - const showResponse = await axios.get(getMdbInfo(imdbId.toString().trim())); - for (const season of showResponse.data.seasons - ? showResponse.data.seasons - : [{ season_number: 1, episode_count: 0 }]) { - if (season.season_number === 0) continue; - let seasonQueries = tvTitles.map((q) => `${q} "s${padWithZero(season.season_number)}"`); - try { - const results: SearchResult[][] = []; - for (const finalQuery of seasonQueries) { - for (const lType of ['720p', '1080p', '2160p', '']) { - console.log('Scraping >', `${finalQuery} ${lType}`.trim()); - const mustHave = []; - let numbers = finalQuery.match(/\bs?\d{1,4}\b/g); - if (numbers) mustHave.push(...numbers); - results.push( - await scrapeResults( - createAxiosInstance( - new SocksProxyAgent(process.env.PROXY!, { timeout: 10000 }) - ), - `${finalQuery} ${lType}`.trim(), - finalQuery.replace(/\bs\d\d\b/g, ''), - mustHave, - lType || '1080p', - ) - ); - } - } - let processedResults = flattenAndRemoveDuplicates(results); - if (processedResults.length) processedResults = groupByParsedTitle(processedResults); - - await db.saveScrapedResults(`tv:${imdbId}:${season.season_number}`, processedResults); - - totalResultsCount += processedResults.length; - } catch (error: any) { - res.status(500).json({ - status: 'error', - errorMessage: `An error occurred while scraping Btdigg (${error.message})`, - }); - } - // if (season.episode_count === 0) continue; - // for (let i = 1; i <= season.episode_count; i++) { - // seasonQueries = seasonQueries.concat( - // tvTitles.map( - // (q) => - // `${q} "s${padWithZero(season.season_number)}e${padWithZero(i)}"` - // ) - // ); - // } - } - - res.status(200).json({ status: `scraped: ${totalResultsCount} items` }); - } - - await db.markAsDone(imdbId.toString().trim()); + await generateScrapeJobs(res, imdbId.toString().trim(), override === 'true'); } diff --git a/src/services/btdigg-v2.ts b/src/services/btdigg-v2.ts index 8ae8751..d9e7be9 100644 --- a/src/services/btdigg-v2.ts +++ b/src/services/btdigg-v2.ts @@ -162,7 +162,7 @@ export async function scrapeResults( console.log(`scraped title`, title); const queryTerms = targetTitle.replaceAll('"', ' ').split(' ').filter((e) => e !== ''); let requiredTerms = - queryTerms.length > 3 ? queryTerms.length : queryTerms.length - 1; + queryTerms.length <= 3 ? queryTerms.length : queryTerms.length - 1; const containedTerms = queryTerms.filter((term) => new RegExp(`${term}`).test(title.toLowerCase()) ).length; diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index 6e485b9..0e3227c 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -86,6 +86,18 @@ export class PlanetScaleCache { return null; } + public async getOldestProcessing(): Promise { + const requestedItem = await this.prisma.scraped.findFirst({ + where: { key: { startsWith: "processing:" } }, + orderBy: { updatedAt: 'asc' }, + select: { key: true }, + }); + if (requestedItem !== null) { + return requestedItem.key.split(':')[1]; + } + return null; + } + public async markAsDone(imdbId: string): Promise { const keys = [`requested:${imdbId}`, `processing:${imdbId}`]; diff --git a/src/services/scrapeJobs.ts b/src/services/scrapeJobs.ts new file mode 100644 index 0000000..2cb25df --- /dev/null +++ b/src/services/scrapeJobs.ts @@ -0,0 +1,221 @@ +import { SearchResult } from '@/services/btdigg-v2'; +import { + createAxiosInstance, + scrapeResults, + flattenAndRemoveDuplicates, + groupByParsedTitle, +} from '@/services/btdigg-v2'; +import axios from 'axios'; +import { SocksProxyAgent } from 'socks-proxy-agent'; +import { PlanetScaleCache } from './planetscale'; +import { NextApiResponse } from 'next'; + +const tmdbKey = process.env.TMDB_KEY; +const mdblistKey = process.env.MDBLIST_KEY; +const getTmdbInfo = (imdbId: string) => + `https://api.themoviedb.org/3/find/${imdbId}?api_key=${tmdbKey}&external_source=imdb_id`; +const getMdbInfo = (imdbId: string) => `https://mdblist.com/api/?apikey=${mdblistKey}&i=${imdbId}`; +function padWithZero(num: number) { + if (num < 10) { + return '0' + num; + } else { + return num.toString(); + } +} +const cleanSearchQuery = (search: string): string => { + return search + .split(/[\s\=:\?\.\-\(\)\/]/) // split the search query into an array of elements + .filter((e) => e !== '') // filter out any empty elements + .map((e) => e.toLowerCase()) // convert each element to lowercase + .join(' ') // join the remaining elements with a single space + .replace(/[รกร รครข]/g, 'a') // replace certain characters with their equivalent + .replace(/[รฉรจรซรช]/g, 'e') + .replace(/[รญรฌรฏรฎ]/g, 'i') + .replace(/[รณรฒรถรด]/g, 'o') + .replace(/[รบรนรผรป]/g, 'u') + .replace(/\s+/g, ' ') // replace multiple spaces with a single space + .trim(); +}; + +const db = new PlanetScaleCache(); + +export type ScrapeResponse = { + status: string; + errorMessage?: string; +}; + +export async function generateScrapeJobs( + res: NextApiResponse, + imdbId: string, + override: boolean = false +) { + // imdbId to search for + const tmdbResponse = await axios.get(getTmdbInfo(imdbId)); + + const movieTitles: string[] = []; + const tvTitles: string[] = []; + + let tmdbItem: any = {}; + let itemType: 'movie' | 'tv' = 'movie'; + + if (tmdbResponse.data.movie_results.length > 0) { + if (!override) { + const isProcessing = await db.keyExists(`processing:${imdbId}`); + if (isProcessing) { + res.status(200).json({ status: 'processing' }); + return; + } + const keyExists = await db.keyExists(`movie:${imdbId}`); + if (keyExists) { + res.status(200).json({ status: 'skipped' }); + return; + } + } + + itemType = 'movie'; + tmdbItem = tmdbResponse.data.movie_results[0]; + const cleanTitle = cleanSearchQuery(tmdbItem.title); + const titleLength = cleanTitle.split(' ').length; + if (titleLength > 2) movieTitles.push(`"${cleanTitle}"`); + movieTitles.push(`"${cleanTitle}" ${tmdbItem.release_date.substring(0, 4)}`); + + if (tmdbItem.original_title && tmdbItem.original_title !== tmdbItem.title) { + movieTitles.push(`"${tmdbItem.original_title}" + imdbId`); + movieTitles.push(`"${tmdbItem.original_title}" ${tmdbItem.release_date.substring(0, 4)}`); + const mdbItem = await axios.get(getMdbInfo(imdbId)); + for (let rating of mdbItem.data.ratings) { + if (rating.source === 'tomatoes') { + if (!rating.url) continue; + const cleanedTitle = ( + itemType === 'movie' ? rating.url.split('/m/') : rating.url.split('/tv/') + )[1].replaceAll('_', ' '); + if (cleanedTitle.startsWith(/\d{6,}/)) continue; + movieTitles.push(`"${cleanedTitle}"`); + movieTitles.push(`"${cleanedTitle}" ${tmdbItem.release_date.substring(0, 4)}`); + } + } + } + + await db.saveScrapedResults(`processing:${imdbId}`, []); + + try { + const results: SearchResult[][] = []; + for (const movieTitle of movieTitles) { + for (const lType of ['720p', '1080p', '2160p', '']) { + console.log('Scraping >', `${movieTitle} ${lType}`.trim()); + const mustHave = []; + let numbers = movieTitle.match(/\b\d{1,4}\b/g); + if (numbers) mustHave.push(...numbers); + results.push( + await scrapeResults( + createAxiosInstance( + new SocksProxyAgent(process.env.PROXY!, { timeout: 10000 }) + ), + `${movieTitle} ${lType}`.trim(), + movieTitle, + mustHave, + lType || '1080p', + ) + ); + } + } + let processedResults = flattenAndRemoveDuplicates(results); + if (processedResults.length) processedResults = groupByParsedTitle(processedResults); + + await db.saveScrapedResults(`movie:${imdbId}`, processedResults); + + res.status(200).json({ status: `scraped: ${processedResults.length} items` }); + } catch (error: any) { + res.status(500).json({ + status: 'error', + errorMessage: `An error occurred while scraping Btdigg (${error.message})`, + }); + } + } + + if (tmdbResponse.data.tv_results.length > 0) { + if (!override) { + const isProcessing = await db.keyExists(`processing:${imdbId}`); + if (isProcessing) { + res.status(200).json({ status: 'processing' }); + return; + } + const keyExists = await db.keyExists(`tv:${imdbId}:1`); + if (keyExists) { + res.status(200).json({ status: 'skipped' }); + return; + } + } + + itemType = 'tv'; + tmdbItem = tmdbResponse.data.tv_results[0]; + const cleanTitle = cleanSearchQuery(tmdbItem.name); + const titleLength = cleanTitle.split(' ').length; + if (titleLength > 2) tvTitles.push(`"${cleanTitle}"`); + tvTitles.push(`"${cleanTitle}" ${tmdbItem.first_air_date.substring(0, 4)}`); + + if (tmdbItem.original_name && tmdbItem.original_name !== tmdbItem.name) { + tvTitles.push(`"${tmdbItem.original_name}"`); + tvTitles.push(`"${tmdbItem.original_name}" ${tmdbItem.first_air_date.substring(0, 4)}`); + } + + await db.saveScrapedResults(`processing:${imdbId}`, []); + + let totalResultsCount = 0; + const showResponse = await axios.get(getMdbInfo(imdbId)); + for (const season of showResponse.data.seasons + ? showResponse.data.seasons + : [{ season_number: 1, episode_count: 0 }]) { + if (season.season_number === 0) continue; + let seasonQueries = tvTitles.map((q) => `${q} "s${padWithZero(season.season_number)}"`); + try { + const results: SearchResult[][] = []; + for (const finalQuery of seasonQueries) { + for (const lType of ['720p', '1080p', '2160p', '']) { + console.log('Scraping >', `${finalQuery} ${lType}`.trim()); + const mustHave = []; + let numbers = finalQuery.match(/\bs?\d{1,4}\b/g); + if (numbers) mustHave.push(...numbers); + results.push( + await scrapeResults( + createAxiosInstance( + new SocksProxyAgent(process.env.PROXY!, { timeout: 10000 }) + ), + `${finalQuery} ${lType}`.trim(), + finalQuery.replace(/\bs\d\d\b/g, ''), + mustHave, + lType || '1080p', + ) + ); + } + } + let processedResults = flattenAndRemoveDuplicates(results); + if (processedResults.length) processedResults = groupByParsedTitle(processedResults); + + await db.saveScrapedResults(`tv:${imdbId}:${season.season_number}`, processedResults); + + totalResultsCount += processedResults.length; + } catch (error: any) { + res.status(500).json({ + status: 'error', + errorMessage: `An error occurred while scraping Btdigg (${error.message})`, + }); + } + // if (season.episode_count === 0) continue; + // for (let i = 1; i <= season.episode_count; i++) { + // seasonQueries = seasonQueries.concat( + // tvTitles.map( + // (q) => + // `${q} "s${padWithZero(season.season_number)}e${padWithZero(i)}"` + // ) + // ); + // } + } + + res.status(200).json({ status: `scraped: ${totalResultsCount} items` }); + + imdbId } + + await db.markAsDone(imdbId); +} From a53f5fdaf64f8363f1b36f62fc1843356e2f3083 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Fri, 1 Sep 2023 12:42:20 +0200 Subject: [PATCH 080/272] 2.7.5 (#57) * scrape jobs * ignore if too common * efficiency * fix logic * bump From d29b930ac4decb39c310eead59d8cec724f8f8f7 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sat, 2 Sep 2023 14:11:27 +0200 Subject: [PATCH 081/272] 3.0.0 (#58) * fixes * clean title * fix logic * ui fixes * finish * fix request * efficiency * handle symbols on titles * fix on scrapes * semantics * docker compose files * bump version * new urls * web and tor versions * format * remove dead code --- .env | 2 +- TODO.md | 6 +- package.json | 2 +- src/components/poster.tsx | 86 +++-- src/pages/api/dbsize.ts | 9 +- src/pages/api/keywordsearch.ts | 100 +++-- src/pages/api/moviesearch.ts | 40 +- src/pages/api/requested.ts | 25 +- src/pages/api/scrape.ts | 13 +- src/pages/api/search.ts | 71 ---- src/pages/api/slowsearch.ts | 52 --- src/pages/api/tvsearch.ts | 8 +- src/pages/hashlist.tsx | 4 +- src/pages/library.tsx | 4 +- src/pages/{movies => movie}/[imdbid].tsx | 298 +++++++------- src/pages/search.tsx | 23 +- .../{shows => show}/[imdbid]/[seasonNum].tsx | 303 ++++++++------- src/pages/show/[imdbid]/index.tsx | 15 + src/services/btdigg-v2.ts | 45 ++- src/services/btdigg.ts | 305 --------------- src/services/planetscale.ts | 17 +- src/services/scrapeJobs.ts | 365 +++++++++--------- src/utils/freekeys.ts | 36 +- src/utils/toastOptions.ts | 13 + tor.docker-compose.yml | 20 + docker-compose.yml => web.docker-compose.yml | 4 +- 26 files changed, 794 insertions(+), 1072 deletions(-) delete mode 100644 src/pages/api/search.ts delete mode 100644 src/pages/api/slowsearch.ts rename src/pages/{movies => movie}/[imdbid].tsx (71%) rename src/pages/{shows => show}/[imdbid]/[seasonNum].tsx (71%) create mode 100644 src/pages/show/[imdbid]/index.tsx delete mode 100644 src/services/btdigg.ts create mode 100644 src/utils/toastOptions.ts create mode 100644 tor.docker-compose.yml rename docker-compose.yml => web.docker-compose.yml (89%) diff --git a/.env b/.env index 7f8eed4..843897f 100644 --- a/.env +++ b/.env @@ -1,7 +1,7 @@ REQUEST_TIMEOUT=5000 GH_PAT=github-access-token PROXY=socks5h://tor:9050 -SEARCH_SPEED_PASSWORD=123456 +SCRAPE_API_PASSWORD=123456 TMDB_KEY=abc123 MDBLIST_KEY=abc123 diff --git a/TODO.md b/TODO.md index a98f1ce..5dcc3ec 100644 --- a/TODO.md +++ b/TODO.md @@ -22,6 +22,6 @@ - [] 2.7.0: Rescan library button in all other pages except library - [] 2.7.0: Add Auto-DL checkbox to download the "best" option from search - [] 2.9.0: New page: "Sync mdblist.com list" -- [] 3.0.0: Add similarity search "Did you mean... ?" -- [] 3.0.0: Add tests -- [] 4.0.0: Refactor pages into different components +- [] 3.0.0: Improve search by combining mdblist with TMDB and then using https://www.npmjs.com/package/fast-levenshtein +- [] 4.0.0: Add tests +- [] 5.0.0: Refactor pages into different components diff --git a/package.json b/package.json index 2d382bc..8cde7d2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "2.7.5", + "version": "3.0.0", "private": false, "scripts": { "dev": "next dev", diff --git a/src/components/poster.tsx b/src/components/poster.tsx index 6b1a91f..6d3e27b 100644 --- a/src/components/poster.tsx +++ b/src/components/poster.tsx @@ -1,52 +1,58 @@ -import React, { useState, useEffect, useRef } from 'react'; +import { getTmdbKey } from '@/utils/freekeys'; import axios from 'axios'; import Image from 'next/image'; -import { getTmdbKey } from '@/utils/freekeys'; +import { useEffect, useRef, useState } from 'react'; const Poster = ({ imdbId }: Record) => { - const [posterUrl, setPosterUrl] = useState(''); - const [imgLoaded, setImgLoaded] = useState(false); - const imgRef = useRef(null); + const [posterUrl, setPosterUrl] = useState(''); + const [imgLoaded, setImgLoaded] = useState(false); + const imgRef = useRef(null); - useEffect(() => { - const fetchData = async () => { - const response = await axios.get(`https://api.themoviedb.org/3/find/${imdbId}?api_key=${getTmdbKey()}&external_source=imdb_id`); - const baseUrl = 'https://image.tmdb.org/t/p/w200'; - const posterPath = response.data.movie_results[0]?.poster_path || response.data.tv_results[0]?.poster_path; - if (!posterPath) setPosterUrl(`https://picsum.photos/seed/${imdbId}/200/300`); - else setPosterUrl(`${baseUrl}${posterPath}`); - }; + useEffect(() => { + const fetchData = async () => { + const response = await axios.get( + `https://api.themoviedb.org/3/find/${imdbId}?api_key=${getTmdbKey()}&external_source=imdb_id` + ); + const baseUrl = 'https://image.tmdb.org/t/p/w200'; + const posterPath = + response.data.movie_results[0]?.poster_path || + response.data.tv_results[0]?.poster_path; + if (!posterPath) setPosterUrl(`https://picsum.photos/seed/${imdbId}/200/300`); + else setPosterUrl(`${baseUrl}${posterPath}`); + }; - const imgObserver = new IntersectionObserver((entries, observer) => { - entries.forEach((entry) => { - if (entry.isIntersecting) { - fetchData(); - setImgLoaded(true); - observer.disconnect(); - } - }); - }); + const imgObserver = new IntersectionObserver((entries, observer) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + fetchData(); + setImgLoaded(true); + observer.disconnect(); + } + }); + }); - try { - if (imdbId && imgRef.current) { - imgObserver.observe(imgRef.current); - } else { - setPosterUrl(`https://picsum.photos/seed/${imdbId}/200/300`); - } - } catch (error: any) { - setPosterUrl(`https://picsum.photos/seed/${imdbId}/200/300`); - } + try { + if (imdbId && imgRef.current) { + imgObserver.observe(imgRef.current); + } else { + setPosterUrl(`https://picsum.photos/seed/${imdbId}/200/300`); + } + } catch (error: any) { + setPosterUrl(`https://picsum.photos/seed/${imdbId}/200/300`); + } - return () => { - imgObserver.disconnect(); - }; - }, [imdbId]); + return () => { + imgObserver.disconnect(); + }; + }, [imdbId]); - return ( -
- {imgLoaded && posterUrl && Movie poster} -
- ); + return ( +
+ {imgLoaded && posterUrl && ( + Movie poster + )} +
+ ); }; export default Poster; diff --git a/src/pages/api/dbsize.ts b/src/pages/api/dbsize.ts index d8f9155..3638e9e 100644 --- a/src/pages/api/dbsize.ts +++ b/src/pages/api/dbsize.ts @@ -5,9 +5,12 @@ const cache = new PlanetScaleCache(); const handler: NextApiHandler = async (req, res) => { try { - const contentSizeRaw: any = await cache.prisma.$queryRaw`Select count(*) as contentSize from Scraped WHERE Scraped.key LIKE 'movie:%' OR Scraped.key LIKE 'tv:%';`; - const processingRaw: any = await cache.prisma.$queryRaw`Select count(*) as processing from Scraped WHERE Scraped.key LIKE 'processing:%';`; - const requestedRaw: any = await cache.prisma.$queryRaw`Select count(*) as requested from Scraped WHERE Scraped.key LIKE 'requested:%';`; + const contentSizeRaw: any = await cache.prisma + .$queryRaw`Select count(*) as contentSize from Scraped WHERE Scraped.key LIKE 'movie:%' OR Scraped.key LIKE 'tv:%';`; + const processingRaw: any = await cache.prisma + .$queryRaw`Select count(*) as processing from Scraped WHERE Scraped.key LIKE 'processing:%';`; + const requestedRaw: any = await cache.prisma + .$queryRaw`Select count(*) as requested from Scraped WHERE Scraped.key LIKE 'requested:%';`; const contentSize = parseInt(contentSizeRaw[0].contentSize); const processing = parseInt(processingRaw[0].processing); const requested = parseInt(requestedRaw[0].requested); diff --git a/src/pages/api/keywordsearch.ts b/src/pages/api/keywordsearch.ts index e493a10..464339b 100644 --- a/src/pages/api/keywordsearch.ts +++ b/src/pages/api/keywordsearch.ts @@ -5,48 +5,70 @@ import { NextApiHandler } from 'next'; const mdblistKey = process.env.MDBLIST_KEY; const searchMdb = (keyword: string) => `https://mdblist.com/api/?apikey=${mdblistKey}&s=${keyword}`; const getMdbInfo = (imdbId: string) => `https://mdblist.com/api/?apikey=${mdblistKey}&i=${imdbId}`; +const tmdbSearchMovie = (keyword: string, tmdbKey: string) => + `https://api.themoviedb.org/3/search/movie?api_key=${tmdbKey}&query=${keyword}&page=1`; +const tmdbSearchTv = (keyword: string, tmdbKey: string) => + `https://api.themoviedb.org/3/search/tv?api_key=${tmdbKey}&query=${keyword}&page=1`; const db = new PlanetScaleCache(); +export type MdbSearchResult = { + id: string; + type: 'movie' | 'show'; + year: number; + score: number; + title: string; + imdbid: string; + tmdbid?: string; + season_count?: number; +}; + const handler: NextApiHandler = async (req, res) => { - const { keyword } = req.query; - - if (!keyword || !(typeof keyword === 'string')) { - res.status(400).json({ status: 'error', errorMessage: 'Missing "keyword" query parameter' }); - return; - } - - try { - const searchResults = await db.getSearchResults(keyword.toString().trim()); - if (searchResults) { - res.status(200).json({ results: searchResults.filter(r => r.imdbid) }); - return; - } - - const searchResponse = await axios.get(searchMdb(keyword.toString().trim())); - const results = ([...searchResponse.data.search]).filter((result: any) => result.imdbid); - - for (let i = 0; i < results.length; i++) { - if (results[i].type === 'show') { - const showResponse = await axios.get(getMdbInfo(results[i].imdbid)); - if (showResponse.data.type === 'show' && showResponse.data.seasons?.length !== 0) { - const seasons = showResponse.data.seasons.filter((season: any) => season.season_number > 0) - .map((season: any) => { - return season.season_number; - }); - results[i].season_count = Math.max(...seasons); - } else { - results[i].type = 'movie'; - } - } - } - - await db.saveSearchResults(keyword.toString().trim(), results); - - res.status(200).json({ results }); - } catch (error: any) { - console.error('encountered a search issue', error); - res.status(500).json({ status: 'error', errorMessage: error.message }); - } + const { keyword } = req.query; + + if (!keyword || !(typeof keyword === 'string')) { + res.status(400).json({ + status: 'error', + errorMessage: 'Missing "keyword" query parameter', + }); + return; + } + + try { + const cleanKeyword = encodeURIComponent(keyword.toString().trim().toLowerCase()); + const searchResults = await db.getSearchResults(cleanKeyword); + if (searchResults) { + res.status(200).json({ results: searchResults.filter((r) => r.imdbid) }); + return; + } + + const searchResponse = await axios.get(searchMdb(cleanKeyword)); + const results: MdbSearchResult[] = [...searchResponse.data.search].filter( + (result: any) => result.imdbid + ); + + for (let i = 0; i < results.length; i++) { + if (results[i].type === 'show') { + const showResponse = await axios.get(getMdbInfo(results[i].imdbid)); + if (showResponse.data.type === 'show' && showResponse.data.seasons?.length !== 0) { + const seasons = showResponse.data.seasons + .filter((season: any) => season.season_number > 0) + .map((season: any) => { + return season.season_number; + }); + results[i].season_count = Math.max(...seasons); + } else { + results[i].type = 'movie'; + } + } + } + + await db.saveSearchResults(keyword.toString().trim(), results); + + res.status(200).json({ results }); + } catch (error: any) { + console.error('encountered a search issue', error); + res.status(500).json({ status: 'error', errorMessage: error.message }); + } }; export default handler; diff --git a/src/pages/api/moviesearch.ts b/src/pages/api/moviesearch.ts index 17d0ba9..a498ff7 100644 --- a/src/pages/api/moviesearch.ts +++ b/src/pages/api/moviesearch.ts @@ -4,32 +4,34 @@ import { NextApiHandler } from 'next'; const db = new PlanetScaleCache(); const handler: NextApiHandler = async (req, res) => { - const { imdbId } = req.query; + const { imdbId } = req.query; - if (!imdbId || !(typeof imdbId === 'string')) { - res.status(400).json({ errorMessage: 'Missing "imdbId" query parameter' }); - return; - } + if (!imdbId || !(typeof imdbId === 'string')) { + res.status(400).json({ errorMessage: 'Missing "imdbId" query parameter' }); + return; + } - try { - const searchResults = await db.getScrapedResults(`movie:${imdbId.toString().trim()}`); - if (searchResults) { - res.status(200).json({ results: searchResults }); - return; - } + try { + const searchResults = await db.getScrapedResults( + `movie:${imdbId.toString().trim()}` + ); + if (searchResults) { + res.status(200).json({ results: searchResults }); + return; + } - const isProcessing = await db.keyExists(`processing:${imdbId}`); + const isProcessing = await db.keyExists(`processing:${imdbId}`); if (isProcessing) { - res.status(204).json(null); + res.setHeader('status', 'processing').status(204).json(null); return; } - await db.saveScrapedResults(`requested:${imdbId.toString().trim()}`, []); - res.status(204).json(null); - } catch (error: any) { - console.error('encountered a db issue', error); - res.status(500).json({ errorMessage: error.message }); - } + await db.saveScrapedResults(`requested:${imdbId.toString().trim()}`, []); + res.setHeader('status', 'requested').status(204).json(null); + } catch (error: any) { + console.error('encountered a db issue', error); + res.status(500).json({ errorMessage: error.message }); + } }; export default handler; diff --git a/src/pages/api/requested.ts b/src/pages/api/requested.ts index 884e531..ef60b69 100644 --- a/src/pages/api/requested.ts +++ b/src/pages/api/requested.ts @@ -4,13 +4,13 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); -export default async function handler( - req: NextApiRequest, - res: NextApiResponse -) { +export default async function handler(req: NextApiRequest, res: NextApiResponse) { const { scrapePassword, processing } = req.query; - if (process.env.SEARCH_SPEED_PASSWORD && scrapePassword !== process.env.SEARCH_SPEED_PASSWORD) { - res.status(403).json({ status: 'error', errorMessage: 'You are not authorized to use this feature' }); + if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { + res.status(403).json({ + status: 'error', + errorMessage: 'You are not authorized to use this feature', + }); return; } @@ -23,17 +23,18 @@ export default async function handler( } } else { imdbId = await db.getLatestRequest(); + console.log('imdbId', imdbId); if (!imdbId) { res.status(200).json({ status: 'done' }); return; } - const isProcessing = await db.keyExists(`processing:${imdbId}`); - if (isProcessing) { - res.status(200).json({ status: 'processing' }); - return; - } + // const isProcessing = await db.keyExists(`processing:${imdbId}`); + // if (isProcessing) { + // res.status(200).json({ status: 'processing' }); + // return; + // } } - await generateScrapeJobs(res, imdbId, false); + await generateScrapeJobs(res, imdbId, true); } diff --git a/src/pages/api/scrape.ts b/src/pages/api/scrape.ts index 13b68b8..bc1cda5 100644 --- a/src/pages/api/scrape.ts +++ b/src/pages/api/scrape.ts @@ -1,14 +1,13 @@ - import { ScrapeResponse, generateScrapeJobs } from '@/services/scrapeJobs'; import { NextApiRequest, NextApiResponse } from 'next'; -export default async function handler( - req: NextApiRequest, - res: NextApiResponse -) { +export default async function handler(req: NextApiRequest, res: NextApiResponse) { const { imdbId, scrapePassword, override } = req.query; - if (process.env.SEARCH_SPEED_PASSWORD && scrapePassword !== process.env.SEARCH_SPEED_PASSWORD) { - res.status(403).json({ status: 'error', errorMessage: 'You are not authorized to use this feature' }); + if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { + res.status(403).json({ + status: 'error', + errorMessage: 'You are not authorized to use this feature', + }); return; } diff --git a/src/pages/api/search.ts b/src/pages/api/search.ts deleted file mode 100644 index 506ed7a..0000000 --- a/src/pages/api/search.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { - createAxiosInstance, - fetchSearchResults, - flattenAndRemoveDuplicates, - groupByParsedTitle, - SearchResult, - searchSpeedType, -} from '@/services/btdigg'; -import { cleanSearchQuery, getLibraryTypes } from '@/utils/search'; -import { NextApiRequest, NextApiResponse } from 'next'; -import { SocksProxyAgent } from 'socks-proxy-agent'; - -export type SearchApiResponse = { - searchResults?: SearchResult[]; - errorMessage?: string; -}; - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse -) { - const { search, libraryType, searchSpeedPassword, searchSpeed } = req.query; - - if (!search || search instanceof Array) { - res.status(400).json({ errorMessage: 'Missing "search" query parameter' }); - return; - } - - if (!libraryType || libraryType instanceof Array) { - res.status(400).json({ errorMessage: 'Missing "libraryType" query parameter' }); - return; - } - - if (searchSpeed instanceof Array) { - res.status(400).json({ errorMessage: 'Missing "searchSpeed" query parameter' }); - return; - } - - const finalQuery = cleanSearchQuery(search); - const libraryTypes = getLibraryTypes(libraryType); - - let speed: searchSpeedType = 'veryfast'; - if (process.env.SEARCH_SPEED_PASSWORD) { - speed = - searchSpeedPassword === process.env.SEARCH_SPEED_PASSWORD - ? (searchSpeed as searchSpeedType) - : speed; - } - - try { - const results = []; - for (const lType of libraryTypes) { - results.push( - await fetchSearchResults( - speed, - createAxiosInstance(new SocksProxyAgent(process.env.PROXY!, { timeout: 5000 })), - `${finalQuery} ${lType}`.trim(), - libraryType - ) - ); - } - let processedResults = flattenAndRemoveDuplicates(results); - if (processedResults.length) processedResults = groupByParsedTitle(processedResults); - - res.status(200).json({ searchResults: processedResults }); - } catch (error: any) { - res.status(500).json({ - errorMessage: `An error occurred while scraping the Btdigg (${error.message})`, - }); - } -} diff --git a/src/pages/api/slowsearch.ts b/src/pages/api/slowsearch.ts deleted file mode 100644 index e9efd71..0000000 --- a/src/pages/api/slowsearch.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { - createAxiosInstance, - fetchSearchResults, - flattenAndRemoveDuplicates, - groupByParsedTitle, - SearchResult, -} from '@/services/btdigg'; -import { cleanSearchQuery, getLibraryTypes } from '@/utils/search'; -import { NextApiRequest, NextApiResponse } from 'next'; -import { SocksProxyAgent } from 'socks-proxy-agent'; - -export type SlowSearchApiResponse = { - searchResults?: SearchResult[]; - errorMessage?: string; -}; - -const agent = new SocksProxyAgent(process.env.PROXY!, { timeout: 3000 }); - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse -) { - const { search, libraryType } = req.query; - - if (!search || search instanceof Array) { - res.status(400).json({ errorMessage: 'Missing "search" query parameter' }); - return; - } - - if (!libraryType || libraryType instanceof Array) { - res.status(400).json({ errorMessage: 'Missing "libraryType" query parameter' }); - return; - } - - const finalQuery = cleanSearchQuery(search); - const libraryTypes = getLibraryTypes(libraryType); - - try { - const results = []; - for (const lType of libraryTypes) { - results.push(await fetchSearchResults('veryslow', createAxiosInstance(agent), finalQuery, lType)); - } - let processedResults = flattenAndRemoveDuplicates(results); - if (processedResults.length) processedResults = groupByParsedTitle(processedResults); - - res.status(200).json({ searchResults: processedResults }); - } catch (error: any) { - res.status(500).json({ - errorMessage: `An error occurred while scraping the Btdigg (${error.message})`, - }); - } -} diff --git a/src/pages/api/tvsearch.ts b/src/pages/api/tvsearch.ts index a8a8d2b..c3a6adc 100644 --- a/src/pages/api/tvsearch.ts +++ b/src/pages/api/tvsearch.ts @@ -18,7 +18,9 @@ const handler: NextApiHandler = async (req, res) => { } try { - const searchResults = await db.getScrapedResults(`tv:${imdbId.toString().trim()}:${parseInt(seasonNum.toString().trim(), 10)}`); + const searchResults = await db.getScrapedResults( + `tv:${imdbId.toString().trim()}:${parseInt(seasonNum.toString().trim(), 10)}` + ); if (searchResults) { res.status(200).json({ results: searchResults }); return; @@ -26,12 +28,12 @@ const handler: NextApiHandler = async (req, res) => { const isProcessing = await db.keyExists(`processing:${imdbId.toString().trim()}`); if (isProcessing) { - res.status(204).json(null); + res.setHeader('status', 'processing').status(204).json(null); return; } await db.saveScrapedResults(`requested:${imdbId.toString().trim()}`, []); - res.status(204).json(null); + res.setHeader('status', 'requested').status(204).json(null); } catch (error: any) { console.error('encountered a db issue', error); res.status(500).json({ errorMessage: error.message }); diff --git a/src/pages/hashlist.tsx b/src/pages/hashlist.tsx index f3b83be..1951272 100644 --- a/src/pages/hashlist.tsx +++ b/src/pages/hashlist.tsx @@ -8,13 +8,13 @@ import { getMediaType } from '@/utils/mediaType'; import getReleaseTags from '@/utils/score'; import { getSelectableFiles, isVideo } from '@/utils/selectable'; import { withAuth } from '@/utils/withAuth'; -import { filenameParse, ParsedFilename } from '@ctrl/video-filename-parser'; +import { ParsedFilename, filenameParse } from '@ctrl/video-filename-parser'; import lzString from 'lz-string'; import Head from 'next/head'; import Link from 'next/link'; import { useRouter } from 'next/router'; import { useEffect, useState } from 'react'; -import { toast, Toaster } from 'react-hot-toast'; +import { Toaster, toast } from 'react-hot-toast'; import { FaDownload, FaTimes } from 'react-icons/fa'; const ONE_GIGABYTE = 1024 * 1024 * 1024; diff --git a/src/pages/library.tsx b/src/pages/library.tsx index 71c6d2f..da149dc 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -15,13 +15,13 @@ import { getMediaType } from '@/utils/mediaType'; import getReleaseTags from '@/utils/score'; import { getSelectableFiles, isVideo } from '@/utils/selectable'; import { withAuth } from '@/utils/withAuth'; -import { filenameParse, ParsedFilename } from '@ctrl/video-filename-parser'; +import { ParsedFilename, filenameParse } from '@ctrl/video-filename-parser'; import lzString from 'lz-string'; import Head from 'next/head'; import Link from 'next/link'; import { useRouter } from 'next/router'; import { useCallback, useEffect, useState } from 'react'; -import { toast, Toaster } from 'react-hot-toast'; +import { Toaster, toast } from 'react-hot-toast'; import { FaArrowLeft, FaArrowRight, FaRecycle, FaShare, FaTrash } from 'react-icons/fa'; const ONE_GIGABYTE = 1024 * 1024 * 1024; diff --git a/src/pages/movies/[imdbid].tsx b/src/pages/movie/[imdbid].tsx similarity index 71% rename from src/pages/movies/[imdbid].tsx rename to src/pages/movie/[imdbid].tsx index b4fc30a..18c7079 100644 --- a/src/pages/movies/[imdbid].tsx +++ b/src/pages/movie/[imdbid].tsx @@ -20,6 +20,7 @@ import { import { getTmdbKey } from '@/utils/freekeys'; import { groupBy } from '@/utils/groupBy'; import { getSelectableFiles, isVideo } from '@/utils/selectable'; +import { searchToastOptions } from '@/utils/toastOptions'; import { withAuth } from '@/utils/withAuth'; import axios from 'axios'; import Head from 'next/head'; @@ -52,11 +53,11 @@ type TmdbResponse = { }; function Search() { + const [searchState, setSearchState] = useState('loading'); const [searchResults, setSearchResults] = useState([]); const [errorMessage, setErrorMessage] = useState(''); const rdKey = useRealDebridAccessToken(); const adKey = useAllDebridApiKey(); - const [loading, setLoading] = useState(false); const [masterAvailability, setMasterAvailability] = useState({}); const [rdCache, rd, rdCacheAdder, removeFromRdCache] = useDownloadsCache('rd'); const [adCache, ad, adCacheAdder, removeFromAdCache] = useDownloadsCache('ad'); @@ -96,10 +97,15 @@ function Search() { const fetchData = async (imdbId: string) => { setSearchResults([]); setErrorMessage(''); - setLoading(true); try { let endpoint = `/api/moviesearch?imdbId=${encodeURIComponent(imdbId)}`; const response = await axios.get(endpoint); + if (response.status === 204) { + setSearchState(response.headers['status']); + return; + } else if (response.status === 200) { + setSearchState('loaded'); + } setSearchResults( response.data.results?.map((r) => ({ @@ -109,20 +115,18 @@ function Search() { ); if (response.data.results?.length) { - toast(`Found ${response.data.results.length} results`, { icon: '๐Ÿ”' }); + toast(`Found ${response.data.results.length} results`, searchToastOptions); // instant checks const hashArr = response.data.results.map((r) => r.hash); if (rdKey && rdAutoInstantCheck) await instantCheckInRd(hashArr); if (adKey && adAutoInstantCheck) await instantCheckInAd(hashArr); } else { - toast(`No results found`, { icon: '๐Ÿ”' }); + toast(`No results found`, searchToastOptions); } } catch (error) { console.error(error); setErrorMessage('There was an error searching for the query. Please try again.'); - } finally { - setLoading(false); } }; @@ -169,9 +173,9 @@ function Search() { `Found ${ Object.values(rdAvailability).filter((a) => a.includes(':available')).length } available in RD`, - { icon: '๐Ÿ”' } + searchToastOptions ); - setMasterAvailability(prevState => ({ ...prevState, ...rdAvailability })); + setMasterAvailability((prevState) => ({ ...prevState, ...rdAvailability })); } catch (error) { toast.error( 'There was an error checking availability in Real-Debrid. Please try again.' @@ -214,9 +218,9 @@ function Search() { `Found ${ Object.values(adAvailability).filter((a) => a.includes(':available')).length } available in AD`, - { icon: '๐Ÿ”' } + searchToastOptions ); - setMasterAvailability(prevState => ({ ...prevState, ...adAvailability })); + setMasterAvailability((prevState) => ({ ...prevState, ...adAvailability })); } catch (error) { toast.error('There was an error checking availability in AllDebrid. Please try again.'); throw error; @@ -322,7 +326,13 @@ function Search() {
-

๐ŸŽฅ

+

router.back()} + style={{ cursor: 'pointer' }} + > + ๐ŸŽฅ +

- {loading && ( + {searchState === 'loading' && (
)} + {searchState === 'requested' && ( +
+ Notice: + + {' '} + The request has been received. This might take at least 5 minutes. + +
+ )} + {searchState === 'processing' && ( +
+ Notice: + + {' '} + Looking for torrents in the dark web. Please wait for 1-2 minutes. + +
+ )} {errorMessage && (
Error: @@ -364,7 +392,7 @@ function Search() { )} {searchResults.length > 0 && ( <> - {!loading && ( + {searchState !== 'loading' && (
{ - setLoading(true); + setSearchState('loading'); await instantCheckInRd( searchResults.map((result) => result.hash) ); - setLoading(false); + setSearchState('done'); }} > Check RD availability @@ -400,11 +428,11 @@ function Search() { - )} - {rdKey && rd.notInLibrary(r.hash) && ( - - )} - {ad.isDownloading(r.hash) && adCache![r.hash].id && ( - - )} - {adKey && ad.notInLibrary(r.hash) && ( - - )} -
- -
-
- )) -} + > +
+

+ {r.title} +

+

+ Size: {(r.fileSize / 1024).toFixed(2)} GB +

+
+ {rd.isDownloading(r.hash) && + rdCache![r.hash].id && ( + + )} + {rdKey && rd.notInLibrary(r.hash) && ( + + )} + {ad.isDownloading(r.hash) && + adCache![r.hash].id && ( + + )} + {adKey && ad.notInLibrary(r.hash) && ( + + )} +
+
+ + ))} )} - {Object.keys(router.query).length !== 0 && searchResults.length === 0 && !loading && ( - <> -

- Processing search request for "{movieInfo?.movie_results[0].title} - ". Try again in a few minutes. -

- - )} ); } diff --git a/src/pages/search.tsx b/src/pages/search.tsx index 610d387..b738014 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -5,25 +5,12 @@ import Link from 'next/link'; import { useRouter } from 'next/router'; import { useCallback, useEffect, useState } from 'react'; import { Toaster } from 'react-hot-toast'; - -type SearchResult = { - id: string; - type: 'movie' | 'show'; - year: number; - score: number; - title: string; - imdbid: string; - tmdbid: number; - tvdbid?: number; - traktid?: number; - season_count?: number; - score_average: number; -}; +import { MdbSearchResult } from './api/keywordsearch'; function Search() { const [query, setQuery] = useState(''); const [typedQuery, setTypedQuery] = useState(''); - const [searchResults, setSearchResults] = useState([]); + const [searchResults, setSearchResults] = useState([]); const [loading, setLoading] = useState(false); const [errorMessage, setErrorMessage] = useState(''); @@ -114,7 +101,7 @@ function Search() { Search Results for "{query}"
- {searchResults.map((result) => ( + {searchResults.map((result: MdbSearchResult) => (
Score: {result.score}

{result.type === 'movie' ? ( @@ -142,7 +129,7 @@ function Search() { ).map((season) => ( ('loading'); const [searchResults, setSearchResults] = useState([]); const [errorMessage, setErrorMessage] = useState(''); const rdKey = useRealDebridAccessToken(); const adKey = useAllDebridApiKey(); - const [loading, setLoading] = useState(false); const [masterAvailability, setMasterAvailability] = useState({}); const [rdCache, rd, rdCacheAdder, removeFromRdCache] = useDownloadsCache('rd'); const [adCache, ad, adCacheAdder, removeFromAdCache] = useDownloadsCache('ad'); @@ -96,12 +97,17 @@ function Search() { const fetchData = async (imdbId: string, seasonNum: number) => { setSearchResults([]); setErrorMessage(''); - setLoading(true); try { let endpoint = `/api/tvsearch?imdbId=${encodeURIComponent( imdbId )}&seasonNum=${seasonNum}`; const response = await axios.get(endpoint); + if (response.status === 204) { + setSearchState(response.headers['status']); + return; + } else if (response.status === 200) { + setSearchState('loaded'); + } setSearchResults( response.data.results?.map((r) => ({ @@ -111,20 +117,18 @@ function Search() { ); if (response.data.results?.length) { - toast(`Found ${response.data.results.length} results`, { icon: '๐Ÿ”' }); + toast(`Found ${response.data.results.length} results`, searchToastOptions); // instant checks const hashArr = response.data.results.map((r) => r.hash); if (rdKey && rdAutoInstantCheck) await instantCheckInRd(hashArr); if (adKey && adAutoInstantCheck) await instantCheckInAd(hashArr); } else { - toast(`No results found`, { icon: '๐Ÿ”' }); + toast(`No results found`, searchToastOptions); } } catch (error) { console.error(error); setErrorMessage('There was an error searching for the query. Please try again.'); - } finally { - setLoading(false); } }; @@ -171,9 +175,9 @@ function Search() { `Found ${ Object.values(rdAvailability).filter((a) => a.includes(':available')).length } available in RD`, - { icon: '๐Ÿ”' } + searchToastOptions ); - setMasterAvailability(prevState => ({ ...prevState, ...rdAvailability })); + setMasterAvailability((prevState) => ({ ...prevState, ...rdAvailability })); } catch (error) { toast.error( 'There was an error checking availability in Real-Debrid. Please try again.' @@ -216,9 +220,9 @@ function Search() { `Found ${ Object.values(adAvailability).filter((a) => a.includes(':available')).length } available in AD`, - { icon: '๐Ÿ”' } + searchToastOptions ); - setMasterAvailability(prevState => ({ ...prevState, ...adAvailability })); + setMasterAvailability((prevState) => ({ ...prevState, ...adAvailability })); } catch (error) { toast.error('There was an error checking availability in AllDebrid. Please try again.'); throw error; @@ -324,7 +328,13 @@ function Search() {
-

๐Ÿ“บ

+

router.back()} + style={{ cursor: 'pointer' }} + > + ๐Ÿ“บ +

-

{showInfo.tv_results[0].name} - Season{' '} - {seasonNum}

+

+ {showInfo.tv_results[0].name} - Season {seasonNum} +

{showInfo.tv_results[0].overview}

@@ -354,11 +365,29 @@ function Search() {
- {loading && ( + {searchState === 'loading' && (
)} + {searchState === 'requested' && ( +
+ Notice: + + {' '} + The request has been received. This might take at least 5 minutes. + +
+ )} + {searchState === 'processing' && ( +
+ Notice: + + {' '} + Looking for torrents in the dark web. Please wait for 1-2 minutes. + +
+ )} {errorMessage && (
Error: @@ -367,7 +396,7 @@ function Search() { )} {searchResults.length > 0 && ( <> - {!loading && ( + {searchState !== 'loading' && (
{ - setLoading(true); + setSearchState('loading'); await instantCheckInRd( searchResults.map((result) => result.hash) ); - setLoading(false); + setSearchState('done'); }} > Check RD availability @@ -403,11 +432,11 @@ function Search() { - )} - {rdKey && rd.notInLibrary(r.hash) && ( - - )} - {ad.isDownloading(r.hash) && adCache![r.hash].id && ( - - )} - {adKey && ad.notInLibrary(r.hash) && ( - - )} -
- -
-
- )) -} + > +
+

+ {r.title} +

+

+ Size: {(r.fileSize / 1024).toFixed(2)} GB +

+
+ {rd.isDownloading(r.hash) && + rdCache![r.hash].id && ( + + )} + {rdKey && rd.notInLibrary(r.hash) && ( + + )} + {ad.isDownloading(r.hash) && + adCache![r.hash].id && ( + + )} + {adKey && ad.notInLibrary(r.hash) && ( + + )} +
+
+ + ))} )} - {Object.keys(router.query).length !== 0 && searchResults.length === 0 && !loading && ( - <> -

- Processing search request for "{showInfo?.tv_results[0].name} - ". Try again in a few minutes. -

- - )} ); } diff --git a/src/pages/show/[imdbid]/index.tsx b/src/pages/show/[imdbid]/index.tsx new file mode 100644 index 0000000..ac52297 --- /dev/null +++ b/src/pages/show/[imdbid]/index.tsx @@ -0,0 +1,15 @@ +import { GetServerSideProps } from 'next'; + +export const getServerSideProps: GetServerSideProps = async (context) => { + const { params } = context; + return { + redirect: { + destination: `/show/${params?.imdbid}/1`, + permanent: false, + }, + }; +}; + +const RedirectPage = () => null; + +export default RedirectPage; diff --git a/src/services/btdigg-v2.ts b/src/services/btdigg-v2.ts index d9e7be9..ce58414 100644 --- a/src/services/btdigg-v2.ts +++ b/src/services/btdigg-v2.ts @@ -50,7 +50,6 @@ export const groupByParsedTitle = (results: SearchResult[]): SearchResult[] => { return results; }; - function convertToMB(fileSizeStr: string) { let fileSize = parseFloat(fileSizeStr); // extracts the numeric part if (fileSizeStr.includes('GB')) { @@ -73,7 +72,9 @@ export async function scrapeResults( let pageNum = 1; const createSearchUrl = (pg: number) => - `${dhtSearchHostname}/search?order=0&q=${encodeURIComponent(finalQuery)}&p=${pg - 1}`; + `${dhtSearchHostname}/search?order=0&q=${encodeURIComponent(finalQuery)}&p=${ + pg - 1 + }`; const BAD_RESULT_THRESHOLD = 15; let badResults = 0; @@ -97,7 +98,10 @@ export async function scrapeResults( retries = 0; break; } catch (error: any) { - console.error(`Error scraping page ${pageNum} (${finalQuery})`, error.message); + console.error( + `Error scraping page ${pageNum} (${finalQuery})`, + error.message + ); if (error.message.includes('status code 404') && pageNum === 1) { console.error('404 error, aborting search'); throw error; @@ -111,7 +115,9 @@ export async function scrapeResults( } else { retries++; if (retries > MAX_RETRIES) { - console.error(`Max retries reached (${MAX_RETRIES}), aborting search`); + console.error( + `Max retries reached (${MAX_RETRIES}), aborting search` + ); throw error; } } @@ -134,9 +140,13 @@ export async function scrapeResults( } for (let resIndex = 0; resIndex < fileSizes.length; resIndex++) { - console.log(`searchResultsArr:`, searchResultsArr.length) - const title = decodeURIComponent(namesAndHashes[resIndex][2].replaceAll('+', ' ')); - const fileSizeStr = `${fileSizes[resIndex][1]} ${fileSizes[resIndex][2] || 'B'}`; + console.log(` current count of searchResultsArr:`, searchResultsArr.length); + const title = decodeURIComponent( + namesAndHashes[resIndex][2].replaceAll('+', ' ') + ); + const fileSizeStr = `${fileSizes[resIndex][1]} ${ + fileSizes[resIndex][2] || 'B' + }`; if ( !fileSizeStr.includes('GB') && @@ -159,25 +169,28 @@ export async function scrapeResults( } // Check if every term in the query (tokenized by space) is contained in the title - console.log(`scraped title`, title); - const queryTerms = targetTitle.replaceAll('"', ' ').split(' ').filter((e) => e !== ''); + const queryTerms = targetTitle + .replaceAll('"', ' ') + .split(' ') + .filter((e) => e !== ''); let requiredTerms = queryTerms.length <= 3 ? queryTerms.length : queryTerms.length - 1; const containedTerms = queryTerms.filter((term) => - new RegExp(`${term}`).test(title.toLowerCase()) + new RegExp(`${term.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&')}`).test( + title.toLowerCase() + ) ).length; - console.log(`title >`, queryTerms); + console.log(`check params >`, title, queryTerms, mustHaveTerms); if (containedTerms < requiredTerms) { - console.log('not enough terms!'); + console.log('ERR not enough title terms!'); badResults++; // title doesn't contain most terms in the query continue; } - console.log(`must have >`, mustHaveTerms); - const containedMustHaveTerms = queryTerms.filter((term) => + const containedMustHaveTerms = mustHaveTerms.filter((term) => new RegExp(`${term}`).test(title.toLowerCase()) ).length; if (containedMustHaveTerms < mustHaveTerms.length) { - console.log('not enough terms!'); + console.log('ERR not enough must have terms!'); badResults++; continue; } @@ -223,7 +236,7 @@ export async function scrapeResults( } } - console.log(`Found ${searchResultsArr.length} results (${finalQuery})`); + console.log(`>>>>>> Found ${searchResultsArr.length} results (${finalQuery})`); return searchResultsArr; } catch (error) { diff --git a/src/services/btdigg.ts b/src/services/btdigg.ts deleted file mode 100644 index f449bcd..0000000 --- a/src/services/btdigg.ts +++ /dev/null @@ -1,305 +0,0 @@ -import { getMediaId } from '@/utils/mediaId'; -import { getMediaType } from '@/utils/mediaType'; -import getReleaseTags from '@/utils/score'; -import { filenameParse, ParsedFilename } from '@ctrl/video-filename-parser'; -import axios, { AxiosInstance } from 'axios'; -import { SocksProxyAgent } from 'socks-proxy-agent'; -import UserAgent from 'user-agents'; -import { PlanetScaleCache } from './planetscale'; - -export type SearchResult = { - title: string; - fileSize: number; - magnetLink: string; - hash: string; - dolby_vision: boolean; - hdr10plus: boolean; - hdr: boolean; - remux: boolean; - proper_remux: boolean; - score: number; - mediaType: 'tv' | 'movie'; - info: ParsedFilename; -}; - -const cache = new PlanetScaleCache(); - -export const createAxiosInstance = (agent: SocksProxyAgent) => { - return axios.create({ - httpAgent: agent, - headers: { - accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', - 'accept-language': 'en-US,en;q=0.5', - 'accept-encoding': 'gzip, deflate, br', - referer: 'http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion/', - connection: 'keep-alive', - 'sec-fetch-dest': 'document', - 'sec-fetch-mode': 'navigate', - 'sec-fetch-site': 'same-origin', - 'sec-fetch-user': '?1', - 'upgrade-insecure-requests': '1', - 'user-agent': new UserAgent().toString(), - }, - timeout: parseInt(process.env.REQUEST_TIMEOUT || '3000', 10), - }); -}; - -export const flattenAndRemoveDuplicates = (arr: SearchResult[][]): SearchResult[] => { - const flattened = arr.reduce((acc, val) => acc.concat(val), []); - const unique = new Map(); - flattened.forEach((item) => { - if (!unique.has(item.hash)) { - unique.set(item.hash, item); - } - }); - return Array.from(unique.values()); -}; - -export const groupByParsedTitle = (results: SearchResult[]): SearchResult[] => { - const frequency: Record = {}; - results = results.filter((result) => result.info.title); - for (const result of results) { - const mediaId = getMediaId(result.info, result.mediaType, true); - if (mediaId in frequency) { - frequency[mediaId] += result.fileSize; - } else { - frequency[mediaId] = result.fileSize; - } - } - - results.sort((a, b) => { - const frequencyCompare = - frequency[getMediaId(b.info, b.mediaType, true)] - - frequency[getMediaId(a.info, a.mediaType, true)]; - if (frequencyCompare === 0) { - return b.fileSize - a.fileSize; - } - return frequencyCompare; - }); - - return results; -}; - -const dhtSearchHostname = 'http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion'; - -export type searchSpeedType = - | 'veryfast' - | 'fast' - | 'normal' - | 'normaloverride' - | 'slow' - | 'slowoverride' - | 'veryslow' - | 'veryslowoverride'; - -export async function fetchSearchResults( - speed: searchSpeedType, - client: AxiosInstance, - finalQuery: string, - libraryType: string -): Promise { - try { - try { - if (!speed.includes('override')) { - const cached = await cache.getCachedJsonValue( - finalQuery.split(' ') - ); - if (cached) { - console.log(`Found cached results for ${finalQuery}`, cached.length); - return cached; - } - } - } catch (e: any) { - console.warn(`cache read error:`, e.message); - } - - let pageNum = 1; - - const createSearchUrl = (pg: number) => - `${dhtSearchHostname}/search?order=0&q=${encodeURIComponent(finalQuery)}&p=${pg - 1}`; - - const BAD_RESULT_THRESHOLD = 11; - let badResults = 0; - let searchResultsArr: SearchResult[] = []; - - const MAX_RETRIES = 5; // maximum number of retries - const RETRY_DELAY = 1500; // initial delay in ms, doubles with each retry - - let upperThreshold: (skipped: number) => number; - - switch (speed) { - case 'veryfast': - upperThreshold = (skipped: number): number => 20 + Math.floor(skipped / 10); - break; - case 'fast': - upperThreshold = (skipped: number): number => 40 + Math.floor(skipped / 10); - break; - case 'normal': - case 'normaloverride': - upperThreshold = (skipped: number): number => 60 + Math.floor(skipped / 10); - break; - case 'slow': - case 'slowoverride': - upperThreshold = (skipped: number): number => 80 + Math.floor(skipped / 10); - break; - case 'veryslow': - case 'veryslowoverride': - upperThreshold = (_: any) => 100; - break; - } - - let skippedResults = 0; - while (pageNum <= upperThreshold(skippedResults)) { - console.log(`Scraping page ${pageNum} (${finalQuery})...`, new Date().getTime()); - let retries = 0; // current number of retries - let responseData = ''; - let numResults = 0; - const searchUrl = createSearchUrl(pageNum); - while (true) { - try { - const response = await client.get(searchUrl); - responseData = response.data; - const numResultsStr = responseData.match(/(\d+) results found/) || []; - numResults = parseInt(numResultsStr[1], 10); - retries = 0; - break; - } catch (error: any) { - console.error(`Error scraping page ${pageNum} (${finalQuery})`, error.message); - if (error.message.includes('status code 404') && pageNum === 1) { - console.error('404 error, aborting search'); - throw error; - } - if ( - error.message.includes('status code 429') || - error.message.includes('"socket" was not created') - ) { - console.log('Waiting 5 seconds before retrying...'); - await new Promise((resolve) => setTimeout(resolve, 5000)); - } else { - retries++; - if (retries > MAX_RETRIES) { - console.error(`Max retries reached (${MAX_RETRIES}), aborting search`); - throw error; - } - } - const delay = RETRY_DELAY * Math.pow(2, retries - 1); - await new Promise((resolve) => setTimeout(resolve, delay)); - } - } - const fileSizes = Array.from( - responseData.matchAll( - /class=\"torrent_size\"[^>]*>(\d+(?:\.\d+)?)(?:[^A-Z<]+)?([A-Z]+)?/g - ) - ); - const namesAndHashes = Array.from( - responseData.matchAll(/magnet:\?xt=urn:btih:([a-z\d]{40})&dn=([^&]+)&/g) - ); - console.log( - `Got ${fileSizes.length} tentative items for page ${pageNum} (${finalQuery})` - ); - - if (fileSizes.length !== namesAndHashes.length) { - console.warn('Mismatch in file sizes and names'); - break; - } - - for (let resIndex = 0; resIndex < fileSizes.length; resIndex++) { - const title = decodeURIComponent(namesAndHashes[resIndex][2].replaceAll('+', ' ')); - const fileSizeStr = `${fileSizes[resIndex][1]} ${fileSizes[resIndex][2] || 'B'}`; - const mediaType = getMediaType(title); - const info = - mediaType === 'movie' ? filenameParse(title) : filenameParse(title, true); - - if (libraryType === '2160p' && !fileSizeStr.includes('GB')) { - badResults++; // is 2160p but doesn't have GB in fileSize - continue; - } - - // immediately check if filesize makes sense - const fileSize = parseFloat(fileSizeStr); - if (mediaType === 'movie' && fileSize > 150) { - skippedResults++; - continue; - } - if (fileSizeStr.includes(' B') || fileSizeStr.includes(' KB')) { - skippedResults++; - continue; - } - - // Check if every term in the query (tokenized by space) is contained in the title - const queryTerms = finalQuery.split(' '); - const containsMostTerms = - queryTerms.filter((term) => new RegExp(`${term}`).test(title.toLowerCase())) - .length / - queryTerms.length > - 0.6; - if (!containsMostTerms) { - badResults++; // title doesn't contain most terms in the query - continue; - } - if ( - !/\b360p|\b480p|\b576p|\b720p|\b1080p|\b2160p|dvd[^\w]?rip|dvd[^\w]?scr|\bx264\b|\bx265\b|\bxvid\b|\bdivx\b|\bav1\b|bd[^\w]?rip|br[^\w]?rip|hd[^\w]?rip|ppv[^\w]?rip|web[^\w]?rip|cam[^\w]?rip|\bcam\b|\bts\b|\bhdtc\b|\bscreener\b|\br5\b/i.test( - title.toLowerCase() - ) - ) { - badResults++; // doesn't contain video resolution fragments or clues in the title - continue; - } - if (libraryType === '2160p') { - if (!/\b2160p\b|\buhd\b/i.test(title.toLowerCase())) { - continue; - } - } - - const hash = namesAndHashes[resIndex][1]; - - const { dolby_vision, hdr10plus, hdr, remux, proper_remux, score } = getReleaseTags( - title, - fileSize - ); - - let resultObj: SearchResult = { - title, - fileSize, - magnetLink: `magnet:?xt=urn:btih:${hash}`, - hash, - dolby_vision, - hdr10plus, - hdr, - remux, - proper_remux, - score, - mediaType, - info, - }; - searchResultsArr.push(resultObj); - // Reset ignoredResults counter - badResults = 0; - } - - // Stop execution if the last $BAD_RESULT_THRESHOLD results were ignored - if (badResults >= BAD_RESULT_THRESHOLD) { - console.log( - `Stopped execution after ${pageNum} pages because the last ${BAD_RESULT_THRESHOLD} results were ignored.` - ); - break; - } - - if (numResults > pageNum * 10) { - pageNum++; - } else { - // No more pages, exit the loop - break; - } - } - - console.log(`Found ${searchResultsArr.length} results (${finalQuery})`); - - cache.cacheJsonValue(finalQuery.split(' '), searchResultsArr); - - return searchResultsArr; - } catch (error) { - console.error('fetchSearchResults page processing error', error); - throw error; - } -} diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index 0e3227c..3042dcf 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -69,26 +69,19 @@ export class PlanetScaleCache { public async getLatestRequest(): Promise { const requestedItem = await this.prisma.scraped.findFirst({ - where: { key: { startsWith: "requested:" } }, - orderBy: { updatedAt: 'desc' }, + where: { key: { startsWith: 'requested:' } }, + orderBy: { updatedAt: 'asc' }, select: { key: true }, }); if (requestedItem !== null) { - const imdbid = requestedItem.key.split(':')[1]; - // Check if there is a processing item for this imdbid - const processingItem = await this.prisma.scraped.findFirst({ - where: { key: `processing:${imdbid}` }, - }); - if (!processingItem) { - return imdbid; - } + return requestedItem.key.split(':')[1]; } return null; } public async getOldestProcessing(): Promise { const requestedItem = await this.prisma.scraped.findFirst({ - where: { key: { startsWith: "processing:" } }, + where: { key: { startsWith: 'processing:' } }, orderBy: { updatedAt: 'asc' }, select: { key: true }, }); @@ -103,7 +96,7 @@ export class PlanetScaleCache { for (const key of keys) { await this.prisma.scraped.deleteMany({ - where: { key: { startsWith: key } }, + where: { key }, }); } } diff --git a/src/services/scrapeJobs.ts b/src/services/scrapeJobs.ts index 2cb25df..b029647 100644 --- a/src/services/scrapeJobs.ts +++ b/src/services/scrapeJobs.ts @@ -1,14 +1,14 @@ -import { SearchResult } from '@/services/btdigg-v2'; import { + SearchResult, createAxiosInstance, - scrapeResults, flattenAndRemoveDuplicates, groupByParsedTitle, + scrapeResults, } from '@/services/btdigg-v2'; import axios from 'axios'; +import { NextApiResponse } from 'next'; import { SocksProxyAgent } from 'socks-proxy-agent'; import { PlanetScaleCache } from './planetscale'; -import { NextApiResponse } from 'next'; const tmdbKey = process.env.TMDB_KEY; const mdblistKey = process.env.MDBLIST_KEY; @@ -24,7 +24,7 @@ function padWithZero(num: number) { } const cleanSearchQuery = (search: string): string => { return search - .split(/[\s\=:\?\.\-\(\)\/]/) // split the search query into an array of elements + .split(/[\s\(\)\[\]\{\}\+\\\^\|ยท\?]/) // split the search query into an array of elements .filter((e) => e !== '') // filter out any empty elements .map((e) => e.toLowerCase()) // convert each element to lowercase .join(' ') // join the remaining elements with a single space @@ -33,6 +33,7 @@ const cleanSearchQuery = (search: string): string => { .replace(/[รญรฌรฏรฎ]/g, 'i') .replace(/[รณรฒรถรด]/g, 'o') .replace(/[รบรนรผรป]/g, 'u') + .replaceAll(':', ' ') .replace(/\s+/g, ' ') // replace multiple spaces with a single space .trim(); }; @@ -45,177 +46,189 @@ export type ScrapeResponse = { }; export async function generateScrapeJobs( - res: NextApiResponse, - imdbId: string, - override: boolean = false + res: NextApiResponse, + imdbId: string, + override: boolean = false ) { - // imdbId to search for - const tmdbResponse = await axios.get(getTmdbInfo(imdbId)); - - const movieTitles: string[] = []; - const tvTitles: string[] = []; - - let tmdbItem: any = {}; - let itemType: 'movie' | 'tv' = 'movie'; - - if (tmdbResponse.data.movie_results.length > 0) { - if (!override) { - const isProcessing = await db.keyExists(`processing:${imdbId}`); - if (isProcessing) { - res.status(200).json({ status: 'processing' }); - return; - } - const keyExists = await db.keyExists(`movie:${imdbId}`); - if (keyExists) { - res.status(200).json({ status: 'skipped' }); - return; - } - } - - itemType = 'movie'; - tmdbItem = tmdbResponse.data.movie_results[0]; - const cleanTitle = cleanSearchQuery(tmdbItem.title); - const titleLength = cleanTitle.split(' ').length; - if (titleLength > 2) movieTitles.push(`"${cleanTitle}"`); - movieTitles.push(`"${cleanTitle}" ${tmdbItem.release_date.substring(0, 4)}`); - - if (tmdbItem.original_title && tmdbItem.original_title !== tmdbItem.title) { - movieTitles.push(`"${tmdbItem.original_title}" - imdbId`); - movieTitles.push(`"${tmdbItem.original_title}" ${tmdbItem.release_date.substring(0, 4)}`); - const mdbItem = await axios.get(getMdbInfo(imdbId)); - for (let rating of mdbItem.data.ratings) { - if (rating.source === 'tomatoes') { - if (!rating.url) continue; - const cleanedTitle = ( - itemType === 'movie' ? rating.url.split('/m/') : rating.url.split('/tv/') - )[1].replaceAll('_', ' '); - if (cleanedTitle.startsWith(/\d{6,}/)) continue; - movieTitles.push(`"${cleanedTitle}"`); - movieTitles.push(`"${cleanedTitle}" ${tmdbItem.release_date.substring(0, 4)}`); - } - } - } - - await db.saveScrapedResults(`processing:${imdbId}`, []); - - try { - const results: SearchResult[][] = []; - for (const movieTitle of movieTitles) { - for (const lType of ['720p', '1080p', '2160p', '']) { - console.log('Scraping >', `${movieTitle} ${lType}`.trim()); - const mustHave = []; - let numbers = movieTitle.match(/\b\d{1,4}\b/g); - if (numbers) mustHave.push(...numbers); - results.push( - await scrapeResults( - createAxiosInstance( - new SocksProxyAgent(process.env.PROXY!, { timeout: 10000 }) - ), - `${movieTitle} ${lType}`.trim(), - movieTitle, - mustHave, - lType || '1080p', - ) - ); - } - } - let processedResults = flattenAndRemoveDuplicates(results); - if (processedResults.length) processedResults = groupByParsedTitle(processedResults); - - await db.saveScrapedResults(`movie:${imdbId}`, processedResults); - - res.status(200).json({ status: `scraped: ${processedResults.length} items` }); - } catch (error: any) { - res.status(500).json({ - status: 'error', - errorMessage: `An error occurred while scraping Btdigg (${error.message})`, - }); - } - } - - if (tmdbResponse.data.tv_results.length > 0) { - if (!override) { - const isProcessing = await db.keyExists(`processing:${imdbId}`); - if (isProcessing) { - res.status(200).json({ status: 'processing' }); - return; - } - const keyExists = await db.keyExists(`tv:${imdbId}:1`); - if (keyExists) { - res.status(200).json({ status: 'skipped' }); - return; - } - } - - itemType = 'tv'; - tmdbItem = tmdbResponse.data.tv_results[0]; - const cleanTitle = cleanSearchQuery(tmdbItem.name); - const titleLength = cleanTitle.split(' ').length; - if (titleLength > 2) tvTitles.push(`"${cleanTitle}"`); - tvTitles.push(`"${cleanTitle}" ${tmdbItem.first_air_date.substring(0, 4)}`); - - if (tmdbItem.original_name && tmdbItem.original_name !== tmdbItem.name) { - tvTitles.push(`"${tmdbItem.original_name}"`); - tvTitles.push(`"${tmdbItem.original_name}" ${tmdbItem.first_air_date.substring(0, 4)}`); - } - - await db.saveScrapedResults(`processing:${imdbId}`, []); - - let totalResultsCount = 0; - const showResponse = await axios.get(getMdbInfo(imdbId)); - for (const season of showResponse.data.seasons - ? showResponse.data.seasons - : [{ season_number: 1, episode_count: 0 }]) { - if (season.season_number === 0) continue; - let seasonQueries = tvTitles.map((q) => `${q} "s${padWithZero(season.season_number)}"`); - try { - const results: SearchResult[][] = []; - for (const finalQuery of seasonQueries) { - for (const lType of ['720p', '1080p', '2160p', '']) { - console.log('Scraping >', `${finalQuery} ${lType}`.trim()); - const mustHave = []; - let numbers = finalQuery.match(/\bs?\d{1,4}\b/g); - if (numbers) mustHave.push(...numbers); - results.push( - await scrapeResults( - createAxiosInstance( - new SocksProxyAgent(process.env.PROXY!, { timeout: 10000 }) - ), - `${finalQuery} ${lType}`.trim(), - finalQuery.replace(/\bs\d\d\b/g, ''), - mustHave, - lType || '1080p', - ) - ); - } - } - let processedResults = flattenAndRemoveDuplicates(results); - if (processedResults.length) processedResults = groupByParsedTitle(processedResults); - - await db.saveScrapedResults(`tv:${imdbId}:${season.season_number}`, processedResults); - - totalResultsCount += processedResults.length; - } catch (error: any) { - res.status(500).json({ - status: 'error', - errorMessage: `An error occurred while scraping Btdigg (${error.message})`, - }); - } - // if (season.episode_count === 0) continue; - // for (let i = 1; i <= season.episode_count; i++) { - // seasonQueries = seasonQueries.concat( - // tvTitles.map( - // (q) => - // `${q} "s${padWithZero(season.season_number)}e${padWithZero(i)}"` - // ) - // ); - // } - } - - res.status(200).json({ status: `scraped: ${totalResultsCount} items` }); - - imdbId } - - await db.markAsDone(imdbId); + // imdbId to search for + const tmdbResponse = await axios.get(getTmdbInfo(imdbId)); + + const movieTitles: string[] = []; + const tvTitles: string[] = []; + + let tmdbItem: any = {}; + let itemType: 'movie' | 'tv' = 'movie'; + + if (tmdbResponse.data.movie_results.length > 0) { + if (!override) { + const isProcessing = await db.keyExists(`processing:${imdbId}`); + if (isProcessing) { + res.status(200).json({ status: 'processing' }); + return; + } + const keyExists = await db.keyExists(`movie:${imdbId}`); + if (keyExists) { + res.status(200).json({ status: 'skipped' }); + return; + } + } + + itemType = 'movie'; + tmdbItem = tmdbResponse.data.movie_results[0]; + const cleanTitle = cleanSearchQuery(tmdbItem.title); + const titleLength = cleanTitle.split(' ').length; + if (titleLength > 2) movieTitles.push(`"${cleanTitle}"`); + if (tmdbItem.release_date) + movieTitles.push(`"${cleanTitle}" ${tmdbItem.release_date.substring(0, 4)}`); + + if (tmdbItem.original_title && tmdbItem.original_title !== tmdbItem.title) { + movieTitles.push(`"${tmdbItem.original_title}"`); + if (tmdbItem.release_date) + movieTitles.push( + `"${tmdbItem.original_title}" ${tmdbItem.release_date.substring(0, 4)}` + ); + const mdbItem = await axios.get(getMdbInfo(imdbId)); + for (let rating of mdbItem.data.ratings) { + if (rating.source === 'tomatoes') { + if (!rating.url) continue; + const cleanedTitle = ( + rating.url.includes('/m/') + ? rating.url.split('/m/')[1] + : rating.url.split('/tv/')[1] + ).replaceAll('_', ' '); + if (cleanedTitle.match(/^\d{6,}/)) continue; + movieTitles.push(`"${cleanedTitle}"`); + if (tmdbItem.release_date) + movieTitles.push( + `"${cleanedTitle}" ${tmdbItem.release_date.substring(0, 4)}` + ); + } + } + } + + await db.saveScrapedResults(`processing:${imdbId}`, []); + + try { + const results: SearchResult[][] = []; + for (const movieTitle of movieTitles) { + for (const lType of ['', '1080p', '2160p', '720p']) { + const mustHave = []; + let numbers = movieTitle.match(/\b(\d+(\.\d+)?)\b/g); + if (numbers) mustHave.push(...numbers); + const scrapedResults = await scrapeResults( + createAxiosInstance( + new SocksProxyAgent(process.env.PROXY!, { timeout: 10000 }) + ), + `${movieTitle} ${lType}`.trim(), + movieTitle, + mustHave, + lType || '1080p' + ); + if (!scrapedResults.length) continue; + results.push(scrapedResults); + } + } + let processedResults = flattenAndRemoveDuplicates(results); + if (processedResults.length) processedResults = groupByParsedTitle(processedResults); + + await db.saveScrapedResults(`movie:${imdbId}`, processedResults); + + res.status(200).json({ status: `scraped: ${processedResults.length} movie torrents` }); + } catch (error: any) { + res.status(500).json({ + status: 'error', + errorMessage: `An error occurred while scraping Btdigg (${error.message})`, + }); + } + } + + if (tmdbResponse.data.tv_results.length > 0) { + if (!override) { + const isProcessing = await db.keyExists(`processing:${imdbId}`); + if (isProcessing) { + res.status(200).json({ status: 'processing' }); + return; + } + const keyExists = await db.keyExists(`tv:${imdbId}:1`); + if (keyExists) { + res.status(200).json({ status: 'skipped' }); + return; + } + } + + itemType = 'tv'; + tmdbItem = tmdbResponse.data.tv_results[0]; + const cleanTitle = cleanSearchQuery(tmdbItem.name); + tvTitles.push(`"${cleanTitle}"`); + if (tmdbItem.first_air_date) + tvTitles.push(`"${cleanTitle}" ${tmdbItem.first_air_date.substring(0, 4)}`); + + if (tmdbItem.original_name && tmdbItem.original_name !== tmdbItem.name) { + tvTitles.push(`"${tmdbItem.original_name}"`); + if (tmdbItem.first_air_date) + tvTitles.push( + `"${tmdbItem.original_name}" ${tmdbItem.first_air_date.substring(0, 4)}` + ); + } + + await db.saveScrapedResults(`processing:${imdbId}`, []); + + let totalResultsCount = 0; + const showResponse = await axios.get(getMdbInfo(imdbId)); + for (const season of showResponse.data.seasons + ? showResponse.data.seasons + : [{ season_number: 1, episode_count: 0 }]) { + if (season.season_number === 0) continue; + let seasonQueries = tvTitles.map((q) => `${q} "s${padWithZero(season.season_number)}"`); + try { + const results: SearchResult[][] = []; + for (const finalQuery of seasonQueries) { + for (const lType of ['', '1080p', '2160p', '720p']) { + const mustHave = []; + let numbers = finalQuery.match(/\bs?(\d+(\.\d+)?)\b/g); + if (numbers) mustHave.push(...numbers); + const scrapedResults = await scrapeResults( + createAxiosInstance( + new SocksProxyAgent(process.env.PROXY!, { timeout: 10000 }) + ), + `${finalQuery} ${lType}`.trim(), + finalQuery.replace(/\bs\d\d\b/g, ''), + mustHave, + lType || '1080p' + ); + if (!scrapedResults.length) continue; + results.push(scrapedResults); + } + } + let processedResults = flattenAndRemoveDuplicates(results); + if (processedResults.length) + processedResults = groupByParsedTitle(processedResults); + + await db.saveScrapedResults( + `tv:${imdbId}:${season.season_number}`, + processedResults + ); + + totalResultsCount += processedResults.length; + } catch (error: any) { + res.status(500).json({ + status: 'error', + errorMessage: `An error occurred while scraping Btdigg (${error.message})`, + }); + } + // if (season.episode_count === 0) continue; + // for (let i = 1; i <= season.episode_count; i++) { + // seasonQueries = seasonQueries.concat( + // tvTitles.map( + // (q) => + // `${q} "s${padWithZero(season.season_number)}e${padWithZero(i)}"` + // ) + // ); + // } + } + + res.status(200).json({ status: `scraped: ${totalResultsCount} tv torrents` }); + } + + await db.markAsDone(imdbId); } diff --git a/src/utils/freekeys.ts b/src/utils/freekeys.ts index a869710..a04d986 100644 --- a/src/utils/freekeys.ts +++ b/src/utils/freekeys.ts @@ -1,21 +1,21 @@ let tmdb_keys = [ - 'fb7bb23f03b6994dafc674c074d01761', - 'e55425032d3d0f371fc776f302e7c09b', - '8301a21598f8b45668d5711a814f01f6', - '8cf43ad9c085135b9479ad5cf6bbcbda', - 'da63548086e399ffc910fbc08526df05', - '13e53ff644a8bd4ba37b3e1044ad24f3', - '269890f657dddf4635473cf4cf456576', - 'a2f888b27315e62e471b2d587048f32e', - '8476a7ab80ad76f0936744df0430e67c', - '5622cafbfe8f8cfe358a29c53e19bba0', - 'ae4bd1b6fce2a5648671bfc171d15ba4', - '257654f35e3dff105574f97fb4b97035', - '2f4038e83265214a0dcd6ec2eb3276f5', - '9e43f45f94705cc8e1d5a0400d19a7b7', - 'af6887753365e14160254ac7f4345dd2', - '06f10fc8741a672af455421c239a1ffc', - 'fb7bb23f03b6994dafc674c074d01761', - '09ad8ace66eec34302943272db0e8d2c' + 'fb7bb23f03b6994dafc674c074d01761', + 'e55425032d3d0f371fc776f302e7c09b', + '8301a21598f8b45668d5711a814f01f6', + '8cf43ad9c085135b9479ad5cf6bbcbda', + 'da63548086e399ffc910fbc08526df05', + '13e53ff644a8bd4ba37b3e1044ad24f3', + '269890f657dddf4635473cf4cf456576', + 'a2f888b27315e62e471b2d587048f32e', + '8476a7ab80ad76f0936744df0430e67c', + '5622cafbfe8f8cfe358a29c53e19bba0', + 'ae4bd1b6fce2a5648671bfc171d15ba4', + '257654f35e3dff105574f97fb4b97035', + '2f4038e83265214a0dcd6ec2eb3276f5', + '9e43f45f94705cc8e1d5a0400d19a7b7', + 'af6887753365e14160254ac7f4345dd2', + '06f10fc8741a672af455421c239a1ffc', + 'fb7bb23f03b6994dafc674c074d01761', + '09ad8ace66eec34302943272db0e8d2c', ]; export const getTmdbKey = () => tmdb_keys[Math.floor(Math.random() * tmdb_keys.length)]; diff --git a/src/utils/toastOptions.ts b/src/utils/toastOptions.ts new file mode 100644 index 0000000..3316d46 --- /dev/null +++ b/src/utils/toastOptions.ts @@ -0,0 +1,13 @@ +export const globalToastOptions = { + style: { + borderRadius: '10px', + background: 'yellow', + color: '#000', + fontSize: '24px', + }, +}; + +export const searchToastOptions = { + ...globalToastOptions, + icon: '๐Ÿ”', +}; diff --git a/tor.docker-compose.yml b/tor.docker-compose.yml new file mode 100644 index 0000000..7b33a6c --- /dev/null +++ b/tor.docker-compose.yml @@ -0,0 +1,20 @@ +version: '3.9' +services: + tor: + image: debridmediamanager/tor + deploy: + replicas: 100 + + web: + image: debridmediamanager/debrid-media-manager:latest + ports: + - 3000:3000 + env_file: + - .env + - .env.local + depends_on: + - tor + deploy: + replicas: 0 + restart_policy: + condition: on-failure diff --git a/docker-compose.yml b/web.docker-compose.yml similarity index 89% rename from docker-compose.yml rename to web.docker-compose.yml index 590cf0b..6155ac2 100644 --- a/docker-compose.yml +++ b/web.docker-compose.yml @@ -3,7 +3,7 @@ services: tor: image: debridmediamanager/tor deploy: - replicas: 4 + replicas: 0 web: image: debridmediamanager/debrid-media-manager:latest @@ -15,6 +15,6 @@ services: depends_on: - tor deploy: - replicas: 4 + replicas: 16 restart_policy: condition: on-failure From 03bbe255d8cd78f7232f66f7c19866a43498fd48 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sun, 3 Sep 2023 23:02:59 +0200 Subject: [PATCH 082/272] 3.1.0 (#59) * search fixes * add rarbg catch * filter out useless videos * fix requested * mark as completed * fix issue with availability checks * fix search types * Formatting * version bump --- TODO.md | 7 + package-lock.json | 4 +- package.json | 2 +- src/pages/api/keywordsearch.ts | 5 +- src/pages/api/requested.ts | 14 +- src/pages/movie/[imdbid].tsx | 214 ++++--------------- src/pages/show/[imdbid]/[seasonNum].tsx | 261 +++++++++--------------- src/services/allDebrid.ts | 1 + src/services/btdigg-v2.ts | 19 +- src/services/mediasearch.ts | 15 ++ src/services/planetscale.ts | 2 +- src/services/scrapeJobs.ts | 42 ++-- src/utils/instantChecks.ts | 107 ++++++++++ src/utils/selectable.ts | 3 + src/utils/tmdb.ts | 14 ++ 15 files changed, 325 insertions(+), 385 deletions(-) create mode 100644 src/services/mediasearch.ts create mode 100644 src/utils/instantChecks.ts create mode 100644 src/utils/tmdb.ts diff --git a/TODO.md b/TODO.md index 5dcc3ec..a223f3d 100644 --- a/TODO.md +++ b/TODO.md @@ -25,3 +25,10 @@ - [] 3.0.0: Improve search by combining mdblist with TMDB and then using https://www.npmjs.com/package/fast-levenshtein - [] 4.0.0: Add tests - [] 5.0.0: Refactor pages into different components +- [โœ”๏ธ] Fix requested api endpoint +- [] Existing results checker +- [โœ”๏ธ] Add season jumper in shows page +- [] Backup library feature (download library as a file for importing) +- [] Restore library feature +- [โœ”๏ธ] Fix issue with availability check +- [โœ”๏ธ] AD availability check optimization diff --git a/package-lock.json b/package-lock.json index cdeec46..bafcdab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "2.5.6", + "version": "3.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "2.5.6", + "version": "3.1.0", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@google-cloud/firestore": "^6.7.0", diff --git a/package.json b/package.json index 8cde7d2..059c4ba 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "3.0.0", + "version": "3.1.0", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/api/keywordsearch.ts b/src/pages/api/keywordsearch.ts index 464339b..b1d3b9e 100644 --- a/src/pages/api/keywordsearch.ts +++ b/src/pages/api/keywordsearch.ts @@ -34,7 +34,10 @@ const handler: NextApiHandler = async (req, res) => { } try { - const cleanKeyword = encodeURIComponent(keyword.toString().trim().toLowerCase()); + const cleanKeyword = encodeURIComponent( + keyword.toString().replaceAll(/[\W]+/g, ' ').split(' ').join(' ').trim().toLowerCase() + ); + console.log(cleanKeyword); const searchResults = await db.getSearchResults(cleanKeyword); if (searchResults) { res.status(200).json({ results: searchResults.filter((r) => r.imdbid) }); diff --git a/src/pages/api/requested.ts b/src/pages/api/requested.ts index ef60b69..826a7d5 100644 --- a/src/pages/api/requested.ts +++ b/src/pages/api/requested.ts @@ -5,7 +5,7 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword, processing } = req.query; + const { scrapePassword, processing, override } = req.query; if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { res.status(403).json({ status: 'error', @@ -22,18 +22,18 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< return; } } else { - imdbId = await db.getLatestRequest(); + imdbId = await db.getOldestRequest(); console.log('imdbId', imdbId); if (!imdbId) { res.status(200).json({ status: 'done' }); return; } - // const isProcessing = await db.keyExists(`processing:${imdbId}`); - // if (isProcessing) { - // res.status(200).json({ status: 'processing' }); - // return; - // } + const isProcessing = await db.keyExists(`processing:${imdbId}`); + if (isProcessing && override !== 'true') { + res.status(200).json({ status: 'processing' }); + return; + } } await generateScrapeJobs(res, imdbId, true); diff --git a/src/pages/movie/[imdbid].tsx b/src/pages/movie/[imdbid].tsx index 18c7079..d39a2c3 100644 --- a/src/pages/movie/[imdbid].tsx +++ b/src/pages/movie/[imdbid].tsx @@ -1,25 +1,13 @@ import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; import { useDownloadsCache } from '@/hooks/cache'; import useLocalStorage from '@/hooks/localStorage'; -import { - AdInstantAvailabilityResponse, - MagnetFile, - adInstantCheck, - deleteMagnet, - uploadMagnet, -} from '@/services/allDebrid'; -import { Availability, HashAvailability } from '@/services/availability'; -import { - RdInstantAvailabilityResponse, - addHashAsMagnet, - deleteTorrent, - getTorrentInfo, - rdInstantCheck, - selectFiles, -} from '@/services/realDebrid'; +import { deleteMagnet, uploadMagnet } from '@/services/allDebrid'; +import { SearchApiResponse, SearchResult } from '@/services/mediasearch'; +import { addHashAsMagnet, deleteTorrent, getTorrentInfo, selectFiles } from '@/services/realDebrid'; import { getTmdbKey } from '@/utils/freekeys'; -import { groupBy } from '@/utils/groupBy'; +import { instantCheckInAd, instantCheckInRd, wrapLoading } from '@/utils/instantChecks'; import { getSelectableFiles, isVideo } from '@/utils/selectable'; +import { TmdbResponse } from '@/utils/tmdb'; import { searchToastOptions } from '@/utils/toastOptions'; import { withAuth } from '@/utils/withAuth'; import axios from 'axios'; @@ -31,34 +19,12 @@ import { useEffect, useState } from 'react'; import toast, { Toaster } from 'react-hot-toast'; import { FaDownload, FaFastForward, FaTimes } from 'react-icons/fa'; -export type SearchApiResponse = { - results?: SearchResult[]; - errorMessage?: string; -}; - -type SearchResult = { - title: string; - fileSize: number; - hash: string; - available: Availability; -}; - -type TmdbResponse = { - movie_results: { - title: string; - overview: string; - release_date: string; - poster_path: string; - }[]; -}; - function Search() { const [searchState, setSearchState] = useState('loading'); const [searchResults, setSearchResults] = useState([]); const [errorMessage, setErrorMessage] = useState(''); const rdKey = useRealDebridAccessToken(); const adKey = useAllDebridApiKey(); - const [masterAvailability, setMasterAvailability] = useState({}); const [rdCache, rd, rdCacheAdder, removeFromRdCache] = useDownloadsCache('rd'); const [adCache, ad, adCacheAdder, removeFromAdCache] = useDownloadsCache('ad'); const [rdAutoInstantCheck, setRdAutoInstantCheck] = useLocalStorage( @@ -81,8 +47,8 @@ function Search() { ); setMovieInfo(response.data); } catch (error) { - setErrorMessage('There was an error fetching movie info. Please try again.'); console.error(`error fetching movie data`, error); + setErrorMessage('There was an error fetching movie info. Please try again.'); } }; @@ -119,8 +85,10 @@ function Search() { // instant checks const hashArr = response.data.results.map((r) => r.hash); - if (rdKey && rdAutoInstantCheck) await instantCheckInRd(hashArr); - if (adKey && adAutoInstantCheck) await instantCheckInAd(hashArr); + if (rdKey && rdAutoInstantCheck) + wrapLoading('RD', instantCheckInRd(rdKey, hashArr, setSearchResults)); + if (adKey && adAutoInstantCheck) + wrapLoading('AD', instantCheckInAd(adKey, hashArr, setSearchResults)); } else { toast(`No results found`, searchToastOptions); } @@ -130,103 +98,6 @@ function Search() { } }; - useEffect(() => { - setSearchResults((prev) => - prev.map((r) => ({ - ...r, - available: masterAvailability[r.hash], - })) - ); - }, [masterAvailability]); - - const instantCheckInRd = async (hashes: string[]): Promise => { - const rdAvailability = {} as HashAvailability; - - const setInstantFromRd = (resp: RdInstantAvailabilityResponse) => { - for (const masterHash in resp) { - if ('rd' in resp[masterHash] === false) continue; - if (masterAvailability[masterHash] === 'no_videos') continue; - const variants = resp[masterHash]['rd']; - if (!variants.length) rdAvailability[masterHash] = 'no_videos'; - for (const variant of variants) { - for (const fileId in variant) { - const file = variant[fileId]; - if (isVideo({ path: file.filename })) { - rdAvailability[masterHash] = - masterAvailability[masterHash] === 'ad:available' || - masterAvailability[masterHash] === 'all:available' - ? 'all:available' - : 'rd:available'; - - break; - } - } - } - } - }; - - try { - for (const hashGroup of groupBy(100, hashes)) { - if (rdKey) await rdInstantCheck(rdKey, hashGroup).then(setInstantFromRd); - } - toast( - `Found ${ - Object.values(rdAvailability).filter((a) => a.includes(':available')).length - } available in RD`, - searchToastOptions - ); - setMasterAvailability((prevState) => ({ ...prevState, ...rdAvailability })); - } catch (error) { - toast.error( - 'There was an error checking availability in Real-Debrid. Please try again.' - ); - throw error; - } - }; - - const instantCheckInAd = async (hashes: string[]): Promise => { - const adAvailability = {} as HashAvailability; - - const setInstantFromAd = (resp: AdInstantAvailabilityResponse) => { - for (const magnetData of resp.data.magnets) { - const masterHash = magnetData.hash; - if (masterAvailability[masterHash] === 'no_videos') continue; - if (magnetData.instant) { - adAvailability[masterHash] = magnetData.files?.reduce( - (acc: boolean, curr: MagnetFile) => { - if (isVideo({ path: curr.n })) { - return true; - } - return acc; - }, - false - ) - ? masterAvailability[masterHash] === 'rd:available' || - masterAvailability[masterHash] === 'all:available' - ? 'all:available' - : 'ad:available' - : 'no_videos'; - } - } - }; - - try { - for (const hashGroup of groupBy(30, hashes)) { - if (adKey) await adInstantCheck(adKey, hashGroup).then(setInstantFromAd); - } - toast( - `Found ${ - Object.values(adAvailability).filter((a) => a.includes(':available')).length - } available in AD`, - searchToastOptions - ); - setMasterAvailability((prevState) => ({ ...prevState, ...adAvailability })); - } catch (error) { - toast.error('There was an error checking availability in AllDebrid. Please try again.'); - throw error; - } - }; - const handleAddAsMagnetInRd = async ( hash: string, instantDownload: boolean = false, @@ -239,9 +110,9 @@ function Search() { rdCacheAdder.single(`rd:${id}`, hash, instantDownload ? 'downloaded' : 'downloading'); handleSelectFiles(`rd:${id}`, true); // add rd: to account for substr(3) in handleSelectFiles } catch (error) { + console.error(error); if (!disableToast) toast.error('There was an error adding as magnet. Please try again.'); - throw error; } }; @@ -262,18 +133,12 @@ function Search() { instantDownload ? 'downloaded' : 'downloading' ); } catch (error) { + console.error(error); if (!disableToast) toast.error('There was an error adding as magnet. Please try again.'); - throw error; } }; - const isAvailableInRd = (result: SearchResult) => - result.available === 'rd:available' || result.available === 'all:available'; - const isAvailableInAd = (result: SearchResult) => - result.available === 'ad:available' || result.available === 'all:available'; - const hasNoVideos = (result: SearchResult) => result.available === 'no_videos'; - const handleDeleteTorrent = async (id: string, disableToast: boolean = false) => { try { if (!rdKey && !adKey) throw new Error('no_keys'); @@ -283,8 +148,8 @@ function Search() { if (id.startsWith('rd:')) removeFromRdCache(id); if (id.startsWith('ad:')) removeFromAdCache(id); } catch (error) { + console.error(error); if (!disableToast) toast.error(`Error deleting torrent (${id})`); - throw error; } }; @@ -292,6 +157,7 @@ function Search() { try { if (!rdKey) throw new Error('no_rd_key'); const response = await getTorrentInfo(rdKey, id.substring(3)); + console.log(response); if (response.filename === 'Magnet') return; // no files yet const selectedFiles = getSelectableFiles(response.files.filter(isVideo)).map( @@ -304,6 +170,7 @@ function Search() { await selectFiles(rdKey, id.substring(3), selectedFiles); } catch (error) { + console.error(error); if ((error as Error).message === 'no_files_for_selection') { if (!disableToast) toast.error(`No files for selection, deleting (${id})`, { @@ -312,7 +179,6 @@ function Search() { } else { if (!disableToast) toast.error(`Error selecting files (${id})`); } - throw error; } }; @@ -399,12 +265,15 @@ function Search() { > + )} + {rdKey && rd.notInLibrary(r.hash) && ( - )} - {rdKey && rd.notInLibrary(r.hash) && ( - + )} + {ad.isDownloading(r.hash) && + adCache![r.hash].id && ( + )} - - )} - {ad.isDownloading(r.hash) && - adCache![r.hash].id && ( + {adKey && ad.notInLibrary(r.hash) && ( - )} - {adKey && ad.notInLibrary(r.hash) && ( - - )} + + )} + - - ))} + ); + })} @@ -498,14 +484,18 @@ const getMdbInfo = (imdbId: string) => `https://mdblist.com/api/?apikey=${mdblis export const getServerSideProps: GetServerSideProps = async (context) => { const { params } = context; let season_count = 1; + let season_names = []; const showResponse = await axios.get(getMdbInfo(params!.imdbid as string)); if (showResponse.data.type === 'show' && showResponse.data.seasons?.length !== 0) { - const seasons = showResponse.data.seasons - .filter((season: any) => season.season_number > 0) - .map((season: any) => { + const seasons = showResponse.data.seasons.filter((season: any) => season.season_number > 0); + season_count = Math.max( + ...seasons.map((season: any) => { return season.season_number; - }); - season_count = Math.max(...seasons); + }) + ); + season_names = seasons.map((season: any) => { + return season.name; + }); if (params!.seasonNum && parseInt(params!.seasonNum as string) > season_count) { return { @@ -516,7 +506,7 @@ export const getServerSideProps: GetServerSideProps = async (context) => { }; } } - return { props: { season_count } }; + return { props: { season_count, season_names } }; }; export default withAuth(Search); diff --git a/src/services/btdigg-v2.ts b/src/services/btdigg-v2.ts index 12120c4..3e8f363 100644 --- a/src/services/btdigg-v2.ts +++ b/src/services/btdigg-v2.ts @@ -5,11 +5,14 @@ import UserAgent from 'user-agents'; import { ScrapeSearchResult } from './mediasearch'; const BTDIG = 'http://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion'; -// const BTDIG = 'http://btdig.com'; +// const BTDIG = 'https://en.btdig.com'; +const MAX_RESULTS_PER_PAGE = 10; +const BAD_RESULT_THRESHOLD = 20; export const createAxiosInstance = (agent: SocksProxyAgent) => { return axios.create({ - httpAgent: BTDIG.endsWith('.onion') ? agent : undefined, + httpAgent: BTDIG.startsWith('http://') ? agent : undefined, + // httpsAgent: BTDIG.startsWith('https://') ? agent : undefined, headers: { accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'accept-language': 'en-US,en;q=0.5', @@ -53,190 +56,227 @@ function convertToMB(fileSizeStr: string) { return Math.round(fileSize); // returns the rounded integer value } -const dhtSearchHostname = `${BTDIG}`; +const createSearchUrl = (finalQuery: string, pg: number) => + `${BTDIG}/search?order=0&q=${encodeURIComponent(finalQuery)}&p=${pg - 1}`; -export async function scrapeResults( +type ProcessPageResult = { + results: ScrapeSearchResult[]; + badCount: number; + numResults: number; +}; + +const processPage = async ( client: AxiosInstance, finalQuery: string, targetTitle: string, mustHaveTerms: string[], - libraryType: string -): Promise { + is2160p: boolean, + pageNum: number +): Promise => { + const MAX_RETRIES = 5; // maximum number of retries + const RETRY_DELAY = 1500; // initial delay in ms, doubles with each retry + + let results: ScrapeSearchResult[] = []; + let badCount = 0; + let retries = 0; // current number of retries + let responseData = ''; + let numResults = 0; + const searchUrl = createSearchUrl(finalQuery, pageNum); while (true) { try { - let pageNum = 1; - - const createSearchUrl = (pg: number) => - `${dhtSearchHostname}/search?order=0&q=${encodeURIComponent(finalQuery)}&p=${ - pg - 1 - }`; - - const BAD_RESULT_THRESHOLD = 15; - let badResults = 0; - let searchResultsArr = []; - - const MAX_RETRIES = 5; // maximum number of retries - const RETRY_DELAY = 1500; // initial delay in ms, doubles with each retry - - while (pageNum <= 100) { - console.log(`Scraping page ${pageNum} (${finalQuery})...`, new Date().getTime()); - let retries = 0; // current number of retries - let responseData = ''; - let numResults = 0; - const searchUrl = createSearchUrl(pageNum); - while (true) { - try { - const response = await client.get(searchUrl); - responseData = response.data; - const numResultsStr = responseData.match(/(\d+) results found/) || []; - numResults = parseInt(numResultsStr[1], 10); - retries = 0; - break; - } catch (error: any) { - console.error( - `Error scraping page ${pageNum} (${finalQuery})`, - error.message - ); - if (error.message.includes('status code 404') && pageNum === 1) { - console.error('404 error, aborting search'); - throw error; - } - if ( - error.message.includes('status code 429') || - error.message.includes('"socket" was not created') - ) { - console.log('Waiting 5 seconds before retrying...'); - await new Promise((resolve) => setTimeout(resolve, 5000)); - } else { - retries++; - if (retries > MAX_RETRIES) { - console.error( - `Max retries reached (${MAX_RETRIES}), aborting search` - ); - throw error; - } - } - const delay = RETRY_DELAY * Math.pow(2, retries - 1); - await new Promise((resolve) => setTimeout(resolve, delay)); - } + const response = await client.get(searchUrl); + responseData = response.data; + const numResultsStr = responseData.match(/(\d+) results found/) || []; + numResults = parseInt(numResultsStr[1], 10); + retries = 0; + break; + } catch (error: any) { + if (error.message.includes('status code 404') && pageNum === 1) { + console.error('404 error, aborting search'); + return { results, badCount: MAX_RESULTS_PER_PAGE, numResults }; + } else if ( + error.message.includes('status code 429') || + error.message.includes('"socket" was not created') + ) { + console.log('waiting an extra 10 seconds before retrying...'); + await new Promise((resolve) => setTimeout(resolve, 10000)); + } else { + console.log('request error:', error.message); + retries++; + if (retries > MAX_RETRIES) { + console.error(`Max retries reached (${MAX_RETRIES}), aborting search`); + return { results, badCount: MAX_RESULTS_PER_PAGE, numResults }; } - const fileSizes = Array.from( - responseData.matchAll( - /class=\"torrent_size\"[^>]*>(\d+(?:\.\d+)?)(?:[^A-Z<]+)?([A-Z]+)?/g - ) - ); - const namesAndHashes = Array.from( - responseData.matchAll(/magnet:\?xt=urn:btih:([a-z\d]{40})&dn=([^&]+)&/g) - ); + } + const delay = RETRY_DELAY * Math.pow(2, retries - 1); + await new Promise((resolve) => setTimeout(resolve, delay)); + } + } + console.log( + `${pageNum}/${calculateMaxPages( + numResults + )} : ${finalQuery}, ${targetTitle}, ${mustHaveTerms}` + ); + const fileSizes = Array.from( + responseData.matchAll(/class=\"torrent_size\"[^>]*>(\d+(?:\.\d+)?)(?:[^A-Z<]+)?([A-Z]+)?/g) + ); + const namesAndHashes = Array.from( + responseData.matchAll(/magnet:\?xt=urn:btih:([a-z\d]{40})&dn=([^&]+)&/g) + ); - if (fileSizes.length !== namesAndHashes.length) { - console.warn('Mismatch in file sizes and names'); - break; - } + if (fileSizes.length !== namesAndHashes.length) { + console.warn('Mismatch in file sizes and names'); + return { results, badCount: MAX_RESULTS_PER_PAGE, numResults }; + } - for (let resIndex = 0; resIndex < fileSizes.length; resIndex++) { - console.log(` current count of searchResultsArr:`, searchResultsArr.length); - const title = decodeURIComponent( - namesAndHashes[resIndex][2].replaceAll('+', ' ') - ); - const fileSizeStr = `${fileSizes[resIndex][1]} ${ - fileSizes[resIndex][2] || 'B' - }`; - - if ( - !fileSizeStr.includes('GB') && - (libraryType === '2160p' || !fileSizeStr.includes('MB')) - ) { - badResults++; - continue; - } - - // immediately check if filesize makes sense - const fileSize = convertToMB(fileSizeStr); - if (getMediaType(title) === 'movie' && fileSize > 150000) { - badResults++; // movie is too big - continue; - } - // if file size is too small, skip - if (fileSizeStr.includes(' B') || fileSizeStr.includes(' KB')) { - badResults++; - continue; - } - - // Check if every term in the query (tokenized by space) is contained in the title - const queryTerms = targetTitle - .replaceAll('"', ' ') - .split(' ') - .filter((e) => e !== ''); - let requiredTerms = - queryTerms.length <= 3 ? queryTerms.length : queryTerms.length - 1; - const containedTerms = queryTerms.filter((term) => - new RegExp(`${term.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&')}`).test( - title.toLowerCase() - ) - ).length; - console.log(`check params >`, title, queryTerms, mustHaveTerms); - if (containedTerms < requiredTerms) { - console.log('ERR not enough title terms!'); - badResults++; // title doesn't contain most terms in the query - continue; - } - const containedMustHaveTerms = mustHaveTerms.filter((term) => - new RegExp(`${term}`).test(title.toLowerCase()) - ).length; - if (containedMustHaveTerms < mustHaveTerms.length) { - console.log('ERR not enough must have terms!'); - badResults++; - continue; - } - if ( - !/\b360p|\b480p|\b576p|\b720p|\b1080p|\b2160p|dvd[^\w]?rip|dvd[^\w]?scr|\bx264\b|\bx265\b|\bxvid\b|\bdivx\b|\bav1\b|bd[^\w]?rip|br[^\w]?rip|hd[^\w]?rip|ppv[^\w]?rip|web[^\w]?rip|cam[^\w]?rip|\bcam\b|\bts\b|\bhdtc\b|\bscreener\b|\br5\b/i.test( - title.toLowerCase() - ) - ) { - badResults++; // doesn't contain video resolution fragments or clues in the title - continue; - } - if (libraryType === '2160p') { - if (!/\b2160p\b|\buhd\b/i.test(title.toLowerCase())) { - continue; - } - } - - const hash = namesAndHashes[resIndex][1]; - - let resultObj = { - title, - fileSize, - hash, - }; - searchResultsArr.push(resultObj); - // Reset ignoredResults counter - badResults = 0; - } + for (let resIndex = 0; resIndex < fileSizes.length; resIndex++) { + const title = decodeURIComponent(namesAndHashes[resIndex][2].replaceAll('+', ' ')); + const fileSizeStr = `${fileSizes[resIndex][1]} ${fileSizes[resIndex][2] || 'B'}`; - // Stop execution if the last $BAD_RESULT_THRESHOLD results were ignored - if (badResults >= BAD_RESULT_THRESHOLD) { - console.log( - `Stopped execution after ${pageNum} pages because the last ${BAD_RESULT_THRESHOLD} results were ignored.` - ); - break; - } + if (!fileSizeStr.includes('GB') && (is2160p || !fileSizeStr.includes('MB'))) { + badCount++; + continue; + } - if (numResults > pageNum * 10) { - pageNum++; - } else { - // No more pages, exit the loop - break; - } + // immediately check if filesize makes sense + const fileSize = convertToMB(fileSizeStr); + if (getMediaType(title) === 'movie' && fileSize > 150000) { + badCount++; // movie is too big + continue; + } + // if file size is too small, skip + if (fileSizeStr.includes(' B') || fileSizeStr.includes(' KB')) { + badCount++; + continue; + } + + // Check if every term in the query (tokenized by space) is contained in the title + const queryTerms = targetTitle + .replaceAll('"', ' ') + .split(' ') + .filter((e) => e !== ''); + let requiredTerms = queryTerms.length <= 3 ? queryTerms.length : queryTerms.length - 1; + const containedTerms = queryTerms.filter((term) => + new RegExp(`${term.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&')}`).test(title.toLowerCase()) + ).length; + if (containedTerms < requiredTerms) { + badCount++; // title doesn't contain most terms in the query + continue; + } + const containedMustHaveTerms = mustHaveTerms.filter((term) => + new RegExp(`${term}`).test(title.toLowerCase()) + ).length; + if (containedMustHaveTerms < mustHaveTerms.length) { + badCount++; + continue; + } + if ( + !/\b360p|\b480p|\b576p|\b720p|\b1080p|\b2160p|dvd[^\w]?rip|dvd[^\w]?scr|\bx264\b|\bx265\b|\bxvid\b|\bdivx\b|\bav1\b|bd[^\w]?rip|br[^\w]?rip|hd[^\w]?rip|ppv[^\w]?rip|web[^\w]?rip|cam[^\w]?rip|\bcam\b|\bts\b|\bhdtc\b|\bscreener\b|\br5\b/i.test( + title.toLowerCase() + ) + ) { + badCount++; // doesn't contain video resolution fragments or clues in the title + continue; + } + if (is2160p) { + if (!/\b2160p\b|\buhd\b/i.test(title.toLowerCase())) { + continue; } + } + + const hash = namesAndHashes[resIndex][1]; + + let resultObj = { + title, + fileSize, + hash, + }; + results.push(resultObj); + } + + return { results, badCount, numResults }; +}; - console.log(`>>>>>> Found ${searchResultsArr.length} results (${finalQuery})`); +function calculateMaxPages( + numResults: number, + resultsPerPage: number = 10, + maxPageNum: number = 100 +): number { + let totalPages = Math.ceil(numResults / resultsPerPage); + return totalPages > maxPageNum ? maxPageNum : totalPages; +} + +async function processInBatches( + promises: (() => Promise)[], + batchSize: number +): Promise { + let searchResultsArr: ScrapeSearchResult[] = []; + let i = 0; + while (i < promises.length) { + let totalBadCount = 0; + const promisesResults = await Promise.all( + promises.slice(i, i + batchSize).map(async (e) => await e()) + ); + const results = promisesResults.reduce( + (acc: ScrapeSearchResult[], val: ProcessPageResult) => acc.concat(val.results), + [] + ); + totalBadCount = promisesResults.reduce( + (acc: number, val: ProcessPageResult) => (acc += val.badCount), + totalBadCount + ); + searchResultsArr.push(...results); + i += batchSize; + if (totalBadCount >= BAD_RESULT_THRESHOLD) { + break; + } + } + return searchResultsArr; +} - return searchResultsArr; +export async function scrapeResults( + client: AxiosInstance, + finalQuery: string, + targetTitle: string, + mustHaveTerms: string[], + is2160p: boolean = false +): Promise { + let searchResultsArr: ScrapeSearchResult[] = []; + while (true) { + console.log(`fetching search results for "${finalQuery}"...`); + try { + let pageNum = 1; + const { results, numResults } = await processPage( + client, + finalQuery, + targetTitle, + mustHaveTerms, + is2160p, + pageNum++ + ); + searchResultsArr.push(...results); + const maxPages = calculateMaxPages(numResults); + let promises: (() => Promise)[] = []; + while (pageNum <= maxPages) { + promises.push( + ((pageNum) => async () => { + return await processPage( + client, + finalQuery, + targetTitle, + mustHaveTerms, + is2160p, + pageNum + ); + })(pageNum) + ); + pageNum++; + } + searchResultsArr.push(...(await processInBatches(promises, 2))); } catch (error) { console.error('fetchSearchResults page processing error', error); await new Promise((resolve) => setTimeout(resolve, 5000)); } + return searchResultsArr; } } diff --git a/src/services/movieScraper.ts b/src/services/movieScraper.ts new file mode 100644 index 0000000..24c3788 --- /dev/null +++ b/src/services/movieScraper.ts @@ -0,0 +1,106 @@ +import { getMdbInfo } from '@/utils/mdblist'; +import { cleanSearchQuery } from '@/utils/search'; +import axios from 'axios'; +import { SocksProxyAgent } from 'socks-proxy-agent'; +import { + createAxiosInstance, + flattenAndRemoveDuplicates, + groupByParsedTitle, + scrapeResults, +} from './btdigg-v2'; +import { ScrapeSearchResult } from './mediasearch'; +import { PlanetScaleCache } from './planetscale'; + +type MovieScrapeJob = { + title: string; + originalTitle?: string; + cleanedTitle?: string; + year?: string; +}; + +const getMovieSearchResults = async (job: MovieScrapeJob) => { + const http = createAxiosInstance( + new SocksProxyAgent(process.env.PROXY!, { timeout: parseInt(process.env.REQUEST_TIMEOUT!) }) + ); + + let sets: ScrapeSearchResult[][] = []; + + sets.push(await scrapeResults(http, `"${job.title}" ${job.year ?? ''}`, job.title, [], false)); + + if (job.originalTitle) { + sets.push( + await scrapeResults( + http, + `"${job.originalTitle}" ${job.year ?? ''}`, + job.originalTitle, + [], + false + ) + ); + } + + if (job.cleanedTitle) { + sets.push( + await scrapeResults( + http, + `"${job.cleanedTitle}" ${job.year ?? ''}`, + job.cleanedTitle, + [], + false + ) + ); + } + + return sets; +}; + +export async function scrapeMovies( + imdbId: string, + tmdbItem: any, + db: PlanetScaleCache +): Promise { + console.log(`Scraping ${tmdbItem.title} (${imdbId})...`); + const cleanTitle = cleanSearchQuery(tmdbItem.title); + const year = tmdbItem.release_date?.substring(0, 4); + + let originalTitle, cleanedTitle; + if (tmdbItem.original_title && tmdbItem.original_title !== tmdbItem.title) { + originalTitle = tmdbItem.original_title.toLowerCase(); + const mdbItem = await axios.get(getMdbInfo(imdbId)); + for (let rating of mdbItem.data.ratings) { + if (rating.source === 'tomatoes') { + if (!rating.url) continue; + const tomatoTitle = ( + rating.url.includes('/m/') + ? rating.url.split('/m/')[1] + : rating.url.split('/tv/')[1] + ).replaceAll('_', ' '); + if (tomatoTitle.match(/^\d{6,}/)) continue; + cleanedTitle = tomatoTitle + .replaceAll(/[\W]+/g, ' ') + .split(' ') + .join(' ') + .trim() + .toLowerCase(); + } + } + } + + await db.saveScrapedResults(`processing:${imdbId}`, []); + + const searchResults = await getMovieSearchResults({ + title: cleanTitle, + originalTitle, + cleanedTitle, + year, + }); + let processedResults = flattenAndRemoveDuplicates(searchResults); + if (processedResults.length) processedResults = groupByParsedTitle(processedResults); + + await db.saveScrapedResults(`movie:${imdbId}`, processedResults); + console.log(`Saved ${processedResults.length} results for ${cleanTitle}`); + + await db.markAsDone(imdbId); + + return processedResults.length; +} diff --git a/src/services/scrapeJobs.ts b/src/services/scrapeJobs.ts index 891c888..916191e 100644 --- a/src/services/scrapeJobs.ts +++ b/src/services/scrapeJobs.ts @@ -1,44 +1,48 @@ -import { - createAxiosInstance, - flattenAndRemoveDuplicates, - groupByParsedTitle, - scrapeResults, -} from '@/services/btdigg-v2'; import axios from 'axios'; import { NextApiResponse } from 'next'; -import { SocksProxyAgent } from 'socks-proxy-agent'; -import { ScrapeSearchResult } from './mediasearch'; +import { scrapeMovies } from './movieScraper'; import { PlanetScaleCache } from './planetscale'; +import { scrapeTv } from './tvScraper'; const tmdbKey = process.env.TMDB_KEY; -const mdblistKey = process.env.MDBLIST_KEY; -const getTmdbInfo = (imdbId: string) => +const getTmdbSearch = (imdbId: string) => `https://api.themoviedb.org/3/find/${imdbId}?api_key=${tmdbKey}&external_source=imdb_id`; -const getMdbInfo = (imdbId: string) => `https://mdblist.com/api/?apikey=${mdblistKey}&i=${imdbId}`; -function padWithZero(num: number) { - if (num < 10) { - return '0' + num; - } else { - return num.toString(); +const mdbKey = process.env.MDBLIST_KEY; +const getMdbInfo = (imdbId: string) => `https://mdblist.com/api/?apikey=${mdbKey}&i=${imdbId}`; +const getTmdbTvInfo = (tmdbId: string) => + `https://api.themoviedb.org/3/tv/${tmdbId}?api_key=${tmdbKey}`; +const getTmdbMovieInfo = (tmdbId: string) => + `https://api.themoviedb.org/3/movie/${tmdbId}?api_key=${tmdbKey}`; + +const db = new PlanetScaleCache(); + +const isAlreadyScraped = async ( + mediaType: string, + imdbId: string, + res: NextApiResponse +): Promise => { + const keyExists = await db.keyExists( + `${mediaType}:${imdbId}${mediaType === 'tv' ? ':1' : ''}'}` + ); + if (keyExists) { + res.status(200).json({ status: 'skipped' }); + return true; } -} -const cleanSearchQuery = (search: string): string => { - return search - .split(/[\s\(\)\[\]\{\}\+\\\^\|ยท\?]/) // split the search query into an array of elements - .filter((e) => e !== '') // filter out any empty elements - .map((e) => e.toLowerCase()) // convert each element to lowercase - .join(' ') // join the remaining elements with a single space - .replace(/[รกร รครข]/g, 'a') // replace certain characters with their equivalent - .replace(/[รฉรจรซรช]/g, 'e') - .replace(/[รญรฌรฏรฎ]/g, 'i') - .replace(/[รณรฒรถรด]/g, 'o') - .replace(/[รบรนรผรป]/g, 'u') - .replaceAll(':', ' ') - .replace(/\s+/g, ' ') // replace multiple spaces with a single space - .trim(); + const isProcessing = await db.keyExists(`processing:${imdbId}`); + if (isProcessing) { + res.status(200).json({ status: 'processing' }); + return true; + } + return false; }; -const db = new PlanetScaleCache(); +function convertMdbToTmdb(apiResponse: any) { + return { + title: apiResponse.title, + release_date: apiResponse.released, + // original_title: apiResponse.original_title, // This field does not exist in the provided API response + }; +} export type ScrapeResponse = { status: string; @@ -50,185 +54,102 @@ export async function generateScrapeJobs( imdbId: string, override: boolean = false ) { - // imdbId to search for - const tmdbResponse = await axios.get(getTmdbInfo(imdbId)); - - const movieTitles: string[] = []; - const tvTitles: string[] = []; + let tmdbResponse; + try { + tmdbResponse = await axios.get(getTmdbSearch(imdbId)); + } catch (error: any) { + res.status(500).json({ + status: 'error', + errorMessage: `an error occurred while fetching TMDB info (${error.message})`, + }); + return; + } - let tmdbItem: any = {}; - let itemType: 'movie' | 'tv' = 'movie'; + if (tmdbResponse.data.movie_results?.length > 0) { + if (!override && (await isAlreadyScraped('movie', imdbId, res))) return; - if (tmdbResponse.data.movie_results.length > 0) { - if (!override) { - const isProcessing = await db.keyExists(`processing:${imdbId}`); - if (isProcessing) { - res.status(200).json({ status: 'processing' }); - return; - } - const keyExists = await db.keyExists(`movie:${imdbId}`); - if (keyExists) { - res.status(200).json({ status: 'skipped' }); - return; - } + try { + const resultsCount = await scrapeMovies(imdbId, tmdbResponse.data.movie_results[0], db); + res.status(200).json({ status: `scraped: ${resultsCount} movie torrents` }); + } catch (error: any) { + res.status(500).json({ + status: 'error', + errorMessage: `an error occurred while scraping Btdigg for movies (${error.message})`, + }); } - itemType = 'movie'; - tmdbItem = tmdbResponse.data.movie_results[0]; - const cleanTitle = cleanSearchQuery(tmdbItem.title); - const titleLength = cleanTitle.split(' ').length; - if (titleLength > 2) movieTitles.push(`"${cleanTitle}"`); - if (tmdbItem.release_date) - movieTitles.push(`"${cleanTitle}" ${tmdbItem.release_date.substring(0, 4)}`); - - if (tmdbItem.original_title && tmdbItem.original_title !== tmdbItem.title) { - movieTitles.push(`"${tmdbItem.original_title}"`); - if (tmdbItem.release_date) - movieTitles.push( - `"${tmdbItem.original_title}" ${tmdbItem.release_date.substring(0, 4)}` - ); - const mdbItem = await axios.get(getMdbInfo(imdbId)); - for (let rating of mdbItem.data.ratings) { - if (rating.source === 'tomatoes') { - if (!rating.url) continue; - const cleanedTitle = ( - rating.url.includes('/m/') - ? rating.url.split('/m/')[1] - : rating.url.split('/tv/')[1] - ).replaceAll('_', ' '); - if (cleanedTitle.match(/^\d{6,}/)) continue; - movieTitles.push(`"${cleanedTitle}"`); - if (tmdbItem.release_date) - movieTitles.push( - `"${cleanedTitle}" ${tmdbItem.release_date.substring(0, 4)}` - ); - } - } - } + return; + } - await db.saveScrapedResults(`processing:${imdbId}`, []); + if (tmdbResponse.data.tv_results?.length > 0) { + if (!override && (await isAlreadyScraped('tv', imdbId, res))) return; try { - const results = []; - for (const movieTitle of movieTitles) { - for (const lType of ['', '1080p', '2160p', '720p']) { - const mustHave = []; - let numbers = movieTitle.match(/\b(\d+(\.\d+)?)\b/g); - if (numbers) mustHave.push(...numbers); - const scrapedResults = await scrapeResults( - createAxiosInstance( - new SocksProxyAgent(process.env.PROXY!, { timeout: 10000 }) - ), - `${movieTitle} ${lType}`.trim(), - movieTitle, - mustHave, - lType || '1080p' - ); - if (!scrapedResults.length) continue; - results.push(scrapedResults); - } - } - let processedResults = flattenAndRemoveDuplicates(results); - if (processedResults.length) processedResults = groupByParsedTitle(processedResults); - - await db.saveScrapedResults(`movie:${imdbId}`, processedResults); - - res.status(200).json({ status: `scraped: ${processedResults.length} movie torrents` }); - await db.markAsDone(imdbId); + const resultsCount = await scrapeTv(imdbId, tmdbResponse.data.tv_results[0], db); + res.status(200).json({ status: `scraped: ${resultsCount} tv torrents` }); } catch (error: any) { res.status(500).json({ status: 'error', - errorMessage: `An error occurred while scraping Btdigg (${error.message})`, + errorMessage: `an error occurred while scraping Btdigg for tv (${error.message})`, }); } return; } - if (tmdbResponse.data.tv_results.length > 0) { - if (!override) { - const isProcessing = await db.keyExists(`processing:${imdbId}`); - if (isProcessing) { - res.status(200).json({ status: 'processing' }); - return; - } - const keyExists = await db.keyExists(`tv:${imdbId}:1`); - if (keyExists) { - res.status(200).json({ status: 'skipped' }); - return; - } + if (!tmdbResponse.data.movie_results?.length && !tmdbResponse.data.tv_results?.length) { + let mdbResponse; + try { + mdbResponse = await axios.get(getMdbInfo(imdbId)); + } catch (error: any) { + res.status(500).json({ + status: 'error', + errorMessage: `an error occurred while fetching MDB info (${error.message})`, + }); + return; } - itemType = 'tv'; - tmdbItem = tmdbResponse.data.tv_results[0]; - const cleanTitle = cleanSearchQuery(tmdbItem.name); - tvTitles.push(`"${cleanTitle}"`); - if (tmdbItem.first_air_date) - tvTitles.push(`"${cleanTitle}" ${tmdbItem.first_air_date.substring(0, 4)}`); - - if (tmdbItem.original_name && tmdbItem.original_name !== tmdbItem.name) { - tvTitles.push(`"${tmdbItem.original_name}"`); - if (tmdbItem.first_air_date) - tvTitles.push( - `"${tmdbItem.original_name}" ${tmdbItem.first_air_date.substring(0, 4)}` - ); - } + if (mdbResponse.data.response) { + const mediaType = mdbResponse.data.type === 'show' ? 'tv' : 'movie'; + if (!override && (await isAlreadyScraped(mediaType, imdbId, res))) return; + + const tmdbId = mdbResponse.data.tmdbid; + + if (mediaType === 'movie') { + try { + const tmdbResponse = await axios.get(getTmdbMovieInfo(tmdbId)); + const resultsCount = await scrapeMovies(imdbId, tmdbResponse.data, db); + res.status(200).json({ status: `scraped: ${resultsCount} tv torrents` }); + } catch (error: any) { + res.status(500).json({ + status: 'error', + errorMessage: `an error occurred while scraping Btdigg for movie (${error.message})`, + }); + } - await db.saveScrapedResults(`processing:${imdbId}`, []); - - let totalResultsCount = 0; - const showResponse = await axios.get(getMdbInfo(imdbId)); - let lastError = null; - for (const season of showResponse.data.seasons - ? showResponse.data.seasons - : [{ season_number: 1, episode_count: 0 }]) { - if (season.season_number === 0) continue; - let seasonQueries = tvTitles.map((q) => `${q} "s${padWithZero(season.season_number)}"`); - try { - const results: ScrapeSearchResult[][] = []; - for (const finalQuery of seasonQueries) { - for (const lType of ['', '1080p', '2160p', '720p']) { - const mustHave = []; - let numbers = finalQuery.match(/\bs?(\d+(\.\d+)?)\b/g); - if (numbers) mustHave.push(...numbers); - const scrapedResults = await scrapeResults( - createAxiosInstance( - new SocksProxyAgent(process.env.PROXY!, { timeout: 10000 }) - ), - `${finalQuery} ${lType}`.trim(), - finalQuery.replace(/\bs\d\d\b/g, ''), - mustHave, - lType || '1080p' - ); - if (!scrapedResults.length) continue; - results.push(scrapedResults); - } + return; + } else if (mediaType === 'tv') { + try { + const tmdbResponse = await axios.get(getTmdbTvInfo(tmdbId)); + const resultsCount = await scrapeTv(imdbId, tmdbResponse.data, db); + res.status(200).json({ status: `scraped: ${resultsCount} tv torrents` }); + } catch (error: any) { + res.status(500).json({ + status: 'error', + errorMessage: `an error occurred while scraping Btdigg for tv (${error.message})`, + }); } - let processedResults = flattenAndRemoveDuplicates(results); - if (processedResults.length) - processedResults = groupByParsedTitle(processedResults); - - await db.saveScrapedResults( - `tv:${imdbId}:${season.season_number}`, - processedResults - ); - - totalResultsCount += processedResults.length; - } catch (error: any) { - lastError = error; - } - } - if (lastError) { - res.status(500).json({ - status: 'error', - errorMessage: `An error occurred while scraping Btdigg (${lastError.message})`, - }); - } else { - await db.markAsDone(imdbId); - res.status(200).json({ status: `scraped: ${totalResultsCount} tv torrents` }); + return; + } } - return; + await db.saveScrapedResults(`movie:${imdbId}`, []); + await db.saveScrapedResults(`tv:${imdbId}:1`, []); + await db.markAsDone(imdbId); + res.status(404).json({ + status: 'error', + errorMessage: 'no movie or TV show found for this ID', + }); } } diff --git a/src/services/tvScraper.ts b/src/services/tvScraper.ts new file mode 100644 index 0000000..b545ded --- /dev/null +++ b/src/services/tvScraper.ts @@ -0,0 +1,184 @@ +import { getMdbInfo } from '@/utils/mdblist'; +import { cleanSearchQuery } from '@/utils/search'; +import axios from 'axios'; +import { SocksProxyAgent } from 'socks-proxy-agent'; +import { + createAxiosInstance, + flattenAndRemoveDuplicates, + groupByParsedTitle, + scrapeResults, +} from './btdigg-v2'; +import { ScrapeSearchResult } from './mediasearch'; +import { PlanetScaleCache } from './planetscale'; + +type TvScrapeJob = { + title: string; + originalTitle?: string; + seasonNumber: number; + seasonName?: string; + seasonCode?: number; + seasonYear?: string; +}; + +function padWithZero(num: number) { + if (num < 10) { + return '0' + num; + } else { + return num.toString(); + } +} + +const getSeasons = (showResponse: any) => + showResponse.data.seasons || [{ season_number: 1, episode_count: 0 }]; + +const getSeasonNameAndCode = (season: any) => { + let seasonName, seasonCode; + let parts = season.name.split(/\s+/); + for (let i = parts.length - 1; i >= 0; i--) { + let match = parts[i].match(/\(?(\d+)\)?$/); + if (match) { + seasonCode = parseInt(match[1]); + parts[i] = ''; + break; + } + } + seasonName = cleanSearchQuery(parts.join(' ').trim()); + if (/series|season/.test(seasonName)) seasonName = undefined; + return { seasonName, seasonCode }; +}; + +const getSeasonYear = (season: any) => season.air_date?.substring(0, 4); + +const getSearchResults = async (job: TvScrapeJob) => { + const http = createAxiosInstance( + new SocksProxyAgent(process.env.PROXY!, { timeout: parseInt(process.env.REQUEST_TIMEOUT!) }) + ); + + let sets: ScrapeSearchResult[][] = []; + + sets.push( + await scrapeResults( + http, + `"${job.title}" s${padWithZero(job.seasonNumber)}`, + job.title, + [`${job.seasonNumber}`], + false + ) + ); + + if (job.seasonName && job.seasonCode) { + sets.push( + await scrapeResults( + http, + `"${job.title}" "${job.seasonName}" s${padWithZero(job.seasonCode)}`, + job.title, + [`${job.seasonCode}`, ...job.seasonName.split(/\s/)], + false + ) + ); + } else if (job.seasonName && job.seasonName !== job.title) { + sets.push( + await scrapeResults( + http, + `"${job.title}" "${job.seasonName}"`, + job.title, + [...job.seasonName.split(/\s/)], + false + ) + ); + } + + if (!job.originalTitle) return sets; + + let sets2: ScrapeSearchResult[][] = []; + + sets2.push( + await scrapeResults( + http, + `"${job.originalTitle}" s${padWithZero(job.seasonNumber)}`, + job.originalTitle, + [`${job.seasonNumber}`], + false + ) + ); + if (job.seasonName && job.seasonCode) { + sets2.push( + await scrapeResults( + http, + `"${job.originalTitle}" "${job.seasonName}" s${padWithZero(job.seasonCode)}`, + job.originalTitle, + [`${job.seasonCode}`, ...job.seasonName.split(/\s/)], + false + ) + ); + } else if (job.seasonName && job.seasonName !== job.originalTitle) { + sets2.push( + await scrapeResults( + http, + `"${job.originalTitle}" "${job.seasonName}"`, + job.originalTitle, + [...job.seasonName.split(/\s/)], + false + ) + ); + } + + return [...sets, ...sets2]; +}; + +export async function scrapeTv( + imdbId: string, + tmdbItem: any, + db: PlanetScaleCache +): Promise { + console.log(`Scraping ${tmdbItem.name} (${imdbId})...`); + const scrapeJobs: TvScrapeJob[] = []; + + let cleanTitle = cleanSearchQuery(tmdbItem.name); + let cleanOriginalTitle; + if (tmdbItem.original_name && tmdbItem.original_name !== tmdbItem.name) { + cleanOriginalTitle = cleanSearchQuery(tmdbItem.original_name); + } + const showResponse = await axios.get(getMdbInfo(imdbId)); + for (const season of getSeasons(showResponse)) { + if (season.season_number === 0) continue; + let seasonNumber = season.season_number; + const { seasonName, seasonCode } = getSeasonNameAndCode(season); + const seasonYear = getSeasonYear(season); + + scrapeJobs.push({ + title: cleanTitle, + originalTitle: cleanOriginalTitle, + seasonNumber, + seasonName, + seasonCode, + seasonYear, + }); + } + + await db.saveScrapedResults(`processing:${imdbId}`, []); + + let totalResultsCount = 0; + for (const job of scrapeJobs) { + const searchResults = await getSearchResults(job); + let processedResults = flattenAndRemoveDuplicates(searchResults); + if (processedResults.length) processedResults = groupByParsedTitle(processedResults); + if (!/movie/i.test(job.title)) { + processedResults = processedResults.filter((result) => { + return !/movie/i.test(result.title); + }); + } + totalResultsCount += processedResults.length; + + await db.saveScrapedResults( + `tv:${imdbId}:${job.seasonNumber}`, + processedResults + ); + console.log( + `Saved ${processedResults.length} results for ${job.title} season ${job.seasonNumber}` + ); + } + + await db.markAsDone(imdbId); + return totalResultsCount; +} diff --git a/src/utils/mdblist.ts b/src/utils/mdblist.ts new file mode 100644 index 0000000..2a9fdda --- /dev/null +++ b/src/utils/mdblist.ts @@ -0,0 +1,3 @@ +const mdblistKey = process.env.MDBLIST_KEY; +export const getMdbInfo = (imdbId: string) => + `https://mdblist.com/api/?apikey=${mdblistKey}&i=${imdbId}`; diff --git a/src/utils/search.ts b/src/utils/search.ts index 1d61ef7..1095f84 100644 --- a/src/utils/search.ts +++ b/src/utils/search.ts @@ -1,56 +1,15 @@ -export const stopWords = [ - 'the', - 'and', - 'be', - 'to', - 'of', - 'a', - 'in', - 'i', - 'it', - 'on', - 'he', - 'as', - 'do', - 'at', - 'by', - 'we', - 'or', - 'an', - 'my', - 'so', - 'up', - 'if', - 'me', -]; - export const cleanSearchQuery = (search: string): string => { return search - .split(/[\s\=:\?\.\-\(\)\/]/) // split the search query into an array of elements + .split(/[\s\(\)\[\]\{\}\+\\\^\|ยท\?]/) // split the search query into an array of elements .filter((e) => e !== '') // filter out any empty elements .map((e) => e.toLowerCase()) // convert each element to lowercase - .filter((term) => !stopWords.includes(term)) // remove any stop words from an array .join(' ') // join the remaining elements with a single space .replace(/[รกร รครข]/g, 'a') // replace certain characters with their equivalent .replace(/[รฉรจรซรช]/g, 'e') .replace(/[รญรฌรฏรฎ]/g, 'i') .replace(/[รณรฒรถรด]/g, 'o') .replace(/[รบรนรผรป]/g, 'u') - .replace(/[รง]/g, 'c') - .replace(/[รฑ]/g, 'n') - .replace(/[ลŸ]/g, 's') - .replace(/[ฤŸ]/g, 'g') + .replaceAll(':', ' ') .replace(/\s+/g, ' ') // replace multiple spaces with a single space .trim(); }; - -export const getLibraryTypes = (libraryType: string): string[] => { - switch (libraryType) { - case '1080pOr2160p': - return ['1080p', '2160p', '']; - case '2160p': - return ['2160p', '']; - default: - return ['1080p', '2160p', '']; - } -}; From 6cc0dec8e51dfc431225f555aea3311179ec85c0 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Wed, 6 Sep 2023 21:24:21 +0200 Subject: [PATCH 084/272] 3.3.0 (#61) * scraper improvements * remove extra logging * processing processor * delay when btdigg is down * fix ad instant check path * implement backup and restore function --- TODO.md | 2 +- package-lock.json | 16 +++- package.json | 4 +- src/pages/library.tsx | 171 ++++++++++++++++++++++++++++++----- src/services/btdigg-v2.ts | 27 ++---- src/services/movieScraper.ts | 15 +++ src/services/planetscale.ts | 10 +- src/services/scrapeJobs.ts | 4 +- src/services/tvScraper.ts | 11 +++ src/utils/instantChecks.ts | 1 + src/utils/search.ts | 2 +- src/utils/toastOptions.ts | 5 + 12 files changed, 219 insertions(+), 49 deletions(-) diff --git a/TODO.md b/TODO.md index 7bb6c24..3611a49 100644 --- a/TODO.md +++ b/TODO.md @@ -34,4 +34,4 @@ - [โœ”๏ธ] AD availability check optimization - [โœ”๏ธ] Fix season parsing in Show page - [โœ”๏ธ] Fix season parsing in Search page -- [] Fix season parsing in scraper +- [โœ”๏ธ] Fix season parsing in scraper diff --git a/package-lock.json b/package-lock.json index bafcdab..94c0364 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,18 @@ { "name": "debrid-media-manager", - "version": "3.1.0", + "version": "3.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "3.1.0", + "version": "3.3.0", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@google-cloud/firestore": "^6.7.0", "@octokit/rest": "^19.0.7", "@prisma/client": "^5.2.0", + "@types/file-saver": "^2.0.5", "@types/ioredis": "^5.0.0", "@types/node": "18.15.10", "@types/react": "18.0.29", @@ -21,6 +22,7 @@ "eslint": "8.36.0", "eslint-config-next": "13.2.4", "express": "^4.18.2", + "file-saver": "^2.0.5", "ioredis": "^5.3.2", "lz-string": "^1.5.0", "next": "^13.4.19", @@ -774,6 +776,11 @@ "axios": "*" } }, + "node_modules/@types/file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ==" + }, "node_modules/@types/glob": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", @@ -2771,6 +2778,11 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", diff --git a/package.json b/package.json index f32ae02..e5aaa4d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "3.2.0", + "version": "3.3.0", "private": false, "scripts": { "dev": "next dev", @@ -15,6 +15,7 @@ "@google-cloud/firestore": "^6.7.0", "@octokit/rest": "^19.0.7", "@prisma/client": "^5.2.0", + "@types/file-saver": "^2.0.5", "@types/ioredis": "^5.0.0", "@types/node": "18.15.10", "@types/react": "18.0.29", @@ -24,6 +25,7 @@ "eslint": "8.36.0", "eslint-config-next": "13.2.4", "express": "^4.18.2", + "file-saver": "^2.0.5", "ioredis": "^5.3.2", "lz-string": "^1.5.0", "next": "^13.4.19", diff --git a/src/pages/library.tsx b/src/pages/library.tsx index da149dc..102d7f5 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -1,6 +1,6 @@ import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; import { useDownloadsCache } from '@/hooks/cache'; -import { deleteMagnet, getMagnetStatus, restartMagnet } from '@/services/allDebrid'; +import { deleteMagnet, getMagnetStatus, restartMagnet, uploadMagnet } from '@/services/allDebrid'; import { createShortUrl } from '@/services/hashlists'; import { addHashAsMagnet, @@ -14,8 +14,10 @@ import { getMediaId } from '@/utils/mediaId'; import { getMediaType } from '@/utils/mediaType'; import getReleaseTags from '@/utils/score'; import { getSelectableFiles, isVideo } from '@/utils/selectable'; +import { libraryToastOptions } from '@/utils/toastOptions'; import { withAuth } from '@/utils/withAuth'; import { ParsedFilename, filenameParse } from '@ctrl/video-filename-parser'; +import { saveAs } from 'file-saver'; import lzString from 'lz-string'; import Head from 'next/head'; import Link from 'next/link'; @@ -75,8 +77,8 @@ function TorrentsPage() { const [totalBytes, setTotalBytes] = useState(0); // cache - const [_1, __1, rdCacheAdder, removeFromRdCache] = useDownloadsCache('rd'); - const [_2, __2, adCacheAdder, removeFromAdCache] = useDownloadsCache('ad'); + const [_1, rdUtils, rdCacheAdder, removeFromRdCache] = useDownloadsCache('rd'); + const [_2, adUtils, adCacheAdder, removeFromAdCache] = useDownloadsCache('ad'); const handlePrevPage = useCallback(() => { if (router.query.page === '1') return; @@ -134,7 +136,7 @@ function TorrentsPage() { ); } catch (error) { setUserTorrentsList((prev) => [...prev]); - toast.error('Error fetching user torrents list'); + toast.error('Error fetching user torrents list', libraryToastOptions); } finally { setRdLoading(false); } @@ -192,7 +194,7 @@ function TorrentsPage() { ); } catch (error) { setUserTorrentsList((prev) => [...prev]); - toast.error('Error fetching AllDebrid torrents list'); + toast.error('Error fetching AllDebrid torrents list', libraryToastOptions); } finally { setAdLoading(false); } @@ -305,11 +307,11 @@ function TorrentsPage() { setUserTorrentsList((prevList) => prevList.filter((t) => t.id !== id)); if (rdKey && id.startsWith('rd:')) await deleteTorrent(rdKey, id.substring(3)); if (adKey && id.startsWith('ad:')) await deleteMagnet(adKey, id.substring(3)); - if (!disableToast) toast.success(`Torrent deleted (${id})`); + if (!disableToast) toast.success(`Torrent deleted (${id})`, libraryToastOptions); if (id.startsWith('rd:')) removeFromRdCache(id); if (id.startsWith('ad:')) removeFromAdCache(id); } catch (error) { - if (!disableToast) toast.error(`Error deleting torrent (${id})`); + if (!disableToast) toast.error(`Error deleting torrent (${id})`, libraryToastOptions); throw error; } }; @@ -386,10 +388,11 @@ function TorrentsPage() { } catch (error) { if ((error as Error).message === 'no_files_for_selection') { toast.error(`No files for selection, deleting (${id})`, { + ...libraryToastOptions, duration: 5000, }); } else { - toast.error(`Error selecting files (${id})`); + toast.error(`Error selecting files (${id})`, libraryToastOptions); } throw error; } @@ -409,10 +412,10 @@ function TorrentsPage() { .map(wrapSelectFilesFn); const [results, errors] = await runConcurrentFunctions(waitingForSelection, 5, 500); if (errors.length) { - toast.error(`Error selecting files on ${errors.length} torrents`); + toast.error(`Error selecting files on ${errors.length} torrents`, libraryToastOptions); } if (results.length) { - toast.success(`Started downloading ${results.length} torrents`); + toast.success(`Started downloading ${results.length} torrents`, libraryToastOptions); } } @@ -427,10 +430,10 @@ function TorrentsPage() { .map(wrapDeleteFn); const [results, errors] = await runConcurrentFunctions(failedTorrents, 5, 500); if (errors.length) { - toast.error(`Error deleting ${errors.length} failed torrents`); + toast.error(`Error deleting ${errors.length} failed torrents`, libraryToastOptions); } if (results.length) { - toast.success(`Deleted ${results.length} failed torrents`); + toast.success(`Deleted ${results.length} failed torrents`, libraryToastOptions); } } @@ -444,13 +447,13 @@ function TorrentsPage() { const torrentsToDelete = filteredList.map(wrapDeleteFn); const [results, errors] = await runConcurrentFunctions(torrentsToDelete, 5, 500); if (errors.length) { - toast.error(`Error deleting ${errors.length} torrents`); + toast.error(`Error deleting ${errors.length} torrents`, libraryToastOptions); } if (results.length) { - toast.success(`Deleted ${results.length} torrents`); + toast.success(`Deleted ${results.length} torrents`, libraryToastOptions); } if (!errors.length && !results.length) { - toast('No torrents to delete', { icon: '๐Ÿ‘' }); + toast('No torrents to delete', libraryToastOptions); } } @@ -464,8 +467,8 @@ function TorrentsPage() { async function generateHashList() { toast('The hash list will return a 404 for the first 1-2 minutes', { - icon: '๐Ÿ”—', - duration: 30000, + ...libraryToastOptions, + duration: 60000, }); try { const hashList = filteredList.map((t) => ({ @@ -480,10 +483,103 @@ function TorrentsPage() { ); window.open(shortUrl); } catch (error) { - toast.error(`Error generating hash list, try again later`); + toast.error(`Error generating hash list, try again later`, libraryToastOptions); } } + async function localBackup() { + toast('Generating a local backup file', libraryToastOptions); + try { + const hashList = userTorrentsList.map((t) => ({ + filename: t.filename, + hash: t.hash, + })); + const blob = new Blob([JSON.stringify(hashList, null, 2)], { + type: 'application/json', + }); + saveAs(blob, `backup-${Date.now()}.dmm.json`); + } catch (error) { + toast.error(`Error creating a backup file`, libraryToastOptions); + } + } + + const addAsMagnetInRd = async (hash: string) => { + try { + if (!rdKey) throw new Error('no_rd_key'); + const id = await addHashAsMagnet(rdKey, hash); + rdCacheAdder.single(`rd:${id}`, hash, 'downloading'); + handleSelectFiles(`rd:${id}`); // add rd: to account for substr(3) in handleSelectFiles + } catch (error) { + console.error(error); + } + }; + + const addAsMagnetInAd = async (hash: string) => { + try { + if (!adKey) throw new Error('no_ad_key'); + const resp = await uploadMagnet(adKey, [hash]); + if (resp.data.magnets.length === 0 || resp.data.magnets[0].error) + throw new Error('no_magnets'); + adCacheAdder.single(`ad:${resp.data.magnets[0].id}`, hash, 'downloading'); + } catch (error) { + console.error(error); + } + }; + + async function localRestore(debridService: string): Promise { + const filePicker = document.createElement('input'); + filePicker.type = 'file'; + filePicker.accept = '.json'; + let file: File | null = null; + + filePicker.onchange = (e: Event) => { + const target = e.target as HTMLInputElement; + file = target.files ? target.files[0] : new File([], ''); + }; + filePicker.click(); + + filePicker.addEventListener('change', async () => { + if (!file) return; + + const reader: FileReader = new FileReader(); + reader.readAsText(file, 'UTF-8'); + reader.onload = async function (evt: ProgressEvent) { + const files: any[] = JSON.parse(evt.target?.result as string); + const utils = debridService === 'rd' ? rdUtils : adUtils; + const addMagnet = debridService === 'rd' ? addAsMagnetInRd : addAsMagnetInAd; + + const processingPromise = new Promise(async (resolve, reject) => { + try { + let count = 0; + for (let f of files) { + if (!utils.inLibrary(f.hash)) { + await addMagnet(f.hash); + count++; + } + } + resolve(count); + } catch (error) { + reject(error); + } + }); + + toast.promise( + processingPromise, + { + loading: `Processing backup...`, + success: (num) => + `Restored ${num} torrents in your ${debridService.toUpperCase()} library`, + error: `There was an error processing the backup file.`, + }, + libraryToastOptions + ); + + // refresh the page after 5 seconds + setTimeout(() => location.reload(), 5000); + }; + }); + } + async function handleShare(t: UserTorrent) { const hashList = [ { @@ -507,9 +603,9 @@ function TorrentsPage() { torrent.id = `rd:${id}`; await handleSelectFiles(torrent.id); await handleDeleteTorrent(oldId, true); - toast.success(`Torrent reinserted (${oldId}๐Ÿ‘‰${torrent.id})`); + toast.success(`Torrent reinserted (${oldId}๐Ÿ‘‰${torrent.id})`, libraryToastOptions); } catch (error) { - toast.error(`Error reinserting torrent (${oldId})`); + toast.error(`Error reinserting torrent (${oldId})`, libraryToastOptions); throw error; } }; @@ -518,9 +614,9 @@ function TorrentsPage() { try { if (!adKey) throw new Error('no_ad_key'); await restartMagnet(adKey, id.substring(3)); - toast.success(`Torrent restarted (${id})`); + toast.success(`Torrent restarted (${id})`, libraryToastOptions); } catch (error) { - toast.error(`Error restarting torrent (${id})`); + toast.error(`Error restarting torrent (${id})`, libraryToastOptions); throw error; } }; @@ -641,6 +737,37 @@ function TorrentsPage() { > Share hash list + + {rdKey && ( + + )} + {adKey && ( + + )} => { const MAX_RETRIES = 5; // maximum number of retries - const RETRY_DELAY = 1500; // initial delay in ms, doubles with each retry let results: ScrapeSearchResult[] = []; let badCount = 0; @@ -98,18 +97,20 @@ const processPage = async ( error.message.includes('status code 429') || error.message.includes('"socket" was not created') ) { - console.log('waiting an extra 10 seconds before retrying...'); - await new Promise((resolve) => setTimeout(resolve, 10000)); + console.log('429 error, waiting for a bit longer before retrying...'); + retries++; + } else if (error.message.includes('timeout of')) { + console.log('timeout, waiting for a bit longer before retrying...'); + retries++; } else { console.log('request error:', error.message); retries++; - if (retries > MAX_RETRIES) { + if (retries >= MAX_RETRIES) { console.error(`Max retries reached (${MAX_RETRIES}), aborting search`); return { results, badCount: MAX_RESULTS_PER_PAGE, numResults }; } } - const delay = RETRY_DELAY * Math.pow(2, retries - 1); - await new Promise((resolve) => setTimeout(resolve, delay)); + await new Promise((resolve) => setTimeout(resolve, 10000 * retries)); } } console.log( @@ -170,19 +171,9 @@ const processPage = async ( badCount++; continue; } - if ( - !/\b360p|\b480p|\b576p|\b720p|\b1080p|\b2160p|dvd[^\w]?rip|dvd[^\w]?scr|\bx264\b|\bx265\b|\bxvid\b|\bdivx\b|\bav1\b|bd[^\w]?rip|br[^\w]?rip|hd[^\w]?rip|ppv[^\w]?rip|web[^\w]?rip|cam[^\w]?rip|\bcam\b|\bts\b|\bhdtc\b|\bscreener\b|\br5\b/i.test( - title.toLowerCase() - ) - ) { - badCount++; // doesn't contain video resolution fragments or clues in the title + if (is2160p && !/\b2160p\b|\buhd\b/i.test(title.toLowerCase())) { continue; } - if (is2160p) { - if (!/\b2160p\b|\buhd\b/i.test(title.toLowerCase())) { - continue; - } - } const hash = namesAndHashes[resIndex][1]; @@ -243,7 +234,7 @@ export async function scrapeResults( ): Promise { let searchResultsArr: ScrapeSearchResult[] = []; while (true) { - console.log(`fetching search results for "${finalQuery}"...`); + console.log(`fetching search results for: ${finalQuery}`); try { let pageNum = 1; const { results, numResults } = await processPage( diff --git a/src/services/movieScraper.ts b/src/services/movieScraper.ts index 24c3788..4708557 100644 --- a/src/services/movieScraper.ts +++ b/src/services/movieScraper.ts @@ -26,6 +26,21 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { let sets: ScrapeSearchResult[][] = []; sets.push(await scrapeResults(http, `"${job.title}" ${job.year ?? ''}`, job.title, [], false)); + if (job.title.includes('&')) { + sets.push( + await scrapeResults( + http, + `"${job.title.replaceAll('&', 'and')}" ${job.year ?? ''}`, + job.title, + [], + false + ) + ); + } + + if (job.title.split(/\s/).length > 3) { + sets.push(await scrapeResults(http, `"${job.title}"`, job.title, [], false)); + } if (job.originalTitle) { sets.push( diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index 4802122..14fce30 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -80,14 +80,22 @@ export class PlanetScaleCache { } public async getOldestProcessing(): Promise { + const oneHourAgo = new Date(); + oneHourAgo.setHours(oneHourAgo.getHours() - 1); + const requestedItem = await this.prisma.scraped.findFirst({ - where: { key: { startsWith: 'processing:' } }, + where: { + key: { startsWith: 'processing:' }, + updatedAt: { lte: oneHourAgo }, + }, orderBy: { updatedAt: 'asc' }, select: { key: true }, }); + if (requestedItem !== null) { return requestedItem.key.split(':')[1]; } + return null; } diff --git a/src/services/scrapeJobs.ts b/src/services/scrapeJobs.ts index 916191e..94c36a8 100644 --- a/src/services/scrapeJobs.ts +++ b/src/services/scrapeJobs.ts @@ -21,9 +21,7 @@ const isAlreadyScraped = async ( imdbId: string, res: NextApiResponse ): Promise => { - const keyExists = await db.keyExists( - `${mediaType}:${imdbId}${mediaType === 'tv' ? ':1' : ''}'}` - ); + const keyExists = await db.keyExists(`${mediaType}:${imdbId}${mediaType === 'tv' ? ':1' : ''}`); if (keyExists) { res.status(200).json({ status: 'skipped' }); return true; diff --git a/src/services/tvScraper.ts b/src/services/tvScraper.ts index b545ded..8f6bb82 100644 --- a/src/services/tvScraper.ts +++ b/src/services/tvScraper.ts @@ -154,6 +154,17 @@ export async function scrapeTv( seasonCode, seasonYear, }); + + if (cleanTitle.includes('&')) { + scrapeJobs.push({ + title: cleanTitle.replaceAll('&', 'and'), + // originalTitle: cleanOriginalTitle?.replaceAll('&', 'and'), + seasonNumber, + seasonName, + seasonCode, + seasonYear, + }); + } } await db.saveScrapedResults(`processing:${imdbId}`, []); diff --git a/src/utils/instantChecks.ts b/src/utils/instantChecks.ts index ccbc679..f9c4985 100644 --- a/src/utils/instantChecks.ts +++ b/src/utils/instantChecks.ts @@ -74,6 +74,7 @@ export const instantCheckInAd = async ( const checkVideoInFiles = (files: MagnetFile[]): boolean => { return files.reduce((noVideo: boolean, curr: MagnetFile) => { if (!noVideo) return false; // If we've already found a video, no need to continue checking + if (!curr.n) return false; // If 'n' property doesn't exist, it's not a video if (curr.e) { // If 'e' property exists, check it recursively return checkVideoInFiles(curr.e); diff --git a/src/utils/search.ts b/src/utils/search.ts index 1095f84..8b52a7b 100644 --- a/src/utils/search.ts +++ b/src/utils/search.ts @@ -1,6 +1,6 @@ export const cleanSearchQuery = (search: string): string => { return search - .split(/[\s\(\)\[\]\{\}\+\\\^\|ยท\?]/) // split the search query into an array of elements + .split(/[\s\(\)\[\]\{\}\+\\\^\|ยท\?,\/:;'"!]/) // split the search query into an array of elements .filter((e) => e !== '') // filter out any empty elements .map((e) => e.toLowerCase()) // convert each element to lowercase .join(' ') // join the remaining elements with a single space diff --git a/src/utils/toastOptions.ts b/src/utils/toastOptions.ts index 3316d46..9a94068 100644 --- a/src/utils/toastOptions.ts +++ b/src/utils/toastOptions.ts @@ -11,3 +11,8 @@ export const searchToastOptions = { ...globalToastOptions, icon: '๐Ÿ”', }; + +export const libraryToastOptions = { + ...globalToastOptions, + icon: '๐Ÿ“š', +}; From 96cb7c440243f4470876cee203521d47d06da3e4 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Thu, 7 Sep 2023 00:27:25 +0200 Subject: [PATCH 085/272] 3.3.1 (#62) * restore fixes * version bump --- package-lock.json | 4 +- package.json | 2 +- src/pages/library.tsx | 81 ++++++++++++++++++++------------------ src/services/realDebrid.ts | 2 +- 4 files changed, 47 insertions(+), 42 deletions(-) diff --git a/package-lock.json b/package-lock.json index 94c0364..5bcc6f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "3.3.0", + "version": "3.3.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "3.3.0", + "version": "3.3.1", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@google-cloud/firestore": "^6.7.0", diff --git a/package.json b/package.json index e5aaa4d..a14fae1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "3.3.0", + "version": "3.3.1", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/library.tsx b/src/pages/library.tsx index 102d7f5..f902dfc 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -137,6 +137,7 @@ function TorrentsPage() { } catch (error) { setUserTorrentsList((prev) => [...prev]); toast.error('Error fetching user torrents list', libraryToastOptions); + console.error(error); } finally { setRdLoading(false); } @@ -195,6 +196,7 @@ function TorrentsPage() { } catch (error) { setUserTorrentsList((prev) => [...prev]); toast.error('Error fetching AllDebrid torrents list', libraryToastOptions); + console.error(error); } finally { setAdLoading(false); } @@ -312,7 +314,7 @@ function TorrentsPage() { if (id.startsWith('ad:')) removeFromAdCache(id); } catch (error) { if (!disableToast) toast.error(`Error deleting torrent (${id})`, libraryToastOptions); - throw error; + console.error(error); } }; @@ -374,6 +376,7 @@ function TorrentsPage() { ); if (selectedFiles.length === 0) { handleDeleteTorrent(id); + console.log(response.files); throw new Error('no_files_for_selection'); } @@ -381,7 +384,7 @@ function TorrentsPage() { setUserTorrentsList((prevList) => { const newList = [...prevList]; const index = newList.findIndex((t) => t.id === id); - newList[index].status = 'downloading'; + if (index > -1) newList[index].status = 'downloading'; return newList; }); rdCacheAdder.single(id, response.hash, response.status); @@ -394,7 +397,7 @@ function TorrentsPage() { } else { toast.error(`Error selecting files (${id})`, libraryToastOptions); } - throw error; + console.error(error); } }; @@ -484,6 +487,7 @@ function TorrentsPage() { window.open(shortUrl); } catch (error) { toast.error(`Error generating hash list, try again later`, libraryToastOptions); + console.error(error); } } @@ -500,6 +504,7 @@ function TorrentsPage() { saveAs(blob, `backup-${Date.now()}.dmm.json`); } catch (error) { toast.error(`Error creating a backup file`, libraryToastOptions); + console.error(error); } } @@ -509,7 +514,8 @@ function TorrentsPage() { const id = await addHashAsMagnet(rdKey, hash); rdCacheAdder.single(`rd:${id}`, hash, 'downloading'); handleSelectFiles(`rd:${id}`); // add rd: to account for substr(3) in handleSelectFiles - } catch (error) { + } catch (error: any) { + toast.error(`Error adding to RD: ${error.message}`, libraryToastOptions); console.error(error); } }; @@ -521,7 +527,8 @@ function TorrentsPage() { if (resp.data.magnets.length === 0 || resp.data.magnets[0].error) throw new Error('no_magnets'); adCacheAdder.single(`ad:${resp.data.magnets[0].id}`, hash, 'downloading'); - } catch (error) { + } catch (error: any) { + toast.error(`Error adding to AD: ${error.message}`, libraryToastOptions); console.error(error); } }; @@ -548,34 +555,38 @@ function TorrentsPage() { const utils = debridService === 'rd' ? rdUtils : adUtils; const addMagnet = debridService === 'rd' ? addAsMagnetInRd : addAsMagnetInAd; - const processingPromise = new Promise(async (resolve, reject) => { - try { - let count = 0; - for (let f of files) { - if (!utils.inLibrary(f.hash)) { - await addMagnet(f.hash); - count++; - } - } - resolve(count); - } catch (error) { - reject(error); + function wrapAddMagnetFn(hash: string) { + return async () => await addMagnet(hash); + } + + const processingPromise = new Promise<{ success: number; error: number }>( + async (resolve) => { + toast.loading(`DO NOT REFRESH THE PAGE`, libraryToastOptions); + const toAdd = files + .map((f) => f.hash) + .filter((h) => !utils.inLibrary(h)) + .map(wrapAddMagnetFn); + const [results, errors] = await runConcurrentFunctions(toAdd, 5, 500); + resolve({ success: results.length, error: errors.length }); } - }); + ); toast.promise( processingPromise, { - loading: `Processing backup...`, - success: (num) => - `Restored ${num} torrents in your ${debridService.toUpperCase()} library`, - error: `There was an error processing the backup file.`, + loading: `Restoring ${files.length} downloads in your library.`, + success: ({ success, error }) => { + window.localStorage.removeItem(`${debridService}:downloads`); + setTimeout(() => location.reload(), 10000); + return `Restored ${success} torrents but failed on ${error} others in your ${debridService.toUpperCase()} library. Refreshing the page in 10 seconds.`; + }, + error: '', }, - libraryToastOptions + { + ...libraryToastOptions, + duration: 10000, + } ); - - // refresh the page after 5 seconds - setTimeout(() => location.reload(), 5000); }; }); } @@ -606,7 +617,7 @@ function TorrentsPage() { toast.success(`Torrent reinserted (${oldId}๐Ÿ‘‰${torrent.id})`, libraryToastOptions); } catch (error) { toast.error(`Error reinserting torrent (${oldId})`, libraryToastOptions); - throw error; + console.error(error); } }; @@ -617,7 +628,7 @@ function TorrentsPage() { toast.success(`Torrent restarted (${id})`, libraryToastOptions); } catch (error) { toast.error(`Error restarting torrent (${id})`, libraryToastOptions); - throw error; + console.error(error); } }; @@ -739,31 +750,25 @@ function TorrentsPage() { {rdKey && ( )} {adKey && ( diff --git a/src/services/realDebrid.ts b/src/services/realDebrid.ts index de1ce0c..2268a30 100644 --- a/src/services/realDebrid.ts +++ b/src/services/realDebrid.ts @@ -192,7 +192,7 @@ export const getUserTorrentsList = async ( `${config.realDebridHostname}/rest/1.0/torrents`, { headers, params: { offset, page, limit, filter } } ); - return response.data; + return response?.data || []; } catch (error: any) { console.error('Error fetching user torrents list:', error.message); throw error; From 12964431906cf1cc7ab09c096e54240f0a5c72c3 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Fri, 8 Sep 2023 22:35:09 +0200 Subject: [PATCH 086/272] 3.4.0 (#63) * updater * update todo * updates * fix tv scraper * version bump --- TODO.md | 10 +- next.config.js | 6 ++ package-lock.json | 4 +- package.json | 2 +- src/pages/api/updater.ts | 24 +++++ src/pages/library.tsx | 2 + src/pages/movie/[imdbid].tsx | 81 ++++++++------- src/pages/show/[imdbid]/[seasonNum].tsx | 128 ++++++++++++------------ src/services/btdigg-v2.ts | 95 ++++++++++++++++-- src/services/movieScraper.ts | 2 +- src/services/planetscale.ts | 56 ++++------- src/services/scrapeJobs.ts | 32 ++++-- src/services/tvScraper.ts | 14 +-- src/utils/search.ts | 2 +- src/utils/selectable.ts | 4 +- 15 files changed, 292 insertions(+), 170 deletions(-) create mode 100644 src/pages/api/updater.ts diff --git a/TODO.md b/TODO.md index 3611a49..5372573 100644 --- a/TODO.md +++ b/TODO.md @@ -26,12 +26,16 @@ - [] 4.0.0: Add tests - [] 5.0.0: Refactor pages into different components - [โœ”๏ธ] Fix requested api endpoint -- [] Existing results checker +- [โœ”๏ธ] Existing results checker - [โœ”๏ธ] Add season jumper in shows page -- [] Backup library feature (download library as a file for importing) -- [] Restore library feature +- [โœ”๏ธ] Backup library feature (download library as a file for importing) +- [โœ”๏ธ] Restore library feature - [โœ”๏ธ] Fix issue with availability check - [โœ”๏ธ] AD availability check optimization - [โœ”๏ธ] Fix season parsing in Show page - [โœ”๏ธ] Fix season parsing in Search page - [โœ”๏ธ] Fix season parsing in scraper +- [] Library: Allow watching to preview downloads +- [] Hashlist: Allow watching to preview downloads +- [] Downloads/Movie: Allow watching to preview downloads +- [] Downloads/TV?: Allow watching to preview downloads diff --git a/next.config.js b/next.config.js index fe1ee33..8aa5795 100644 --- a/next.config.js +++ b/next.config.js @@ -14,6 +14,12 @@ const nextConfig = { port: '', pathname: '/**', }, + { + protocol: 'https', + hostname: 'm.media-amazon.com', + port: '', + pathname: '/**', + }, ], }, reactStrictMode: false, diff --git a/package-lock.json b/package-lock.json index 5bcc6f4..90997b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "3.3.1", + "version": "3.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "3.3.1", + "version": "3.4.0", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@google-cloud/firestore": "^6.7.0", diff --git a/package.json b/package.json index a14fae1..4b0b5d8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "3.3.1", + "version": "3.4.0", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/api/updater.ts b/src/pages/api/updater.ts new file mode 100644 index 0000000..530fcb6 --- /dev/null +++ b/src/pages/api/updater.ts @@ -0,0 +1,24 @@ +import { PlanetScaleCache } from '@/services/planetscale'; +import { ScrapeResponse, generateScrapeJobs } from '@/services/scrapeJobs'; +import { NextApiRequest, NextApiResponse } from 'next'; + +const db = new PlanetScaleCache(); + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + const { scrapePassword, mediaType } = req.query; + if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { + res.status(403).json({ + status: 'error', + errorMessage: 'You are not authorized to use this feature', + }); + return; + } + + let imdbId = await db.getOldestScrapedMedia(mediaType === 'tv' ? 'tv' : 'movie'); + if (!imdbId) { + res.status(200).json({ status: 'done' }); + return; + } + + await generateScrapeJobs(res, imdbId, true); +} diff --git a/src/pages/library.tsx b/src/pages/library.tsx index f902dfc..f3e235b 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -370,10 +370,12 @@ function TorrentsPage() { try { if (!rdKey) throw new Error('no_rd_key'); const response = await getTorrentInfo(rdKey, id.substring(3)); + console.log(`${response.filename} files`, response.files); const selectedFiles = getSelectableFiles(response.files.filter(isVideo)).map( (file) => file.id ); + console.log(`selected files`, selectedFiles); if (selectedFiles.length === 0) { handleDeleteTorrent(id); console.log(response.files); diff --git a/src/pages/movie/[imdbid].tsx b/src/pages/movie/[imdbid].tsx index d39a2c3..593f881 100644 --- a/src/pages/movie/[imdbid].tsx +++ b/src/pages/movie/[imdbid].tsx @@ -4,22 +4,28 @@ import useLocalStorage from '@/hooks/localStorage'; import { deleteMagnet, uploadMagnet } from '@/services/allDebrid'; import { SearchApiResponse, SearchResult } from '@/services/mediasearch'; import { addHashAsMagnet, deleteTorrent, getTorrentInfo, selectFiles } from '@/services/realDebrid'; -import { getTmdbKey } from '@/utils/freekeys'; import { instantCheckInAd, instantCheckInRd, wrapLoading } from '@/utils/instantChecks'; import { getSelectableFiles, isVideo } from '@/utils/selectable'; -import { TmdbResponse } from '@/utils/tmdb'; import { searchToastOptions } from '@/utils/toastOptions'; import { withAuth } from '@/utils/withAuth'; import axios from 'axios'; +import { GetServerSideProps } from 'next'; import Head from 'next/head'; import Image from 'next/image'; import Link from 'next/link'; import { useRouter } from 'next/router'; -import { useEffect, useState } from 'react'; +import { FunctionComponent, useEffect, useState } from 'react'; import toast, { Toaster } from 'react-hot-toast'; import { FaDownload, FaFastForward, FaTimes } from 'react-icons/fa'; -function Search() { +type MovieSearchProps = { + title: string; + description: string; + poster: string; + year: string; +}; + +const MovieSearch: FunctionComponent = ({ title, description, poster, year }) => { const [searchState, setSearchState] = useState('loading'); const [searchResults, setSearchResults] = useState([]); const [errorMessage, setErrorMessage] = useState(''); @@ -35,26 +41,12 @@ function Search() { 'adAutoInstantCheck', false ); - const [movieInfo, setMovieInfo] = useState(null); const router = useRouter(); const { imdbid } = router.query; - const fetchMovieInfo = async (imdbId: string) => { - try { - const response = await axios.get( - `https://api.themoviedb.org/3/find/${imdbId}?api_key=${getTmdbKey()}&external_source=imdb_id` - ); - setMovieInfo(response.data); - } catch (error) { - console.error(`error fetching movie data`, error); - setErrorMessage('There was an error fetching movie info. Please try again.'); - } - }; - useEffect(() => { if (imdbid) { - fetchMovieInfo(imdbid as string); fetchData(imdbid as string); } // eslint-disable-next-line react-hooks/exhaustive-deps @@ -186,8 +178,7 @@ function Search() {
- Debrid Media Manager - Movie - {movieInfo?.movie_results[0].title} - {movieInfo?.movie_results[0].release_date.substring(0, 4)} + Debrid Media Manager - Movie - {title} ({year}) @@ -207,23 +198,21 @@ function Search() {
{/* Display basic movie info */} - {movieInfo && ( -
-
- Movie poster -
-
-

{movieInfo.movie_results[0].title}

-

{movieInfo.movie_results[0].overview}

-
+
+
+ Movie poster
- )} +
+

{title}

+

{description}

+
+

@@ -462,6 +451,22 @@ rounded-lg overflow-hidden )}
); -} +}; + +const mdblistKey = process.env.MDBLIST_KEY; +const getMdbInfo = (imdbId: string) => `https://mdblist.com/api/?apikey=${mdblistKey}&i=${imdbId}`; + +export const getServerSideProps: GetServerSideProps = async (context) => { + const { params } = context; + const movieResponse = await axios.get(getMdbInfo(params!.imdbid as string)); + return { + props: { + title: movieResponse.data.title, + description: movieResponse.data.description, + poster: movieResponse.data.poster, + year: movieResponse.data.year, + }, + }; +}; -export default withAuth(Search); +export default withAuth(MovieSearch); diff --git a/src/pages/show/[imdbid]/[seasonNum].tsx b/src/pages/show/[imdbid]/[seasonNum].tsx index e417066..dcfb7f4 100644 --- a/src/pages/show/[imdbid]/[seasonNum].tsx +++ b/src/pages/show/[imdbid]/[seasonNum].tsx @@ -4,26 +4,35 @@ import useLocalStorage from '@/hooks/localStorage'; import { deleteMagnet, uploadMagnet } from '@/services/allDebrid'; import { SearchApiResponse, SearchResult } from '@/services/mediasearch'; import { addHashAsMagnet, deleteTorrent, getTorrentInfo, selectFiles } from '@/services/realDebrid'; -import { getTmdbKey } from '@/utils/freekeys'; import { instantCheckInAd, instantCheckInRd, wrapLoading } from '@/utils/instantChecks'; import { getSelectableFiles, isVideo } from '@/utils/selectable'; -import { TmdbResponse } from '@/utils/tmdb'; import { searchToastOptions } from '@/utils/toastOptions'; import { withAuth } from '@/utils/withAuth'; import axios from 'axios'; -import { GetServerSideProps, InferGetServerSidePropsType } from 'next'; +import { GetServerSideProps } from 'next'; import Head from 'next/head'; import Image from 'next/image'; import Link from 'next/link'; import { useRouter } from 'next/router'; -import { useEffect, useState } from 'react'; +import { FunctionComponent, useEffect, useState } from 'react'; import toast, { Toaster } from 'react-hot-toast'; import { FaDownload, FaFastForward, FaTimes } from 'react-icons/fa'; -function Search({ +type TvSearchProps = { + title: string; + description: string; + poster: string; + season_count: number; + season_names: string[]; +}; + +const TvSearch: FunctionComponent = ({ + title, + description, + poster, season_count, season_names, -}: InferGetServerSidePropsType) { +}) => { const [searchState, setSearchState] = useState('loading'); const [searchResults, setSearchResults] = useState([]); const [errorMessage, setErrorMessage] = useState(''); @@ -39,26 +48,12 @@ function Search({ 'adAutoInstantCheck', false ); - const [showInfo, setShowInfo] = useState(null); const router = useRouter(); const { imdbid, seasonNum } = router.query; - const fetchShowInfo = async (imdbId: string) => { - try { - const response = await axios.get( - `https://api.themoviedb.org/3/find/${imdbId}?api_key=${getTmdbKey()}&external_source=imdb_id` - ); - setShowInfo(response.data); - } catch (error) { - console.error(`error fetching movie data`, error); - setErrorMessage('There was an error fetching movie info. Please try again.'); - } - }; - useEffect(() => { if (imdbid && seasonNum) { - fetchShowInfo(imdbid as string); fetchData(imdbid as string, parseInt(seasonNum as string)); } // eslint-disable-next-line react-hooks/exhaustive-deps @@ -195,8 +190,7 @@ function Search({
- Debrid Media Manager - TV Show - {showInfo?.tv_results[0].name} - Season{' '} - {seasonNum} + Debrid Media Manager - TV Show - {title} - Season {seasonNum} @@ -216,46 +210,44 @@ function Search({
{/* Display basic movie info */} - {showInfo && ( -
-
- Movie poster -
-
-

- {showInfo.tv_results[0].name} - Season {seasonNum} -

-

{showInfo.tv_results[0].overview}

- <> - {Array.from({ length: season_count || 0 }, (_, i) => i + 1).map( - (season) => { - const color = intSeasonNum === season ? 'red' : 'yellow'; - return ( - - - ๐Ÿ“บ - {' '} - {season_names && season_names[season - 1] - ? season_names[season - 1] - : `Season ${season}`} - - ); - } - )} - -
+
+
+ Movie poster
- )} +
+

+ {title} - Season {seasonNum} +

+

{description}

+ <> + {Array.from({ length: season_count || 0 }, (_, i) => i + 1).map( + (season) => { + const color = intSeasonNum === season ? 'red' : 'yellow'; + return ( + + + ๐Ÿ“บ + {' '} + {season_names && season_names[season - 1] + ? season_names[season - 1] + : `Season ${season}`} + + ); + } + )} + +
+

@@ -476,7 +468,7 @@ rounded-lg overflow-hidden )}
); -} +}; const mdblistKey = process.env.MDBLIST_KEY; const getMdbInfo = (imdbId: string) => `https://mdblist.com/api/?apikey=${mdblistKey}&i=${imdbId}`; @@ -506,7 +498,15 @@ export const getServerSideProps: GetServerSideProps = async (context) => { }; } } - return { props: { season_count, season_names } }; + return { + props: { + title: showResponse.data.title, + description: showResponse.data.description, + poster: showResponse.data.poster, + season_count, + season_names, + }, + }; }; -export default withAuth(Search); +export default withAuth(TvSearch); diff --git a/src/services/btdigg-v2.ts b/src/services/btdigg-v2.ts index 61a82a5..1f2db8f 100644 --- a/src/services/btdigg-v2.ts +++ b/src/services/btdigg-v2.ts @@ -69,7 +69,7 @@ const processPage = async ( client: AxiosInstance, finalQuery: string, targetTitle: string, - mustHaveTerms: string[], + mustHaveTerms: (string | RegExp)[], is2160p: boolean, pageNum: number ): Promise => { @@ -158,20 +158,31 @@ const processPage = async ( .filter((e) => e !== ''); let requiredTerms = queryTerms.length <= 3 ? queryTerms.length : queryTerms.length - 1; const containedTerms = queryTerms.filter((term) => - new RegExp(`${term.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&')}`).test(title.toLowerCase()) + new RegExp(`${term.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&')}`, 'i').test(title) ).length; if (containedTerms < requiredTerms) { badCount++; // title doesn't contain most terms in the query continue; } - const containedMustHaveTerms = mustHaveTerms.filter((term) => - new RegExp(`${term}`).test(title.toLowerCase()) - ).length; + const containedMustHaveTerms = mustHaveTerms.filter((term) => { + if (typeof term === 'string') { + return new RegExp(`${term}`, 'i').test(title); + } else if (term instanceof RegExp) { + return term.test(title); + } + return false; + }).length; if (containedMustHaveTerms < mustHaveTerms.length) { badCount++; continue; } - if (is2160p && !/\b2160p\b|\buhd\b/i.test(title.toLowerCase())) { + if (!targetTitle.match(/xxx/i)) { + if (title.match(/xxx/i)) { + badCount++; + continue; + } + } + if (is2160p && !/\b2160p\b|\buhd\b/i.test(title)) { continue; } @@ -229,12 +240,12 @@ export async function scrapeResults( client: AxiosInstance, finalQuery: string, targetTitle: string, - mustHaveTerms: string[], + mustHaveTerms: (string | RegExp)[], is2160p: boolean = false ): Promise { let searchResultsArr: ScrapeSearchResult[] = []; while (true) { - console.log(`fetching search results for: ${finalQuery}`); + console.log(`scraping btdig for: ${finalQuery}`); try { let pageNum = 1; const { results, numResults } = await processPage( @@ -268,6 +279,74 @@ export async function scrapeResults( console.error('fetchSearchResults page processing error', error); await new Promise((resolve) => setTimeout(resolve, 5000)); } + // mkv + try { + let pageNum = 1; + const { results, numResults } = await processPage( + client, + finalQuery, + `${targetTitle} .mkv`, + mustHaveTerms, + is2160p, + pageNum++ + ); + searchResultsArr.push(...results); + const maxPages = calculateMaxPages(numResults); + let promises: (() => Promise)[] = []; + while (pageNum <= maxPages) { + promises.push( + ((pageNum) => async () => { + return await processPage( + client, + finalQuery, + `${targetTitle} .mkv`, + mustHaveTerms, + is2160p, + pageNum + ); + })(pageNum) + ); + pageNum++; + } + searchResultsArr.push(...(await processInBatches(promises, 2))); + } catch (error) { + console.error('fetchSearchResults mkv page processing error', error); + await new Promise((resolve) => setTimeout(resolve, 5000)); + } + // mp4 + try { + let pageNum = 1; + const { results, numResults } = await processPage( + client, + finalQuery, + `${targetTitle} .mp4`, + mustHaveTerms, + is2160p, + pageNum++ + ); + searchResultsArr.push(...results); + const maxPages = calculateMaxPages(numResults); + let promises: (() => Promise)[] = []; + while (pageNum <= maxPages) { + promises.push( + ((pageNum) => async () => { + return await processPage( + client, + finalQuery, + `${targetTitle} .mp4`, + mustHaveTerms, + is2160p, + pageNum + ); + })(pageNum) + ); + pageNum++; + } + searchResultsArr.push(...(await processInBatches(promises, 2))); + } catch (error) { + console.error('fetchSearchResults mp4 page processing error', error); + await new Promise((resolve) => setTimeout(resolve, 5000)); + } return searchResultsArr; } } diff --git a/src/services/movieScraper.ts b/src/services/movieScraper.ts index 4708557..5b2b5fb 100644 --- a/src/services/movieScraper.ts +++ b/src/services/movieScraper.ts @@ -74,7 +74,7 @@ export async function scrapeMovies( tmdbItem: any, db: PlanetScaleCache ): Promise { - console.log(`Scraping ${tmdbItem.title} (${imdbId})...`); + console.log(`Scraping movie: ${tmdbItem.title} (${imdbId})...`); const cleanTitle = cleanSearchQuery(tmdbItem.title); const year = tmdbItem.release_date?.substring(0, 4); diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index 14fce30..cf2d268 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -8,37 +8,6 @@ export class PlanetScaleCache { this.prisma.$queryRaw`SET @@boost_cached_queries = true`; } - public async cacheJsonValue(key: string[], value: T) { - const sortedKey = key.sort(); - const planetScaleKey = sortedKey.join(':'); - - await this.prisma.cache.upsert({ - where: { key: planetScaleKey }, - update: { value } as any, - create: { key: planetScaleKey, value } as any, - }); - } - - public async getCachedJsonValue(key: string[]): Promise { - const sortedKey = key.sort(); - const planetScaleKey = sortedKey.join(':'); - - const cacheEntry = await this.prisma.cache.findUnique({ where: { key: planetScaleKey } }); - return cacheEntry?.value as T | undefined; - } - - public async deleteCachedJsonValue(key: string[]): Promise { - const sortedKey = key.sort(); - const planetScaleKey = sortedKey.join(':'); - - await this.prisma.cache.delete({ where: { key: planetScaleKey } }); - } - - public async getDbSize(): Promise { - const count = await this.prisma.cache.count(); - return count; - } - /// scraped results public async saveScrapedResults(key: string, value: T) { @@ -54,11 +23,6 @@ export class PlanetScaleCache { return cacheEntry?.value as T | undefined; } - public async getScrapedDbSize(): Promise { - const count = await this.prisma.scraped.count(); - return count; - } - public async keyExists(key: string): Promise { const cacheEntry = await this.prisma.scraped.findFirst({ where: { key }, @@ -99,6 +63,26 @@ export class PlanetScaleCache { return null; } + public async getOldestScrapedMedia(mediaType: 'tv' | 'movie'): Promise { + const oneDayAgo = new Date(); + oneDayAgo.setHours(oneDayAgo.getHours() - 24); + + const scrapedItem = await this.prisma.scraped.findFirst({ + where: { + key: { startsWith: `${mediaType}:` }, + updatedAt: { lte: oneDayAgo }, + }, + orderBy: { updatedAt: 'asc' }, + select: { key: true }, + }); + + if (scrapedItem !== null) { + return scrapedItem.key.split(':')[1]; + } + + return null; + } + public async markAsDone(imdbId: string): Promise { const keys = [`requested:${imdbId}`, `processing:${imdbId}`]; diff --git a/src/services/scrapeJobs.ts b/src/services/scrapeJobs.ts index 94c36a8..97f504c 100644 --- a/src/services/scrapeJobs.ts +++ b/src/services/scrapeJobs.ts @@ -37,6 +37,7 @@ const isAlreadyScraped = async ( function convertMdbToTmdb(apiResponse: any) { return { title: apiResponse.title, + name: apiResponse.title, release_date: apiResponse.released, // original_title: apiResponse.original_title, // This field does not exist in the provided API response }; @@ -83,6 +84,7 @@ export async function generateScrapeJobs( if (!override && (await isAlreadyScraped('tv', imdbId, res))) return; try { + console.log('>>>>>>>>', tmdbResponse.data.tv_results[0].name, imdbId); const resultsCount = await scrapeTv(imdbId, tmdbResponse.data.tv_results[0], db); res.status(200).json({ status: `scraped: ${resultsCount} tv torrents` }); } catch (error: any) { @@ -117,12 +119,18 @@ export async function generateScrapeJobs( try { const tmdbResponse = await axios.get(getTmdbMovieInfo(tmdbId)); const resultsCount = await scrapeMovies(imdbId, tmdbResponse.data, db); - res.status(200).json({ status: `scraped: ${resultsCount} tv torrents` }); + res.status(200).json({ status: `scraped: ${resultsCount} movie torrents` }); } catch (error: any) { - res.status(500).json({ - status: 'error', - errorMessage: `an error occurred while scraping Btdigg for movie (${error.message})`, - }); + if (error.response?.status === 404) { + const tmdbResponse = convertMdbToTmdb(mdbResponse.data); + const resultsCount = await scrapeMovies(imdbId, tmdbResponse, db); + res.status(200).json({ status: `scraped: ${resultsCount} movie torrents` }); + } else { + res.status(500).json({ + status: 'error', + errorMessage: `an error occurred while scraping Btdigg for movie (${error.message})`, + }); + } } return; @@ -132,10 +140,16 @@ export async function generateScrapeJobs( const resultsCount = await scrapeTv(imdbId, tmdbResponse.data, db); res.status(200).json({ status: `scraped: ${resultsCount} tv torrents` }); } catch (error: any) { - res.status(500).json({ - status: 'error', - errorMessage: `an error occurred while scraping Btdigg for tv (${error.message})`, - }); + if (error.response?.status === 404) { + const tmdbResponse = convertMdbToTmdb(mdbResponse.data); + const resultsCount = await scrapeTv(imdbId, tmdbResponse, db); + res.status(200).json({ status: `scraped: ${resultsCount} tv torrents` }); + } else { + res.status(500).json({ + status: 'error', + errorMessage: `an error occurred while scraping Btdigg for tv (${error.message})`, + }); + } } return; diff --git a/src/services/tvScraper.ts b/src/services/tvScraper.ts index 8f6bb82..12e26d9 100644 --- a/src/services/tvScraper.ts +++ b/src/services/tvScraper.ts @@ -29,7 +29,9 @@ function padWithZero(num: number) { } const getSeasons = (showResponse: any) => - showResponse.data.seasons || [{ season_number: 1, episode_count: 0 }]; + showResponse.data.seasons.length + ? showResponse.data.seasons + : [{ name: 'Season 1', season_number: 1, episode_count: 0 }]; const getSeasonNameAndCode = (season: any) => { let seasonName, seasonCode; @@ -61,7 +63,7 @@ const getSearchResults = async (job: TvScrapeJob) => { http, `"${job.title}" s${padWithZero(job.seasonNumber)}`, job.title, - [`${job.seasonNumber}`], + [new RegExp(`[0123]?${job.seasonNumber}[\\be]`, 'i')], false ) ); @@ -72,7 +74,7 @@ const getSearchResults = async (job: TvScrapeJob) => { http, `"${job.title}" "${job.seasonName}" s${padWithZero(job.seasonCode)}`, job.title, - [`${job.seasonCode}`, ...job.seasonName.split(/\s/)], + [new RegExp(`[0123]?${job.seasonCode}[\\be]`, 'i'), ...job.seasonName.split(/\s/)], false ) ); @@ -97,7 +99,7 @@ const getSearchResults = async (job: TvScrapeJob) => { http, `"${job.originalTitle}" s${padWithZero(job.seasonNumber)}`, job.originalTitle, - [`${job.seasonNumber}`], + [new RegExp(`[0123]?${job.seasonNumber}[\\be]`, 'i')], false ) ); @@ -107,7 +109,7 @@ const getSearchResults = async (job: TvScrapeJob) => { http, `"${job.originalTitle}" "${job.seasonName}" s${padWithZero(job.seasonCode)}`, job.originalTitle, - [`${job.seasonCode}`, ...job.seasonName.split(/\s/)], + [new RegExp(`[0123]?${job.seasonCode}[\\be]`, 'i'), ...job.seasonName.split(/\s/)], false ) ); @@ -131,7 +133,7 @@ export async function scrapeTv( tmdbItem: any, db: PlanetScaleCache ): Promise { - console.log(`Scraping ${tmdbItem.name} (${imdbId})...`); + console.log(`Scraping tv show: ${tmdbItem.name} (${imdbId})...`); const scrapeJobs: TvScrapeJob[] = []; let cleanTitle = cleanSearchQuery(tmdbItem.name); diff --git a/src/utils/search.ts b/src/utils/search.ts index 8b52a7b..6b01699 100644 --- a/src/utils/search.ts +++ b/src/utils/search.ts @@ -1,6 +1,6 @@ export const cleanSearchQuery = (search: string): string => { return search - .split(/[\s\(\)\[\]\{\}\+\\\^\|ยท\?,\/:;'"!]/) // split the search query into an array of elements + .split(/[\s\(\)\[\]\{\}\+\\\^\|ยท\?,\/:;"!]/) // split the search query into an array of elements .filter((e) => e !== '') // filter out any empty elements .map((e) => e.toLowerCase()) // convert each element to lowercase .join(' ') // join the remaining elements with a single space diff --git a/src/utils/selectable.ts b/src/utils/selectable.ts index d0e9599..1c594e8 100644 --- a/src/utils/selectable.ts +++ b/src/utils/selectable.ts @@ -12,6 +12,8 @@ export function isVideo(file: { path: string }) { export function getSelectableFiles(files: TorrentInfoResponse['files']) { const maxFileSize = Math.max(...files.map((obj) => obj.bytes)); - const selectableFiles = files.filter((f) => f.bytes >= maxFileSize * FILE_SIZE_PCT_THRESHOLD); + const selectableFiles = files.filter( + (f) => f.bytes >= maxFileSize * FILE_SIZE_PCT_THRESHOLD || /e[0123]\d/i.test(f.path) + ); return selectableFiles; } From dd5c24729503573fb022cceca658c78b38a6a3f6 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Fri, 8 Sep 2023 23:13:04 +0200 Subject: [PATCH 087/272] 3.4.1 (#64) * tv scrape fixes * bump version --- package-lock.json | 4 +- package.json | 2 +- src/pages/movie/[imdbid].tsx | 1 - src/services/btdigg-v2.ts | 2 +- src/services/scrapeJobs.ts | 126 ++++++++++++----------------------- src/utils/instantChecks.ts | 8 --- 6 files changed, 48 insertions(+), 95 deletions(-) diff --git a/package-lock.json b/package-lock.json index 90997b6..eff0fbc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "3.4.0", + "version": "3.4.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "3.4.0", + "version": "3.4.1", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@google-cloud/firestore": "^6.7.0", diff --git a/package.json b/package.json index 4b0b5d8..d470e16 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "3.4.0", + "version": "3.4.1", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/movie/[imdbid].tsx b/src/pages/movie/[imdbid].tsx index 593f881..37bf624 100644 --- a/src/pages/movie/[imdbid].tsx +++ b/src/pages/movie/[imdbid].tsx @@ -149,7 +149,6 @@ const MovieSearch: FunctionComponent = ({ title, description, try { if (!rdKey) throw new Error('no_rd_key'); const response = await getTorrentInfo(rdKey, id.substring(3)); - console.log(response); if (response.filename === 'Magnet') return; // no files yet const selectedFiles = getSelectableFiles(response.files.filter(isVideo)).map( diff --git a/src/services/btdigg-v2.ts b/src/services/btdigg-v2.ts index 1f2db8f..e313103 100644 --- a/src/services/btdigg-v2.ts +++ b/src/services/btdigg-v2.ts @@ -245,7 +245,7 @@ export async function scrapeResults( ): Promise { let searchResultsArr: ScrapeSearchResult[] = []; while (true) { - console.log(`scraping btdig for: ${finalQuery}`); + console.log(`searching Btdigg: ${finalQuery}`); try { let pageNum = 1; const { results, numResults } = await processPage( diff --git a/src/services/scrapeJobs.ts b/src/services/scrapeJobs.ts index 97f504c..4bf2119 100644 --- a/src/services/scrapeJobs.ts +++ b/src/services/scrapeJobs.ts @@ -53,115 +53,77 @@ export async function generateScrapeJobs( imdbId: string, override: boolean = false ) { - let tmdbResponse; + let tmdbResponse, mdbResponse; try { tmdbResponse = await axios.get(getTmdbSearch(imdbId)); + mdbResponse = await axios.get(getMdbInfo(imdbId)); } catch (error: any) { res.status(500).json({ status: 'error', - errorMessage: `an error occurred while fetching TMDB info (${error.message})`, + errorMessage: `an error occurred while fetching media info (${error.message})`, }); return; } - if (tmdbResponse.data.movie_results?.length > 0) { + const isMovie = + mdbResponse.data.type === 'movie' || tmdbResponse.data.movie_results?.length > 0; + const isTv = mdbResponse.data.type === 'show' || tmdbResponse.data.tv_results?.length > 0; + + if (isMovie) { if (!override && (await isAlreadyScraped('movie', imdbId, res))) return; + const tmdbId = mdbResponse.data.tmdbid ?? tmdbResponse.data.movie_results[0].id; + try { - const resultsCount = await scrapeMovies(imdbId, tmdbResponse.data.movie_results[0], db); + const tmdbResponse = await axios.get(getTmdbMovieInfo(tmdbId)); + const resultsCount = await scrapeMovies(imdbId, tmdbResponse.data, db); res.status(200).json({ status: `scraped: ${resultsCount} movie torrents` }); } catch (error: any) { - res.status(500).json({ - status: 'error', - errorMessage: `an error occurred while scraping Btdigg for movies (${error.message})`, - }); + if (error.response?.status === 404) { + const tmdbResponse = convertMdbToTmdb(mdbResponse.data); + const resultsCount = await scrapeMovies(imdbId, tmdbResponse, db); + res.status(200).json({ status: `scraped: ${resultsCount} movie torrents` }); + } else { + res.status(500).json({ + status: 'error', + errorMessage: `an error occurred while scraping Btdigg for movie (${error.message})`, + }); + } } return; } - if (tmdbResponse.data.tv_results?.length > 0) { + if (isTv) { if (!override && (await isAlreadyScraped('tv', imdbId, res))) return; + const tmdbId = mdbResponse.data.tmdbid ?? tmdbResponse.data.tv_results[0].id; + try { - console.log('>>>>>>>>', tmdbResponse.data.tv_results[0].name, imdbId); - const resultsCount = await scrapeTv(imdbId, tmdbResponse.data.tv_results[0], db); + const tmdbResponse = await axios.get(getTmdbTvInfo(tmdbId)); + const resultsCount = await scrapeTv(imdbId, tmdbResponse.data, db); res.status(200).json({ status: `scraped: ${resultsCount} tv torrents` }); } catch (error: any) { - res.status(500).json({ - status: 'error', - errorMessage: `an error occurred while scraping Btdigg for tv (${error.message})`, - }); + if (error.response?.status === 404) { + const tmdbResponse = convertMdbToTmdb(mdbResponse.data); + const resultsCount = await scrapeTv(imdbId, tmdbResponse, db); + res.status(200).json({ status: `scraped: ${resultsCount} tv torrents` }); + } else { + res.status(500).json({ + status: 'error', + errorMessage: `an error occurred while scraping Btdigg for tv (${error.message})`, + }); + } } return; } - if (!tmdbResponse.data.movie_results?.length && !tmdbResponse.data.tv_results?.length) { - let mdbResponse; - try { - mdbResponse = await axios.get(getMdbInfo(imdbId)); - } catch (error: any) { - res.status(500).json({ - status: 'error', - errorMessage: `an error occurred while fetching MDB info (${error.message})`, - }); - return; - } - - if (mdbResponse.data.response) { - const mediaType = mdbResponse.data.type === 'show' ? 'tv' : 'movie'; - if (!override && (await isAlreadyScraped(mediaType, imdbId, res))) return; - - const tmdbId = mdbResponse.data.tmdbid; - - if (mediaType === 'movie') { - try { - const tmdbResponse = await axios.get(getTmdbMovieInfo(tmdbId)); - const resultsCount = await scrapeMovies(imdbId, tmdbResponse.data, db); - res.status(200).json({ status: `scraped: ${resultsCount} movie torrents` }); - } catch (error: any) { - if (error.response?.status === 404) { - const tmdbResponse = convertMdbToTmdb(mdbResponse.data); - const resultsCount = await scrapeMovies(imdbId, tmdbResponse, db); - res.status(200).json({ status: `scraped: ${resultsCount} movie torrents` }); - } else { - res.status(500).json({ - status: 'error', - errorMessage: `an error occurred while scraping Btdigg for movie (${error.message})`, - }); - } - } - - return; - } else if (mediaType === 'tv') { - try { - const tmdbResponse = await axios.get(getTmdbTvInfo(tmdbId)); - const resultsCount = await scrapeTv(imdbId, tmdbResponse.data, db); - res.status(200).json({ status: `scraped: ${resultsCount} tv torrents` }); - } catch (error: any) { - if (error.response?.status === 404) { - const tmdbResponse = convertMdbToTmdb(mdbResponse.data); - const resultsCount = await scrapeTv(imdbId, tmdbResponse, db); - res.status(200).json({ status: `scraped: ${resultsCount} tv torrents` }); - } else { - res.status(500).json({ - status: 'error', - errorMessage: `an error occurred while scraping Btdigg for tv (${error.message})`, - }); - } - } - - return; - } - } - - await db.saveScrapedResults(`movie:${imdbId}`, []); - await db.saveScrapedResults(`tv:${imdbId}:1`, []); - await db.markAsDone(imdbId); - res.status(404).json({ - status: 'error', - errorMessage: 'no movie or TV show found for this ID', - }); - } + await db.saveScrapedResults(`movie:${imdbId}`, []); + await db.saveScrapedResults(`tv:${imdbId}:1`, []); + await db.markAsDone(imdbId); + res.status(404).json({ + status: 'error', + errorMessage: 'no movie or TV show found for this ID', + }); } diff --git a/src/utils/instantChecks.ts b/src/utils/instantChecks.ts index f9c4985..92d6613 100644 --- a/src/utils/instantChecks.ts +++ b/src/utils/instantChecks.ts @@ -84,14 +84,6 @@ export const instantCheckInAd = async ( }; torrent.noVideos = checkVideoInFiles(magnetData.files); - - if (torrent.hash === 'ddc8c50f8f07cedce0f5a87b8dac3c5833573844') { - console.log( - 'torrent.noVideos', - torrent.noVideos, - magnetData.files.map((f) => f.n) - ); - } if (!torrent.noVideos) { torrent.adAvailable = magnetData.instant; instantCount += 1; From 1d9aa2d737235c3a9f0baea64b752375518aea86 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sat, 9 Sep 2023 01:00:19 +0200 Subject: [PATCH 088/272] 3.4.2 (#65) * tv scraper fix 2 * version bump --- TODO.md | 1 + package.json | 2 +- src/services/btdigg-v2.ts | 4 ++++ src/services/tvScraper.ts | 12 ++++++++---- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/TODO.md b/TODO.md index 5372573..f122be2 100644 --- a/TODO.md +++ b/TODO.md @@ -39,3 +39,4 @@ - [] Hashlist: Allow watching to preview downloads - [] Downloads/Movie: Allow watching to preview downloads - [] Downloads/TV?: Allow watching to preview downloads +- [] Better anime support diff --git a/package.json b/package.json index d470e16..0e1d770 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "3.4.1", + "version": "3.4.2", "private": false, "scripts": { "dev": "next dev", diff --git a/src/services/btdigg-v2.ts b/src/services/btdigg-v2.ts index e313103..73145b4 100644 --- a/src/services/btdigg-v2.ts +++ b/src/services/btdigg-v2.ts @@ -161,6 +161,8 @@ const processPage = async ( new RegExp(`${term.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&')}`, 'i').test(title) ).length; if (containedTerms < requiredTerms) { + console.debug(title, '-title match-', targetTitle); + console.debug('bad title', containedTerms, requiredTerms); badCount++; // title doesn't contain most terms in the query continue; } @@ -173,6 +175,8 @@ const processPage = async ( return false; }).length; if (containedMustHaveTerms < mustHaveTerms.length) { + console.debug(title, '-must have-', mustHaveTerms); + console.debug('bad must have terms', containedMustHaveTerms, mustHaveTerms.length); badCount++; continue; } diff --git a/src/services/tvScraper.ts b/src/services/tvScraper.ts index 12e26d9..e8f9f59 100644 --- a/src/services/tvScraper.ts +++ b/src/services/tvScraper.ts @@ -63,7 +63,7 @@ const getSearchResults = async (job: TvScrapeJob) => { http, `"${job.title}" s${padWithZero(job.seasonNumber)}`, job.title, - [new RegExp(`[0123]?${job.seasonNumber}[\\be]`, 'i')], + [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], false ) ); @@ -74,7 +74,7 @@ const getSearchResults = async (job: TvScrapeJob) => { http, `"${job.title}" "${job.seasonName}" s${padWithZero(job.seasonCode)}`, job.title, - [new RegExp(`[0123]?${job.seasonCode}[\\be]`, 'i'), ...job.seasonName.split(/\s/)], + [new RegExp(`[0123]?${job.seasonCode}[ex\\W_]`, 'i'), ...job.seasonName.split(/\s/)], false ) ); @@ -90,6 +90,10 @@ const getSearchResults = async (job: TvScrapeJob) => { ); } + if (job.title.split(/\s/).length > 3) { + sets.push(await scrapeResults(http, `"${job.title}"`, job.title, [], false)); + } + if (!job.originalTitle) return sets; let sets2: ScrapeSearchResult[][] = []; @@ -99,7 +103,7 @@ const getSearchResults = async (job: TvScrapeJob) => { http, `"${job.originalTitle}" s${padWithZero(job.seasonNumber)}`, job.originalTitle, - [new RegExp(`[0123]?${job.seasonNumber}[\\be]`, 'i')], + [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], false ) ); @@ -109,7 +113,7 @@ const getSearchResults = async (job: TvScrapeJob) => { http, `"${job.originalTitle}" "${job.seasonName}" s${padWithZero(job.seasonCode)}`, job.originalTitle, - [new RegExp(`[0123]?${job.seasonCode}[\\be]`, 'i'), ...job.seasonName.split(/\s/)], + [new RegExp(`[0123]?${job.seasonCode}[ex\\W_]`, 'i'), ...job.seasonName.split(/\s/)], false ) ); From 4fde52a925940708be0a095b49a63f1388ef056e Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sat, 9 Sep 2023 08:49:02 +0200 Subject: [PATCH 089/272] 3.4.2 (#66) * tv scraper fixes * version bump --- package-lock.json | 4 ++-- package.json | 2 +- src/services/planetscale.ts | 4 +++- src/services/scrapeJobs.ts | 2 +- src/services/tvScraper.ts | 10 ++++++++-- 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index eff0fbc..60cf173 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "3.4.1", + "version": "3.4.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "3.4.1", + "version": "3.4.3", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@google-cloud/firestore": "^6.7.0", diff --git a/package.json b/package.json index 0e1d770..927d74b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "3.4.2", + "version": "3.4.3", "private": false, "scripts": { "dev": "next dev", diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index cf2d268..165d49c 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -77,7 +77,9 @@ export class PlanetScaleCache { }); if (scrapedItem !== null) { - return scrapedItem.key.split(':')[1]; + const splits = scrapedItem.key.split(':'); + if (splits.length === 3 && splits[2] !== '1') return null; + return splits[1]; } return null; diff --git a/src/services/scrapeJobs.ts b/src/services/scrapeJobs.ts index 4bf2119..53c2e5d 100644 --- a/src/services/scrapeJobs.ts +++ b/src/services/scrapeJobs.ts @@ -122,7 +122,7 @@ export async function generateScrapeJobs( await db.saveScrapedResults(`movie:${imdbId}`, []); await db.saveScrapedResults(`tv:${imdbId}:1`, []); await db.markAsDone(imdbId); - res.status(404).json({ + res.status(200).json({ status: 'error', errorMessage: 'no movie or TV show found for this ID', }); diff --git a/src/services/tvScraper.ts b/src/services/tvScraper.ts index e8f9f59..3d9f8a7 100644 --- a/src/services/tvScraper.ts +++ b/src/services/tvScraper.ts @@ -74,7 +74,10 @@ const getSearchResults = async (job: TvScrapeJob) => { http, `"${job.title}" "${job.seasonName}" s${padWithZero(job.seasonCode)}`, job.title, - [new RegExp(`[0123]?${job.seasonCode}[ex\\W_]`, 'i'), ...job.seasonName.split(/\s/)], + [ + new RegExp(`[0123]?${job.seasonCode}[ex\\W_]`, 'i'), + ...job.seasonName.split(/\s/), + ], false ) ); @@ -113,7 +116,10 @@ const getSearchResults = async (job: TvScrapeJob) => { http, `"${job.originalTitle}" "${job.seasonName}" s${padWithZero(job.seasonCode)}`, job.originalTitle, - [new RegExp(`[0123]?${job.seasonCode}[ex\\W_]`, 'i'), ...job.seasonName.split(/\s/)], + [ + new RegExp(`[0123]?${job.seasonCode}[ex\\W_]`, 'i'), + ...job.seasonName.split(/\s/), + ], false ) ); From 292fe9d3c0a5395e2de6d3bf730b7bbfe11f29ad Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 9 Sep 2023 09:43:10 +0200 Subject: [PATCH 090/272] updater code --- src/pages/api/updater.ts | 1 + src/services/planetscale.ts | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/src/pages/api/updater.ts b/src/pages/api/updater.ts index 530fcb6..14da175 100644 --- a/src/pages/api/updater.ts +++ b/src/pages/api/updater.ts @@ -20,5 +20,6 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< return; } + await db.delete(imdbId); await generateScrapeJobs(res, imdbId, true); } diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index 165d49c..0e1f0de 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -85,6 +85,16 @@ export class PlanetScaleCache { return null; } + public async delete(imdbId: string): Promise { + const keys = [`movie:${imdbId}`, `tv:${imdbId}%`]; + + for (const key of keys) { + await this.prisma.scraped.deleteMany({ + where: { key: { contains: key } }, + }); + } + } + public async markAsDone(imdbId: string): Promise { const keys = [`requested:${imdbId}`, `processing:${imdbId}`]; From 1d96e298c4000bd29cbdac60b3345b80bd329b17 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 9 Sep 2023 11:53:23 +0200 Subject: [PATCH 091/272] dont repeat yourself --- src/services/tvScraper.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/tvScraper.ts b/src/services/tvScraper.ts index 3d9f8a7..9cb662a 100644 --- a/src/services/tvScraper.ts +++ b/src/services/tvScraper.ts @@ -93,7 +93,7 @@ const getSearchResults = async (job: TvScrapeJob) => { ); } - if (job.title.split(/\s/).length > 3) { + if (job.title.split(/\s/).length > 3 && job.seasonNumber === 1) { sets.push(await scrapeResults(http, `"${job.title}"`, job.title, [], false)); } From 33d6dcca16d62aa4bc067da655a2f8deca5b309e Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sat, 9 Sep 2023 23:56:58 +0200 Subject: [PATCH 092/272] 3.4.4 (#67) * remove 2160p context * scraper updates --- package-lock.json | 4 +- package.json | 2 +- src/services/btdigg-v2.ts | 101 +++++++++++++++++++++++++---------- src/services/movieScraper.ts | 31 +++++------ src/services/planetscale.ts | 4 +- src/services/scrapeJobs.ts | 26 ++++----- src/services/tvScraper.ts | 40 +++++++------- 7 files changed, 127 insertions(+), 81 deletions(-) diff --git a/package-lock.json b/package-lock.json index 60cf173..72f82b7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "3.4.3", + "version": "3.4.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "3.4.3", + "version": "3.4.4", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@google-cloud/firestore": "^6.7.0", diff --git a/package.json b/package.json index 927d74b..e406c95 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "3.4.3", + "version": "3.4.4", "private": false, "scripts": { "dev": "next dev", diff --git a/src/services/btdigg-v2.ts b/src/services/btdigg-v2.ts index 73145b4..297ac61 100644 --- a/src/services/btdigg-v2.ts +++ b/src/services/btdigg-v2.ts @@ -56,6 +56,50 @@ function convertToMB(fileSizeStr: string) { return Math.round(fileSize); // returns the rounded integer value } +function isFoundDateRecent(foundString: string, date: string): boolean { + const regex = /found\s(\d+)\s(years?|months?|weeks?|days?|hours?)\sago/; + const match = foundString.match(regex); + + if (!match) { + throw new Error('Invalid found string'); + } + + const value = parseInt(match[1]); + const unit = match[2]; + + // set found date to last possible moment of the unit + const foundDate = new Date(); + switch (unit) { + case 'years': + case 'year': + foundDate.setFullYear(foundDate.getFullYear() - value); + break; + case 'months': + case 'month': + foundDate.setMonth(foundDate.getMonth() - value); + break; + case 'weeks': + case 'week': + foundDate.setDate(foundDate.getDate() - 7 * value); + break; + case 'days': + case 'day': + foundDate.setDate(foundDate.getDate() - value); + break; + case 'hours': + case 'hour': + foundDate.setHours(foundDate.getHours() - value); + break; + default: + throw new Error('Invalid unit'); + } + + const airDate = new Date(date); + + // Return true if the found date is more recent or equal + return foundDate >= airDate; +} + const createSearchUrl = (finalQuery: string, pg: number) => `${BTDIG}/search?order=0&q=${encodeURIComponent(finalQuery)}&p=${pg - 1}`; @@ -70,7 +114,7 @@ const processPage = async ( finalQuery: string, targetTitle: string, mustHaveTerms: (string | RegExp)[], - is2160p: boolean, + airDate: string, pageNum: number ): Promise => { const MAX_RETRIES = 5; // maximum number of retries @@ -124,8 +168,9 @@ const processPage = async ( const namesAndHashes = Array.from( responseData.matchAll(/magnet:\?xt=urn:btih:([a-z\d]{40})&dn=([^&]+)&/g) ); + const ages = Array.from(responseData.matchAll(/class=\"torrent_age\"[^>]*>([^<]+)/g)); - if (fileSizes.length !== namesAndHashes.length) { + if (fileSizes.length !== namesAndHashes.length || fileSizes.length !== ages.length) { console.warn('Mismatch in file sizes and names'); return { results, badCount: MAX_RESULTS_PER_PAGE, numResults }; } @@ -134,23 +179,26 @@ const processPage = async ( const title = decodeURIComponent(namesAndHashes[resIndex][2].replaceAll('+', ' ')); const fileSizeStr = `${fileSizes[resIndex][1]} ${fileSizes[resIndex][2] || 'B'}`; - if (!fileSizeStr.includes('GB') && (is2160p || !fileSizeStr.includes('MB'))) { + if (!fileSizeStr.includes('GB') && !fileSizeStr.includes('MB')) { badCount++; continue; } - // immediately check if filesize makes sense const fileSize = convertToMB(fileSizeStr); - if (getMediaType(title) === 'movie' && fileSize > 150000) { + if (getMediaType(title) === 'movie' && fileSize > 200000) { badCount++; // movie is too big continue; } - // if file size is too small, skip if (fileSizeStr.includes(' B') || fileSizeStr.includes(' KB')) { badCount++; continue; } + if (!isFoundDateRecent(ages[resIndex][1], airDate)) { + badCount++; + continue; + } + // Check if every term in the query (tokenized by space) is contained in the title const queryTerms = targetTitle .replaceAll('"', ' ') @@ -161,8 +209,8 @@ const processPage = async ( new RegExp(`${term.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&')}`, 'i').test(title) ).length; if (containedTerms < requiredTerms) { - console.debug(title, '-title match-', targetTitle); - console.debug('bad title', containedTerms, requiredTerms); + // console.debug(title, '-title match-', targetTitle); + // console.debug('bad title', containedTerms, requiredTerms); badCount++; // title doesn't contain most terms in the query continue; } @@ -175,8 +223,8 @@ const processPage = async ( return false; }).length; if (containedMustHaveTerms < mustHaveTerms.length) { - console.debug(title, '-must have-', mustHaveTerms); - console.debug('bad must have terms', containedMustHaveTerms, mustHaveTerms.length); + // console.debug(title, '-must have-', mustHaveTerms); + // console.debug('bad must have terms', containedMustHaveTerms, mustHaveTerms.length); badCount++; continue; } @@ -186,9 +234,6 @@ const processPage = async ( continue; } } - if (is2160p && !/\b2160p\b|\buhd\b/i.test(title)) { - continue; - } const hash = namesAndHashes[resIndex][1]; @@ -245,7 +290,7 @@ export async function scrapeResults( finalQuery: string, targetTitle: string, mustHaveTerms: (string | RegExp)[], - is2160p: boolean = false + airDate: string, ): Promise { let searchResultsArr: ScrapeSearchResult[] = []; while (true) { @@ -257,7 +302,7 @@ export async function scrapeResults( finalQuery, targetTitle, mustHaveTerms, - is2160p, + airDate, pageNum++ ); searchResultsArr.push(...results); @@ -271,7 +316,7 @@ export async function scrapeResults( finalQuery, targetTitle, mustHaveTerms, - is2160p, + airDate, pageNum ); })(pageNum) @@ -288,10 +333,10 @@ export async function scrapeResults( let pageNum = 1; const { results, numResults } = await processPage( client, - finalQuery, - `${targetTitle} .mkv`, + `${finalQuery} .mkv`, + targetTitle, mustHaveTerms, - is2160p, + airDate, pageNum++ ); searchResultsArr.push(...results); @@ -302,10 +347,10 @@ export async function scrapeResults( ((pageNum) => async () => { return await processPage( client, - finalQuery, - `${targetTitle} .mkv`, + `${finalQuery} .mkv`, + targetTitle, mustHaveTerms, - is2160p, + airDate, pageNum ); })(pageNum) @@ -322,10 +367,10 @@ export async function scrapeResults( let pageNum = 1; const { results, numResults } = await processPage( client, - finalQuery, - `${targetTitle} .mp4`, + `${finalQuery} .mp4`, + targetTitle, mustHaveTerms, - is2160p, + airDate, pageNum++ ); searchResultsArr.push(...results); @@ -336,10 +381,10 @@ export async function scrapeResults( ((pageNum) => async () => { return await processPage( client, - finalQuery, - `${targetTitle} .mp4`, + `${finalQuery} .mp4`, + targetTitle, mustHaveTerms, - is2160p, + airDate, pageNum ); })(pageNum) diff --git a/src/services/movieScraper.ts b/src/services/movieScraper.ts index 5b2b5fb..e9f317d 100644 --- a/src/services/movieScraper.ts +++ b/src/services/movieScraper.ts @@ -1,6 +1,4 @@ -import { getMdbInfo } from '@/utils/mdblist'; import { cleanSearchQuery } from '@/utils/search'; -import axios from 'axios'; import { SocksProxyAgent } from 'socks-proxy-agent'; import { createAxiosInstance, @@ -16,6 +14,7 @@ type MovieScrapeJob = { originalTitle?: string; cleanedTitle?: string; year?: string; + airDate: string; }; const getMovieSearchResults = async (job: MovieScrapeJob) => { @@ -25,7 +24,7 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { let sets: ScrapeSearchResult[][] = []; - sets.push(await scrapeResults(http, `"${job.title}" ${job.year ?? ''}`, job.title, [], false)); + sets.push(await scrapeResults(http, `"${job.title}" ${job.year ?? ''}`, job.title, [], job.airDate)); if (job.title.includes('&')) { sets.push( await scrapeResults( @@ -33,13 +32,13 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { `"${job.title.replaceAll('&', 'and')}" ${job.year ?? ''}`, job.title, [], - false + job.airDate, ) ); } if (job.title.split(/\s/).length > 3) { - sets.push(await scrapeResults(http, `"${job.title}"`, job.title, [], false)); + sets.push(await scrapeResults(http, `"${job.title}"`, job.title, [], job.airDate)); } if (job.originalTitle) { @@ -49,7 +48,7 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { `"${job.originalTitle}" ${job.year ?? ''}`, job.originalTitle, [], - false + job.airDate, ) ); } @@ -61,7 +60,7 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { `"${job.cleanedTitle}" ${job.year ?? ''}`, job.cleanedTitle, [], - false + job.airDate, ) ); } @@ -71,18 +70,19 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { export async function scrapeMovies( imdbId: string, - tmdbItem: any, + tmdbData: any, + mdbData: any, db: PlanetScaleCache ): Promise { - console.log(`Scraping movie: ${tmdbItem.title} (${imdbId})...`); - const cleanTitle = cleanSearchQuery(tmdbItem.title); - const year = tmdbItem.release_date?.substring(0, 4); + console.log(`Scraping movie: ${tmdbData.title} (${imdbId})...`); + const cleanTitle = cleanSearchQuery(tmdbData.title); + const year = mdbData.year ?? mdbData.released?.substring(0, 4) ?? tmdbData.release_date?.substring(0, 4); + const airDate = mdbData.released ?? tmdbData.release_date ?? '2000-01-01'; let originalTitle, cleanedTitle; - if (tmdbItem.original_title && tmdbItem.original_title !== tmdbItem.title) { - originalTitle = tmdbItem.original_title.toLowerCase(); - const mdbItem = await axios.get(getMdbInfo(imdbId)); - for (let rating of mdbItem.data.ratings) { + if (tmdbData.original_title && tmdbData.original_title !== tmdbData.title) { + originalTitle = tmdbData.original_title.toLowerCase(); + for (let rating of mdbData.ratings) { if (rating.source === 'tomatoes') { if (!rating.url) continue; const tomatoTitle = ( @@ -108,6 +108,7 @@ export async function scrapeMovies( originalTitle, cleanedTitle, year, + airDate, }); let processedResults = flattenAndRemoveDuplicates(searchResults); if (processedResults.length) processedResults = groupByParsedTitle(processedResults); diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index 0e1f0de..619419a 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -77,9 +77,7 @@ export class PlanetScaleCache { }); if (scrapedItem !== null) { - const splits = scrapedItem.key.split(':'); - if (splits.length === 3 && splits[2] !== '1') return null; - return splits[1]; + return scrapedItem.key.split(':')[1]; } return null; diff --git a/src/services/scrapeJobs.ts b/src/services/scrapeJobs.ts index 53c2e5d..62c95ac 100644 --- a/src/services/scrapeJobs.ts +++ b/src/services/scrapeJobs.ts @@ -60,7 +60,7 @@ export async function generateScrapeJobs( } catch (error: any) { res.status(500).json({ status: 'error', - errorMessage: `an error occurred while fetching media info (${error.message})`, + errorMessage: `an error occurred while fetching media info for '${imdbId}' (${error.message})`, }); return; } @@ -76,17 +76,17 @@ export async function generateScrapeJobs( try { const tmdbResponse = await axios.get(getTmdbMovieInfo(tmdbId)); - const resultsCount = await scrapeMovies(imdbId, tmdbResponse.data, db); - res.status(200).json({ status: `scraped: ${resultsCount} movie torrents` }); + const resultsCount = await scrapeMovies(imdbId, tmdbResponse.data, mdbResponse.data, db); + res.status(200).json({ status: `scraped: ${resultsCount} movie torrents for '${mdbResponse.data.title}'` }); } catch (error: any) { if (error.response?.status === 404) { - const tmdbResponse = convertMdbToTmdb(mdbResponse.data); - const resultsCount = await scrapeMovies(imdbId, tmdbResponse, db); - res.status(200).json({ status: `scraped: ${resultsCount} movie torrents` }); + const convertedMdb = convertMdbToTmdb(mdbResponse.data); + const resultsCount = await scrapeMovies(imdbId, convertedMdb, mdbResponse.data, db); + res.status(200).json({ status: `scraped: ${resultsCount} movie torrents for '${mdbResponse.data.title}'` }); } else { res.status(500).json({ status: 'error', - errorMessage: `an error occurred while scraping Btdigg for movie (${error.message})`, + errorMessage: `an error occurred while scraping Btdigg for movie '${mdbResponse.data.title}' (${error.message})`, }); } } @@ -101,17 +101,17 @@ export async function generateScrapeJobs( try { const tmdbResponse = await axios.get(getTmdbTvInfo(tmdbId)); - const resultsCount = await scrapeTv(imdbId, tmdbResponse.data, db); - res.status(200).json({ status: `scraped: ${resultsCount} tv torrents` }); + const resultsCount = await scrapeTv(imdbId, tmdbResponse.data, mdbResponse.data, db); + res.status(200).json({ status: `scraped: ${resultsCount} tv torrents for '${mdbResponse.data.title}'` }); } catch (error: any) { if (error.response?.status === 404) { - const tmdbResponse = convertMdbToTmdb(mdbResponse.data); - const resultsCount = await scrapeTv(imdbId, tmdbResponse, db); - res.status(200).json({ status: `scraped: ${resultsCount} tv torrents` }); + const convertedMdb = convertMdbToTmdb(mdbResponse.data); + const resultsCount = await scrapeTv(imdbId, convertedMdb, mdbResponse.data, db); + res.status(200).json({ status: `scraped: ${resultsCount} tv torrents for '${mdbResponse.data.title}'` }); } else { res.status(500).json({ status: 'error', - errorMessage: `an error occurred while scraping Btdigg for tv (${error.message})`, + errorMessage: `an error occurred while scraping Btdigg for tv '${mdbResponse.data.title}' (${error.message})`, }); } } diff --git a/src/services/tvScraper.ts b/src/services/tvScraper.ts index 9cb662a..4d3179d 100644 --- a/src/services/tvScraper.ts +++ b/src/services/tvScraper.ts @@ -1,6 +1,4 @@ -import { getMdbInfo } from '@/utils/mdblist'; import { cleanSearchQuery } from '@/utils/search'; -import axios from 'axios'; import { SocksProxyAgent } from 'socks-proxy-agent'; import { createAxiosInstance, @@ -18,6 +16,7 @@ type TvScrapeJob = { seasonName?: string; seasonCode?: number; seasonYear?: string; + airDate: string; }; function padWithZero(num: number) { @@ -28,9 +27,9 @@ function padWithZero(num: number) { } } -const getSeasons = (showResponse: any) => - showResponse.data.seasons.length - ? showResponse.data.seasons +const getSeasons = (mdbData: any) => + mdbData.seasons.length + ? mdbData.seasons : [{ name: 'Season 1', season_number: 1, episode_count: 0 }]; const getSeasonNameAndCode = (season: any) => { @@ -64,7 +63,7 @@ const getSearchResults = async (job: TvScrapeJob) => { `"${job.title}" s${padWithZero(job.seasonNumber)}`, job.title, [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], - false + job.airDate, ) ); @@ -78,7 +77,7 @@ const getSearchResults = async (job: TvScrapeJob) => { new RegExp(`[0123]?${job.seasonCode}[ex\\W_]`, 'i'), ...job.seasonName.split(/\s/), ], - false + job.airDate, ) ); } else if (job.seasonName && job.seasonName !== job.title) { @@ -88,13 +87,13 @@ const getSearchResults = async (job: TvScrapeJob) => { `"${job.title}" "${job.seasonName}"`, job.title, [...job.seasonName.split(/\s/)], - false + job.airDate, ) ); } if (job.title.split(/\s/).length > 3 && job.seasonNumber === 1) { - sets.push(await scrapeResults(http, `"${job.title}"`, job.title, [], false)); + sets.push(await scrapeResults(http, `"${job.title}"`, job.title, [], job.airDate)); } if (!job.originalTitle) return sets; @@ -107,7 +106,7 @@ const getSearchResults = async (job: TvScrapeJob) => { `"${job.originalTitle}" s${padWithZero(job.seasonNumber)}`, job.originalTitle, [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], - false + job.airDate, ) ); if (job.seasonName && job.seasonCode) { @@ -120,7 +119,7 @@ const getSearchResults = async (job: TvScrapeJob) => { new RegExp(`[0123]?${job.seasonCode}[ex\\W_]`, 'i'), ...job.seasonName.split(/\s/), ], - false + job.airDate, ) ); } else if (job.seasonName && job.seasonName !== job.originalTitle) { @@ -130,7 +129,7 @@ const getSearchResults = async (job: TvScrapeJob) => { `"${job.originalTitle}" "${job.seasonName}"`, job.originalTitle, [...job.seasonName.split(/\s/)], - false + job.airDate, ) ); } @@ -140,23 +139,24 @@ const getSearchResults = async (job: TvScrapeJob) => { export async function scrapeTv( imdbId: string, - tmdbItem: any, + tmdbData: any, + mdbData: any, db: PlanetScaleCache ): Promise { - console.log(`Scraping tv show: ${tmdbItem.name} (${imdbId})...`); + console.log(`Scraping tv show: ${tmdbData.name} (${imdbId})...`); const scrapeJobs: TvScrapeJob[] = []; - let cleanTitle = cleanSearchQuery(tmdbItem.name); + let cleanTitle = cleanSearchQuery(tmdbData.name); let cleanOriginalTitle; - if (tmdbItem.original_name && tmdbItem.original_name !== tmdbItem.name) { - cleanOriginalTitle = cleanSearchQuery(tmdbItem.original_name); + if (tmdbData.original_name && tmdbData.original_name !== tmdbData.name) { + cleanOriginalTitle = cleanSearchQuery(tmdbData.original_name); } - const showResponse = await axios.get(getMdbInfo(imdbId)); - for (const season of getSeasons(showResponse)) { + for (const season of getSeasons(mdbData)) { if (season.season_number === 0) continue; let seasonNumber = season.season_number; const { seasonName, seasonCode } = getSeasonNameAndCode(season); const seasonYear = getSeasonYear(season); + const airDate = mdbData.air_date ?? '2000-01-01'; scrapeJobs.push({ title: cleanTitle, @@ -165,6 +165,7 @@ export async function scrapeTv( seasonName, seasonCode, seasonYear, + airDate, }); if (cleanTitle.includes('&')) { @@ -175,6 +176,7 @@ export async function scrapeTv( seasonName, seasonCode, seasonYear, + airDate, }); } } From d1d43cb8f26a4b8bc1678b595ba0ca2a4228a9d2 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sun, 10 Sep 2023 00:32:58 +0200 Subject: [PATCH 093/272] 3.4.5 (#68) tv scraper fixes --- package-lock.json | 4 ++-- package.json | 2 +- src/services/btdigg-v2.ts | 11 ++++++++--- src/services/tvScraper.ts | 2 +- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 72f82b7..ead77f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "3.4.4", + "version": "3.4.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "3.4.4", + "version": "3.4.5", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@google-cloud/firestore": "^6.7.0", diff --git a/package.json b/package.json index e406c95..129b487 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "3.4.4", + "version": "3.4.5", "private": false, "scripts": { "dev": "next dev", diff --git a/src/services/btdigg-v2.ts b/src/services/btdigg-v2.ts index 297ac61..872dca2 100644 --- a/src/services/btdigg-v2.ts +++ b/src/services/btdigg-v2.ts @@ -57,7 +57,7 @@ function convertToMB(fileSizeStr: string) { } function isFoundDateRecent(foundString: string, date: string): boolean { - const regex = /found\s(\d+)\s(years?|months?|weeks?|days?|hours?)\sago/; + const regex = /found\s(\d+)\s(years?|months?|weeks?|days?|hours?|minutes?|seconds?)\sago/; const match = foundString.match(regex); if (!match) { @@ -88,8 +88,13 @@ function isFoundDateRecent(foundString: string, date: string): boolean { break; case 'hours': case 'hour': - foundDate.setHours(foundDate.getHours() - value); - break; + return true; + case 'minutes': + case 'minute': + return true; + case 'seconds': + case 'second': + return true; default: throw new Error('Invalid unit'); } diff --git a/src/services/tvScraper.ts b/src/services/tvScraper.ts index 4d3179d..715200e 100644 --- a/src/services/tvScraper.ts +++ b/src/services/tvScraper.ts @@ -156,7 +156,7 @@ export async function scrapeTv( let seasonNumber = season.season_number; const { seasonName, seasonCode } = getSeasonNameAndCode(season); const seasonYear = getSeasonYear(season); - const airDate = mdbData.air_date ?? '2000-01-01'; + const airDate = season.air_date ?? '2000-01-01'; scrapeJobs.push({ title: cleanTitle, From 83dc367a3b9a3c69d8c0cc258dfe95c29af8ecdf Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 10 Sep 2023 08:57:26 +0200 Subject: [PATCH 094/272] catch edge case in tv scraper: no tmdbid --- src/services/btdigg-v2.ts | 2 +- src/services/movieScraper.ts | 13 +++--- src/services/scrapeJobs.ts | 79 ++++++++++++++++++++++-------------- src/services/tvScraper.ts | 12 +++--- 4 files changed, 64 insertions(+), 42 deletions(-) diff --git a/src/services/btdigg-v2.ts b/src/services/btdigg-v2.ts index 872dca2..0b2d408 100644 --- a/src/services/btdigg-v2.ts +++ b/src/services/btdigg-v2.ts @@ -295,7 +295,7 @@ export async function scrapeResults( finalQuery: string, targetTitle: string, mustHaveTerms: (string | RegExp)[], - airDate: string, + airDate: string ): Promise { let searchResultsArr: ScrapeSearchResult[] = []; while (true) { diff --git a/src/services/movieScraper.ts b/src/services/movieScraper.ts index e9f317d..64ccdd4 100644 --- a/src/services/movieScraper.ts +++ b/src/services/movieScraper.ts @@ -24,7 +24,9 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { let sets: ScrapeSearchResult[][] = []; - sets.push(await scrapeResults(http, `"${job.title}" ${job.year ?? ''}`, job.title, [], job.airDate)); + sets.push( + await scrapeResults(http, `"${job.title}" ${job.year ?? ''}`, job.title, [], job.airDate) + ); if (job.title.includes('&')) { sets.push( await scrapeResults( @@ -32,7 +34,7 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { `"${job.title.replaceAll('&', 'and')}" ${job.year ?? ''}`, job.title, [], - job.airDate, + job.airDate ) ); } @@ -48,7 +50,7 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { `"${job.originalTitle}" ${job.year ?? ''}`, job.originalTitle, [], - job.airDate, + job.airDate ) ); } @@ -60,7 +62,7 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { `"${job.cleanedTitle}" ${job.year ?? ''}`, job.cleanedTitle, [], - job.airDate, + job.airDate ) ); } @@ -76,7 +78,8 @@ export async function scrapeMovies( ): Promise { console.log(`Scraping movie: ${tmdbData.title} (${imdbId})...`); const cleanTitle = cleanSearchQuery(tmdbData.title); - const year = mdbData.year ?? mdbData.released?.substring(0, 4) ?? tmdbData.release_date?.substring(0, 4); + const year = + mdbData.year ?? mdbData.released?.substring(0, 4) ?? tmdbData.release_date?.substring(0, 4); const airDate = mdbData.released ?? tmdbData.release_date ?? '2000-01-01'; let originalTitle, cleanedTitle; diff --git a/src/services/scrapeJobs.ts b/src/services/scrapeJobs.ts index 62c95ac..bdc72d1 100644 --- a/src/services/scrapeJobs.ts +++ b/src/services/scrapeJobs.ts @@ -53,11 +53,12 @@ export async function generateScrapeJobs( imdbId: string, override: boolean = false ) { - let tmdbResponse, mdbResponse; + let tmdbSearch, mdbInfo; try { - tmdbResponse = await axios.get(getTmdbSearch(imdbId)); - mdbResponse = await axios.get(getMdbInfo(imdbId)); + tmdbSearch = await axios.get(getTmdbSearch(imdbId)); + mdbInfo = await axios.get(getMdbInfo(imdbId)); } catch (error: any) { + console.error(error); res.status(500).json({ status: 'error', errorMessage: `an error occurred while fetching media info for '${imdbId}' (${error.message})`, @@ -65,58 +66,75 @@ export async function generateScrapeJobs( return; } - const isMovie = - mdbResponse.data.type === 'movie' || tmdbResponse.data.movie_results?.length > 0; - const isTv = mdbResponse.data.type === 'show' || tmdbResponse.data.tv_results?.length > 0; + const isMovie = mdbInfo.data.type === 'movie' || tmdbSearch.data.movie_results?.length > 0; + const isTv = mdbInfo.data.type === 'show' || tmdbSearch.data.tv_results?.length > 0; if (isMovie) { if (!override && (await isAlreadyScraped('movie', imdbId, res))) return; - const tmdbId = mdbResponse.data.tmdbid ?? tmdbResponse.data.movie_results[0].id; - try { - const tmdbResponse = await axios.get(getTmdbMovieInfo(tmdbId)); - const resultsCount = await scrapeMovies(imdbId, tmdbResponse.data, mdbResponse.data, db); - res.status(200).json({ status: `scraped: ${resultsCount} movie torrents for '${mdbResponse.data.title}'` }); + const tmdbId = mdbInfo.data.tmdbid ?? tmdbSearch.data.movie_results[0]?.id; + const tmdbInfo = await axios.get(getTmdbMovieInfo(tmdbId)); + const resultsCount = await scrapeMovies(imdbId, tmdbInfo.data, mdbInfo.data, db); + res.status(200).json({ + status: `scraped: ${resultsCount} movie torrents for '${mdbInfo.data.title}'`, + }); + return; } catch (error: any) { - if (error.response?.status === 404) { - const convertedMdb = convertMdbToTmdb(mdbResponse.data); - const resultsCount = await scrapeMovies(imdbId, convertedMdb, mdbResponse.data, db); - res.status(200).json({ status: `scraped: ${resultsCount} movie torrents for '${mdbResponse.data.title}'` }); + if (error.response?.status === 404 || error.message.includes("reading 'id'")) { + try { + const convertedMdb = convertMdbToTmdb(mdbInfo.data); + const resultsCount = await scrapeMovies(imdbId, convertedMdb, mdbInfo.data, db); + res.status(200).json({ + status: `scraped: ${resultsCount} movie torrents for '${mdbInfo.data.title}'`, + }); + return; + } catch (error: any) { + console.error(error); + } } else { + console.error(error); res.status(500).json({ status: 'error', - errorMessage: `an error occurred while scraping Btdigg for movie '${mdbResponse.data.title}' (${error.message})`, + errorMessage: `an error occurred while scraping Btdigg for movie '${mdbInfo.data.title}' (${error.message})`, }); + return; } } - - return; } if (isTv) { if (!override && (await isAlreadyScraped('tv', imdbId, res))) return; - const tmdbId = mdbResponse.data.tmdbid ?? tmdbResponse.data.tv_results[0].id; - try { - const tmdbResponse = await axios.get(getTmdbTvInfo(tmdbId)); - const resultsCount = await scrapeTv(imdbId, tmdbResponse.data, mdbResponse.data, db); - res.status(200).json({ status: `scraped: ${resultsCount} tv torrents for '${mdbResponse.data.title}'` }); + const tmdbId = mdbInfo.data.tmdbid ?? tmdbSearch.data.tv_results[0]?.id; + const tmdbInfo = await axios.get(getTmdbTvInfo(tmdbId)); + const resultsCount = await scrapeTv(imdbId, tmdbInfo.data, mdbInfo.data, db); + res.status(200).json({ + status: `scraped: ${resultsCount} tv torrents for '${mdbInfo.data.title}'`, + }); + return; } catch (error: any) { - if (error.response?.status === 404) { - const convertedMdb = convertMdbToTmdb(mdbResponse.data); - const resultsCount = await scrapeTv(imdbId, convertedMdb, mdbResponse.data, db); - res.status(200).json({ status: `scraped: ${resultsCount} tv torrents for '${mdbResponse.data.title}'` }); + if (error.response?.status === 404 || error.message.includes("reading 'id'")) { + try { + const convertedMdb = convertMdbToTmdb(mdbInfo.data); + const resultsCount = await scrapeTv(imdbId, convertedMdb, mdbInfo.data, db); + res.status(200).json({ + status: `scraped: ${resultsCount} tv torrents for '${mdbInfo.data.title}'`, + }); + return; + } catch (error: any) { + console.error(error); + } } else { + console.error(error); res.status(500).json({ status: 'error', - errorMessage: `an error occurred while scraping Btdigg for tv '${mdbResponse.data.title}' (${error.message})`, + errorMessage: `an error occurred while scraping Btdigg for tv '${mdbInfo.data.title}' (${error.message})`, }); + return; } } - - return; } await db.saveScrapedResults(`movie:${imdbId}`, []); @@ -126,4 +144,5 @@ export async function generateScrapeJobs( status: 'error', errorMessage: 'no movie or TV show found for this ID', }); + return; } diff --git a/src/services/tvScraper.ts b/src/services/tvScraper.ts index 715200e..b8225d7 100644 --- a/src/services/tvScraper.ts +++ b/src/services/tvScraper.ts @@ -63,7 +63,7 @@ const getSearchResults = async (job: TvScrapeJob) => { `"${job.title}" s${padWithZero(job.seasonNumber)}`, job.title, [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], - job.airDate, + job.airDate ) ); @@ -77,7 +77,7 @@ const getSearchResults = async (job: TvScrapeJob) => { new RegExp(`[0123]?${job.seasonCode}[ex\\W_]`, 'i'), ...job.seasonName.split(/\s/), ], - job.airDate, + job.airDate ) ); } else if (job.seasonName && job.seasonName !== job.title) { @@ -87,7 +87,7 @@ const getSearchResults = async (job: TvScrapeJob) => { `"${job.title}" "${job.seasonName}"`, job.title, [...job.seasonName.split(/\s/)], - job.airDate, + job.airDate ) ); } @@ -106,7 +106,7 @@ const getSearchResults = async (job: TvScrapeJob) => { `"${job.originalTitle}" s${padWithZero(job.seasonNumber)}`, job.originalTitle, [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], - job.airDate, + job.airDate ) ); if (job.seasonName && job.seasonCode) { @@ -119,7 +119,7 @@ const getSearchResults = async (job: TvScrapeJob) => { new RegExp(`[0123]?${job.seasonCode}[ex\\W_]`, 'i'), ...job.seasonName.split(/\s/), ], - job.airDate, + job.airDate ) ); } else if (job.seasonName && job.seasonName !== job.originalTitle) { @@ -129,7 +129,7 @@ const getSearchResults = async (job: TvScrapeJob) => { `"${job.originalTitle}" "${job.seasonName}"`, job.originalTitle, [...job.seasonName.split(/\s/)], - job.airDate, + job.airDate ) ); } From 40e88e4e99e6f86312bc0613617315989babc53e Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 10 Sep 2023 09:07:41 +0200 Subject: [PATCH 095/272] add icons to log --- src/services/btdigg-v2.ts | 2 +- src/services/movieScraper.ts | 4 ++-- src/services/tvScraper.ts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/services/btdigg-v2.ts b/src/services/btdigg-v2.ts index 0b2d408..266d4d0 100644 --- a/src/services/btdigg-v2.ts +++ b/src/services/btdigg-v2.ts @@ -299,7 +299,7 @@ export async function scrapeResults( ): Promise { let searchResultsArr: ScrapeSearchResult[] = []; while (true) { - console.log(`searching Btdigg: ${finalQuery}`); + console.log(`๐Ÿ” Searching Btdigg: ${finalQuery}`); try { let pageNum = 1; const { results, numResults } = await processPage( diff --git a/src/services/movieScraper.ts b/src/services/movieScraper.ts index 64ccdd4..0f0b6cd 100644 --- a/src/services/movieScraper.ts +++ b/src/services/movieScraper.ts @@ -76,7 +76,7 @@ export async function scrapeMovies( mdbData: any, db: PlanetScaleCache ): Promise { - console.log(`Scraping movie: ${tmdbData.title} (${imdbId})...`); + console.log(`๐Ÿน Scraping movie: ${tmdbData.title} (${imdbId})...`); const cleanTitle = cleanSearchQuery(tmdbData.title); const year = mdbData.year ?? mdbData.released?.substring(0, 4) ?? tmdbData.release_date?.substring(0, 4); @@ -117,7 +117,7 @@ export async function scrapeMovies( if (processedResults.length) processedResults = groupByParsedTitle(processedResults); await db.saveScrapedResults(`movie:${imdbId}`, processedResults); - console.log(`Saved ${processedResults.length} results for ${cleanTitle}`); + console.log(`๐ŸŽฅ Saved ${processedResults.length} results for ${cleanTitle}`); await db.markAsDone(imdbId); diff --git a/src/services/tvScraper.ts b/src/services/tvScraper.ts index b8225d7..5910022 100644 --- a/src/services/tvScraper.ts +++ b/src/services/tvScraper.ts @@ -143,7 +143,7 @@ export async function scrapeTv( mdbData: any, db: PlanetScaleCache ): Promise { - console.log(`Scraping tv show: ${tmdbData.name} (${imdbId})...`); + console.log(`๐Ÿ Scraping tv show: ${tmdbData.name} (${imdbId})...`); const scrapeJobs: TvScrapeJob[] = []; let cleanTitle = cleanSearchQuery(tmdbData.name); @@ -200,7 +200,7 @@ export async function scrapeTv( processedResults ); console.log( - `Saved ${processedResults.length} results for ${job.title} season ${job.seasonNumber}` + `๐Ÿ“บ Saved ${processedResults.length} results for ${job.title} season ${job.seasonNumber}` ); } From 50825e9d6cd6579846bc1a797cd6df0d4633b7ca Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 10 Sep 2023 13:19:15 +0200 Subject: [PATCH 096/272] movie scraping improvement --- src/services/movieScraper.ts | 97 +- wordlist.txt | 3445 ++++++++++++++++++++++++++++++++++ 2 files changed, 3531 insertions(+), 11 deletions(-) create mode 100644 wordlist.txt diff --git a/src/services/movieScraper.ts b/src/services/movieScraper.ts index 0f0b6cd..1d3a048 100644 --- a/src/services/movieScraper.ts +++ b/src/services/movieScraper.ts @@ -8,6 +8,15 @@ import { } from './btdigg-v2'; import { ScrapeSearchResult } from './mediasearch'; import { PlanetScaleCache } from './planetscale'; +import fs from 'fs'; + +let wordSet: Set; +try { + let data = fs.readFileSync('./wordlist.txt', 'utf8'); + wordSet = new Set(data.toLowerCase().split('\n')); +} catch (err) { + console.error('error loading wordlist', err); +} type MovieScrapeJob = { title: string; @@ -17,12 +26,21 @@ type MovieScrapeJob = { airDate: string; }; +const countUncommonWordsInTitle = (title: string) => { + let processedTitle = title.split(/\s+/) + .map((word: string) => word.toLowerCase() + .replace(/'s/g, '') + .replace(/&/g, 'and').replaceAll(/[\W]+/g, '')); + return processedTitle.filter((word: string) => !wordSet.has(word)).length; +} + const getMovieSearchResults = async (job: MovieScrapeJob) => { const http = createAxiosInstance( new SocksProxyAgent(process.env.PROXY!, { timeout: parseInt(process.env.REQUEST_TIMEOUT!) }) ); let sets: ScrapeSearchResult[][] = []; + const hasUncommonWords = countUncommonWordsInTitle(job.title) >= 1; sets.push( await scrapeResults(http, `"${job.title}" ${job.year ?? ''}`, job.title, [], job.airDate) @@ -38,8 +56,7 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { ) ); } - - if (job.title.split(/\s/).length > 3) { + if (job.title.split(/\s/).length > 3 || hasUncommonWords) { sets.push(await scrapeResults(http, `"${job.title}"`, job.title, [], job.airDate)); } @@ -53,6 +70,17 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { job.airDate ) ); + if (hasUncommonWords) { + sets.push( + await scrapeResults( + http, + `"${job.originalTitle}"`, + job.originalTitle, + [], + job.airDate + ) + ); + } } if (job.cleanedTitle) { @@ -65,6 +93,17 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { job.airDate ) ); + if (hasUncommonWords) { + sets.push( + await scrapeResults( + http, + `"${job.cleanedTitle}"`, + job.cleanedTitle, + [], + job.airDate + ) + ); + } } return sets; @@ -81,25 +120,50 @@ export async function scrapeMovies( const year = mdbData.year ?? mdbData.released?.substring(0, 4) ?? tmdbData.release_date?.substring(0, 4); const airDate = mdbData.released ?? tmdbData.release_date ?? '2000-01-01'; - let originalTitle, cleanedTitle; + + const processedTitle = tmdbData.title + .split(' ') + .map((word: string) => word.replaceAll(/[\W]+/g, '')) + .join(' ') + .trim() + .toLowerCase(); + if (tmdbData.original_title && tmdbData.original_title !== tmdbData.title) { originalTitle = tmdbData.original_title.toLowerCase(); for (let rating of mdbData.ratings) { if (rating.source === 'tomatoes') { if (!rating.url) continue; - const tomatoTitle = ( - rating.url.includes('/m/') - ? rating.url.split('/m/')[1] - : rating.url.split('/tv/')[1] - ).replaceAll('_', ' '); + let tomatoTitle = rating.url.split('/').pop(); if (tomatoTitle.match(/^\d{6,}/)) continue; - cleanedTitle = tomatoTitle - .replaceAll(/[\W]+/g, ' ') - .split(' ') + tomatoTitle = tomatoTitle + .split('_') + .map((word: string) => word.replaceAll(/[\W]+/g, '')) .join(' ') .trim() .toLowerCase(); + if (tomatoTitle !== processedTitle) { + console.log('๐ŸŽฏ Found another title (1):', tomatoTitle) + cleanedTitle = tomatoTitle; + } + } + } + } + + let anotherTitle; + for (let rating of mdbData.ratings) { + if (rating.source === 'metacritic') { + if (!rating.url) continue; + let metacriticTitle = rating.url.split('/').pop(); + metacriticTitle = metacriticTitle + .split('-') + .map((word: string) => word.replaceAll(/[\W]+/g, '')) + .join(' ') + .trim() + .toLowerCase(); + if (metacriticTitle !== processedTitle && metacriticTitle !== cleanedTitle) { + console.log('๐ŸŽฏ Found another title (2):', metacriticTitle) + anotherTitle = metacriticTitle; } } } @@ -113,6 +177,17 @@ export async function scrapeMovies( year, airDate, }); + if (anotherTitle) { + searchResults.push( + ...(await getMovieSearchResults({ + title: anotherTitle, + originalTitle: undefined, + cleanedTitle: undefined, + year, + airDate, + })) + ); + } let processedResults = flattenAndRemoveDuplicates(searchResults); if (processedResults.length) processedResults = groupByParsedTitle(processedResults); diff --git a/wordlist.txt b/wordlist.txt new file mode 100644 index 0000000..4a42ef5 --- /dev/null +++ b/wordlist.txt @@ -0,0 +1,3445 @@ +a +abandon +ability +able +abnormal +aboard +abolish +abortion +about +above +abroad +abrupt +absence +absent +absolute +absorb +abstract +absurd +abundant +abuse +academic +academy +accelerate +accent +accept +access +accessible +accident +accommodation +accompany +accomplish +account +accountant +accumulate +accuracy +accurate +accuse +accustomed +ache +achieve +achievement +acid +acknowledge +acquaintance +acquire +acquisition +acre +across +act +action +active +activity +actor +actress +actual +acute +ad +adapt +adaptation +add +addicted +addition +address +adequate +adjust +adjustment +administration +admirable +admire +admission +admit +adolescence +adolescent +adopt +adore +adult +advance +advantage +adventure +advertise +advertisement +advice +advise +advocate +affair +affect +affection +afford +afraid +africa +african +after +afternoon +afterward +afterwards +again +against +age +agency +agenda +agent +aggressive +ago +agree +agreement +agricultural +agriculture +ahead +aid +aids +aim +air +aircraft +airline +airmail +airplane +airport +airspace +alarm +album +alcohol +alcoholic +algebra +alike +alive +all +allergic +alley +allocate +allow +allowance +almost +alone +along +alongside +aloud +alphabet +already +also +alternative +although +altitude +altogether +aluminum +always +am +amateur +amaze +amazing +ambassador +ambassadress +ambiguous +ambition +ambulance +america +among +amount +ample +amuse +amusement +an +analyse +analysis +ancestor +anchor +ancient +and +anecdote +anger +angle +angry +animal +ankle +anniversary +announce +annoy +annual +another +answer +ant +antarctic +antique +anxiety +anxious +any +anybody +anyhow +anyone +anything +anyway +anywhere +apart +apartment +apologize +apology +apparent +appeal +appear +appearance +appendix +appetite +applaud +apple +applicant +application +apply +appoint +appointment +appreciate +appreciation +appropriate +approval +approve +approximately +apron +arbitrary +arch +architecture +arctic +are +area +argue +argument +arise +arithmetic +arm +armchair +army +around +arrange +arrangement +arrest +arrival +arrive +arrow +art +article +artificial +artist +as +ash +ashamed +asia +asian +aside +ask +asleep +aspect +assess +assessment +assist +assistance +assistant +associate +association +assume +assumption +astonish +astronaut +astronomer +astronomy +at +athlete +athletic +atlantic +atmosphere +atom +attach +attack +attain +attempt +attend +attention +attitude +attract +attraction +attractive +audience +aunt +authentic +author +authority +automatic +autonomous +autumn +available +avenue +average +avoid +awake +award +aware +away +awesome +awful +awkward +baby +bachelor +back +background +backward +backwards +bacon +bacteria +bad +badminton +bag +baggage +bakery +balance +balcony +ball +ballet +balloon +bamboo +ban +banana +bandage +bank +bar +barbecue +barber +barbershop +bare +bargain +bark +barrier +base +baseball +basement +basic +basin +basis +basket +basketball +bat +bath +bathe +bathroom +bathtub +battery +battle +bay +bc +be +beach +bean +bear +beard +beast +beat +beautiful +beauty +because +become +bed +beddings +bedroom +bee +beef +beer +before +beg +begin +behalf +behave +behavior +behaviour +behind +being +belief +believe +bell +belly +belong +below +belt +bench +bend +beneath +beneficial +benefit +bent +beside +besides +betray +between +beyond +bicycle +bid +big +bike +bill +bingo +biochemistry +biography +biology +bird +birth +birthday +birthplace +biscuit +bishop +bit +bite +bitter +black +blackboard +blame +blank +blanket +bleed +bless +blind +block +blood +blouse +blow +blue +board +boat +body +boil +bomb +bond +bone +bonus +book +boom +boot +booth +border +bored +boring +born +borrow +boss +botanical +botany +both +bother +bottle +bottom +bounce +bound +boundary +bow +bowl +bowling +box +boxing +boy +boycott +brain +brake +branch +brand +brave +bravery +bread +break +breakfast +breakthrough +breast +breath +breathe +breathless +brewery +brick +bride +bridegroom +bridge +brief +bright +brilliant +bring +broad +broadcast +brochure +broken +broom +brother +brown +brunch +brush +buddhism +budget +buffet +build +building +bunch +bungalow +burden +bureaucratic +burglar +burn +bury +bus +bush +business +businessman +businesswoman +busy +but +butcher +butter +butterfly +button +buy +by +bye +cab +cabbage +cafe +cafeteria +cage +cake +calculate +call +calm +camel +camera +camp +campaign +can +cancel +cancer +candidate +candle +candy +canteen +cap +capital +capsule +captain +caption +car +carbon +card +care +careful +careless +carpenter +carpet +carriage +carrier +carrot +carry +cartoon +carve +case +cash +cassette +cast +castle +casual +cat +catalogue +catastrophe +catch +category +cater +catholic +cattle +cause +caution +cautious +cave +cd +ceiling +celebrate +celebration +cell +cent +center +centigrade +centimeter +centimetre +central +centre +century +ceremony +certain +certificate +chain +chair +chairman +chairwoman +chalk +challenge +challenging +champion +chance +change +changeable +channel +chant +chaos +chapter +character +characteristic +charge +chart +chat +cheap +cheat +check +cheek +cheer +cheerful +cheers +cheese +chef +chemical +chemist +chemistry +cheque +chess +chest +chew +chicken +chief +child +childhood +chocolate +choice +choir +choke +choose +chopsticks +chorus +christian +christmas +church +cigar +cigarette +cinema +circle +circuit +circulate +circumstance +citizen +city +civil +civilian +civilization +clap +clarify +class +classic +classify +classmate +classroom +claw +clay +clean +cleaner +clear +clerk +clever +click +climate +climb +clinic +clock +clone +close +cloth +clothes +clothing +cloud +cloudy +club +clumsy +coach +coal +coast +coat +cocoa +coffee +coin +coincidence +coke +cold +collar +colleague +collect +collection +college +collision +color +colour +comb +combine +come +comedy +comfort +comfortable +command +comment +commercial +commit +commitment +committee +common +communicate +communication +communism +communist +companion +company +compare +compass +compensate +compete +competence +competition +complete +complex +component +composition +comprehension +compromise +compulsory +computer +concentrate +concept +concern +concert +conclude +conclusion +concrete +condemn +condition +conduct +conductor +conference +confident +confidential +confirm +conflict +confuse +congratulate +congratulation +connect +connection +conscience +consensus +consequence +conservation +conservative +consider +considerate +consideration +consist +consistent +constant +constitution +construct +construction +consult +consultant +consume +contain +container +contemporary +content +continent +continue +contradict +contradictory +contrary +contribute +contribution +control +controversial +convenience +convenient +conventional +conversation +convey +convince +cook +cooker +cookie +cool +copy +corn +corner +corporation +correct +correction +correspond +corrupt +cost +cosy +cottage +cotton +cough +could +count +counter +country +countryside +couple +courage +course +court +courtyard +cousin +cover +cow +cozy +crash +crayon +crazy +cream +create +creature +credit +crew +crime +criminal +criteria +criterion +crop +cross +crossing +crossroads +crowd +cruel +cry +cube +cubic +cuisine +culture +cup +cupboard +cure +curious +currency +curriculum +curtain +cushion +custom +customer +customs +cut +cycle +cyclist +dad +daddy +daily +dam +damage +damp +dance +danger +dangerous +dare +dark +darkness +dash +data +database +date +daughter +dawn +day +dead +deadline +deaf +deal +dear +death +debate +debt +decade +decide +decision +declare +decline +decorate +decoration +decrease +dedicate +deed +deep +deer +defeat +defence +defend +defense +degree +delay +delete +deliberately +delicious +delight +delighted +deliver +demand +dentist +department +departure +depend +deposit +dept +depth +describe +description +desert +deserve +design +desire +desk +desperate +dessert +destination +destroy +detective +determine +develop +development +devote +devotion +diagram +dial +dialog +dialogue +diamond +diary +dictation +dictionary +die +diet +differ +difference +different +difficult +difficulty +dig +digest +digital +dignity +dilemma +dimension +dinner +dinosaur +dioxide +dip +diploma +direct +direction +director +directory +dirt +dirty +disability +disabled +disadvantage +disagree +disagreement +disappear +disappoint +disappointed +disaster +disc +discount +discourage +discover +discovery +discrimination +discuss +discussion +disease +disgusting +dish +disk +dislike +dismiss +distance +distant +distinction +distinguish +distribute +district +disturb +disturbing +dive +diverse +divide +division +divorce +dizzy +do +doctor +document +dog +doll +dollar +donate +door +dorm +dormitory +dot +double +doubt +down +download +downstairs +downtown +dozen +dr +draft +drag +draw +drawback +drawer +dream +dress +drill +drink +drive +drop +drug +drum +drunk +dry +duck +due +dull +dumpling +during +dusk +dust +dustbin +dusty +duty +dvd +dynamic +dynasty +each +eager +eagle +ear +early +earn +earth +earthquake +east +easter +eastern +easy +eat +ecology +edge +edition +editor +educate +education +educator +effect +effort +egg +eggplant +either +elder +elect +electric +electrical +electricity +electronic +elegant +elephant +else +email +embarrass +embassy +emergency +emperor +employ +empty +encourage +encouragement +end +ending +endless +enemy +energetic +energy +engineer +enjoy +enjoyable +enlarge +enough +enquiry +enter +enterprise +entertainment +enthusiastic +entire +entrance +entry +envelope +environment +envy +equal +equality +equip +equipment +eraser +error +erupt +escape +especially +essay +europe +european +evaluate +even +evening +event +ever +every +everybody +everyday +everyone +everything +everywhere +evidence +evident +evolution +exact +exam +examination +examine +example +excellent +except +exchange +excite +excuse +exercise +exhibition +exist +existence +exit +expand +expect +expectation +expense +expensive +experience +experiment +expert +explain +explanation +explicit +explode +explore +export +expose +express +expression +extension +extra +extraordinary +extreme +eye +eyesight +face +facial +fact +factory +fade +fail +failure +fair +faith +fall +false +familiar +family +famous +fan +fancy +fantastic +fantasy +far +fare +farm +farmer +fast +fasten +fat +father +fault +favor +favorite +favour +favourite +fear +feast +feather +federal +fee +feed +feel +feeling +fellow +female +fence +ferry +festival +fetch +fever +few +fiber +fibre +fiction +field +fierce +fight +figure +file +fill +film +final +finance +find +fine +finger +fingernail +finish +fire +fireworks +firm +fish +fist +fit +fix +flag +flame +flash +flashlight +flat +flee +flesh +flexible +flight +float +flood +floor +flour +flow +flower +flu +fluency +fluent +fly +focus +fog +foggy +fold +folk +follow +fond +food +fool +foolish +foot +football +for +forbid +force +forecast +forehead +foreign +foreigner +foresee +forest +forever +forget +forgetful +forgive +fork +form +format +former +fortnight +fortunate +fortune +forward +foster +found +fountain +fox +fragile +fragrant +framework +franc +free +freedom +freeway +freeze +freezing +frequent +fresh +friction +fridge +friend +friendly +friendship +frighten +frog +from +front +frontier +frost +fruit +fry +fuel +full +fun +function +fundamental +funeral +funny +fur +furnished +furniture +further +future +gain +gallery +gallon +game +garage +garbage +garden +garlic +garment +gas +gate +gather +gay +general +generation +generous +gentle +gentleman +geography +geometry +gesture +get +gift +gifted +giraffe +girl +give +glad +glance +glare +glass +globe +glory +glove +glue +go +goal +goat +god +gold +golden +golf +good +goods +goose +govern +government +grade +gradual +graduate +graduation +grain +gram +grammar +grand +grandchild +granddaughter +grandfather +grandma +grandmother +grandpa +grandparents +grandson +granny +grape +graph +grasp +grass +grateful +gravity +gray +great +greedy +green +greengrocer +greet +greeting +grey +grill +grocer +grocery +ground +group +grow +growth +guarantee +guard +guess +guest +guidance +guide +guilty +guitar +gun +gym +gymnasium +gymnastics +habit +hair +haircut +half +hall +ham +hamburger +hammer +hand +handbag +handful +handkerchief +handle +handsome +handwriting +handy +hang +happen +happiness +happy +harbor +harbour +hard +hardly +hardship +hardworking +harm +harmful +harmony +harvest +hat +hatch +hate +have +he +head +headache +headline +headmaster +headmistress +health +healthy +hear +hearing +heart +heat +heaven +heavy +heel +height +helicopter +hello +helmet +help +helpful +hen +her +herb +here +hero +hers +herself +hesitate +hi +hide +high +highway +hill +him +himself +hire +his +history +hit +hobby +hold +hole +holiday +holy +home +homeland +hometown +homework +honest +honey +honor +honour +hook +hope +hopeful +hopeless +horrible +horse +hospital +host +hostess +hot +hotdog +hotel +hour +house +housewife +housework +how +however +howl +hug +huge +human +humor +humorous +humour +hundred +hunger +hungry +hunt +hunter +hurricane +hurry +hurt +husband +hydrogen +i +ice +icecream +idea +identification +identify +idiom +if +ignore +ill +illegal +illness +imagine +immediately +immigration +import +importance +important +impossible +impress +impression +improve +in +inch +incident +include +income +increase +indeed +independence +independent +indicate +industry +influence +inform +information +initial +injure +injury +ink +inn +innocent +insect +insert +inside +insist +inspect +inspire +instant +instead +institute +institution +instruct +instruction +instrument +insurance +insure +intelligence +intend +intention +interest +interesting +international +internet +interrupt +interval +interview +into +introduce +introduction +invent +invention +invitation +invite +iron +irrigation +is +island +it +its +itself +jacket +jam +jar +jaw +jazz +jeans +jeep +jet +jewellery +jewelry +job +jog +join +joke +journalist +journey +joy +judge +judgement +judgment +juice +jump +jungle +junior +just +justice +kangaroo +keep +kettle +key +keyboard +kick +kid +kill +kilo +kilometer +kind +kindergarten +kindness +king +kingdom +kiss +kitchen +kite +knee +knife +knock +know +knowledge +lab +labor +laboratory +labour +lack +lady +lake +lamb +lame +lamp +land +language +lantern +lap +large +last +late +latter +laugh +laughter +laundry +law +lawyer +lay +lazy +lead +leader +leaf +league +leak +learn +least +leather +leave +lecture +left +leg +legal +lemon +lemonade +lend +length +lesson +let +letter +level +liberation +liberty +librarian +library +license +lid +lie +life +lift +light +lightning +like +likely +limit +line +link +lion +lip +liquid +list +listen +liter +literary +literature +litre +little +live +lively +load +loaf +local +lock +lonely +long +look +loose +lorry +lose +loss +lot +loud +lounge +love +lovely +low +luck +lucky +luggage +lunch +lung +machine +mad +madam +madame +magazine +magic +maid +mail +mailbox +main +mainland +major +majority +make +male +man +manage +manager +mankind +manner +many +map +maple +marathon +marble +march +mark +market +marriage +marry +mask +mass +master +mat +match +material +math +mathematics +maths +matter +mature +maximum +may +maybe +me +meal +mean +meaning +means +meanwhile +measure +meat +medal +media +medical +medicine +medium +meet +meeting +melon +member +memorial +memory +mend +mental +mention +menu +merchant +merciful +mercy +merely +merry +mess +message +messy +metal +meter +method +metre +microscope +microwave +middle +midnight +might +mild +mile +milk +millimeter +millimetre +millionaire +mind +mine +mineral +minibus +minimum +minister +ministry +minority +minus +minute +mirror +miss +missile +mist +mistake +mistaken +misunderstand +mix +mixture +mobile +model +modem +modern +modest +mom +moment +mommy +money +monitor +monkey +month +monument +moon +mop +moral +more +morning +moslem +mosquito +mother +motherland +motivation +motor +motorcycle +motto +mountain +mountainous +mourn +mouse +moustache +mouth +move +movement +movie +mr +mrs +ms +much +mud +muddy +multiply +mum +mummy +murder +museum +mushroom +music +musical +musician +must +mustard +mutton +my +myself +nail +name +narrow +nation +national +nationality +nationwide +native +natural +nature +navy +near +nearby +nearly +neat +necessary +neck +necklace +need +needle +negotiate +neighbor +neighborhood +neighbour +neighbourhood +neither +nephew +nervous +nest +net +network +never +new +news +newspaper +next +nice +niece +no +noble +nobody +nod +noise +noisy +none +noodle +noon +nor +normal +north +northeast +northern +northwest +nose +not +note +notebook +nothing +notice +novel +novelist +now +nowadays +nowhere +nuclear +numb +number +nurse +nursery +nut +nutrition +obey +object +observe +obtain +obvious +occupation +occupy +occur +ocean +oceania +oclock +of +off +offence +offer +office +officer +official +offshore +often +oh +oil +oilfield +ok +old +olympic +olympics +on +once +one +oneself +onion +only +onto +open +opening +opera +operate +operation +operator +opinion +oppose +opposite +optimistic +optional +or +oral +orange +orbit +order +ordinary +organ +organisation +organise +organization +organize +origin +other +otherwise +ought +our +ours +ourselves +out +outcome +outdoors +outer +outgoing +outing +outline +output +outside +outspoken +outstanding +outward +outwards +oval +over +overcoat +overcome +overhead +overlook +overweight +owe +own +owner +ownership +ox +oxygen +pace +pacific +pack +package +packet +paddle +page +pain +painful +paint +painter +painting +pair +palace +pale +pan +pancake +panda +panic +paper +paperwork +paragraph +parallel +parcel +pardon +parent +park +parking +parrot +part +part-time +participate +particular +partly +partner +party +pass +passage +passenger +passerby +passive +passport +past +patent +path +patience +patient +pattern +pause +pavement +pay +pc +pe +pea +peace +peaceful +peach +pear +pedestrian +pen +pence +pencil +penny +pension +people +pepper +per +percent +percentage +perfect +perform +performance +performer +perfume +perhaps +period +permanent +permission +permit +person +personal +personally +personnel +persuade +pest +pet +petrol +phenomenon +photo +photograph +photographer +phrase +physical +physician +physicist +physics +pianist +piano +pick +picnic +picture +pie +piece +pig +pile +pill +pillow +pilot +pin +pine +pineapple +pingpong +pink +pint +pioneer +pipe +pity +place +plain +plan +plane +planet +plant +plastic +plate +platform +play +playground +pleasant +please +pleased +pleasure +plenty +plot +plug +plus +pm +pocket +poem +poet +point +poison +poisonous +pole +police +policeman +policewoman +policy +polish +polite +political +politician +politics +pollute +pollution +pond +pool +poor +pop +popcorn +popular +population +pork +porridge +port +portable +porter +position +positive +possess +possession +possibility +possible +post +postage +postcard +postcode +poster +postman +postpone +pot +potato +potential +pound +pour +powder +power +powerful +practical +practice +practise +praise +pray +prayer +precious +precise +predict +prefer +preference +pregnant +prejudice +premier +preparation +prepare +prescription +present +presentation +preserve +president +press +pressure +pretend +pretty +prevent +preview +price +pride +primary +primitive +principle +print +prison +prisoner +private +privilege +prize +probably +problem +procedure +process +produce +product +production +profession +professor +profit +program +programme +progress +prohibit +project +promise +promote +pronounce +pronunciation +proper +properly +protect +protection +proud +prove +provide +province +psychology +pub +public +publish +pull +pulse +pump +punctual +punctuation +punish +punishment +pupil +purchase +pure +purple +purpose +purse +push +put +puzzle +pyramid +quake +qualification +quality +quantity +quarrel +quarter +queen +question +questionnaire +queue +quick +quiet +quilt +quit +quite +quiz +rabbit +race +racial +radiation +radio +radioactive +radium +rag +rail +railway +rain +rainbow +raincoat +rainfall +rainy +raise +random +range +rank +rapid +rare +rat +rate +rather +raw +ray +razor +reach +react +read +reading +ready +real +realise +reality +realize +really +reason +reasonable +rebuild +receipt +receive +receiver +recent +reception +receptionist +recipe +recite +recognise +recognize +recommend +record +recorder +recover +recreation +rectangle +recycle +red +reduce +refer +referee +reference +reflect +reform +refresh +refrigerator +refuse +regard +regardless +register +regret +regular +regulation +reject +relate +relation +relationship +relative +relax +relay +relevant +reliable +relief +religion +religious +rely +remain +remark +remember +remind +remote +remove +rent +repair +repeat +replace +reply +report +reporter +represent +representative +republic +reputation +request +require +requirement +rescue +research +resemble +reservation +reserve +resign +resist +respect +respond +responsibility +rest +restaurant +restriction +result +retell +retire +return +review +revision +revolution +reward +rewind +rhyme +rice +rich +rid +riddle +ride +ridiculous +right +rigid +ring +ripe +ripen +rise +risk +river +road +roast +rob +robot +rock +rocket +role +roll +roof +room +rooster +root +rope +rose +rot +rough +round +roundabout +routine +row +royal +rubber +rubbish +rude +rugby +ruin +rule +ruler +run +rush +sacred +sacrifice +sad +sadness +safe +safely +sail +sailor +salad +salary +sale +salesgirl +salesman +saleswoman +salt +salty +salute +same +sand +sandwich +satellite +satisfaction +satisfy +saucer +sausage +save +say +saying +scan +scar +scare +scarf +scene +scenery +sceptical +schedule +scholar +scholarship +school +schoolbag +schoolboy +schoolgirl +schoolmate +science +scientific +scientist +scissors +scold +score +scratch +scream +screen +sculpture +sea +seagull +seal +search +seashell +seaside +season +seat +seaweed +second +secret +secretary +section +secure +security +see +seed +seek +seem +seize +seldom +select +selfish +sell +semicircle +seminar +send +senior +sense +sensitive +sentence +separate +separation +serious +servant +serve +service +session +set +settle +settlement +settler +several +sew +sex +shabby +shade +shadow +shake +shall +shallow +shame +shape +share +shark +sharp +sharpen +sharpener +shave +shaver +she +sheep +sheet +shelf +shelter +shine +ship +shirt +shock +shoe +shoot +shop +shopkeeper +shopping +shore +short +shortcoming +shortly +shorts +shot +should +shoulder +shout +show +shower +shrink +shut +shy +sick +sickness +side +sideroad +sidewalk +sideways +sigh +sight +sightseeing +signal +signature +significance +silence +silent +silk +silly +silver +similar +simple +simplify +since +sincerely +sing +single +sink +sir +sister +sit +situation +size +skate +skateboard +skeptical +ski +skilful +skill +skin +skip +skirt +sky +skyscraper +slave +slavery +sleep +sleepy +sleeve +slice +slide +slight +slim +slip +slow +small +smart +smell +smile +smog +smoke +smoker +smooth +snake +sneaker +sneeze +sniff +snow +snowy +so +soap +sob +soccer +social +socialism +socialist +society +sock +socket +sofa +soft +software +soil +solar +soldier +solid +some +somebody +somehow +someone +something +sometimes +somewhere +son +song +soon +sorrow +sorry +sort +soul +sound +soup +sour +south +southeast +southern +southwest +souvenir +sow +space +spaceship +spade +spare +sparrow +speak +speaker +spear +special +specialist +specific +speech +speed +spell +spelling +spend +spin +spirit +spiritual +spit +splendid +split +spoken +spokesman +spokeswoman +sponsor +spoon +spoonful +sport +spot +spray +spread +spring +spy +square +squeeze +squirrel +stable +stadium +staff +stage +stain +stainless +stair +stamp +stand +standard +star +stare +start +starvation +starve +state +statement +statesman +stateswoman +station +statistics +statue +status +stay +steady +steak +steal +steam +steel +steep +step +steward +stewardess +stick +still +stocking +stomach +stone +stop +storage +store +storm +story +stout +stove +straight +straightforward +strait +strange +stranger +straw +strawberry +stream +street +strength +strengthen +stress +strict +strike +string +strong +struggle +stubborn +student +studio +study +stupid +style +subject +subjective +submit +subscribe +substitute +succeed +success +successful +such +suck +sudden +suffer +suffering +sugar +suggest +suggestion +suit +suitable +suitcase +suite +summary +summer +sun +sunburnt +sunlight +sunny +sunshine +super +superb +superior +supermarket +supper +supply +support +suppose +supreme +sure +surface +surgeon +surplus +surprise +surround +surrounding +survival +survive +suspect +suspension +swallow +swap +swear +sweat +sweater +sweep +sweet +swell +swift +swim +swing +switch +sword +symbol +sympathy +symphony +symptom +system +systematic +table +tablet +tail +tailor +take +tale +talent +talk +tall +tank +tap +tape +target +task +taste +tasteless +tasty +tax +taxi +taxpayer +tea +teach +teacher +team +teamwork +teapot +tear +tease +technical +technique +technology +teenager +telephone +telescope +television +tell +temperature +temple +temporary +tend +tendency +tennis +tense +tension +tent +tentative +term +terminal +terrible +terrify +terror +test +text +textbook +than +thank +thankful +that +the +theater +theatre +theft +their +theirs +them +theme +themselves +then +theoretical +theory +there +therefore +thermos +these +they +thick +thief +thin +thing +think +thinking +thirst +this +thorough +those +though +thought +thread +thrill +thriller +throat +through +throughout +throw +thunder +thunderstorm +thus +tick +ticket +tidy +tie +tiger +tight +till +time +timetable +tin +tiny +tip +tire +tired +tiresome +tissue +title +to +toast +tobacco +today +together +toilet +tolerate +tomato +tomb +tomorrow +ton +tongue +tonight +too +tool +tooth +toothache +toothbrush +toothpaste +top +topic +tortoise +total +touch +tough +tour +tourism +tourist +tournament +toward +towards +towel +tower +town +toy +track +tractor +trade +tradition +traditional +traffic +train +training +tram +transform +translate +translation +translator +transparent +transport +trap +travel +traveler +traveller +treasure +treat +treatment +tree +tremble +trend +trial +triangle +trick +trip +trolleybus +troop +trouble +troublesome +trousers +truck +true +truly +trunk +trust +truth +try +tshirt +tube +tune +turkey +turn +turning +tutor +tv +twice +twin +twist +type +typewriter +typhoon +typical +typist +tyre +ugly +umbrella +unable +unbearable +unbelievable +uncertain +uncle +uncomfortable +unconditional +unconscious +under +underground +underline +understand +undertake +underwear +unemployment +unfair +unfit +unfortunate +uniform +union +unique +unit +unite +universal +universe +university +unless +unlike +unrest +until +unusual +unwilling +up +update +upon +upper +upset +upstairs +upward +upwards +urban +urge +urgent +use +used +useful +useless +user +usual +vacant +vacation +vague +vain +valid +valley +valuable +value +variety +various +vase +vast +vcd +vegetable +vehicle +version +vertical +very +vest +via +vice +victim +victory +video +videophone +view +village +villager +vinegar +violate +violence +violent +violin +violinist +virtue +virus +visa +visit +visitor +visual +vital +vivid +vocabulary +voice +volcano +volleyball +voluntary +volunteer +vote +voyage +wag +wage +waist +wait +waiter +waitingroom +waitress +wake +walk +wall +wallet +walnut +wander +want +war +ward +warehouse +warm +warmth +warn +wash +washroom +waste +watch +water +watermelon +wave +wax +way +we +weak +weakness +wealth +wealthy +wear +weather +web +website +wedding +weed +week +weekday +weekend +weekly +weep +weigh +weight +welcome +welfare +well +west +western +westward +westwards +wet +whale +what +whatever +wheat +wheel +when +whenever +where +wherever +whether +which +whichever +while +whisper +whistle +white +who +whole +whom +whose +why +wide +widespread +widow +wife +wild +wildlife +will +willing +win +wind +window +windy +wine +wing +winner +winter +wipe +wire +wisdom +wise +wish +with +withdraw +within +without +witness +wolf +woman +wonder +wonderful +wood +wool +woolen +woollen +word +work +worker +world +worldwide +worm +worn +worried +worry +worth +worthwhile +worthy +would +wound +wrestle +wrinkle +wrist +write +wrong +xray +yard +yawn +year +yell +yellow +yes +yesterday +yet +yoghurt +you +young +your +yours +yourself +youth +yummy +zebra +zero +zip +zipper +zone +zoo +zoom From 1a503011b7a41ab6605f2674b2156ae4bd1dd8db Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Fri, 15 Sep 2023 08:50:00 +0200 Subject: [PATCH 097/272] fix tor script --- renew-tor.sh | 5 +++++ tor.Dockerfile | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/renew-tor.sh b/renew-tor.sh index 0855bd2..da5031e 100644 --- a/renew-tor.sh +++ b/renew-tor.sh @@ -8,6 +8,11 @@ SLEEP_INTERVAL=30 CHECK_IP_URL="https://check.torproject.org/api/ip" RENEW_DELAY=5 +echo "Starting Tor..." +exec /usr/bin/tor -f /etc/tor/torrc & + +echo "Done. Running script..." + while true; do sleep $SLEEP_INTERVAL diff --git a/tor.Dockerfile b/tor.Dockerfile index 2da8ea3..129e31d 100644 --- a/tor.Dockerfile +++ b/tor.Dockerfile @@ -11,7 +11,7 @@ COPY renew-tor.sh /etc/tor/ RUN chmod +x /etc/tor/renew-tor.sh USER tor -ENTRYPOINT /etc/tor/renew-tor.sh & tor +ENTRYPOINT sh -c "/etc/tor/renew-tor.sh" EXPOSE 9050/tcp From 93e9654d5395a7603091d99e6d5517e493be245b Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Wed, 20 Sep 2023 09:13:01 +0200 Subject: [PATCH 098/272] 3.4.6 (#70) * video or subs, remove size threshold * bump version --- package-lock.json | 4 ++-- package.json | 2 +- src/pages/hashlist.tsx | 4 ++-- src/pages/library.tsx | 4 ++-- src/pages/movie/[imdbid].tsx | 4 ++-- src/pages/show/[imdbid]/[seasonNum].tsx | 4 ++-- src/services/movieScraper.ts | 17 +++++++++-------- src/utils/instantChecks.ts | 8 +++++--- src/utils/selectable.ts | 24 ++++++++++++++++-------- 9 files changed, 41 insertions(+), 30 deletions(-) diff --git a/package-lock.json b/package-lock.json index ead77f6..5f1259e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "3.4.5", + "version": "3.4.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "3.4.5", + "version": "3.4.6", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@google-cloud/firestore": "^6.7.0", diff --git a/package.json b/package.json index 129b487..e8a4a53 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "3.4.5", + "version": "3.4.6", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/hashlist.tsx b/src/pages/hashlist.tsx index 1951272..d453119 100644 --- a/src/pages/hashlist.tsx +++ b/src/pages/hashlist.tsx @@ -6,7 +6,7 @@ import { runConcurrentFunctions } from '@/utils/batch'; import { getMediaId } from '@/utils/mediaId'; import { getMediaType } from '@/utils/mediaType'; import getReleaseTags from '@/utils/score'; -import { getSelectableFiles, isVideo } from '@/utils/selectable'; +import { getSelectableFiles, isVideoOrSubs } from '@/utils/selectable'; import { withAuth } from '@/utils/withAuth'; import { ParsedFilename, filenameParse } from '@ctrl/video-filename-parser'; import lzString from 'lz-string'; @@ -282,7 +282,7 @@ function TorrentsPage() { if (!rdKey) throw new Error('no_rd_key'); const response = await getTorrentInfo(rdKey, id.substring(3)); - const selectedFiles = getSelectableFiles(response.files.filter(isVideo)).map( + const selectedFiles = getSelectableFiles(response.files.filter(isVideoOrSubs)).map( (file) => file.id ); if (selectedFiles.length === 0) { diff --git a/src/pages/library.tsx b/src/pages/library.tsx index f3e235b..1c0b8e7 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -13,7 +13,7 @@ import { runConcurrentFunctions } from '@/utils/batch'; import { getMediaId } from '@/utils/mediaId'; import { getMediaType } from '@/utils/mediaType'; import getReleaseTags from '@/utils/score'; -import { getSelectableFiles, isVideo } from '@/utils/selectable'; +import { getSelectableFiles, isVideoOrSubs } from '@/utils/selectable'; import { libraryToastOptions } from '@/utils/toastOptions'; import { withAuth } from '@/utils/withAuth'; import { ParsedFilename, filenameParse } from '@ctrl/video-filename-parser'; @@ -372,7 +372,7 @@ function TorrentsPage() { const response = await getTorrentInfo(rdKey, id.substring(3)); console.log(`${response.filename} files`, response.files); - const selectedFiles = getSelectableFiles(response.files.filter(isVideo)).map( + const selectedFiles = getSelectableFiles(response.files.filter(isVideoOrSubs)).map( (file) => file.id ); console.log(`selected files`, selectedFiles); diff --git a/src/pages/movie/[imdbid].tsx b/src/pages/movie/[imdbid].tsx index 37bf624..065a1d6 100644 --- a/src/pages/movie/[imdbid].tsx +++ b/src/pages/movie/[imdbid].tsx @@ -5,7 +5,7 @@ import { deleteMagnet, uploadMagnet } from '@/services/allDebrid'; import { SearchApiResponse, SearchResult } from '@/services/mediasearch'; import { addHashAsMagnet, deleteTorrent, getTorrentInfo, selectFiles } from '@/services/realDebrid'; import { instantCheckInAd, instantCheckInRd, wrapLoading } from '@/utils/instantChecks'; -import { getSelectableFiles, isVideo } from '@/utils/selectable'; +import { getSelectableFiles, isVideoOrSubs } from '@/utils/selectable'; import { searchToastOptions } from '@/utils/toastOptions'; import { withAuth } from '@/utils/withAuth'; import axios from 'axios'; @@ -151,7 +151,7 @@ const MovieSearch: FunctionComponent = ({ title, description, const response = await getTorrentInfo(rdKey, id.substring(3)); if (response.filename === 'Magnet') return; // no files yet - const selectedFiles = getSelectableFiles(response.files.filter(isVideo)).map( + const selectedFiles = getSelectableFiles(response.files.filter(isVideoOrSubs)).map( (file) => file.id ); if (selectedFiles.length === 0) { diff --git a/src/pages/show/[imdbid]/[seasonNum].tsx b/src/pages/show/[imdbid]/[seasonNum].tsx index dcfb7f4..c1d0a52 100644 --- a/src/pages/show/[imdbid]/[seasonNum].tsx +++ b/src/pages/show/[imdbid]/[seasonNum].tsx @@ -5,7 +5,7 @@ import { deleteMagnet, uploadMagnet } from '@/services/allDebrid'; import { SearchApiResponse, SearchResult } from '@/services/mediasearch'; import { addHashAsMagnet, deleteTorrent, getTorrentInfo, selectFiles } from '@/services/realDebrid'; import { instantCheckInAd, instantCheckInRd, wrapLoading } from '@/utils/instantChecks'; -import { getSelectableFiles, isVideo } from '@/utils/selectable'; +import { getSelectableFiles, isVideoOrSubs } from '@/utils/selectable'; import { searchToastOptions } from '@/utils/toastOptions'; import { withAuth } from '@/utils/withAuth'; import axios from 'axios'; @@ -162,7 +162,7 @@ const TvSearch: FunctionComponent = ({ const response = await getTorrentInfo(rdKey, id.substring(3)); if (response.filename === 'Magnet') return; // no files yet - const selectedFiles = getSelectableFiles(response.files.filter(isVideo)).map( + const selectedFiles = getSelectableFiles(response.files.filter(isVideoOrSubs)).map( (file) => file.id ); if (selectedFiles.length === 0) { diff --git a/src/services/movieScraper.ts b/src/services/movieScraper.ts index 1d3a048..5be2b1c 100644 --- a/src/services/movieScraper.ts +++ b/src/services/movieScraper.ts @@ -1,4 +1,5 @@ import { cleanSearchQuery } from '@/utils/search'; +import fs from 'fs'; import { SocksProxyAgent } from 'socks-proxy-agent'; import { createAxiosInstance, @@ -8,7 +9,6 @@ import { } from './btdigg-v2'; import { ScrapeSearchResult } from './mediasearch'; import { PlanetScaleCache } from './planetscale'; -import fs from 'fs'; let wordSet: Set; try { @@ -27,12 +27,13 @@ type MovieScrapeJob = { }; const countUncommonWordsInTitle = (title: string) => { - let processedTitle = title.split(/\s+/) - .map((word: string) => word.toLowerCase() - .replace(/'s/g, '') - .replace(/&/g, 'and').replaceAll(/[\W]+/g, '')); + let processedTitle = title + .split(/\s+/) + .map((word: string) => + word.toLowerCase().replace(/'s/g, '').replace(/&/g, 'and').replaceAll(/[\W]+/g, '') + ); return processedTitle.filter((word: string) => !wordSet.has(word)).length; -} +}; const getMovieSearchResults = async (job: MovieScrapeJob) => { const http = createAxiosInstance( @@ -143,7 +144,7 @@ export async function scrapeMovies( .trim() .toLowerCase(); if (tomatoTitle !== processedTitle) { - console.log('๐ŸŽฏ Found another title (1):', tomatoTitle) + console.log('๐ŸŽฏ Found another title (1):', tomatoTitle); cleanedTitle = tomatoTitle; } } @@ -162,7 +163,7 @@ export async function scrapeMovies( .trim() .toLowerCase(); if (metacriticTitle !== processedTitle && metacriticTitle !== cleanedTitle) { - console.log('๐ŸŽฏ Found another title (2):', metacriticTitle) + console.log('๐ŸŽฏ Found another title (2):', metacriticTitle); anotherTitle = metacriticTitle; } } diff --git a/src/utils/instantChecks.ts b/src/utils/instantChecks.ts index 92d6613..726017a 100644 --- a/src/utils/instantChecks.ts +++ b/src/utils/instantChecks.ts @@ -4,7 +4,7 @@ import { RdInstantAvailabilityResponse, rdInstantCheck } from '@/services/realDe import { Dispatch, SetStateAction } from 'react'; import { toast } from 'react-hot-toast'; import { groupBy } from './groupBy'; -import { isVideo } from './selectable'; +import { isVideoOrSubs } from './selectable'; import { searchToastOptions } from './toastOptions'; export const wrapLoading = function (debrid: string, checkAvailability: Promise) { @@ -36,7 +36,9 @@ export const instantCheckInRd = async ( if (!variants.length) continue; torrent.noVideos = variants.reduce((noVideo, variant) => { if (!noVideo) return false; - return !Object.values(variant).some((file) => isVideo({ path: file.filename })); + return !Object.values(variant).some((file) => + isVideoOrSubs({ path: file.filename }) + ); }, true); // because it has variants and there's at least 1 video file if (!torrent.noVideos) { @@ -79,7 +81,7 @@ export const instantCheckInAd = async ( // If 'e' property exists, check it recursively return checkVideoInFiles(curr.e); } - return !isVideo({ path: curr.n }); + return !isVideoOrSubs({ path: curr.n }); }, true); }; diff --git a/src/utils/selectable.ts b/src/utils/selectable.ts index 1c594e8..a5bfa93 100644 --- a/src/utils/selectable.ts +++ b/src/utils/selectable.ts @@ -1,19 +1,27 @@ import { TorrentInfoResponse } from '@/services/realDebrid'; -const FILE_SIZE_PCT_THRESHOLD = 0.25; +const FILE_SIZE_PCT_THRESHOLD = 0.15; -export function isVideo(file: { path: string }) { +export function isVideoOrSubs(file: { path: string }) { const filePath = file.path.toLowerCase(); if (filePath.startsWith('/rarbg')) return false; if (filePath.match(/\bsample\b/)) return false; if (filePath.includes('.xxx.')) return false; - return filePath.endsWith('.mkv') || filePath.endsWith('.mp4'); + return ( + filePath.endsWith('.mkv') || + filePath.endsWith('.mp4') || + filePath.endsWith('.srt') || + filePath.endsWith('.smi') || + filePath.endsWith('.ssa') || + filePath.endsWith('.ass') || + filePath.endsWith('.vtt') + ); } export function getSelectableFiles(files: TorrentInfoResponse['files']) { - const maxFileSize = Math.max(...files.map((obj) => obj.bytes)); - const selectableFiles = files.filter( - (f) => f.bytes >= maxFileSize * FILE_SIZE_PCT_THRESHOLD || /e[0123]\d/i.test(f.path) - ); - return selectableFiles; + // const maxFileSize = Math.max(...files.map((obj) => obj.bytes)); + // return files.filter( + // (f) => f.bytes >= maxFileSize * FILE_SIZE_PCT_THRESHOLD || /[ex][0123]\d/i.test(f.path) + // ); + return files; } From 5914aba621f19dd39904dc0aab83e4beb2350579 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Wed, 20 Sep 2023 22:28:20 +0200 Subject: [PATCH 099/272] scraper update --- .env | 2 +- src/services/btdigg-v2.ts | 18 +++++++++--------- src/services/movieScraper.ts | 37 +++++------------------------------- src/services/tvScraper.ts | 20 ++----------------- 4 files changed, 17 insertions(+), 60 deletions(-) diff --git a/.env b/.env index 1d16a44..7485756 100644 --- a/.env +++ b/.env @@ -1,6 +1,6 @@ REQUEST_TIMEOUT=5000 GH_PAT=github-access-token -PROXY=socks5h://tor:9050 +PROXY=tor:9050 SCRAPE_API_PASSWORD=123456 TMDB_KEY=abc123 diff --git a/src/services/btdigg-v2.ts b/src/services/btdigg-v2.ts index 266d4d0..97cb0e7 100644 --- a/src/services/btdigg-v2.ts +++ b/src/services/btdigg-v2.ts @@ -1,5 +1,5 @@ import { getMediaType } from '@/utils/mediaType'; -import axios, { AxiosInstance } from 'axios'; +import axios from 'axios'; import { SocksProxyAgent } from 'socks-proxy-agent'; import UserAgent from 'user-agents'; import { ScrapeSearchResult } from './mediasearch'; @@ -115,7 +115,6 @@ type ProcessPageResult = { }; const processPage = async ( - client: AxiosInstance, finalQuery: string, targetTitle: string, mustHaveTerms: (string | RegExp)[], @@ -132,6 +131,14 @@ const processPage = async ( const searchUrl = createSearchUrl(finalQuery, pageNum); while (true) { try { + const client = createAxiosInstance( + new SocksProxyAgent( + `socks5h://${Math.random().toString(36).substring(2)}:${Math.random() + .toString(36) + .substring(2)}@${process.env.PROXY || ''}`, + { timeout: parseInt(process.env.REQUEST_TIMEOUT!) } + ) + ); const response = await client.get(searchUrl); responseData = response.data; const numResultsStr = responseData.match(/(\d+) results found/) || []; @@ -291,7 +298,6 @@ async function processInBatches( } export async function scrapeResults( - client: AxiosInstance, finalQuery: string, targetTitle: string, mustHaveTerms: (string | RegExp)[], @@ -303,7 +309,6 @@ export async function scrapeResults( try { let pageNum = 1; const { results, numResults } = await processPage( - client, finalQuery, targetTitle, mustHaveTerms, @@ -317,7 +322,6 @@ export async function scrapeResults( promises.push( ((pageNum) => async () => { return await processPage( - client, finalQuery, targetTitle, mustHaveTerms, @@ -337,7 +341,6 @@ export async function scrapeResults( try { let pageNum = 1; const { results, numResults } = await processPage( - client, `${finalQuery} .mkv`, targetTitle, mustHaveTerms, @@ -351,7 +354,6 @@ export async function scrapeResults( promises.push( ((pageNum) => async () => { return await processPage( - client, `${finalQuery} .mkv`, targetTitle, mustHaveTerms, @@ -371,7 +373,6 @@ export async function scrapeResults( try { let pageNum = 1; const { results, numResults } = await processPage( - client, `${finalQuery} .mp4`, targetTitle, mustHaveTerms, @@ -385,7 +386,6 @@ export async function scrapeResults( promises.push( ((pageNum) => async () => { return await processPage( - client, `${finalQuery} .mp4`, targetTitle, mustHaveTerms, diff --git a/src/services/movieScraper.ts b/src/services/movieScraper.ts index 5be2b1c..92fc3b6 100644 --- a/src/services/movieScraper.ts +++ b/src/services/movieScraper.ts @@ -1,12 +1,6 @@ import { cleanSearchQuery } from '@/utils/search'; import fs from 'fs'; -import { SocksProxyAgent } from 'socks-proxy-agent'; -import { - createAxiosInstance, - flattenAndRemoveDuplicates, - groupByParsedTitle, - scrapeResults, -} from './btdigg-v2'; +import { flattenAndRemoveDuplicates, groupByParsedTitle, scrapeResults } from './btdigg-v2'; import { ScrapeSearchResult } from './mediasearch'; import { PlanetScaleCache } from './planetscale'; @@ -36,20 +30,13 @@ const countUncommonWordsInTitle = (title: string) => { }; const getMovieSearchResults = async (job: MovieScrapeJob) => { - const http = createAxiosInstance( - new SocksProxyAgent(process.env.PROXY!, { timeout: parseInt(process.env.REQUEST_TIMEOUT!) }) - ); - let sets: ScrapeSearchResult[][] = []; const hasUncommonWords = countUncommonWordsInTitle(job.title) >= 1; - sets.push( - await scrapeResults(http, `"${job.title}" ${job.year ?? ''}`, job.title, [], job.airDate) - ); + sets.push(await scrapeResults(`"${job.title}" ${job.year ?? ''}`, job.title, [], job.airDate)); if (job.title.includes('&')) { sets.push( await scrapeResults( - http, `"${job.title.replaceAll('&', 'and')}" ${job.year ?? ''}`, job.title, [], @@ -58,13 +45,12 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { ); } if (job.title.split(/\s/).length > 3 || hasUncommonWords) { - sets.push(await scrapeResults(http, `"${job.title}"`, job.title, [], job.airDate)); + sets.push(await scrapeResults(`"${job.title}"`, job.title, [], job.airDate)); } if (job.originalTitle) { sets.push( await scrapeResults( - http, `"${job.originalTitle}" ${job.year ?? ''}`, job.originalTitle, [], @@ -73,13 +59,7 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { ); if (hasUncommonWords) { sets.push( - await scrapeResults( - http, - `"${job.originalTitle}"`, - job.originalTitle, - [], - job.airDate - ) + await scrapeResults(`"${job.originalTitle}"`, job.originalTitle, [], job.airDate) ); } } @@ -87,7 +67,6 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { if (job.cleanedTitle) { sets.push( await scrapeResults( - http, `"${job.cleanedTitle}" ${job.year ?? ''}`, job.cleanedTitle, [], @@ -96,13 +75,7 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { ); if (hasUncommonWords) { sets.push( - await scrapeResults( - http, - `"${job.cleanedTitle}"`, - job.cleanedTitle, - [], - job.airDate - ) + await scrapeResults(`"${job.cleanedTitle}"`, job.cleanedTitle, [], job.airDate) ); } } diff --git a/src/services/tvScraper.ts b/src/services/tvScraper.ts index 5910022..c88e99c 100644 --- a/src/services/tvScraper.ts +++ b/src/services/tvScraper.ts @@ -1,11 +1,5 @@ import { cleanSearchQuery } from '@/utils/search'; -import { SocksProxyAgent } from 'socks-proxy-agent'; -import { - createAxiosInstance, - flattenAndRemoveDuplicates, - groupByParsedTitle, - scrapeResults, -} from './btdigg-v2'; +import { flattenAndRemoveDuplicates, groupByParsedTitle, scrapeResults } from './btdigg-v2'; import { ScrapeSearchResult } from './mediasearch'; import { PlanetScaleCache } from './planetscale'; @@ -51,15 +45,10 @@ const getSeasonNameAndCode = (season: any) => { const getSeasonYear = (season: any) => season.air_date?.substring(0, 4); const getSearchResults = async (job: TvScrapeJob) => { - const http = createAxiosInstance( - new SocksProxyAgent(process.env.PROXY!, { timeout: parseInt(process.env.REQUEST_TIMEOUT!) }) - ); - let sets: ScrapeSearchResult[][] = []; sets.push( await scrapeResults( - http, `"${job.title}" s${padWithZero(job.seasonNumber)}`, job.title, [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], @@ -70,7 +59,6 @@ const getSearchResults = async (job: TvScrapeJob) => { if (job.seasonName && job.seasonCode) { sets.push( await scrapeResults( - http, `"${job.title}" "${job.seasonName}" s${padWithZero(job.seasonCode)}`, job.title, [ @@ -83,7 +71,6 @@ const getSearchResults = async (job: TvScrapeJob) => { } else if (job.seasonName && job.seasonName !== job.title) { sets.push( await scrapeResults( - http, `"${job.title}" "${job.seasonName}"`, job.title, [...job.seasonName.split(/\s/)], @@ -93,7 +80,7 @@ const getSearchResults = async (job: TvScrapeJob) => { } if (job.title.split(/\s/).length > 3 && job.seasonNumber === 1) { - sets.push(await scrapeResults(http, `"${job.title}"`, job.title, [], job.airDate)); + sets.push(await scrapeResults(`"${job.title}"`, job.title, [], job.airDate)); } if (!job.originalTitle) return sets; @@ -102,7 +89,6 @@ const getSearchResults = async (job: TvScrapeJob) => { sets2.push( await scrapeResults( - http, `"${job.originalTitle}" s${padWithZero(job.seasonNumber)}`, job.originalTitle, [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], @@ -112,7 +98,6 @@ const getSearchResults = async (job: TvScrapeJob) => { if (job.seasonName && job.seasonCode) { sets2.push( await scrapeResults( - http, `"${job.originalTitle}" "${job.seasonName}" s${padWithZero(job.seasonCode)}`, job.originalTitle, [ @@ -125,7 +110,6 @@ const getSearchResults = async (job: TvScrapeJob) => { } else if (job.seasonName && job.seasonName !== job.originalTitle) { sets2.push( await scrapeResults( - http, `"${job.originalTitle}" "${job.seasonName}"`, job.originalTitle, [...job.seasonName.split(/\s/)], From 58a42821f84590de7e3e70c8315568999c7f33ce Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Thu, 21 Sep 2023 12:54:30 +0200 Subject: [PATCH 100/272] Add proxy manager --- .env | 1 + package-lock.json | 2497 +++++++++++++--------------------- package.json | 22 +- src/services/btdigg-v2.ts | 20 +- src/services/firestore.ts | 65 - src/services/jackett.ts | 210 +++ src/services/movieScraper.ts | 18 +- src/services/tvScraper.ts | 25 +- src/utils/proxyManager.ts | 44 + 9 files changed, 1264 insertions(+), 1638 deletions(-) delete mode 100644 src/services/firestore.ts create mode 100644 src/services/jackett.ts create mode 100644 src/utils/proxyManager.ts diff --git a/.env b/.env index 7485756..2a017bc 100644 --- a/.env +++ b/.env @@ -7,3 +7,4 @@ TMDB_KEY=abc123 MDBLIST_KEY=abc123 DATABASE_URL=mysql://username:password@aws.connect.psdb.cloud/database?sslaccept=strict +JACKETT=http://localhost:9117 diff --git a/package-lock.json b/package-lock.json index 5f1259e..751ee67 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,18 +9,12 @@ "version": "3.4.6", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", - "@google-cloud/firestore": "^6.7.0", "@octokit/rest": "^19.0.7", + "@pnpm/crypto.base32-hash": "^2.0.0", "@prisma/client": "^5.2.0", - "@types/file-saver": "^2.0.5", - "@types/ioredis": "^5.0.0", - "@types/node": "18.15.10", - "@types/react": "18.0.29", - "@types/react-dom": "18.0.11", - "@types/uuid": "^9.0.1", "axios": "^1.3.5", - "eslint": "8.36.0", - "eslint-config-next": "13.2.4", + "base32-encode": "^2.0.0", + "bencode": "^4.0.0", "express": "^4.18.2", "file-saver": "^2.0.5", "ioredis": "^5.3.2", @@ -37,10 +31,18 @@ }, "devDependencies": { "@types/axios": "^0.14.0", - "@types/node": "^16.11.10", + "@types/bencode": "^2.0.2", + "@types/file-saver": "^2.0.5", + "@types/ioredis": "^5.0.0", + "@types/node": "^20.6.3", "@types/qs": "^6.9.7", + "@types/react": "^18.2.22", + "@types/react-dom": "^18.2.7", "@types/user-agents": "^1.0.2", + "@types/uuid": "^9.0.4", "autoprefixer": "^10.4.14", + "eslint": "^8.49.0", + "eslint-config-next": "^13.5.2", "postcss": "^8.4.21", "prettier": "^2.8.7", "prettier-plugin-organize-imports": "^3.2.2", @@ -51,23 +53,22 @@ "typescript": "^5.2.2" } }, - "node_modules/@babel/parser": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.11.tgz", - "integrity": "sha512-R5zb8eJIBPJriQtbH/htEQy4k7E2dHWlD2Y2VT07JCzwYZHBxV5ZYtM0UhXSNMT74LyxuM+b1jdL7pSesXbC/g==", - "bin": { - "parser": "bin/babel-parser.js" - }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, "node_modules/@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", + "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", + "dev": true, "dependencies": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" @@ -106,6 +107,7 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -117,21 +119,23 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz", - "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", + "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", + "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", - "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.1", + "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -147,60 +151,19 @@ } }, "node_modules/@eslint/js": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz", - "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", + "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", + "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@google-cloud/firestore": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-6.7.0.tgz", - "integrity": "sha512-bkH2jb5KkQSUa+NAvpip9HQ+rpYhi77IaqHovWuN07adVmvNXX08gPpvPWEzoXYa/wDjEVI7LiAtCWkJJEYTNg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "functional-red-black-tree": "^1.0.1", - "google-gax": "^3.5.7", - "protobufjs": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@grpc/grpc-js": { - "version": "1.8.21", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.21.tgz", - "integrity": "sha512-KeyQeZpxeEBSqFVTi3q2K7PiPXmgBfECc4updA1ejCLjYmoAlvvM3ZMp5ztTDUCUQmoY3CpDxvchjO1+rFkoHg==", - "dependencies": { - "@grpc/proto-loader": "^0.7.0", - "@types/node": ">=12.12.47" - }, - "engines": { - "node": "^8.13.0 || >=10.10.0" - } - }, - "node_modules/@grpc/proto-loader": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.9.tgz", - "integrity": "sha512-YJsOehVXzgurc+lLAxYnlSMc1p/Gu6VAvnfx0ATi2nzvr0YZcjhmZDeY8SeAKv1M7zE3aEJH0Xo9mK1iZ8GYoQ==", - "dependencies": { - "lodash.camelcase": "^4.3.0", - "long": "^5.0.0", - "protobufjs": "^7.2.4", - "yargs": "^17.7.2" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -214,6 +177,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, "engines": { "node": ">=12.22" }, @@ -225,7 +189,8 @@ "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true }, "node_modules/@ioredis/commands": { "version": "1.2.0", @@ -286,26 +251,16 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, - "node_modules/@jsdoc/salty": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz", - "integrity": "sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw==", - "dependencies": { - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=v12.0.0" - } - }, "node_modules/@next/env": { "version": "13.4.19", "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.19.tgz", "integrity": "sha512-FsAT5x0jF2kkhNkKkukhsyYOrRqtSxrEhfliniIq0bwWbuXLgyt3Gv0Ml+b91XwjwArmuP7NxCiGd++GGKdNMQ==" }, "node_modules/@next/eslint-plugin-next": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.2.4.tgz", - "integrity": "sha512-ck1lI+7r1mMJpqLNa3LJ5pxCfOB1lfJncKmRJeJxcJqcngaFwylreLP7da6Rrjr6u2gVRTfmnkSkjc80IiQCwQ==", + "version": "13.5.2", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.2.tgz", + "integrity": "sha512-Ew8DOUerJYGRo8pI84SVwn9wxxx8sH92AanCXSkkLJM2W0RJEWy+BqWSCfrlA/3ZIczEl4l4o4lOeTGBPYfBJg==", + "dev": true, "dependencies": { "glob": "7.1.7" } @@ -449,6 +404,7 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -461,6 +417,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, "engines": { "node": ">= 8" } @@ -469,6 +426,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -624,23 +582,18 @@ "@octokit/openapi-types": "^17.0.0" } }, - "node_modules/@pkgr/utils": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", - "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", + "node_modules/@pnpm/crypto.base32-hash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@pnpm/crypto.base32-hash/-/crypto.base32-hash-2.0.0.tgz", + "integrity": "sha512-3ttOeHBpmWRbgJrpDQ8Nwd3W8s8iuiP5YZM0JRyKWaMtX8lu9d7/AKyxPmhYsMJuN+q/1dwHa7QFeDZJ53b0oA==", "dependencies": { - "cross-spawn": "^7.0.3", - "is-glob": "^4.0.3", - "open": "^8.4.0", - "picocolors": "^1.0.0", - "tiny-glob": "^0.2.9", - "tslib": "^2.4.0" + "rfc4648": "^1.5.2" }, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": ">=16.14" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://opencollective.com/pnpm" } }, "node_modules/@prisma/client": { @@ -675,64 +628,11 @@ "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.2.0-25.2804dc98259d2ea960602aca6b8e7fdc03c1758f.tgz", "integrity": "sha512-jsnKT5JIDIE01lAeCj2ghY9IwxkedhKNvxQeoyLs6dr4ZXynetD0vTy7u6wMJt8vVPv8I5DPy/I4CFaoXAgbtg==" }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, "node_modules/@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.4.0.tgz", + "integrity": "sha512-cEjvTPU32OM9lUFegJagO0mRnIn+rbqrG89vV8/xLnLFX0DoR0r1oy5IlTga71Q7uT3Qus7qm7wgeiMT/+Irlg==", + "dev": true }, "node_modules/@swc/helpers": { "version": "0.5.1", @@ -776,25 +676,27 @@ "axios": "*" } }, - "node_modules/@types/file-saver": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.5.tgz", - "integrity": "sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ==" - }, - "node_modules/@types/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", + "node_modules/@types/bencode": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/bencode/-/bencode-2.0.2.tgz", + "integrity": "sha512-VuSChzKjaBz+TbiX4dEbVkSMhUDN1mfqzhNM6m3tGMalaTo3X8rWn2rQyFv6iC/M4u+4OCpXrl6qdGGNoSw3gQ==", + "dev": true, "dependencies": { - "@types/minimatch": "^5.1.2", "@types/node": "*" } }, + "node_modules/@types/file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ==", + "dev": true + }, "node_modules/@types/ioredis": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@types/ioredis/-/ioredis-5.0.0.tgz", "integrity": "sha512-zJbJ3FVE17CNl5KXzdeSPtdltc4tMT3TzC6fxQS0sQngkbFZ6h+0uTafsRqu+eSLIugf6Yb0Ea0SUuRr42Nk9g==", "deprecated": "This is a stub types definition. ioredis provides its own type definitions, so you do not need this installed.", + "dev": true, "dependencies": { "ioredis": "*" } @@ -802,41 +704,14 @@ "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" - }, - "node_modules/@types/linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" - }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - }, - "node_modules/@types/markdown-it": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", - "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", - "dependencies": { - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, - "node_modules/@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true }, "node_modules/@types/node": { - "version": "16.18.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.24.tgz", - "integrity": "sha512-zvSN2Esek1aeLdKDYuntKAYjti9Z2oT4I8bfkLLhIxHlv3dwZ5vvATxOc31820iYm4hQRCwjUgDpwSMFjfTUnw==" + "version": "20.6.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.3.tgz", + "integrity": "sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==", + "dev": true }, "node_modules/@types/prettier": { "version": "2.7.2", @@ -845,9 +720,10 @@ "dev": true }, "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "version": "15.7.6", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.6.tgz", + "integrity": "sha512-RK/kBbYOQQHLYj9Z95eh7S6t7gq4Ojt/NT8HTk8bWVhA5DaF+5SMnxHKkP4gPNN3wAZkKP+VjAf0ebtYzf+fxg==", + "dev": true }, "node_modules/@types/qs": { "version": "6.9.7", @@ -856,9 +732,10 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.0.29", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.29.tgz", - "integrity": "sha512-wXHktgUABxplw1+UnljseDq4+uztQyp2tlWZRIxHlpchsCFqiYkvaDS8JR7eKOQm8wziTH/el5qL7D6gYNkYcw==", + "version": "18.2.22", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.22.tgz", + "integrity": "sha512-60fLTOLqzarLED2O3UQImc/lsNRgG0jE/a1mPW9KjMemY0LMITWEsbS4VvZ4p6rorEHd5YKxxmMKSDK505GHpA==", + "dev": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -866,26 +743,19 @@ } }, "node_modules/@types/react-dom": { - "version": "18.0.11", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", - "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", + "version": "18.2.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz", + "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==", + "dev": true, "dependencies": { "@types/react": "*" } }, - "node_modules/@types/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==", - "dependencies": { - "@types/glob": "*", - "@types/node": "*" - } - }, "node_modules/@types/scheduler": { "version": "0.16.3", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", + "dev": true }, "node_modules/@types/user-agents": { "version": "1.0.2", @@ -894,29 +764,32 @@ "dev": true }, "node_modules/@types/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==" + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.4.tgz", + "integrity": "sha512-zAuJWQflfx6dYJM62vna+Sn5aeSWhh3OB+wfUEACNcqUSc0AGc5JKl+ycL1vrH7frGTXhJchYjE1Hak8L819dA==", + "dev": true }, "node_modules/@typescript-eslint/parser": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.0.tgz", - "integrity": "sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==", + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.2.tgz", + "integrity": "sha512-KA3E4ox0ws+SPyxQf9iSI25R6b4Ne78ORhNHeVKrPQnoYsb9UhieoiRoJgrzgEeKGOXhcY1i8YtOeCHHTDa6Fw==", + "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.59.0", - "@typescript-eslint/types": "5.59.0", - "@typescript-eslint/typescript-estree": "5.59.0", + "@typescript-eslint/scope-manager": "6.7.2", + "@typescript-eslint/types": "6.7.2", + "@typescript-eslint/typescript-estree": "6.7.2", + "@typescript-eslint/visitor-keys": "6.7.2", "debug": "^4.3.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -925,15 +798,16 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.0.tgz", - "integrity": "sha512-tsoldKaMh7izN6BvkK6zRMINj4Z2d6gGhO2UsI8zGZY3XhLq1DndP3Ycjhi1JwdwPRwtLMW4EFPgpuKhbCGOvQ==", + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.2.tgz", + "integrity": "sha512-bgi6plgyZjEqapr7u2mhxGR6E8WCzKNUFWNh6fkpVe9+yzRZeYtDTbsIBzKbcxI+r1qVWt6VIoMSNZ4r2A+6Yw==", + "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.0", - "@typescript-eslint/visitor-keys": "5.59.0" + "@typescript-eslint/types": "6.7.2", + "@typescript-eslint/visitor-keys": "6.7.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -941,11 +815,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.0.tgz", - "integrity": "sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA==", + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.2.tgz", + "integrity": "sha512-flJYwMYgnUNDAN9/GAI3l8+wTmvTYdv64fcH8aoJK76Y+1FCZ08RtI5zDerM/FYT5DMkAc+19E4aLmd5KqdFyg==", + "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -953,20 +828,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.0.tgz", - "integrity": "sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg==", + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.2.tgz", + "integrity": "sha512-kiJKVMLkoSciGyFU0TOY0fRxnp9qq1AzVOHNeN1+B9erKFCJ4Z8WdjAkKQPP+b1pWStGFqezMLltxO+308dJTQ==", + "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.0", - "@typescript-eslint/visitor-keys": "5.59.0", + "@typescript-eslint/types": "6.7.2", + "@typescript-eslint/visitor-keys": "6.7.2", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -979,32 +855,22 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.0.tgz", - "integrity": "sha512-qZ3iXxQhanchCeaExlKPV3gDQFxMUmU35xfd5eCXB6+kUw1TUAbIy2n7QIrwz9s98DQLzNWyHp61fY0da4ZcbA==", + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.2.tgz", + "integrity": "sha512-uVw9VIMFBUTz8rIeaUT3fFe8xIUx8r4ywAdlQv1ifH+6acn/XF8Y6rwJ7XNmkNMDrTW+7+vxFFPIF40nJCVsMQ==", + "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "6.7.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -1018,9 +884,10 @@ } }, "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -1032,6 +899,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -1060,6 +928,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -1075,6 +944,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -1083,6 +953,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -1121,20 +992,23 @@ "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, "dependencies": { - "deep-equal": "^2.0.5" + "dequal": "^2.0.3" } }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "is-array-buffer": "^3.0.1" @@ -1149,14 +1023,15 @@ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "is-string": "^1.0.7" }, "engines": { @@ -1170,18 +1045,39 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, "engines": { "node": ">=8" } }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -1192,13 +1088,14 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -1209,29 +1106,53 @@ } }, "node_modules/array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", + "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "get-intrinsic": "^1.2.1" } }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true + }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + } }, "node_modules/asynckit": { "version": "0.4.0", @@ -1275,6 +1196,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -1283,9 +1205,10 @@ } }, "node_modules/axe-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", - "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.1.tgz", + "integrity": "sha512-9l850jDDPnKq48nbad8SiEelCv4OrUWrKab/cPj0GScVg6cb6NbCCt/Ulk26QEq5jP9NnGr04Bit1BHyV6r5CQ==", + "dev": true, "engines": { "node": ">=4" } @@ -1301,48 +1224,53 @@ } }, "node_modules/axobject-query": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", - "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, "dependencies": { - "deep-equal": "^2.0.5" + "dequal": "^2.0.3" } }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "node_modules/base32-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base32-encode/-/base32-encode-2.0.0.tgz", + "integrity": "sha512-mlmkfc2WqdDtMl/id4qm3A7RjW6jxcbAoMjdRmsPiwQP0ufD4oXItYMnPgVHe80lnAIy+1xwzhHE1s4FoIceSw==", + "dependencies": { + "to-data-view": "^2.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "engines": { + "node": ">= 0.6.0" + } }, "node_modules/before-after-hook": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" }, - "node_modules/bignumber.js": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", - "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", + "node_modules/bencode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/bencode/-/bencode-4.0.0.tgz", + "integrity": "sha512-AERXw18df0pF3ziGOCyUjqKZBVNH8HV3lBxnx5w0qtgMIk4a1wb9BkcCQbkp9Zstfrn/dzRwl7MmUHHocX3sRQ==", + "dependencies": { + "uint8-util": "^2.2.2" + }, "engines": { - "node": "*" + "node": ">=12.20.0" } }, "node_modules/binary-extensions": { @@ -1354,11 +1282,6 @@ "node": ">=8" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, "node_modules/body-parser": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", @@ -1413,6 +1336,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1422,6 +1346,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -1457,11 +1382,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -1497,6 +1417,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, "engines": { "node": ">=6" } @@ -1529,21 +1450,11 @@ } ] }, - "node_modules/catharsis": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", - "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", - "dependencies": { - "lodash": "^4.17.15" - }, - "engines": { - "node": ">= 10" - } - }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1599,19 +1510,6 @@ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/cluster-key-slot": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", @@ -1624,6 +1522,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -1634,7 +1533,8 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/combined-stream": { "version": "1.0.8", @@ -1659,7 +1559,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/content-disposition": { "version": "0.5.4", @@ -1703,6 +1604,7 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1732,7 +1634,8 @@ "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true }, "node_modules/debug": { "version": "4.3.4", @@ -1750,51 +1653,33 @@ } } }, - "node_modules/deep-equal": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", - "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", - "dependencies": { - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "node_modules/define-data-property": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", + "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -1834,6 +1719,15 @@ "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -1870,6 +1764,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, "dependencies": { "path-type": "^4.0.0" }, @@ -1895,6 +1790,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -1915,25 +1811,6 @@ "dot-json": "bin/dot-json.js" } }, - "node_modules/duplexify": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", - "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", - "dependencies": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -1948,7 +1825,8 @@ "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, "node_modules/encodeurl": { "version": "1.0.2", @@ -1958,18 +1836,11 @@ "node": ">= 0.8" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/enhanced-resolve": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz", - "integrity": "sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -1978,26 +1849,20 @@ "node": ">=10.13.0" } }, - "node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", + "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", + "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", @@ -2012,19 +1877,23 @@ "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -2033,29 +1902,33 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "node_modules/es-iterator-helpers": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", + "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "dev": true, "dependencies": { + "asynciterator.prototype": "^1.0.0", "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.0.1" } }, "node_modules/es-set-tostringtag": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, "dependencies": { "get-intrinsic": "^1.1.3", "has": "^1.0.3", @@ -2069,6 +1942,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, "dependencies": { "has": "^1.0.3" } @@ -2077,6 +1951,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -2093,6 +1968,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, "engines": { "node": ">=6" } @@ -2106,6 +1982,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "engines": { "node": ">=10" }, @@ -2113,103 +1990,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/eslint": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz", - "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", + "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", + "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.1", - "@eslint/js": "8.36.0", - "@humanwhocodes/config-array": "^0.11.8", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.49.0", + "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.5.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -2217,22 +2019,19 @@ "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "bin": { @@ -2246,19 +2045,20 @@ } }, "node_modules/eslint-config-next": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.2.4.tgz", - "integrity": "sha512-lunIBhsoeqw6/Lfkd6zPt25w1bn0znLA/JCL+au1HoEpSb4/PpsOYsYtgV/q+YPsoKIOzFyU5xnb04iZnXjUvg==", + "version": "13.5.2", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.2.tgz", + "integrity": "sha512-kCF7k7fHBtFtxfP6J6AP6Mo0vW3CrFeoIuoZ7NHGIvLFc/RUaIspJ6inO/R33zE1o9t/lbJgTnsqnRB++sxCUQ==", + "dev": true, "dependencies": { - "@next/eslint-plugin-next": "13.2.4", - "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.42.0", + "@next/eslint-plugin-next": "13.5.2", + "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", - "eslint-plugin-react-hooks": "^4.5.0" + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" }, "peerDependencies": { "eslint": "^7.23.0 || ^8.0.0", @@ -2271,36 +2071,55 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, "dependencies": { "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "dependencies": { "ms": "^2.1.1" } }, + "node_modules/eslint-import-resolver-node/node_modules/resolve": { + "version": "1.22.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", + "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.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/eslint-import-resolver-typescript": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz", - "integrity": "sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz", + "integrity": "sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==", + "dev": true, "dependencies": { "debug": "^4.3.4", "enhanced-resolve": "^5.12.0", "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", "get-tsconfig": "^4.5.0", - "globby": "^13.1.3", "is-core-module": "^2.11.0", - "is-glob": "^4.0.3", - "synckit": "^0.8.5" + "is-glob": "^4.0.3" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -2313,39 +2132,11 @@ "eslint-plugin-import": "*" } }, - "node_modules/eslint-import-resolver-typescript/node_modules/globby": { - "version": "13.1.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.4.tgz", - "integrity": "sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-import-resolver-typescript/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint-module-utils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, "dependencies": { "debug": "^3.2.7" }, @@ -2362,30 +2153,34 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", + "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", + "dev": true, "dependencies": { "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", "array.prototype.flat": "^1.3.1", "array.prototype.flatmap": "^1.3.1", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", + "eslint-module-utils": "^2.8.0", "has": "^1.0.3", - "is-core-module": "^2.11.0", + "is-core-module": "^2.13.0", "is-glob": "^4.0.3", "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" }, "engines": { "node": ">=4" @@ -2398,6 +2193,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "dependencies": { "ms": "^2.1.1" } @@ -2406,6 +2202,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -2414,9 +2211,10 @@ } }, "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -2425,6 +2223,7 @@ "version": "6.7.1", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "dev": true, "dependencies": { "@babel/runtime": "^7.20.7", "aria-query": "^5.1.3", @@ -2451,22 +2250,25 @@ } }, "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "dev": true, "dependencies": { "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", "array.prototype.tosorted": "^1.1.1", "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", @@ -2476,7 +2278,7 @@ "object.values": "^1.1.6", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", + "semver": "^6.3.1", "string.prototype.matchall": "^4.0.8" }, "engines": { @@ -2490,6 +2292,7 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, "engines": { "node": ">=10" }, @@ -2501,6 +2304,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -2512,6 +2316,7 @@ "version": "2.0.0-next.4", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -2525,17 +2330,19 @@ } }, "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -2548,9 +2355,10 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", - "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -2559,13 +2367,14 @@ } }, "node_modules/espree": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", - "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.0" + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2574,22 +2383,11 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/esquery": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -2601,6 +2399,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, "dependencies": { "estraverse": "^5.2.0" }, @@ -2612,6 +2411,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, "engines": { "node": ">=4.0" } @@ -2620,6 +2420,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -2632,14 +2433,6 @@ "node": ">= 0.6" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, "node_modules/express": { "version": "4.18.2", "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", @@ -2708,20 +2501,17 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -2737,6 +2527,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -2747,22 +2538,20 @@ "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "node_modules/fast-text-encoding": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", - "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true }, "node_modules/fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -2771,6 +2560,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, "dependencies": { "flat-cache": "^3.0.4" }, @@ -2787,6 +2577,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -2828,6 +2619,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -2840,21 +2632,24 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.7", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=12.0.0" } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true }, "node_modules/follow-redirects": { "version": "1.15.2", @@ -2879,6 +2674,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, "dependencies": { "is-callable": "^1.1.3" } @@ -2928,7 +2724,8 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.2", @@ -2950,14 +2747,15 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -2966,60 +2764,23 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" - }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gaxios": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", - "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", - "dependencies": { - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/gcp-metadata": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", - "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", - "dependencies": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" }, "funding": { @@ -3030,6 +2791,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -3042,9 +2804,13 @@ } }, "node_modules/get-tsconfig": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.5.0.tgz", - "integrity": "sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", + "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, "funding": { "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } @@ -3053,6 +2819,7 @@ "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3072,6 +2839,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -3085,9 +2853,10 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.22.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", + "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", + "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -3102,6 +2871,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, "dependencies": { "define-properties": "^1.1.3" }, @@ -3112,15 +2882,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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==" - }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -3136,11 +2902,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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==" - }, "node_modules/goober": { "version": "2.1.13", "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.13.tgz", @@ -3149,95 +2910,11 @@ "csstype": "^3.0.10" } }, - "node_modules/google-auth-library": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz", - "integrity": "sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==", - "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^5.0.0", - "gcp-metadata": "^5.3.0", - "gtoken": "^6.1.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/google-gax": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.6.1.tgz", - "integrity": "sha512-g/lcUjGcB6DSw2HxgEmCDOrI/CByOwqRvsuUvNalHUK2iPPPlmAIpbMbl62u0YufGMr8zgE3JL7th6dCb1Ry+w==", - "dependencies": { - "@grpc/grpc-js": "~1.8.0", - "@grpc/proto-loader": "^0.7.0", - "@types/long": "^4.0.0", - "@types/rimraf": "^3.0.2", - "abort-controller": "^3.0.0", - "duplexify": "^4.0.0", - "fast-text-encoding": "^1.0.3", - "google-auth-library": "^8.0.2", - "is-stream-ended": "^0.1.4", - "node-fetch": "^2.6.1", - "object-hash": "^3.0.0", - "proto3-json-serializer": "^1.0.0", - "protobufjs": "7.2.4", - "protobufjs-cli": "1.1.1", - "retry-request": "^5.0.0" - }, - "bin": { - "compileProtos": "build/tools/compileProtos.js", - "minifyProtoJson": "build/tools/minify.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/google-gax/node_modules/protobufjs": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", - "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/google-p12-pem": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", - "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", - "dependencies": { - "node-forge": "^1.3.1" - }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -3250,23 +2927,11 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" - }, - "node_modules/gtoken": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", - "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", - "dependencies": { - "gaxios": "^5.0.1", - "google-p12-pem": "^4.0.0", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=12.0.0" - } + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true }, "node_modules/has": { "version": "1.0.3", @@ -3283,6 +2948,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3291,6 +2957,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -3299,6 +2966,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, "dependencies": { "get-intrinsic": "^1.1.1" }, @@ -3332,6 +3000,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -3357,18 +3026,6 @@ "node": ">= 0.8" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -3384,6 +3041,7 @@ "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, "engines": { "node": ">= 4" } @@ -3392,6 +3050,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -3407,6 +3066,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, "engines": { "node": ">=0.8.19" } @@ -3415,6 +3075,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -3429,6 +3090,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, "dependencies": { "get-intrinsic": "^1.2.0", "has": "^1.0.3", @@ -3474,25 +3136,11 @@ "node": ">= 0.10" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-array-buffer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", @@ -3502,10 +3150,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -3529,6 +3193,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -3544,6 +3209,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -3552,9 +3218,10 @@ } }, "node_modules/is-core-module": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", - "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -3566,6 +3233,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -3576,40 +3244,47 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -3621,6 +3296,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3629,6 +3305,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -3640,6 +3317,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "engines": { "node": ">=0.12.0" } @@ -3648,6 +3326,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -3662,6 +3341,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -3678,6 +3358,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -3693,6 +3374,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3701,6 +3383,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -3708,26 +3391,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-stream-ended": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", - "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" - }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -3742,6 +3410,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -3753,15 +3422,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -3774,6 +3440,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3782,6 +3449,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -3793,6 +3461,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -3801,26 +3470,30 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } }, "node_modules/jiti": { "version": "1.18.2", @@ -3831,15 +3504,6 @@ "jiti": "bin/jiti.js" } }, - "node_modules/js-sdsl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", - "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3849,6 +3513,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -3856,72 +3521,29 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/js2xmlparser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", - "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", - "dependencies": { - "xmlcreate": "^2.0.4" - } - }, - "node_modules/jsdoc": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", - "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", - "dependencies": { - "@babel/parser": "^7.20.15", - "@jsdoc/salty": "^0.2.1", - "@types/markdown-it": "^12.2.3", - "bluebird": "^3.7.2", - "catharsis": "^0.9.0", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.2", - "klaw": "^3.0.0", - "markdown-it": "^12.3.2", - "markdown-it-anchor": "^8.4.1", - "marked": "^4.0.10", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "underscore": "~1.13.2" - }, - "bin": { - "jsdoc": "jsdoc.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/jsdoc/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dependencies": { - "bignumber.js": "^9.0.0" - } + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true }, "node_modules/json5": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, "dependencies": { "minimist": "^1.2.0" }, @@ -3930,53 +3552,40 @@ } }, "node_modules/jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" }, "engines": { "node": ">=4.0" } }, - "node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "node_modules/keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "dev": true, "dependencies": { - "graceful-fs": "^4.1.9" + "json-buffer": "3.0.1" } }, "node_modules/language-subtag-registry": { "version": "0.3.22", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true }, "node_modules/language-tags": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, "dependencies": { "language-subtag-registry": "~0.3.2" } @@ -3985,6 +3594,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -4008,18 +3618,11 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "node_modules/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "dependencies": { - "uc.micro": "^1.0.1" - } - }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -4030,16 +3633,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - }, "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -4058,12 +3651,8 @@ "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "node_modules/loose-envify": { "version": "1.4.0", @@ -4080,6 +3669,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -4101,46 +3691,6 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, - "node_modules/markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", - "dependencies": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/markdown-it-anchor": { - "version": "8.6.7", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", - "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", - "peerDependencies": { - "@types/markdown-it": "*", - "markdown-it": "*" - } - }, - "node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -4158,6 +3708,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, "engines": { "node": ">= 8" } @@ -4174,6 +3725,7 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -4216,6 +3768,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -4227,21 +3780,11 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -4278,7 +3821,8 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, "node_modules/negotiator": { "version": "0.6.3", @@ -4376,14 +3920,6 @@ } } }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, "node_modules/node-releases": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", @@ -4412,6 +3948,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4420,6 +3957,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, "engines": { "node": ">= 6" } @@ -4432,25 +3970,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, "engines": { "node": ">= 0.4" } @@ -4459,6 +3983,7 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -4473,26 +3998,28 @@ } }, "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -4501,26 +4028,40 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "dev": true, "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -4548,33 +4089,18 @@ "wrappy": "1" } }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -4584,6 +4110,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -4598,6 +4125,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -4612,6 +4140,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, "dependencies": { "callsites": "^3.0.0" }, @@ -4631,6 +4160,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "engines": { "node": ">=8" } @@ -4639,6 +4169,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4647,6 +4178,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "engines": { "node": ">=8" } @@ -4654,7 +4186,8 @@ "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==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-to-regexp": { "version": "0.1.7", @@ -4665,6 +4198,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, "engines": { "node": ">=8" } @@ -4678,6 +4212,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "engines": { "node": ">=8.6" }, @@ -4838,6 +4373,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, "engines": { "node": ">= 0.8.0" } @@ -4912,110 +4448,13 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, - "node_modules/proto3-json-serializer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.1.tgz", - "integrity": "sha512-AwAuY4g9nxx0u52DnSMkqqgyLHaW/XaPLtaAo3y/ZCfeaQB/g4YDH4kb8Wc/mWzWvu0YjOznVnfn373MVZZrgw==", - "dependencies": { - "protobufjs": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/protobufjs": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", - "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/protobufjs-cli": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.1.1.tgz", - "integrity": "sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA==", - "dependencies": { - "chalk": "^4.0.0", - "escodegen": "^1.13.0", - "espree": "^9.0.0", - "estraverse": "^5.1.0", - "glob": "^8.0.0", - "jsdoc": "^4.0.0", - "minimist": "^1.2.0", - "semver": "^7.1.2", - "tmp": "^0.2.1", - "uglify-js": "^3.7.7" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "protobufjs": "^7.0.0" - } - }, - "node_modules/protobufjs-cli/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/protobufjs-cli/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/protobufjs-cli/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -5037,6 +4476,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, "engines": { "node": ">=6" } @@ -5059,6 +4499,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, "funding": [ { "type": "github", @@ -5157,7 +4598,8 @@ "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true }, "node_modules/read-cache": { "version": "1.0.0", @@ -5168,19 +4610,6 @@ "pify": "^2.3.0" } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -5212,19 +4641,41 @@ "node": ">=4" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", + "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true }, "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "set-function-name": "^2.0.0" }, "engines": { "node": ">= 0.4" @@ -5233,26 +4684,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requizzle": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", - "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", - "dependencies": { - "lodash": "^4.17.21" - } - }, "node_modules/resolve": { "version": "1.22.2", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, "dependencies": { "is-core-module": "^2.11.0", "path-parse": "^1.0.7", @@ -5269,35 +4705,40 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, "engines": { "node": ">=4" } }, - "node_modules/retry-request": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-5.0.2.tgz", - "integrity": "sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ==", - "dependencies": { - "debug": "^4.1.1", - "extend": "^3.0.2" - }, - "engines": { - "node": ">=12" + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, + "node_modules/rfc4648": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.2.tgz", + "integrity": "sha512-tLOizhR6YGovrEBLatX1sdcuhoSCXddw3mqNVAcKxGJ+J0hFeJ+SjeWCv5UPA/WU3YzWPPuCVYgXBKZUPGpKtg==" + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -5312,6 +4753,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, "funding": [ { "type": "github", @@ -5330,6 +4772,24 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -5353,6 +4813,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", @@ -5376,9 +4837,10 @@ } }, "node_modules/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -5444,6 +4906,20 @@ "node": ">= 0.8.0" } }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -5453,6 +4929,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -5464,6 +4941,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "engines": { "node": ">=8" } @@ -5485,6 +4963,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, "engines": { "node": ">=8" } @@ -5524,15 +5003,6 @@ "node": ">= 10" } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -5554,22 +5024,6 @@ "node": ">= 0.8" } }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dependencies": { - "internal-slot": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -5578,44 +5032,20 @@ "node": ">=10.0.0" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", "side-channel": "^1.0.4" }, "funding": { @@ -5623,13 +5053,14 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -5639,26 +5070,28 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5668,6 +5101,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -5679,6 +5113,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, "engines": { "node": ">=4" } @@ -5687,6 +5122,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "engines": { "node": ">=8" }, @@ -5762,6 +5198,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -5773,6 +5210,7 @@ "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" }, @@ -5780,21 +5218,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/synckit": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", - "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", - "dependencies": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, "node_modules/tailwindcss": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.1.tgz", @@ -5841,6 +5264,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, "engines": { "node": ">=6" } @@ -5848,7 +5272,8 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, "node_modules/thenify": { "version": "3.3.1", @@ -5871,30 +5296,19 @@ "node": ">=0.8" } }, - "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==", - "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } - }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dependencies": { - "rimraf": "^3.0.0" - }, + "node_modules/to-data-view": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-data-view/-/to-data-view-2.0.0.tgz", + "integrity": "sha512-RGEM5KqlPHr+WVTPmGNAXNeFEmsBnlkxXaIfEpUYV0AST2Z5W1EGq9L/MENFrMMmL2WQr1wjkmZy/M92eKhjYA==", "engines": { - "node": ">=8.17.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -5915,6 +5329,18 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, + "node_modules/ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", @@ -5974,6 +5400,7 @@ "version": "3.14.2", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -5986,29 +5413,11 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -6020,6 +5429,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, "engines": { "node": ">=10" }, @@ -6039,10 +5449,62 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typed-array-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -6056,6 +5518,7 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6064,26 +5527,19 @@ "node": ">=14.17" } }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" + "node_modules/uint8-util": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/uint8-util/-/uint8-util-2.2.4.tgz", + "integrity": "sha512-uEI5lLozmKQPYEevfEhP9LY3Je5ZmrQhaWXrzTVqrLNQl36xsRh8NiAxYwB9J+2BAt99TRbmCkROQB2ZKhx4UA==", + "dependencies": { + "base64-arraybuffer": "^1.0.2" } }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -6154,6 +5610,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "dependencies": { "punycode": "^2.1.0" } @@ -6170,7 +5627,8 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "node_modules/utils-merge": { "version": "1.0.1", @@ -6232,6 +5690,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -6246,6 +5705,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -6257,10 +5717,37 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-collection": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, "dependencies": { "is-map": "^2.0.1", "is-set": "^2.0.1", @@ -6272,16 +5759,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -6290,52 +5777,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "node_modules/xmlcreate": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", - "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/yaml": { "version": "1.10.2", @@ -6346,31 +5797,6 @@ "node": ">= 6" } }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", @@ -6384,6 +5810,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index e8a4a53..7e45e53 100644 --- a/package.json +++ b/package.json @@ -12,18 +12,12 @@ }, "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", - "@google-cloud/firestore": "^6.7.0", "@octokit/rest": "^19.0.7", + "@pnpm/crypto.base32-hash": "^2.0.0", "@prisma/client": "^5.2.0", - "@types/file-saver": "^2.0.5", - "@types/ioredis": "^5.0.0", - "@types/node": "18.15.10", - "@types/react": "18.0.29", - "@types/react-dom": "18.0.11", - "@types/uuid": "^9.0.1", "axios": "^1.3.5", - "eslint": "8.36.0", - "eslint-config-next": "13.2.4", + "base32-encode": "^2.0.0", + "bencode": "^4.0.0", "express": "^4.18.2", "file-saver": "^2.0.5", "ioredis": "^5.3.2", @@ -40,10 +34,18 @@ }, "devDependencies": { "@types/axios": "^0.14.0", - "@types/node": "^16.11.10", + "@types/bencode": "^2.0.2", + "@types/file-saver": "^2.0.5", + "@types/ioredis": "^5.0.0", + "@types/node": "^20.6.3", "@types/qs": "^6.9.7", + "@types/react": "^18.2.22", + "@types/react-dom": "^18.2.7", "@types/user-agents": "^1.0.2", + "@types/uuid": "^9.0.4", "autoprefixer": "^10.4.14", + "eslint": "^8.49.0", + "eslint-config-next": "^13.5.2", "postcss": "^8.4.21", "prettier": "^2.8.7", "prettier-plugin-organize-imports": "^3.2.2", diff --git a/src/services/btdigg-v2.ts b/src/services/btdigg-v2.ts index 97cb0e7..1b03ec5 100644 --- a/src/services/btdigg-v2.ts +++ b/src/services/btdigg-v2.ts @@ -1,4 +1,5 @@ import { getMediaType } from '@/utils/mediaType'; +import ProxyManager from '@/utils/proxyManager'; import axios from 'axios'; import { SocksProxyAgent } from 'socks-proxy-agent'; import UserAgent from 'user-agents'; @@ -129,16 +130,10 @@ const processPage = async ( let responseData = ''; let numResults = 0; const searchUrl = createSearchUrl(finalQuery, pageNum); + let proxy = new ProxyManager(); while (true) { try { - const client = createAxiosInstance( - new SocksProxyAgent( - `socks5h://${Math.random().toString(36).substring(2)}:${Math.random() - .toString(36) - .substring(2)}@${process.env.PROXY || ''}`, - { timeout: parseInt(process.env.REQUEST_TIMEOUT!) } - ) - ); + const client = createAxiosInstance(proxy.getWorkingProxy()); const response = await client.get(searchUrl); responseData = response.data; const numResultsStr = responseData.match(/(\d+) results found/) || []; @@ -153,6 +148,7 @@ const processPage = async ( error.message.includes('status code 429') || error.message.includes('"socket" was not created') ) { + proxy.rerollProxy(); console.log('429 error, waiting for a bit longer before retrying...'); retries++; } else if (error.message.includes('timeout of')) { @@ -297,7 +293,7 @@ async function processInBatches( return searchResultsArr; } -export async function scrapeResults( +export async function scrapeBtdigg( finalQuery: string, targetTitle: string, mustHaveTerms: (string | RegExp)[], @@ -334,7 +330,7 @@ export async function scrapeResults( } searchResultsArr.push(...(await processInBatches(promises, 2))); } catch (error) { - console.error('fetchSearchResults page processing error', error); + console.error('scrapeBtdigg page processing error', error); await new Promise((resolve) => setTimeout(resolve, 5000)); } // mkv @@ -366,7 +362,7 @@ export async function scrapeResults( } searchResultsArr.push(...(await processInBatches(promises, 2))); } catch (error) { - console.error('fetchSearchResults mkv page processing error', error); + console.error('scrapeBtdigg mkv page processing error', error); await new Promise((resolve) => setTimeout(resolve, 5000)); } // mp4 @@ -398,7 +394,7 @@ export async function scrapeResults( } searchResultsArr.push(...(await processInBatches(promises, 2))); } catch (error) { - console.error('fetchSearchResults mp4 page processing error', error); + console.error('scrapeBtdigg mp4 page processing error', error); await new Promise((resolve) => setTimeout(resolve, 5000)); } return searchResultsArr; diff --git a/src/services/firestore.ts b/src/services/firestore.ts deleted file mode 100644 index 0540f43..0000000 --- a/src/services/firestore.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Firestore, Settings } from '@google-cloud/firestore'; - -const firebaseSettings: Settings = { - projectId: process.env.FIREBASE_PROJECT_ID, - credentials: { - client_email: process.env.FIREBASE_CLIENT_EMAIL, - private_key: process.env.FIREBASE_PRIVATE_KEY, - }, - ssl: true, - maxIdleChannels: 2, - ignoreUndefinedProperties: true, - preferRest: false, -}; - -export class FirestoreCache { - private db: Firestore; - - constructor() { - this.db = new Firestore(firebaseSettings); - } - - public async cacheJsonValue(key: string[], value: T) { - const sortedKey = key.sort(); - const firestoreKey = sortedKey.join(':'); - - await this.db.runTransaction(async (t) => { - const counterDoc = this.db.doc('counters/cache'); - const counterSnap = await t.get(counterDoc); - const newCount = (counterSnap.data()?.count || 0) + 1; - - t.set(this.db.collection('cache').doc(firestoreKey), { value }); - t.set(counterDoc, { count: newCount }); - }); - } - - public async getCachedJsonValue(key: string[]): Promise { - const sortedKey = key.sort(); - const firestoreKey = sortedKey.join(':'); - const doc = await this.db.collection('cache').doc(firestoreKey).get(); - if (!doc.exists) { - return undefined; - } else { - return doc.data()?.value as T; - } - } - - public async deleteCachedJsonValue(key: string[]): Promise { - const sortedKey = key.sort(); - const firestoreKey = sortedKey.join(':'); - - await this.db.runTransaction(async (t) => { - const counterDoc = this.db.doc('counters/cache'); - const counterSnap = await t.get(counterDoc); - const newCount = (counterSnap.data()?.count || 0) - 1; - - t.delete(this.db.collection('cache').doc(firestoreKey)); - t.set(counterDoc, { count: newCount }); - }); - } - - public async getDbSize(): Promise { - const counterDoc = await this.db.doc('counters/cache').get(); - return counterDoc.data()?.count || 0; - } -} diff --git a/src/services/jackett.ts b/src/services/jackett.ts new file mode 100644 index 0000000..13e56ba --- /dev/null +++ b/src/services/jackett.ts @@ -0,0 +1,210 @@ +import { getMediaType } from '@/utils/mediaType'; +import axios from 'axios'; +import base32Encode from 'base32-encode'; +import bencode from 'bencode'; +import { createHash } from 'crypto'; +import { ScrapeSearchResult } from './mediasearch'; + +const JACKETT = process.env.JACKETT ?? 'http://localhost:9117'; + +function isFoundDateRecent(foundString: string, date: string): boolean { + const foundDate = new Date(foundString); + const airDate = new Date(date); + // Return true if the found date is more recent or equal + return foundDate >= airDate; +} + +const createSearchUrl = (finalQuery: string) => + `${JACKETT}/api/v2.0/indexers/all/results?apikey=2gzag8296wygpbvezrguhc8y2rnezvos&Query=${encodeURIComponent( + finalQuery + )}`; + +function extractHashFromMagnetLink(magnetLink: string) { + const regex = /urn:btih:([A-Fa-f0-9]+)/; + const match = magnetLink.match(regex); + if (match) { + return match[1].toLowerCase(); + } else { + return undefined; + } +} + +async function getMagnetURI(url: string): Promise { + try { + const response = await axios.get(url, { + maxRedirects: 0, // Set maxRedirects to 0 to disable automatic redirects + validateStatus: (status) => status >= 200 && status < 400, + responseType: 'arraybuffer', + }); + + if (response.status === 302) { + const redirectURL = response.headers.location; + if (redirectURL.startsWith('magnet:')) { + // If the redirect URL is a magnet link, return it directly + return extractHashFromMagnetLink(redirectURL); + } + } + + const encodedInfo = bencode.encode(bencode.decode(response.data).info); + const infoHash = createHash('sha1').update(encodedInfo).digest(); + const magnetHash = base32Encode(infoHash, 'RFC3548'); + + return magnetHash.toLowerCase(); + } catch (error: any) { + console.error('getMagnetURI error:', error.message); + return undefined; + } +} + +async function processItem( + item: any, + targetTitle: string, + mustHaveTerms: (string | RegExp)[], + airDate: string +): Promise { + const title = item.Title; + + if (item.Size < 1024 * 1024) { + console.log(`โŒ ${item.Tracker} returned a bad result (size < 1MB)`, item.Size); + return undefined; + } + const fileSize = item.Size / 1024 / 1024; // convert to MB + if (getMediaType(title) === 'movie' && fileSize > 200_000) { + console.log(`โŒ ${item.Tracker} returned a bad result (size > 200GB)`, item.Size); + return undefined; + } + + if (!isFoundDateRecent(item.PublishDate, airDate)) { + console.log(`โŒ ${item.Tracker} returned a bad result (date)`, item.PublishDate); + return undefined; + } + + // Check if every term in the query (tokenized by space) is contained in the title + const queryTerms = targetTitle + .replaceAll('"', ' ') + .split(' ') + .filter((e) => e !== ''); + let requiredTerms = queryTerms.length <= 3 ? queryTerms.length : queryTerms.length - 1; + const containedTerms = queryTerms.filter((term) => + new RegExp(`${term.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&')}`, 'i').test(title) + ).length; + if (containedTerms < requiredTerms) { + // console.debug(title, '-title match-', targetTitle); + // console.debug('bad title', containedTerms, requiredTerms); + console.log( + `โŒ ${item.Tracker} returned a bad result (title match)`, + containedTerms, + requiredTerms + ); + return undefined; + } + const containedMustHaveTerms = mustHaveTerms.filter((term) => { + if (typeof term === 'string') { + return new RegExp(`${term}`, 'i').test(title); + } else if (term instanceof RegExp) { + return term.test(title); + } + return false; + }).length; + if (containedMustHaveTerms < mustHaveTerms.length) { + // console.debug(title, '-must have-', mustHaveTerms); + // console.debug('bad must have terms', containedMustHaveTerms, mustHaveTerms.length); + console.log( + `โŒ ${item.Tracker} returned a bad result (must have terms)`, + containedMustHaveTerms, + mustHaveTerms.length + ); + return undefined; + } + if (!targetTitle.match(/xxx/i)) { + if (title.match(/xxx/i)) { + console.log(`โŒ ${item.Tracker} returned a XXX result`); + return undefined; + } + } + + const hash = + item.InfoHash?.toLowerCase() || + (item.MagnetUri && extractHashFromMagnetLink(item.MagnetUri)) || + (item.Link && (await getMagnetURI(item.Link))); + if (!hash) { + console.log(`โŒ ${item.Tracker} returned a bad result (hash)`, item.Link); + return undefined; + } + + return { + title, + fileSize, + hash, + }; +} + +async function processInBatches( + promises: (() => Promise)[], + batchSize: number +): Promise { + let searchResultsArr: ScrapeSearchResult[] = []; + let i = 0; + while (i < promises.length) { + const promisesResults = await Promise.all( + promises.slice(i, i + batchSize).map(async (e) => await e()) + ); + promisesResults.forEach((e) => e && searchResultsArr.push(e)); + i += batchSize; + } + return searchResultsArr; +} + +const processPage = async ( + finalQuery: string, + targetTitle: string, + mustHaveTerms: (string | RegExp)[], + airDate: string +): Promise => { + const MAX_RETRIES = 5; // maximum number of retries + + let results: ScrapeSearchResult[] = []; + let retries = 0; // current number of retries + let responseData = []; + const searchUrl = createSearchUrl(finalQuery); + while (true) { + try { + const response = await axios.get(searchUrl); + responseData = response.data.Results; + retries = 0; + break; + } catch (error: any) { + console.log('request error:', error.message); + retries++; + if (retries >= MAX_RETRIES) { + console.error(`Max retries reached (${MAX_RETRIES}), aborting search`); + return results; + } + await new Promise((resolve) => setTimeout(resolve, 10000 * retries)); + } + } + + const promises: (() => Promise)[] = responseData.map( + (item: any) => { + return () => processItem(item, targetTitle, mustHaveTerms, airDate); + } + ); + results.push(...(await processInBatches(promises, 10))); + + return results; +}; + +export async function scrapeJackett( + finalQuery: string, + targetTitle: string, + mustHaveTerms: (string | RegExp)[], + airDate: string +): Promise { + console.log(`๐Ÿ” Searching Jackett: ${finalQuery}`); + try { + return await processPage(finalQuery, targetTitle, mustHaveTerms, airDate); + } catch (error) { + console.error('scrapeJackett page processing error', error); + } + return []; +} diff --git a/src/services/movieScraper.ts b/src/services/movieScraper.ts index 92fc3b6..bcb3758 100644 --- a/src/services/movieScraper.ts +++ b/src/services/movieScraper.ts @@ -1,6 +1,7 @@ import { cleanSearchQuery } from '@/utils/search'; import fs from 'fs'; -import { flattenAndRemoveDuplicates, groupByParsedTitle, scrapeResults } from './btdigg-v2'; +import { flattenAndRemoveDuplicates, groupByParsedTitle, scrapeBtdigg } from './btdigg-v2'; +import { scrapeJackett } from './jackett'; import { ScrapeSearchResult } from './mediasearch'; import { PlanetScaleCache } from './planetscale'; @@ -33,10 +34,11 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { let sets: ScrapeSearchResult[][] = []; const hasUncommonWords = countUncommonWordsInTitle(job.title) >= 1; - sets.push(await scrapeResults(`"${job.title}" ${job.year ?? ''}`, job.title, [], job.airDate)); + sets.push(await scrapeBtdigg(`"${job.title}" ${job.year ?? ''}`, job.title, [], job.airDate)); + sets.push(await scrapeJackett(`"${job.title}" ${job.year ?? ''}`, job.title, [], job.airDate)); if (job.title.includes('&')) { sets.push( - await scrapeResults( + await scrapeBtdigg( `"${job.title.replaceAll('&', 'and')}" ${job.year ?? ''}`, job.title, [], @@ -45,12 +47,12 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { ); } if (job.title.split(/\s/).length > 3 || hasUncommonWords) { - sets.push(await scrapeResults(`"${job.title}"`, job.title, [], job.airDate)); + sets.push(await scrapeBtdigg(`"${job.title}"`, job.title, [], job.airDate)); } if (job.originalTitle) { sets.push( - await scrapeResults( + await scrapeBtdigg( `"${job.originalTitle}" ${job.year ?? ''}`, job.originalTitle, [], @@ -59,14 +61,14 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { ); if (hasUncommonWords) { sets.push( - await scrapeResults(`"${job.originalTitle}"`, job.originalTitle, [], job.airDate) + await scrapeBtdigg(`"${job.originalTitle}"`, job.originalTitle, [], job.airDate) ); } } if (job.cleanedTitle) { sets.push( - await scrapeResults( + await scrapeBtdigg( `"${job.cleanedTitle}" ${job.year ?? ''}`, job.cleanedTitle, [], @@ -75,7 +77,7 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { ); if (hasUncommonWords) { sets.push( - await scrapeResults(`"${job.cleanedTitle}"`, job.cleanedTitle, [], job.airDate) + await scrapeBtdigg(`"${job.cleanedTitle}"`, job.cleanedTitle, [], job.airDate) ); } } diff --git a/src/services/tvScraper.ts b/src/services/tvScraper.ts index c88e99c..535c812 100644 --- a/src/services/tvScraper.ts +++ b/src/services/tvScraper.ts @@ -1,5 +1,6 @@ import { cleanSearchQuery } from '@/utils/search'; -import { flattenAndRemoveDuplicates, groupByParsedTitle, scrapeResults } from './btdigg-v2'; +import { flattenAndRemoveDuplicates, groupByParsedTitle, scrapeBtdigg } from './btdigg-v2'; +import { scrapeJackett } from './jackett'; import { ScrapeSearchResult } from './mediasearch'; import { PlanetScaleCache } from './planetscale'; @@ -48,7 +49,15 @@ const getSearchResults = async (job: TvScrapeJob) => { let sets: ScrapeSearchResult[][] = []; sets.push( - await scrapeResults( + await scrapeBtdigg( + `"${job.title}" s${padWithZero(job.seasonNumber)}`, + job.title, + [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], + job.airDate + ) + ); + sets.push( + await scrapeJackett( `"${job.title}" s${padWithZero(job.seasonNumber)}`, job.title, [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], @@ -58,7 +67,7 @@ const getSearchResults = async (job: TvScrapeJob) => { if (job.seasonName && job.seasonCode) { sets.push( - await scrapeResults( + await scrapeBtdigg( `"${job.title}" "${job.seasonName}" s${padWithZero(job.seasonCode)}`, job.title, [ @@ -70,7 +79,7 @@ const getSearchResults = async (job: TvScrapeJob) => { ); } else if (job.seasonName && job.seasonName !== job.title) { sets.push( - await scrapeResults( + await scrapeBtdigg( `"${job.title}" "${job.seasonName}"`, job.title, [...job.seasonName.split(/\s/)], @@ -80,7 +89,7 @@ const getSearchResults = async (job: TvScrapeJob) => { } if (job.title.split(/\s/).length > 3 && job.seasonNumber === 1) { - sets.push(await scrapeResults(`"${job.title}"`, job.title, [], job.airDate)); + sets.push(await scrapeBtdigg(`"${job.title}"`, job.title, [], job.airDate)); } if (!job.originalTitle) return sets; @@ -88,7 +97,7 @@ const getSearchResults = async (job: TvScrapeJob) => { let sets2: ScrapeSearchResult[][] = []; sets2.push( - await scrapeResults( + await scrapeBtdigg( `"${job.originalTitle}" s${padWithZero(job.seasonNumber)}`, job.originalTitle, [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], @@ -97,7 +106,7 @@ const getSearchResults = async (job: TvScrapeJob) => { ); if (job.seasonName && job.seasonCode) { sets2.push( - await scrapeResults( + await scrapeBtdigg( `"${job.originalTitle}" "${job.seasonName}" s${padWithZero(job.seasonCode)}`, job.originalTitle, [ @@ -109,7 +118,7 @@ const getSearchResults = async (job: TvScrapeJob) => { ); } else if (job.seasonName && job.seasonName !== job.originalTitle) { sets2.push( - await scrapeResults( + await scrapeBtdigg( `"${job.originalTitle}" "${job.seasonName}"`, job.originalTitle, [...job.seasonName.split(/\s/)], diff --git a/src/utils/proxyManager.ts b/src/utils/proxyManager.ts new file mode 100644 index 0000000..99d05fd --- /dev/null +++ b/src/utils/proxyManager.ts @@ -0,0 +1,44 @@ +import { SocksProxyAgent } from 'socks-proxy-agent'; + +class ProxyManager { + static workingProxies: string[] = []; + static nonWorkingProxies: string[] = []; + private myId: string; + + constructor() { + this.myId = ''; + this.rerollProxy(); + } + + getWorkingProxy(): SocksProxyAgent { + if (ProxyManager.workingProxies.length > 0) { + return new SocksProxyAgent( + `socks5h://${ProxyManager.workingProxies[0]}:damama@${process.env.PROXY || ''}`, + { timeout: parseInt(process.env.REQUEST_TIMEOUT!) } + ); + } else { + throw new Error('No working proxies'); + } + } + + rerollProxy() { + if (this.myId) this.removeProxy(this.myId); + if (ProxyManager.workingProxies.length > 0) { + this.myId = ProxyManager.workingProxies[0]; + } else { + this.myId = Math.random().toString(36).substring(2); + ProxyManager.workingProxies.push(this.myId); + } + if (ProxyManager.nonWorkingProxies.includes(this.myId)) this.rerollProxy(); + } + + private removeProxy(proxyId: string) { + const index = ProxyManager.workingProxies.indexOf(proxyId); + if (index > -1) { + ProxyManager.workingProxies.splice(index, 1); + } + ProxyManager.nonWorkingProxies.push(proxyId); + } +} + +export default ProxyManager; From de12e1cdf0f09cf88c6ca26ecb7073d31ec36610 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Thu, 21 Sep 2023 16:20:01 +0200 Subject: [PATCH 101/272] improve performance --- .env | 4 +-- src/services/btdigg-v2.ts | 7 +++-- src/services/jackett.ts | 25 ++++++++-------- src/services/movieScraper.ts | 57 +++++++++++++++++++++++------------- src/services/tvScraper.ts | 45 ++++++++++++++-------------- 5 files changed, 78 insertions(+), 60 deletions(-) diff --git a/.env b/.env index 2a017bc..c1597af 100644 --- a/.env +++ b/.env @@ -6,5 +6,5 @@ SCRAPE_API_PASSWORD=123456 TMDB_KEY=abc123 MDBLIST_KEY=abc123 -DATABASE_URL=mysql://username:password@aws.connect.psdb.cloud/database?sslaccept=strict -JACKETT=http://localhost:9117 +DATABASE_URL="mysql://username:password@aws.connect.psdb.cloud/database?sslaccept=strict" +JACKETT="http://localhost:9117" diff --git a/src/services/btdigg-v2.ts b/src/services/btdigg-v2.ts index 1b03ec5..4665149 100644 --- a/src/services/btdigg-v2.ts +++ b/src/services/btdigg-v2.ts @@ -299,6 +299,7 @@ export async function scrapeBtdigg( mustHaveTerms: (string | RegExp)[], airDate: string ): Promise { + return []; let searchResultsArr: ScrapeSearchResult[] = []; while (true) { console.log(`๐Ÿ” Searching Btdigg: ${finalQuery}`); @@ -328,7 +329,7 @@ export async function scrapeBtdigg( ); pageNum++; } - searchResultsArr.push(...(await processInBatches(promises, 2))); + searchResultsArr.push(...(await processInBatches(promises, 5))); } catch (error) { console.error('scrapeBtdigg page processing error', error); await new Promise((resolve) => setTimeout(resolve, 5000)); @@ -360,7 +361,7 @@ export async function scrapeBtdigg( ); pageNum++; } - searchResultsArr.push(...(await processInBatches(promises, 2))); + searchResultsArr.push(...(await processInBatches(promises, 5))); } catch (error) { console.error('scrapeBtdigg mkv page processing error', error); await new Promise((resolve) => setTimeout(resolve, 5000)); @@ -392,7 +393,7 @@ export async function scrapeBtdigg( ); pageNum++; } - searchResultsArr.push(...(await processInBatches(promises, 2))); + searchResultsArr.push(...(await processInBatches(promises, 5))); } catch (error) { console.error('scrapeBtdigg mp4 page processing error', error); await new Promise((resolve) => setTimeout(resolve, 5000)); diff --git a/src/services/jackett.ts b/src/services/jackett.ts index 13e56ba..80f509d 100644 --- a/src/services/jackett.ts +++ b/src/services/jackett.ts @@ -45,7 +45,8 @@ async function getMagnetURI(url: string): Promise { } } - const encodedInfo = bencode.encode(bencode.decode(response.data).info); + const info = bencode.decode(response.data).info; + const encodedInfo = bencode.encode(info); const infoHash = createHash('sha1').update(encodedInfo).digest(); const magnetHash = base32Encode(infoHash, 'RFC3548'); @@ -91,11 +92,11 @@ async function processItem( if (containedTerms < requiredTerms) { // console.debug(title, '-title match-', targetTitle); // console.debug('bad title', containedTerms, requiredTerms); - console.log( - `โŒ ${item.Tracker} returned a bad result (title match)`, - containedTerms, - requiredTerms - ); + // console.log( + // `โŒ ${item.Tracker} returned a bad result (title match)`, + // containedTerms, + // requiredTerms + // ); return undefined; } const containedMustHaveTerms = mustHaveTerms.filter((term) => { @@ -109,11 +110,11 @@ async function processItem( if (containedMustHaveTerms < mustHaveTerms.length) { // console.debug(title, '-must have-', mustHaveTerms); // console.debug('bad must have terms', containedMustHaveTerms, mustHaveTerms.length); - console.log( - `โŒ ${item.Tracker} returned a bad result (must have terms)`, - containedMustHaveTerms, - mustHaveTerms.length - ); + // console.log( + // `โŒ ${item.Tracker} returned a bad result (must have terms)`, + // containedMustHaveTerms, + // mustHaveTerms.length + // ); return undefined; } if (!targetTitle.match(/xxx/i)) { @@ -128,7 +129,7 @@ async function processItem( (item.MagnetUri && extractHashFromMagnetLink(item.MagnetUri)) || (item.Link && (await getMagnetURI(item.Link))); if (!hash) { - console.log(`โŒ ${item.Tracker} returned a bad result (hash)`, item.Link); + console.log(`โŒ ${item.Tracker} returned a bad result (no hash)`, item.Link); return undefined; } diff --git a/src/services/movieScraper.ts b/src/services/movieScraper.ts index bcb3758..eac88ac 100644 --- a/src/services/movieScraper.ts +++ b/src/services/movieScraper.ts @@ -30,12 +30,23 @@ const countUncommonWordsInTitle = (title: string) => { return processedTitle.filter((word: string) => !wordSet.has(word)).length; }; +async function scrapeAll( + finalQuery: string, + targetTitle: string, + mustHaveTerms: (string | RegExp)[], + airDate: string +): Promise { + return await Promise.all([ + scrapeBtdigg(finalQuery, targetTitle, mustHaveTerms, airDate), + scrapeJackett(finalQuery, targetTitle, mustHaveTerms, airDate), + ]); +} + const getMovieSearchResults = async (job: MovieScrapeJob) => { let sets: ScrapeSearchResult[][] = []; const hasUncommonWords = countUncommonWordsInTitle(job.title) >= 1; - sets.push(await scrapeBtdigg(`"${job.title}" ${job.year ?? ''}`, job.title, [], job.airDate)); - sets.push(await scrapeJackett(`"${job.title}" ${job.year ?? ''}`, job.title, [], job.airDate)); + sets = await scrapeAll(`"${job.title}" ${job.year ?? ''}`, job.title, [], job.airDate); if (job.title.includes('&')) { sets.push( await scrapeBtdigg( @@ -52,12 +63,12 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { if (job.originalTitle) { sets.push( - await scrapeBtdigg( + ...(await scrapeAll( `"${job.originalTitle}" ${job.year ?? ''}`, job.originalTitle, [], job.airDate - ) + )) ); if (hasUncommonWords) { sets.push( @@ -68,12 +79,12 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { if (job.cleanedTitle) { sets.push( - await scrapeBtdigg( + ...(await scrapeAll( `"${job.cleanedTitle}" ${job.year ?? ''}`, job.cleanedTitle, [], job.airDate - ) + )) ); if (hasUncommonWords) { sets.push( @@ -105,7 +116,11 @@ export async function scrapeMovies( .trim() .toLowerCase(); - if (tmdbData.original_title && tmdbData.original_title !== tmdbData.title) { + if ( + tmdbData.original_title && + tmdbData.original_title !== tmdbData.title && + mdbData.ratings?.length + ) { originalTitle = tmdbData.original_title.toLowerCase(); for (let rating of mdbData.ratings) { if (rating.source === 'tomatoes') { @@ -127,19 +142,21 @@ export async function scrapeMovies( } let anotherTitle; - for (let rating of mdbData.ratings) { - if (rating.source === 'metacritic') { - if (!rating.url) continue; - let metacriticTitle = rating.url.split('/').pop(); - metacriticTitle = metacriticTitle - .split('-') - .map((word: string) => word.replaceAll(/[\W]+/g, '')) - .join(' ') - .trim() - .toLowerCase(); - if (metacriticTitle !== processedTitle && metacriticTitle !== cleanedTitle) { - console.log('๐ŸŽฏ Found another title (2):', metacriticTitle); - anotherTitle = metacriticTitle; + if (mdbData.ratings?.length) { + for (let rating of mdbData.ratings) { + if (rating.source === 'metacritic') { + if (!rating.url) continue; + let metacriticTitle = rating.url.split('/').pop(); + metacriticTitle = metacriticTitle + .split('-') + .map((word: string) => word.replaceAll(/[\W]+/g, '')) + .join(' ') + .trim() + .toLowerCase(); + if (metacriticTitle !== processedTitle && metacriticTitle !== cleanedTitle) { + console.log('๐ŸŽฏ Found another title (2):', metacriticTitle); + anotherTitle = metacriticTitle; + } } } } diff --git a/src/services/tvScraper.ts b/src/services/tvScraper.ts index 535c812..159f958 100644 --- a/src/services/tvScraper.ts +++ b/src/services/tvScraper.ts @@ -45,24 +45,25 @@ const getSeasonNameAndCode = (season: any) => { const getSeasonYear = (season: any) => season.air_date?.substring(0, 4); +async function scrapeAll( + finalQuery: string, + targetTitle: string, + mustHaveTerms: (string | RegExp)[], + airDate: string +): Promise { + return await Promise.all([ + scrapeBtdigg(finalQuery, targetTitle, mustHaveTerms, airDate), + scrapeJackett(finalQuery, targetTitle, mustHaveTerms, airDate), + ]); +} + const getSearchResults = async (job: TvScrapeJob) => { let sets: ScrapeSearchResult[][] = []; - - sets.push( - await scrapeBtdigg( - `"${job.title}" s${padWithZero(job.seasonNumber)}`, - job.title, - [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], - job.airDate - ) - ); - sets.push( - await scrapeJackett( - `"${job.title}" s${padWithZero(job.seasonNumber)}`, - job.title, - [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], - job.airDate - ) + sets = await scrapeAll( + `"${job.title}" s${padWithZero(job.seasonNumber)}`, + job.title, + [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], + job.airDate ); if (job.seasonName && job.seasonCode) { @@ -96,13 +97,11 @@ const getSearchResults = async (job: TvScrapeJob) => { let sets2: ScrapeSearchResult[][] = []; - sets2.push( - await scrapeBtdigg( - `"${job.originalTitle}" s${padWithZero(job.seasonNumber)}`, - job.originalTitle, - [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], - job.airDate - ) + sets2 = await scrapeAll( + `"${job.originalTitle}" s${padWithZero(job.seasonNumber)}`, + job.originalTitle, + [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], + job.airDate ); if (job.seasonName && job.seasonCode) { sets2.push( From 0a4d1118b127e863269c4a97555d511b214c79b3 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Thu, 21 Sep 2023 16:53:19 +0200 Subject: [PATCH 102/272] enable btdigg --- src/services/btdigg-v2.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/services/btdigg-v2.ts b/src/services/btdigg-v2.ts index 4665149..1ec2ce3 100644 --- a/src/services/btdigg-v2.ts +++ b/src/services/btdigg-v2.ts @@ -299,7 +299,6 @@ export async function scrapeBtdigg( mustHaveTerms: (string | RegExp)[], airDate: string ): Promise { - return []; let searchResultsArr: ScrapeSearchResult[] = []; while (true) { console.log(`๐Ÿ” Searching Btdigg: ${finalQuery}`); From 484935600f6e2710c60fa9b9ca0380bf75f93011 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Thu, 21 Sep 2023 18:18:23 +0200 Subject: [PATCH 103/272] compute proper hash --- package-lock.json | 44 ++++----------------------------- package.json | 3 +-- src/services/availability.ts | 7 ------ src/services/jackett.ts | 25 +++++++++---------- src/services/realDebrid.ts | 10 ++++++-- src/utils/bestDownloadOption.ts | 22 ----------------- 6 files changed, 25 insertions(+), 86 deletions(-) delete mode 100644 src/services/availability.ts delete mode 100644 src/utils/bestDownloadOption.ts diff --git a/package-lock.json b/package-lock.json index 751ee67..be3b6b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,10 +10,9 @@ "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", - "@pnpm/crypto.base32-hash": "^2.0.0", "@prisma/client": "^5.2.0", "axios": "^1.3.5", - "base32-encode": "^2.0.0", + "base32-decode": "^1.0.0", "bencode": "^4.0.0", "express": "^4.18.2", "file-saver": "^2.0.5", @@ -582,20 +581,6 @@ "@octokit/openapi-types": "^17.0.0" } }, - "node_modules/@pnpm/crypto.base32-hash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@pnpm/crypto.base32-hash/-/crypto.base32-hash-2.0.0.tgz", - "integrity": "sha512-3ttOeHBpmWRbgJrpDQ8Nwd3W8s8iuiP5YZM0JRyKWaMtX8lu9d7/AKyxPmhYsMJuN+q/1dwHa7QFeDZJ53b0oA==", - "dependencies": { - "rfc4648": "^1.5.2" - }, - "engines": { - "node": ">=16.14" - }, - "funding": { - "url": "https://opencollective.com/pnpm" - } - }, "node_modules/@prisma/client": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.2.0.tgz", @@ -1238,16 +1223,10 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/base32-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base32-encode/-/base32-encode-2.0.0.tgz", - "integrity": "sha512-mlmkfc2WqdDtMl/id4qm3A7RjW6jxcbAoMjdRmsPiwQP0ufD4oXItYMnPgVHe80lnAIy+1xwzhHE1s4FoIceSw==", - "dependencies": { - "to-data-view": "^2.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } + "node_modules/base32-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base32-decode/-/base32-decode-1.0.0.tgz", + "integrity": "sha512-KNWUX/R7wKenwE/G/qFMzGScOgVntOmbE27vvc6GrniDGYb6a5+qWcuoXl8WIOQL7q0TpK7nZDm1Y04Yi3Yn5g==" }, "node_modules/base64-arraybuffer": { "version": "1.0.2", @@ -4729,11 +4708,6 @@ "node": ">=0.10.0" } }, - "node_modules/rfc4648": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.2.tgz", - "integrity": "sha512-tLOizhR6YGovrEBLatX1sdcuhoSCXddw3mqNVAcKxGJ+J0hFeJ+SjeWCv5UPA/WU3YzWPPuCVYgXBKZUPGpKtg==" - }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -5296,14 +5270,6 @@ "node": ">=0.8" } }, - "node_modules/to-data-view": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-data-view/-/to-data-view-2.0.0.tgz", - "integrity": "sha512-RGEM5KqlPHr+WVTPmGNAXNeFEmsBnlkxXaIfEpUYV0AST2Z5W1EGq9L/MENFrMMmL2WQr1wjkmZy/M92eKhjYA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", diff --git a/package.json b/package.json index 7e45e53..deea0c3 100644 --- a/package.json +++ b/package.json @@ -13,10 +13,9 @@ "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", - "@pnpm/crypto.base32-hash": "^2.0.0", "@prisma/client": "^5.2.0", "axios": "^1.3.5", - "base32-encode": "^2.0.0", + "base32-decode": "^1.0.0", "bencode": "^4.0.0", "express": "^4.18.2", "file-saver": "^2.0.5", diff --git a/src/services/availability.ts b/src/services/availability.ts deleted file mode 100644 index 82f7eac..0000000 --- a/src/services/availability.ts +++ /dev/null @@ -1,7 +0,0 @@ -export type Availability = - | 'all:available' - | 'rd:available' - | 'ad:available' - | 'unavailable' - | 'no_videos'; -export type HashAvailability = Record; diff --git a/src/services/jackett.ts b/src/services/jackett.ts index 80f509d..c76ae43 100644 --- a/src/services/jackett.ts +++ b/src/services/jackett.ts @@ -1,6 +1,4 @@ -import { getMediaType } from '@/utils/mediaType'; import axios from 'axios'; -import base32Encode from 'base32-encode'; import bencode from 'bencode'; import { createHash } from 'crypto'; import { ScrapeSearchResult } from './mediasearch'; @@ -29,7 +27,7 @@ function extractHashFromMagnetLink(magnetLink: string) { } } -async function getMagnetURI(url: string): Promise { +async function computeHashFromTorrent(url: string): Promise { try { const response = await axios.get(url, { maxRedirects: 0, // Set maxRedirects to 0 to disable automatic redirects @@ -48,7 +46,11 @@ async function getMagnetURI(url: string): Promise { const info = bencode.decode(response.data).info; const encodedInfo = bencode.encode(info); const infoHash = createHash('sha1').update(encodedInfo).digest(); - const magnetHash = base32Encode(infoHash, 'RFC3548'); + const magnetHash = Array.prototype.map + .call(new Uint8Array(infoHash), (byte) => { + return ('0' + byte.toString(16)).slice(-2); + }) + .join(''); return magnetHash.toLowerCase(); } catch (error: any) { @@ -66,17 +68,13 @@ async function processItem( const title = item.Title; if (item.Size < 1024 * 1024) { - console.log(`โŒ ${item.Tracker} returned a bad result (size < 1MB)`, item.Size); - return undefined; - } - const fileSize = item.Size / 1024 / 1024; // convert to MB - if (getMediaType(title) === 'movie' && fileSize > 200_000) { - console.log(`โŒ ${item.Tracker} returned a bad result (size > 200GB)`, item.Size); + console.log(`โŒ ${item.Tracker} : too small!`, item.Size); return undefined; } + const fileSize = item.Size / 1024 / 1024; if (!isFoundDateRecent(item.PublishDate, airDate)) { - console.log(`โŒ ${item.Tracker} returned a bad result (date)`, item.PublishDate); + console.log(`โŒ ${item.Tracker} : too old!`, item.PublishDate); return undefined; } @@ -119,7 +117,6 @@ async function processItem( } if (!targetTitle.match(/xxx/i)) { if (title.match(/xxx/i)) { - console.log(`โŒ ${item.Tracker} returned a XXX result`); return undefined; } } @@ -127,9 +124,9 @@ async function processItem( const hash = item.InfoHash?.toLowerCase() || (item.MagnetUri && extractHashFromMagnetLink(item.MagnetUri)) || - (item.Link && (await getMagnetURI(item.Link))); + (item.Link && (await computeHashFromTorrent(item.Link))); if (!hash) { - console.log(`โŒ ${item.Tracker} returned a bad result (no hash)`, item.Link); + console.log(`โŒ ${item.Tracker} has no working link`, item.Link); return undefined; } diff --git a/src/services/realDebrid.ts b/src/services/realDebrid.ts index 2268a30..c74e0ff 100644 --- a/src/services/realDebrid.ts +++ b/src/services/realDebrid.ts @@ -216,7 +216,10 @@ export const getTorrentInfo = async (accessToken: string, id: string) => { } }; -export const rdInstantCheck = async (accessToken: string, hashes: string[]) => { +export const rdInstantCheck = async ( + accessToken: string, + hashes: string[] +): Promise => { try { const headers = { Authorization: `Bearer ${accessToken}`, @@ -231,7 +234,10 @@ export const rdInstantCheck = async (accessToken: string, hashes: string[]) => { return response.data; } catch (error: any) { console.error('Error fetching torrent information:', error.message); - throw error; + console.log('Retrying availability check...'); + const firstElement = hashes.shift() as string; + hashes.push(firstElement); + return rdInstantCheck(accessToken, hashes); } }; diff --git a/src/utils/bestDownloadOption.ts b/src/utils/bestDownloadOption.ts deleted file mode 100644 index 1892cbd..0000000 --- a/src/utils/bestDownloadOption.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { HashAvailability } from '@/services/availability'; - -export const getBestDownloadOption = ( - searchResults: { hash: string; score: number }[], - masterAvailability: HashAvailability -): string | undefined => { - if (!searchResults.length) return; - const availableHashes = Object.keys(masterAvailability).filter((key) => - masterAvailability[key].endsWith(':available') - ); - if (!availableHashes.length) return; - let bestScore = 0; - const bestHash = availableHashes.reduce((acc: string, curr: string) => { - const currScore = searchResults.find((r) => r.hash === curr)?.score || 0; - if (currScore > bestScore) { - bestScore = currScore; - return curr; - } - return acc; - }, availableHashes[0]); - return bestHash; -}; From c798352579cf0748c7480d905a506726bbcdd3e8 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Thu, 21 Sep 2023 18:24:31 +0200 Subject: [PATCH 104/272] no excess log --- src/services/jackett.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/jackett.ts b/src/services/jackett.ts index c76ae43..a984b7a 100644 --- a/src/services/jackett.ts +++ b/src/services/jackett.ts @@ -126,7 +126,7 @@ async function processItem( (item.MagnetUri && extractHashFromMagnetLink(item.MagnetUri)) || (item.Link && (await computeHashFromTorrent(item.Link))); if (!hash) { - console.log(`โŒ ${item.Tracker} has no working link`, item.Link); + console.log(`โŒ ${item.Tracker} has no working link`); return undefined; } From 95b10e5a855a5d01b657703566f9d868efc6382e Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Thu, 21 Sep 2023 21:52:17 +0200 Subject: [PATCH 105/272] more efficient jackett --- src/services/jackett.ts | 13 ++++++++++++- src/services/movieScraper.ts | 15 +++++++++------ src/services/tvScraper.ts | 31 +++++++++++++++++-------------- src/utils/proxyManager.ts | 22 +++++++++++++++++----- 4 files changed, 55 insertions(+), 26 deletions(-) diff --git a/src/services/jackett.ts b/src/services/jackett.ts index a984b7a..38bebb9 100644 --- a/src/services/jackett.ts +++ b/src/services/jackett.ts @@ -23,6 +23,7 @@ function extractHashFromMagnetLink(magnetLink: string) { if (match) { return match[1].toLowerCase(); } else { + process.stdout.write('x'); return undefined; } } @@ -33,6 +34,7 @@ async function computeHashFromTorrent(url: string): Promise maxRedirects: 0, // Set maxRedirects to 0 to disable automatic redirects validateStatus: (status) => status >= 200 && status < 400, responseType: 'arraybuffer', + timeout: 8888, }); if (response.status === 302) { @@ -55,6 +57,7 @@ async function computeHashFromTorrent(url: string): Promise return magnetHash.toLowerCase(); } catch (error: any) { console.error('getMagnetURI error:', error.message); + process.stdout.write('x'); return undefined; } } @@ -69,12 +72,14 @@ async function processItem( if (item.Size < 1024 * 1024) { console.log(`โŒ ${item.Tracker} : too small!`, item.Size); + process.stdout.write('x'); return undefined; } const fileSize = item.Size / 1024 / 1024; if (!isFoundDateRecent(item.PublishDate, airDate)) { console.log(`โŒ ${item.Tracker} : too old!`, item.PublishDate); + process.stdout.write('x'); return undefined; } @@ -95,6 +100,7 @@ async function processItem( // containedTerms, // requiredTerms // ); + process.stdout.write('x'); return undefined; } const containedMustHaveTerms = mustHaveTerms.filter((term) => { @@ -113,10 +119,12 @@ async function processItem( // containedMustHaveTerms, // mustHaveTerms.length // ); + process.stdout.write('x'); return undefined; } if (!targetTitle.match(/xxx/i)) { if (title.match(/xxx/i)) { + process.stdout.write('x'); return undefined; } } @@ -127,9 +135,12 @@ async function processItem( (item.Link && (await computeHashFromTorrent(item.Link))); if (!hash) { console.log(`โŒ ${item.Tracker} has no working link`); + process.stdout.write('x'); return undefined; } + process.stdout.write('.'); + return { title, fileSize, @@ -167,7 +178,7 @@ const processPage = async ( const searchUrl = createSearchUrl(finalQuery); while (true) { try { - const response = await axios.get(searchUrl); + const response = await axios.get(searchUrl, { timeout: 100000 }); responseData = response.data.Results; retries = 0; break; diff --git a/src/services/movieScraper.ts b/src/services/movieScraper.ts index eac88ac..a03275c 100644 --- a/src/services/movieScraper.ts +++ b/src/services/movieScraper.ts @@ -46,19 +46,22 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { let sets: ScrapeSearchResult[][] = []; const hasUncommonWords = countUncommonWordsInTitle(job.title) >= 1; - sets = await scrapeAll(`"${job.title}" ${job.year ?? ''}`, job.title, [], job.airDate); if (job.title.includes('&')) { sets.push( - await scrapeBtdigg( + ...(await scrapeAll( `"${job.title.replaceAll('&', 'and')}" ${job.year ?? ''}`, job.title, [], job.airDate - ) + )) + ); + } else { + sets.push( + ...(await scrapeAll(`"${job.title}" ${job.year ?? ''}`, job.title, [], job.airDate)) ); } if (job.title.split(/\s/).length > 3 || hasUncommonWords) { - sets.push(await scrapeBtdigg(`"${job.title}"`, job.title, [], job.airDate)); + sets.push(...(await scrapeAll(`"${job.title}"`, job.title, [], job.airDate))); } if (job.originalTitle) { @@ -72,7 +75,7 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { ); if (hasUncommonWords) { sets.push( - await scrapeBtdigg(`"${job.originalTitle}"`, job.originalTitle, [], job.airDate) + ...(await scrapeAll(`"${job.originalTitle}"`, job.originalTitle, [], job.airDate)) ); } } @@ -88,7 +91,7 @@ const getMovieSearchResults = async (job: MovieScrapeJob) => { ); if (hasUncommonWords) { sets.push( - await scrapeBtdigg(`"${job.cleanedTitle}"`, job.cleanedTitle, [], job.airDate) + ...(await scrapeAll(`"${job.cleanedTitle}"`, job.cleanedTitle, [], job.airDate)) ); } } diff --git a/src/services/tvScraper.ts b/src/services/tvScraper.ts index 159f958..775faad 100644 --- a/src/services/tvScraper.ts +++ b/src/services/tvScraper.ts @@ -59,16 +59,19 @@ async function scrapeAll( const getSearchResults = async (job: TvScrapeJob) => { let sets: ScrapeSearchResult[][] = []; - sets = await scrapeAll( - `"${job.title}" s${padWithZero(job.seasonNumber)}`, - job.title, - [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], - job.airDate + + sets.push( + ...(await scrapeAll( + `"${job.title}" s${padWithZero(job.seasonNumber)}`, + job.title, + [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], + job.airDate + )) ); if (job.seasonName && job.seasonCode) { sets.push( - await scrapeBtdigg( + ...(await scrapeAll( `"${job.title}" "${job.seasonName}" s${padWithZero(job.seasonCode)}`, job.title, [ @@ -76,21 +79,21 @@ const getSearchResults = async (job: TvScrapeJob) => { ...job.seasonName.split(/\s/), ], job.airDate - ) + )) ); } else if (job.seasonName && job.seasonName !== job.title) { sets.push( - await scrapeBtdigg( + ...(await scrapeAll( `"${job.title}" "${job.seasonName}"`, job.title, [...job.seasonName.split(/\s/)], job.airDate - ) + )) ); } if (job.title.split(/\s/).length > 3 && job.seasonNumber === 1) { - sets.push(await scrapeBtdigg(`"${job.title}"`, job.title, [], job.airDate)); + sets.push(...(await scrapeAll(`"${job.title}"`, job.title, [], job.airDate))); } if (!job.originalTitle) return sets; @@ -105,7 +108,7 @@ const getSearchResults = async (job: TvScrapeJob) => { ); if (job.seasonName && job.seasonCode) { sets2.push( - await scrapeBtdigg( + ...(await scrapeAll( `"${job.originalTitle}" "${job.seasonName}" s${padWithZero(job.seasonCode)}`, job.originalTitle, [ @@ -113,16 +116,16 @@ const getSearchResults = async (job: TvScrapeJob) => { ...job.seasonName.split(/\s/), ], job.airDate - ) + )) ); } else if (job.seasonName && job.seasonName !== job.originalTitle) { sets2.push( - await scrapeBtdigg( + ...(await scrapeAll( `"${job.originalTitle}" "${job.seasonName}"`, job.originalTitle, [...job.seasonName.split(/\s/)], job.airDate - ) + )) ); } diff --git a/src/utils/proxyManager.ts b/src/utils/proxyManager.ts index 99d05fd..2509c34 100644 --- a/src/utils/proxyManager.ts +++ b/src/utils/proxyManager.ts @@ -11,20 +11,32 @@ class ProxyManager { } getWorkingProxy(): SocksProxyAgent { - if (ProxyManager.workingProxies.length > 0) { + if (ProxyManager.workingProxies.length > 5) { + const randomProxy = + ProxyManager.workingProxies[ + Math.floor(Math.random() * ProxyManager.workingProxies.length) + ]; return new SocksProxyAgent( - `socks5h://${ProxyManager.workingProxies[0]}:damama@${process.env.PROXY || ''}`, + `socks5h://${randomProxy}:damama@${process.env.PROXY || ''}`, { timeout: parseInt(process.env.REQUEST_TIMEOUT!) } ); } else { - throw new Error('No working proxies'); + this.myId = Math.random().toString(36).substring(2); + ProxyManager.workingProxies.push(this.myId); + return new SocksProxyAgent( + `socks5h://${this.myId}:damama@${process.env.PROXY || ''}`, + { timeout: parseInt(process.env.REQUEST_TIMEOUT!) } + ); } } rerollProxy() { if (this.myId) this.removeProxy(this.myId); - if (ProxyManager.workingProxies.length > 0) { - this.myId = ProxyManager.workingProxies[0]; + if (ProxyManager.workingProxies.length > 5) { + this.myId = + ProxyManager.workingProxies[ + Math.floor(Math.random() * ProxyManager.workingProxies.length) + ]; } else { this.myId = Math.random().toString(36).substring(2); ProxyManager.workingProxies.push(this.myId); From ca288ae9d5ca3abb2c4b74a364daf0ddeb291a1e Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Thu, 21 Sep 2023 23:03:59 +0200 Subject: [PATCH 106/272] prowlarr --- .env | 1 + src/services/jackett.ts | 9 +- src/services/movieScraper.ts | 4 +- src/services/prowlarr.ts | 218 +++++++++++++++++++++++++++++++++++ src/services/tvScraper.ts | 4 +- src/utils/proxyManager.ts | 7 +- 6 files changed, 229 insertions(+), 14 deletions(-) create mode 100644 src/services/prowlarr.ts diff --git a/.env b/.env index c1597af..fe63d77 100644 --- a/.env +++ b/.env @@ -8,3 +8,4 @@ MDBLIST_KEY=abc123 DATABASE_URL="mysql://username:password@aws.connect.psdb.cloud/database?sslaccept=strict" JACKETT="http://localhost:9117" +PROWLARR="http://localhost:9696" diff --git a/src/services/jackett.ts b/src/services/jackett.ts index 38bebb9..257a440 100644 --- a/src/services/jackett.ts +++ b/src/services/jackett.ts @@ -71,15 +71,13 @@ async function processItem( const title = item.Title; if (item.Size < 1024 * 1024) { - console.log(`โŒ ${item.Tracker} : too small!`, item.Size); - process.stdout.write('x'); + process.stdout.write('-'); return undefined; } const fileSize = item.Size / 1024 / 1024; if (!isFoundDateRecent(item.PublishDate, airDate)) { - console.log(`โŒ ${item.Tracker} : too old!`, item.PublishDate); - process.stdout.write('x'); + process.stdout.write('-'); return undefined; } @@ -134,8 +132,7 @@ async function processItem( (item.MagnetUri && extractHashFromMagnetLink(item.MagnetUri)) || (item.Link && (await computeHashFromTorrent(item.Link))); if (!hash) { - console.log(`โŒ ${item.Tracker} has no working link`); - process.stdout.write('x'); + process.stdout.write('โŒ'); return undefined; } diff --git a/src/services/movieScraper.ts b/src/services/movieScraper.ts index a03275c..cf14ee1 100644 --- a/src/services/movieScraper.ts +++ b/src/services/movieScraper.ts @@ -1,9 +1,9 @@ import { cleanSearchQuery } from '@/utils/search'; import fs from 'fs'; import { flattenAndRemoveDuplicates, groupByParsedTitle, scrapeBtdigg } from './btdigg-v2'; -import { scrapeJackett } from './jackett'; import { ScrapeSearchResult } from './mediasearch'; import { PlanetScaleCache } from './planetscale'; +import { scrapeProwlarr } from './prowlarr'; let wordSet: Set; try { @@ -38,7 +38,7 @@ async function scrapeAll( ): Promise { return await Promise.all([ scrapeBtdigg(finalQuery, targetTitle, mustHaveTerms, airDate), - scrapeJackett(finalQuery, targetTitle, mustHaveTerms, airDate), + scrapeProwlarr(finalQuery, targetTitle, mustHaveTerms, airDate), ]); } diff --git a/src/services/prowlarr.ts b/src/services/prowlarr.ts new file mode 100644 index 0000000..a4c2d85 --- /dev/null +++ b/src/services/prowlarr.ts @@ -0,0 +1,218 @@ +import axios from 'axios'; +import bencode from 'bencode'; +import { createHash } from 'crypto'; +import { ScrapeSearchResult } from './mediasearch'; + +const PROWLARR = process.env.PROWLARR ?? 'http://localhost:9696'; + +function isFoundDateRecent(foundString: string, date: string): boolean { + const foundDate = new Date(foundString); + const airDate = new Date(date); + // Return true if the found date is more recent or equal + return foundDate >= airDate; +} + +const createSearchUrl = (finalQuery: string) => + `${PROWLARR}/api/v1/search?query=${encodeURIComponent( + finalQuery + )}&indexerIds=-2&categories[]=2000&categories[]=5000&type=search&apikey=2475bf3fd3964fdf9983cbfacac7d5fd`; + +function extractHashFromMagnetLink(magnetLink: string) { + const regex = /urn:btih:([A-Fa-f0-9]+)/; + const match = magnetLink.match(regex); + if (match) { + return match[1].toLowerCase(); + } else { + process.stdout.write('x'); + return undefined; + } +} + +async function computeHashFromTorrent(url: string): Promise { + try { + const response = await axios.get(url, { + maxRedirects: 0, // Set maxRedirects to 0 to disable automatic redirects + validateStatus: (status) => status >= 200 && status < 400, + responseType: 'arraybuffer', + timeout: 10000, + }); + + if (response.status === 301 || response.status === 302) { + const redirectURL = response.headers.location; + if (redirectURL.startsWith('magnet:')) { + // If the redirect URL is a magnet link, return it directly + return extractHashFromMagnetLink(redirectURL); + } + } + + const info = bencode.decode(response.data).info; + const encodedInfo = bencode.encode(info); + const infoHash = createHash('sha1').update(encodedInfo).digest(); + const magnetHash = Array.prototype.map + .call(new Uint8Array(infoHash), (byte) => { + return ('0' + byte.toString(16)).slice(-2); + }) + .join(''); + + return magnetHash.toLowerCase(); + } catch (error: any) { + process.stdout.write('x'); + return undefined; + } +} + +async function processItem( + item: any, + targetTitle: string, + mustHaveTerms: (string | RegExp)[], + airDate: string +): Promise { + const title = item.title; + + if (item.size < 1024 * 1024) { + process.stdout.write('-'); + return undefined; + } + const fileSize = item.size / 1024 / 1024; + + if (!isFoundDateRecent(item.publishDate, airDate)) { + process.stdout.write('-'); + return undefined; + } + + // Check if every term in the query (tokenized by space) is contained in the title + const queryTerms = targetTitle + .replaceAll('"', ' ') + .split(' ') + .filter((e) => e !== ''); + let requiredTerms = queryTerms.length <= 3 ? queryTerms.length : queryTerms.length - 1; + const containedTerms = queryTerms.filter((term) => + new RegExp(`${term.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&')}`, 'i').test(title) + ).length; + if (containedTerms < requiredTerms) { + // console.debug(title, '-title match-', targetTitle); + // console.debug('bad title', containedTerms, requiredTerms); + // console.log( + // `โŒ ${item.indexer} returned a bad result (title match)`, + // containedTerms, + // requiredTerms + // ); + process.stdout.write('x'); + return undefined; + } + const containedMustHaveTerms = mustHaveTerms.filter((term) => { + if (typeof term === 'string') { + return new RegExp(`${term}`, 'i').test(title); + } else if (term instanceof RegExp) { + return term.test(title); + } + return false; + }).length; + if (containedMustHaveTerms < mustHaveTerms.length) { + // console.debug(title, '-must have-', mustHaveTerms); + // console.debug('bad must have terms', containedMustHaveTerms, mustHaveTerms.length); + // console.log( + // `โŒ ${item.indexer} returned a bad result (must have terms)`, + // containedMustHaveTerms, + // mustHaveTerms.length + // ); + process.stdout.write('x'); + return undefined; + } + if (!targetTitle.match(/xxx/i)) { + if (title.match(/xxx/i)) { + process.stdout.write('x'); + return undefined; + } + } + + const hash = + item.infoHash?.toLowerCase() || + (item.magnetUrl && (await computeHashFromTorrent(item.magnetUrl))) || + (item.downloadUrl && (await computeHashFromTorrent(item.downloadUrl))); + if (!hash) { + process.stdout.write('โŒ ${item.indexer} '); + return undefined; + } + + process.stdout.write('.'); + + return { + title, + fileSize, + hash, + }; +} + +async function processInBatches( + promises: (() => Promise)[], + batchSize: number +): Promise { + let searchResultsArr: ScrapeSearchResult[] = []; + let i = 0; + while (i < promises.length) { + const promisesResults = await Promise.all( + promises.slice(i, i + batchSize).map(async (e) => await e()) + ); + promisesResults.forEach((e) => e && searchResultsArr.push(e)); + i += batchSize; + } + return searchResultsArr; +} + +const processPage = async ( + finalQuery: string, + targetTitle: string, + mustHaveTerms: (string | RegExp)[], + airDate: string +): Promise => { + const MAX_RETRIES = 5; // maximum number of retries + + let results: ScrapeSearchResult[] = []; + let retries = 0; // current number of retries + let responseData = []; + const searchUrl = createSearchUrl(finalQuery); + console.log(searchUrl); + while (true) { + try { + const response = await axios.get(searchUrl, { timeout: 100000 }); + responseData = response.data; + retries = 0; + break; + } catch (error: any) { + console.log('request error:', error.message); + retries++; + if (retries >= MAX_RETRIES) { + console.error(`Max retries reached (${MAX_RETRIES}), aborting search`); + return results; + } + await new Promise((resolve) => setTimeout(resolve, 10000 * retries)); + } + } + + console.log(`Prowlarr๐Ÿ” processing ${responseData.length} results`); + + const promises: (() => Promise)[] = responseData.map( + (item: any) => { + return () => processItem(item, targetTitle, mustHaveTerms, airDate); + } + ); + results.push(...(await processInBatches(promises, 5))); + + return results; +}; + +export async function scrapeProwlarr( + finalQuery: string, + targetTitle: string, + mustHaveTerms: (string | RegExp)[], + airDate: string +): Promise { + console.log(`๐Ÿ” Searching Prowlarr: ${finalQuery}`); + try { + return await processPage(finalQuery, targetTitle, mustHaveTerms, airDate); + } catch (error) { + console.error('scrapeProwlarr page processing error', error); + } + return []; +} diff --git a/src/services/tvScraper.ts b/src/services/tvScraper.ts index 775faad..28c8528 100644 --- a/src/services/tvScraper.ts +++ b/src/services/tvScraper.ts @@ -1,8 +1,8 @@ import { cleanSearchQuery } from '@/utils/search'; import { flattenAndRemoveDuplicates, groupByParsedTitle, scrapeBtdigg } from './btdigg-v2'; -import { scrapeJackett } from './jackett'; import { ScrapeSearchResult } from './mediasearch'; import { PlanetScaleCache } from './planetscale'; +import { scrapeProwlarr } from './prowlarr'; type TvScrapeJob = { title: string; @@ -53,7 +53,7 @@ async function scrapeAll( ): Promise { return await Promise.all([ scrapeBtdigg(finalQuery, targetTitle, mustHaveTerms, airDate), - scrapeJackett(finalQuery, targetTitle, mustHaveTerms, airDate), + scrapeProwlarr(finalQuery, targetTitle, mustHaveTerms, airDate), ]); } diff --git a/src/utils/proxyManager.ts b/src/utils/proxyManager.ts index 2509c34..562d6e8 100644 --- a/src/utils/proxyManager.ts +++ b/src/utils/proxyManager.ts @@ -23,10 +23,9 @@ class ProxyManager { } else { this.myId = Math.random().toString(36).substring(2); ProxyManager.workingProxies.push(this.myId); - return new SocksProxyAgent( - `socks5h://${this.myId}:damama@${process.env.PROXY || ''}`, - { timeout: parseInt(process.env.REQUEST_TIMEOUT!) } - ); + return new SocksProxyAgent(`socks5h://${this.myId}:damama@${process.env.PROXY || ''}`, { + timeout: parseInt(process.env.REQUEST_TIMEOUT!), + }); } } From da89d8911cf8d012b3d5b4e8bebba69029b518e3 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Thu, 21 Sep 2023 23:34:33 +0200 Subject: [PATCH 107/272] prowlarr fixes --- src/services/prowlarr.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/services/prowlarr.ts b/src/services/prowlarr.ts index a4c2d85..f0c3bc1 100644 --- a/src/services/prowlarr.ts +++ b/src/services/prowlarr.ts @@ -68,11 +68,6 @@ async function processItem( airDate: string ): Promise { const title = item.title; - - if (item.size < 1024 * 1024) { - process.stdout.write('-'); - return undefined; - } const fileSize = item.size / 1024 / 1024; if (!isFoundDateRecent(item.publishDate, airDate)) { @@ -131,7 +126,7 @@ async function processItem( (item.magnetUrl && (await computeHashFromTorrent(item.magnetUrl))) || (item.downloadUrl && (await computeHashFromTorrent(item.downloadUrl))); if (!hash) { - process.stdout.write('โŒ ${item.indexer} '); + process.stdout.write(`โŒ ${item.indexer} `); return undefined; } @@ -177,6 +172,9 @@ const processPage = async ( try { const response = await axios.get(searchUrl, { timeout: 100000 }); responseData = response.data; + responseData = responseData + .filter((item: any) => item.size >= 1024 * 1024 * 100) + .filter((item: any) => item.leechers > 0 || item.seeders > 0); retries = 0; break; } catch (error: any) { From 67a9c9074b07d7969b1e3ffc7a9e9e4f287b26ed Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Fri, 22 Sep 2023 00:11:17 +0200 Subject: [PATCH 108/272] reorder --- src/services/prowlarr.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/services/prowlarr.ts b/src/services/prowlarr.ts index f0c3bc1..cea68c9 100644 --- a/src/services/prowlarr.ts +++ b/src/services/prowlarr.ts @@ -172,9 +172,6 @@ const processPage = async ( try { const response = await axios.get(searchUrl, { timeout: 100000 }); responseData = response.data; - responseData = responseData - .filter((item: any) => item.size >= 1024 * 1024 * 100) - .filter((item: any) => item.leechers > 0 || item.seeders > 0); retries = 0; break; } catch (error: any) { @@ -188,6 +185,9 @@ const processPage = async ( } } + responseData = responseData + .filter((item: any) => item.size >= 1024 * 1024 * 100) + .filter((item: any) => item.leechers > 0 || item.seeders > 0); console.log(`Prowlarr๐Ÿ” processing ${responseData.length} results`); const promises: (() => Promise)[] = responseData.map( From 1e74e4b118ca29b697deec4b0b79c5122d47d43f Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Fri, 22 Sep 2023 01:16:57 +0200 Subject: [PATCH 109/272] adjust timeout --- src/services/jackett.ts | 2 +- src/services/movieScraper.ts | 2 ++ src/services/prowlarr.ts | 2 +- src/services/tvScraper.ts | 2 ++ 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/services/jackett.ts b/src/services/jackett.ts index 257a440..a1ff4d8 100644 --- a/src/services/jackett.ts +++ b/src/services/jackett.ts @@ -175,7 +175,7 @@ const processPage = async ( const searchUrl = createSearchUrl(finalQuery); while (true) { try { - const response = await axios.get(searchUrl, { timeout: 100000 }); + const response = await axios.get(searchUrl, { timeout: 600000 }); responseData = response.data.Results; retries = 0; break; diff --git a/src/services/movieScraper.ts b/src/services/movieScraper.ts index cf14ee1..3503cbd 100644 --- a/src/services/movieScraper.ts +++ b/src/services/movieScraper.ts @@ -1,6 +1,7 @@ import { cleanSearchQuery } from '@/utils/search'; import fs from 'fs'; import { flattenAndRemoveDuplicates, groupByParsedTitle, scrapeBtdigg } from './btdigg-v2'; +import { scrapeJackett } from './jackett'; import { ScrapeSearchResult } from './mediasearch'; import { PlanetScaleCache } from './planetscale'; import { scrapeProwlarr } from './prowlarr'; @@ -39,6 +40,7 @@ async function scrapeAll( return await Promise.all([ scrapeBtdigg(finalQuery, targetTitle, mustHaveTerms, airDate), scrapeProwlarr(finalQuery, targetTitle, mustHaveTerms, airDate), + scrapeJackett(finalQuery, targetTitle, mustHaveTerms, airDate), ]); } diff --git a/src/services/prowlarr.ts b/src/services/prowlarr.ts index cea68c9..1b7f86a 100644 --- a/src/services/prowlarr.ts +++ b/src/services/prowlarr.ts @@ -170,7 +170,7 @@ const processPage = async ( console.log(searchUrl); while (true) { try { - const response = await axios.get(searchUrl, { timeout: 100000 }); + const response = await axios.get(searchUrl, { timeout: 600000 }); responseData = response.data; retries = 0; break; diff --git a/src/services/tvScraper.ts b/src/services/tvScraper.ts index 28c8528..3e2df45 100644 --- a/src/services/tvScraper.ts +++ b/src/services/tvScraper.ts @@ -1,5 +1,6 @@ import { cleanSearchQuery } from '@/utils/search'; import { flattenAndRemoveDuplicates, groupByParsedTitle, scrapeBtdigg } from './btdigg-v2'; +import { scrapeJackett } from './jackett'; import { ScrapeSearchResult } from './mediasearch'; import { PlanetScaleCache } from './planetscale'; import { scrapeProwlarr } from './prowlarr'; @@ -54,6 +55,7 @@ async function scrapeAll( return await Promise.all([ scrapeBtdigg(finalQuery, targetTitle, mustHaveTerms, airDate), scrapeProwlarr(finalQuery, targetTitle, mustHaveTerms, airDate), + scrapeJackett(finalQuery, targetTitle, mustHaveTerms, airDate), ]); } From dc865070b47bfa62181f4031a2bbccc98db6127b Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Fri, 22 Sep 2023 01:32:18 +0200 Subject: [PATCH 110/272] reenable jackett --- src/services/jackett.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/services/jackett.ts b/src/services/jackett.ts index a1ff4d8..ea90694 100644 --- a/src/services/jackett.ts +++ b/src/services/jackett.ts @@ -190,6 +190,11 @@ const processPage = async ( } } + responseData = responseData + .filter((item: any) => item.Size >= 1024 * 1024 * 100) + .filter((item: any) => item.Seeders > 0 || item.Peers > 0); + console.log(`Jackett processing ${responseData.length} results`); + const promises: (() => Promise)[] = responseData.map( (item: any) => { return () => processItem(item, targetTitle, mustHaveTerms, airDate); From 0b05e5e45a9e571a5ba76f30b33e86468dc69a29 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Fri, 22 Sep 2023 02:35:32 +0200 Subject: [PATCH 111/272] dune fix --- src/services/prowlarr.ts | 1 - src/utils/selectable.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/services/prowlarr.ts b/src/services/prowlarr.ts index 1b7f86a..d55a43c 100644 --- a/src/services/prowlarr.ts +++ b/src/services/prowlarr.ts @@ -167,7 +167,6 @@ const processPage = async ( let retries = 0; // current number of retries let responseData = []; const searchUrl = createSearchUrl(finalQuery); - console.log(searchUrl); while (true) { try { const response = await axios.get(searchUrl, { timeout: 600000 }); diff --git a/src/utils/selectable.ts b/src/utils/selectable.ts index a5bfa93..abaed6e 100644 --- a/src/utils/selectable.ts +++ b/src/utils/selectable.ts @@ -3,7 +3,7 @@ import { TorrentInfoResponse } from '@/services/realDebrid'; const FILE_SIZE_PCT_THRESHOLD = 0.15; export function isVideoOrSubs(file: { path: string }) { - const filePath = file.path.toLowerCase(); + const filePath = `${file.path}`.toLowerCase(); if (filePath.startsWith('/rarbg')) return false; if (filePath.match(/\bsample\b/)) return false; if (filePath.includes('.xxx.')) return false; From 82f726821c0bd114a56cbea726bdba2b84019520 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Fri, 22 Sep 2023 02:36:42 +0200 Subject: [PATCH 112/272] 3.4.7 (#71) * Add proxy manager * improve performance * enable btdigg * compute proper hash * no excess log * more efficient jackett * prowlarr * prowlarr fixes * reorder * adjust timeout * reenable jackett * dune fix * bump version --- .env | 4 +- package-lock.json | 2487 ++++++++++++------------------- package.json | 23 +- src/services/availability.ts | 7 - src/services/btdigg-v2.ts | 26 +- src/services/firestore.ts | 65 - src/services/jackett.ts | 221 +++ src/services/movieScraper.ts | 74 +- src/services/prowlarr.ts | 215 +++ src/services/realDebrid.ts | 10 +- src/services/tvScraper.ts | 51 +- src/utils/bestDownloadOption.ts | 22 - src/utils/proxyManager.ts | 55 + src/utils/selectable.ts | 2 +- 14 files changed, 1547 insertions(+), 1715 deletions(-) delete mode 100644 src/services/availability.ts delete mode 100644 src/services/firestore.ts create mode 100644 src/services/jackett.ts create mode 100644 src/services/prowlarr.ts delete mode 100644 src/utils/bestDownloadOption.ts create mode 100644 src/utils/proxyManager.ts diff --git a/.env b/.env index 7485756..fe63d77 100644 --- a/.env +++ b/.env @@ -6,4 +6,6 @@ SCRAPE_API_PASSWORD=123456 TMDB_KEY=abc123 MDBLIST_KEY=abc123 -DATABASE_URL=mysql://username:password@aws.connect.psdb.cloud/database?sslaccept=strict +DATABASE_URL="mysql://username:password@aws.connect.psdb.cloud/database?sslaccept=strict" +JACKETT="http://localhost:9117" +PROWLARR="http://localhost:9696" diff --git a/package-lock.json b/package-lock.json index 5f1259e..ca9c812 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,26 +1,19 @@ { "name": "debrid-media-manager", - "version": "3.4.6", + "version": "3.4.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "3.4.6", + "version": "3.4.7", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", - "@google-cloud/firestore": "^6.7.0", "@octokit/rest": "^19.0.7", "@prisma/client": "^5.2.0", - "@types/file-saver": "^2.0.5", - "@types/ioredis": "^5.0.0", - "@types/node": "18.15.10", - "@types/react": "18.0.29", - "@types/react-dom": "18.0.11", - "@types/uuid": "^9.0.1", "axios": "^1.3.5", - "eslint": "8.36.0", - "eslint-config-next": "13.2.4", + "base32-decode": "^1.0.0", + "bencode": "^4.0.0", "express": "^4.18.2", "file-saver": "^2.0.5", "ioredis": "^5.3.2", @@ -37,10 +30,18 @@ }, "devDependencies": { "@types/axios": "^0.14.0", - "@types/node": "^16.11.10", + "@types/bencode": "^2.0.2", + "@types/file-saver": "^2.0.5", + "@types/ioredis": "^5.0.0", + "@types/node": "^20.6.3", "@types/qs": "^6.9.7", + "@types/react": "^18.2.22", + "@types/react-dom": "^18.2.7", "@types/user-agents": "^1.0.2", + "@types/uuid": "^9.0.4", "autoprefixer": "^10.4.14", + "eslint": "^8.49.0", + "eslint-config-next": "^13.5.2", "postcss": "^8.4.21", "prettier": "^2.8.7", "prettier-plugin-organize-imports": "^3.2.2", @@ -51,23 +52,22 @@ "typescript": "^5.2.2" } }, - "node_modules/@babel/parser": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.11.tgz", - "integrity": "sha512-R5zb8eJIBPJriQtbH/htEQy4k7E2dHWlD2Y2VT07JCzwYZHBxV5ZYtM0UhXSNMT74LyxuM+b1jdL7pSesXbC/g==", - "bin": { - "parser": "bin/babel-parser.js" - }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, "node_modules/@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", + "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", + "dev": true, "dependencies": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" @@ -106,6 +106,7 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -117,21 +118,23 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz", - "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", + "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", + "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", - "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.1", + "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -147,60 +150,19 @@ } }, "node_modules/@eslint/js": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz", - "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", + "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", + "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@google-cloud/firestore": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-6.7.0.tgz", - "integrity": "sha512-bkH2jb5KkQSUa+NAvpip9HQ+rpYhi77IaqHovWuN07adVmvNXX08gPpvPWEzoXYa/wDjEVI7LiAtCWkJJEYTNg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "functional-red-black-tree": "^1.0.1", - "google-gax": "^3.5.7", - "protobufjs": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@grpc/grpc-js": { - "version": "1.8.21", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.21.tgz", - "integrity": "sha512-KeyQeZpxeEBSqFVTi3q2K7PiPXmgBfECc4updA1ejCLjYmoAlvvM3ZMp5ztTDUCUQmoY3CpDxvchjO1+rFkoHg==", - "dependencies": { - "@grpc/proto-loader": "^0.7.0", - "@types/node": ">=12.12.47" - }, - "engines": { - "node": "^8.13.0 || >=10.10.0" - } - }, - "node_modules/@grpc/proto-loader": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.9.tgz", - "integrity": "sha512-YJsOehVXzgurc+lLAxYnlSMc1p/Gu6VAvnfx0ATi2nzvr0YZcjhmZDeY8SeAKv1M7zE3aEJH0Xo9mK1iZ8GYoQ==", - "dependencies": { - "lodash.camelcase": "^4.3.0", - "long": "^5.0.0", - "protobufjs": "^7.2.4", - "yargs": "^17.7.2" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -214,6 +176,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, "engines": { "node": ">=12.22" }, @@ -225,7 +188,8 @@ "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true }, "node_modules/@ioredis/commands": { "version": "1.2.0", @@ -286,26 +250,16 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, - "node_modules/@jsdoc/salty": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz", - "integrity": "sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw==", - "dependencies": { - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=v12.0.0" - } - }, "node_modules/@next/env": { "version": "13.4.19", "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.19.tgz", "integrity": "sha512-FsAT5x0jF2kkhNkKkukhsyYOrRqtSxrEhfliniIq0bwWbuXLgyt3Gv0Ml+b91XwjwArmuP7NxCiGd++GGKdNMQ==" }, "node_modules/@next/eslint-plugin-next": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.2.4.tgz", - "integrity": "sha512-ck1lI+7r1mMJpqLNa3LJ5pxCfOB1lfJncKmRJeJxcJqcngaFwylreLP7da6Rrjr6u2gVRTfmnkSkjc80IiQCwQ==", + "version": "13.5.2", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.2.tgz", + "integrity": "sha512-Ew8DOUerJYGRo8pI84SVwn9wxxx8sH92AanCXSkkLJM2W0RJEWy+BqWSCfrlA/3ZIczEl4l4o4lOeTGBPYfBJg==", + "dev": true, "dependencies": { "glob": "7.1.7" } @@ -449,6 +403,7 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -461,6 +416,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, "engines": { "node": ">= 8" } @@ -469,6 +425,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -624,25 +581,6 @@ "@octokit/openapi-types": "^17.0.0" } }, - "node_modules/@pkgr/utils": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", - "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", - "dependencies": { - "cross-spawn": "^7.0.3", - "is-glob": "^4.0.3", - "open": "^8.4.0", - "picocolors": "^1.0.0", - "tiny-glob": "^0.2.9", - "tslib": "^2.4.0" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, "node_modules/@prisma/client": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.2.0.tgz", @@ -675,64 +613,11 @@ "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.2.0-25.2804dc98259d2ea960602aca6b8e7fdc03c1758f.tgz", "integrity": "sha512-jsnKT5JIDIE01lAeCj2ghY9IwxkedhKNvxQeoyLs6dr4ZXynetD0vTy7u6wMJt8vVPv8I5DPy/I4CFaoXAgbtg==" }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, "node_modules/@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.4.0.tgz", + "integrity": "sha512-cEjvTPU32OM9lUFegJagO0mRnIn+rbqrG89vV8/xLnLFX0DoR0r1oy5IlTga71Q7uT3Qus7qm7wgeiMT/+Irlg==", + "dev": true }, "node_modules/@swc/helpers": { "version": "0.5.1", @@ -776,25 +661,27 @@ "axios": "*" } }, - "node_modules/@types/file-saver": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.5.tgz", - "integrity": "sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ==" - }, - "node_modules/@types/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", + "node_modules/@types/bencode": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/bencode/-/bencode-2.0.2.tgz", + "integrity": "sha512-VuSChzKjaBz+TbiX4dEbVkSMhUDN1mfqzhNM6m3tGMalaTo3X8rWn2rQyFv6iC/M4u+4OCpXrl6qdGGNoSw3gQ==", + "dev": true, "dependencies": { - "@types/minimatch": "^5.1.2", "@types/node": "*" } }, + "node_modules/@types/file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ==", + "dev": true + }, "node_modules/@types/ioredis": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@types/ioredis/-/ioredis-5.0.0.tgz", "integrity": "sha512-zJbJ3FVE17CNl5KXzdeSPtdltc4tMT3TzC6fxQS0sQngkbFZ6h+0uTafsRqu+eSLIugf6Yb0Ea0SUuRr42Nk9g==", "deprecated": "This is a stub types definition. ioredis provides its own type definitions, so you do not need this installed.", + "dev": true, "dependencies": { "ioredis": "*" } @@ -802,41 +689,14 @@ "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" - }, - "node_modules/@types/linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" - }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - }, - "node_modules/@types/markdown-it": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", - "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", - "dependencies": { - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, - "node_modules/@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true }, "node_modules/@types/node": { - "version": "16.18.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.24.tgz", - "integrity": "sha512-zvSN2Esek1aeLdKDYuntKAYjti9Z2oT4I8bfkLLhIxHlv3dwZ5vvATxOc31820iYm4hQRCwjUgDpwSMFjfTUnw==" + "version": "20.6.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.3.tgz", + "integrity": "sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==", + "dev": true }, "node_modules/@types/prettier": { "version": "2.7.2", @@ -845,9 +705,10 @@ "dev": true }, "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "version": "15.7.6", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.6.tgz", + "integrity": "sha512-RK/kBbYOQQHLYj9Z95eh7S6t7gq4Ojt/NT8HTk8bWVhA5DaF+5SMnxHKkP4gPNN3wAZkKP+VjAf0ebtYzf+fxg==", + "dev": true }, "node_modules/@types/qs": { "version": "6.9.7", @@ -856,9 +717,10 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.0.29", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.29.tgz", - "integrity": "sha512-wXHktgUABxplw1+UnljseDq4+uztQyp2tlWZRIxHlpchsCFqiYkvaDS8JR7eKOQm8wziTH/el5qL7D6gYNkYcw==", + "version": "18.2.22", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.22.tgz", + "integrity": "sha512-60fLTOLqzarLED2O3UQImc/lsNRgG0jE/a1mPW9KjMemY0LMITWEsbS4VvZ4p6rorEHd5YKxxmMKSDK505GHpA==", + "dev": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -866,26 +728,19 @@ } }, "node_modules/@types/react-dom": { - "version": "18.0.11", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", - "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", + "version": "18.2.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz", + "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==", + "dev": true, "dependencies": { "@types/react": "*" } }, - "node_modules/@types/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==", - "dependencies": { - "@types/glob": "*", - "@types/node": "*" - } - }, "node_modules/@types/scheduler": { "version": "0.16.3", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", + "dev": true }, "node_modules/@types/user-agents": { "version": "1.0.2", @@ -894,29 +749,32 @@ "dev": true }, "node_modules/@types/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==" + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.4.tgz", + "integrity": "sha512-zAuJWQflfx6dYJM62vna+Sn5aeSWhh3OB+wfUEACNcqUSc0AGc5JKl+ycL1vrH7frGTXhJchYjE1Hak8L819dA==", + "dev": true }, "node_modules/@typescript-eslint/parser": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.0.tgz", - "integrity": "sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==", + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.2.tgz", + "integrity": "sha512-KA3E4ox0ws+SPyxQf9iSI25R6b4Ne78ORhNHeVKrPQnoYsb9UhieoiRoJgrzgEeKGOXhcY1i8YtOeCHHTDa6Fw==", + "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.59.0", - "@typescript-eslint/types": "5.59.0", - "@typescript-eslint/typescript-estree": "5.59.0", + "@typescript-eslint/scope-manager": "6.7.2", + "@typescript-eslint/types": "6.7.2", + "@typescript-eslint/typescript-estree": "6.7.2", + "@typescript-eslint/visitor-keys": "6.7.2", "debug": "^4.3.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -925,15 +783,16 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.0.tgz", - "integrity": "sha512-tsoldKaMh7izN6BvkK6zRMINj4Z2d6gGhO2UsI8zGZY3XhLq1DndP3Ycjhi1JwdwPRwtLMW4EFPgpuKhbCGOvQ==", + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.2.tgz", + "integrity": "sha512-bgi6plgyZjEqapr7u2mhxGR6E8WCzKNUFWNh6fkpVe9+yzRZeYtDTbsIBzKbcxI+r1qVWt6VIoMSNZ4r2A+6Yw==", + "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.0", - "@typescript-eslint/visitor-keys": "5.59.0" + "@typescript-eslint/types": "6.7.2", + "@typescript-eslint/visitor-keys": "6.7.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -941,11 +800,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.0.tgz", - "integrity": "sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA==", + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.2.tgz", + "integrity": "sha512-flJYwMYgnUNDAN9/GAI3l8+wTmvTYdv64fcH8aoJK76Y+1FCZ08RtI5zDerM/FYT5DMkAc+19E4aLmd5KqdFyg==", + "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -953,20 +813,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.0.tgz", - "integrity": "sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg==", + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.2.tgz", + "integrity": "sha512-kiJKVMLkoSciGyFU0TOY0fRxnp9qq1AzVOHNeN1+B9erKFCJ4Z8WdjAkKQPP+b1pWStGFqezMLltxO+308dJTQ==", + "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.0", - "@typescript-eslint/visitor-keys": "5.59.0", + "@typescript-eslint/types": "6.7.2", + "@typescript-eslint/visitor-keys": "6.7.2", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -979,32 +840,22 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.0.tgz", - "integrity": "sha512-qZ3iXxQhanchCeaExlKPV3gDQFxMUmU35xfd5eCXB6+kUw1TUAbIy2n7QIrwz9s98DQLzNWyHp61fY0da4ZcbA==", + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.2.tgz", + "integrity": "sha512-uVw9VIMFBUTz8rIeaUT3fFe8xIUx8r4ywAdlQv1ifH+6acn/XF8Y6rwJ7XNmkNMDrTW+7+vxFFPIF40nJCVsMQ==", + "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "6.7.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -1018,9 +869,10 @@ } }, "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -1032,6 +884,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -1060,6 +913,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -1075,6 +929,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -1083,6 +938,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -1121,20 +977,23 @@ "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, "dependencies": { - "deep-equal": "^2.0.5" + "dequal": "^2.0.3" } }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "is-array-buffer": "^3.0.1" @@ -1149,14 +1008,15 @@ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "is-string": "^1.0.7" }, "engines": { @@ -1170,18 +1030,39 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, "engines": { "node": ">=8" } }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -1192,13 +1073,14 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -1209,29 +1091,53 @@ } }, "node_modules/array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", + "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "get-intrinsic": "^1.2.1" } }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true + }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + } }, "node_modules/asynckit": { "version": "0.4.0", @@ -1275,6 +1181,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -1283,9 +1190,10 @@ } }, "node_modules/axe-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", - "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.1.tgz", + "integrity": "sha512-9l850jDDPnKq48nbad8SiEelCv4OrUWrKab/cPj0GScVg6cb6NbCCt/Ulk26QEq5jP9NnGr04Bit1BHyV6r5CQ==", + "dev": true, "engines": { "node": ">=4" } @@ -1301,48 +1209,47 @@ } }, "node_modules/axobject-query": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", - "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, "dependencies": { - "deep-equal": "^2.0.5" + "dequal": "^2.0.3" } }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "node_modules/base32-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base32-decode/-/base32-decode-1.0.0.tgz", + "integrity": "sha512-KNWUX/R7wKenwE/G/qFMzGScOgVntOmbE27vvc6GrniDGYb6a5+qWcuoXl8WIOQL7q0TpK7nZDm1Y04Yi3Yn5g==" + }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "engines": { + "node": ">= 0.6.0" + } }, "node_modules/before-after-hook": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" }, - "node_modules/bignumber.js": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", - "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", + "node_modules/bencode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/bencode/-/bencode-4.0.0.tgz", + "integrity": "sha512-AERXw18df0pF3ziGOCyUjqKZBVNH8HV3lBxnx5w0qtgMIk4a1wb9BkcCQbkp9Zstfrn/dzRwl7MmUHHocX3sRQ==", + "dependencies": { + "uint8-util": "^2.2.2" + }, "engines": { - "node": "*" + "node": ">=12.20.0" } }, "node_modules/binary-extensions": { @@ -1354,11 +1261,6 @@ "node": ">=8" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, "node_modules/body-parser": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", @@ -1413,6 +1315,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1422,6 +1325,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -1457,11 +1361,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -1497,6 +1396,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, "engines": { "node": ">=6" } @@ -1529,21 +1429,11 @@ } ] }, - "node_modules/catharsis": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", - "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", - "dependencies": { - "lodash": "^4.17.15" - }, - "engines": { - "node": ">= 10" - } - }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1599,19 +1489,6 @@ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/cluster-key-slot": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", @@ -1624,6 +1501,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -1634,7 +1512,8 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/combined-stream": { "version": "1.0.8", @@ -1659,7 +1538,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/content-disposition": { "version": "0.5.4", @@ -1703,6 +1583,7 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1732,7 +1613,8 @@ "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true }, "node_modules/debug": { "version": "4.3.4", @@ -1750,51 +1632,33 @@ } } }, - "node_modules/deep-equal": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", - "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", - "dependencies": { - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "node_modules/define-data-property": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", + "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -1834,6 +1698,15 @@ "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -1870,6 +1743,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, "dependencies": { "path-type": "^4.0.0" }, @@ -1895,6 +1769,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -1915,25 +1790,6 @@ "dot-json": "bin/dot-json.js" } }, - "node_modules/duplexify": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", - "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", - "dependencies": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -1948,7 +1804,8 @@ "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, "node_modules/encodeurl": { "version": "1.0.2", @@ -1958,18 +1815,11 @@ "node": ">= 0.8" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/enhanced-resolve": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz", - "integrity": "sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -1978,26 +1828,20 @@ "node": ">=10.13.0" } }, - "node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", + "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", + "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", @@ -2012,19 +1856,23 @@ "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -2033,29 +1881,33 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "node_modules/es-iterator-helpers": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", + "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "dev": true, "dependencies": { + "asynciterator.prototype": "^1.0.0", "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.0.1" } }, "node_modules/es-set-tostringtag": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, "dependencies": { "get-intrinsic": "^1.1.3", "has": "^1.0.3", @@ -2069,6 +1921,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, "dependencies": { "has": "^1.0.3" } @@ -2077,6 +1930,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -2093,6 +1947,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, "engines": { "node": ">=6" } @@ -2106,6 +1961,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "engines": { "node": ">=10" }, @@ -2113,103 +1969,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/eslint": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz", - "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", + "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", + "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.1", - "@eslint/js": "8.36.0", - "@humanwhocodes/config-array": "^0.11.8", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.49.0", + "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.5.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -2217,22 +1998,19 @@ "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "bin": { @@ -2246,19 +2024,20 @@ } }, "node_modules/eslint-config-next": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.2.4.tgz", - "integrity": "sha512-lunIBhsoeqw6/Lfkd6zPt25w1bn0znLA/JCL+au1HoEpSb4/PpsOYsYtgV/q+YPsoKIOzFyU5xnb04iZnXjUvg==", + "version": "13.5.2", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.2.tgz", + "integrity": "sha512-kCF7k7fHBtFtxfP6J6AP6Mo0vW3CrFeoIuoZ7NHGIvLFc/RUaIspJ6inO/R33zE1o9t/lbJgTnsqnRB++sxCUQ==", + "dev": true, "dependencies": { - "@next/eslint-plugin-next": "13.2.4", - "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.42.0", + "@next/eslint-plugin-next": "13.5.2", + "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", - "eslint-plugin-react-hooks": "^4.5.0" + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" }, "peerDependencies": { "eslint": "^7.23.0 || ^8.0.0", @@ -2271,36 +2050,55 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, "dependencies": { "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "dependencies": { "ms": "^2.1.1" } }, + "node_modules/eslint-import-resolver-node/node_modules/resolve": { + "version": "1.22.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", + "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.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/eslint-import-resolver-typescript": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz", - "integrity": "sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz", + "integrity": "sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==", + "dev": true, "dependencies": { "debug": "^4.3.4", "enhanced-resolve": "^5.12.0", "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", "get-tsconfig": "^4.5.0", - "globby": "^13.1.3", "is-core-module": "^2.11.0", - "is-glob": "^4.0.3", - "synckit": "^0.8.5" + "is-glob": "^4.0.3" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -2313,39 +2111,11 @@ "eslint-plugin-import": "*" } }, - "node_modules/eslint-import-resolver-typescript/node_modules/globby": { - "version": "13.1.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.4.tgz", - "integrity": "sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-import-resolver-typescript/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint-module-utils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, "dependencies": { "debug": "^3.2.7" }, @@ -2362,30 +2132,34 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", + "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", + "dev": true, "dependencies": { "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", "array.prototype.flat": "^1.3.1", "array.prototype.flatmap": "^1.3.1", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", + "eslint-module-utils": "^2.8.0", "has": "^1.0.3", - "is-core-module": "^2.11.0", + "is-core-module": "^2.13.0", "is-glob": "^4.0.3", "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" }, "engines": { "node": ">=4" @@ -2398,6 +2172,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "dependencies": { "ms": "^2.1.1" } @@ -2406,6 +2181,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -2414,9 +2190,10 @@ } }, "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -2425,6 +2202,7 @@ "version": "6.7.1", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "dev": true, "dependencies": { "@babel/runtime": "^7.20.7", "aria-query": "^5.1.3", @@ -2451,22 +2229,25 @@ } }, "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "dev": true, "dependencies": { "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", "array.prototype.tosorted": "^1.1.1", "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", @@ -2476,7 +2257,7 @@ "object.values": "^1.1.6", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", + "semver": "^6.3.1", "string.prototype.matchall": "^4.0.8" }, "engines": { @@ -2490,6 +2271,7 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, "engines": { "node": ">=10" }, @@ -2501,6 +2283,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -2512,6 +2295,7 @@ "version": "2.0.0-next.4", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -2525,17 +2309,19 @@ } }, "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -2548,9 +2334,10 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", - "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -2559,13 +2346,14 @@ } }, "node_modules/espree": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", - "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.0" + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2574,22 +2362,11 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/esquery": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -2601,6 +2378,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, "dependencies": { "estraverse": "^5.2.0" }, @@ -2612,6 +2390,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, "engines": { "node": ">=4.0" } @@ -2620,6 +2399,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -2632,14 +2412,6 @@ "node": ">= 0.6" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, "node_modules/express": { "version": "4.18.2", "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", @@ -2708,20 +2480,17 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -2737,6 +2506,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -2747,22 +2517,20 @@ "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "node_modules/fast-text-encoding": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", - "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true }, "node_modules/fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -2771,6 +2539,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, "dependencies": { "flat-cache": "^3.0.4" }, @@ -2787,6 +2556,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -2828,6 +2598,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -2840,21 +2611,24 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.7", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=12.0.0" } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true }, "node_modules/follow-redirects": { "version": "1.15.2", @@ -2879,6 +2653,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, "dependencies": { "is-callable": "^1.1.3" } @@ -2928,7 +2703,8 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.2", @@ -2950,14 +2726,15 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -2966,60 +2743,23 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" - }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gaxios": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", - "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", - "dependencies": { - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/gcp-metadata": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", - "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", - "dependencies": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" }, "funding": { @@ -3030,6 +2770,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -3042,9 +2783,13 @@ } }, "node_modules/get-tsconfig": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.5.0.tgz", - "integrity": "sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", + "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, "funding": { "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } @@ -3053,6 +2798,7 @@ "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3072,6 +2818,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -3085,9 +2832,10 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.22.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", + "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", + "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -3102,6 +2850,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, "dependencies": { "define-properties": "^1.1.3" }, @@ -3112,15 +2861,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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==" - }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -3136,11 +2881,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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==" - }, "node_modules/goober": { "version": "2.1.13", "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.13.tgz", @@ -3149,95 +2889,11 @@ "csstype": "^3.0.10" } }, - "node_modules/google-auth-library": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz", - "integrity": "sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==", - "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^5.0.0", - "gcp-metadata": "^5.3.0", - "gtoken": "^6.1.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/google-gax": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.6.1.tgz", - "integrity": "sha512-g/lcUjGcB6DSw2HxgEmCDOrI/CByOwqRvsuUvNalHUK2iPPPlmAIpbMbl62u0YufGMr8zgE3JL7th6dCb1Ry+w==", - "dependencies": { - "@grpc/grpc-js": "~1.8.0", - "@grpc/proto-loader": "^0.7.0", - "@types/long": "^4.0.0", - "@types/rimraf": "^3.0.2", - "abort-controller": "^3.0.0", - "duplexify": "^4.0.0", - "fast-text-encoding": "^1.0.3", - "google-auth-library": "^8.0.2", - "is-stream-ended": "^0.1.4", - "node-fetch": "^2.6.1", - "object-hash": "^3.0.0", - "proto3-json-serializer": "^1.0.0", - "protobufjs": "7.2.4", - "protobufjs-cli": "1.1.1", - "retry-request": "^5.0.0" - }, - "bin": { - "compileProtos": "build/tools/compileProtos.js", - "minifyProtoJson": "build/tools/minify.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/google-gax/node_modules/protobufjs": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", - "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/google-p12-pem": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", - "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", - "dependencies": { - "node-forge": "^1.3.1" - }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -3250,23 +2906,11 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" - }, - "node_modules/gtoken": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", - "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", - "dependencies": { - "gaxios": "^5.0.1", - "google-p12-pem": "^4.0.0", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=12.0.0" - } + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true }, "node_modules/has": { "version": "1.0.3", @@ -3283,6 +2927,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3291,6 +2936,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -3299,6 +2945,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, "dependencies": { "get-intrinsic": "^1.1.1" }, @@ -3332,6 +2979,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -3357,18 +3005,6 @@ "node": ">= 0.8" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -3384,6 +3020,7 @@ "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, "engines": { "node": ">= 4" } @@ -3392,6 +3029,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -3407,6 +3045,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, "engines": { "node": ">=0.8.19" } @@ -3415,6 +3054,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -3429,6 +3069,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, "dependencies": { "get-intrinsic": "^1.2.0", "has": "^1.0.3", @@ -3474,25 +3115,11 @@ "node": ">= 0.10" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-array-buffer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", @@ -3502,10 +3129,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -3529,6 +3172,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -3544,6 +3188,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -3552,9 +3197,10 @@ } }, "node_modules/is-core-module": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", - "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -3566,6 +3212,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -3576,40 +3223,47 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -3621,6 +3275,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3629,6 +3284,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -3640,6 +3296,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "engines": { "node": ">=0.12.0" } @@ -3648,6 +3305,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -3662,6 +3320,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -3678,6 +3337,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -3693,6 +3353,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3701,6 +3362,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -3708,26 +3370,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-stream-ended": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", - "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" - }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -3742,6 +3389,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -3753,15 +3401,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -3774,6 +3419,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3782,6 +3428,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -3793,6 +3440,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -3801,26 +3449,30 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } }, "node_modules/jiti": { "version": "1.18.2", @@ -3831,15 +3483,6 @@ "jiti": "bin/jiti.js" } }, - "node_modules/js-sdsl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", - "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3849,6 +3492,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -3856,72 +3500,29 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/js2xmlparser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", - "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", - "dependencies": { - "xmlcreate": "^2.0.4" - } - }, - "node_modules/jsdoc": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", - "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", - "dependencies": { - "@babel/parser": "^7.20.15", - "@jsdoc/salty": "^0.2.1", - "@types/markdown-it": "^12.2.3", - "bluebird": "^3.7.2", - "catharsis": "^0.9.0", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.2", - "klaw": "^3.0.0", - "markdown-it": "^12.3.2", - "markdown-it-anchor": "^8.4.1", - "marked": "^4.0.10", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "underscore": "~1.13.2" - }, - "bin": { - "jsdoc": "jsdoc.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/jsdoc/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dependencies": { - "bignumber.js": "^9.0.0" - } + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true }, "node_modules/json5": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, "dependencies": { "minimist": "^1.2.0" }, @@ -3930,53 +3531,40 @@ } }, "node_modules/jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" }, "engines": { "node": ">=4.0" } }, - "node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "node_modules/keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "dev": true, "dependencies": { - "graceful-fs": "^4.1.9" + "json-buffer": "3.0.1" } }, "node_modules/language-subtag-registry": { "version": "0.3.22", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true }, "node_modules/language-tags": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, "dependencies": { "language-subtag-registry": "~0.3.2" } @@ -3985,6 +3573,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -4008,18 +3597,11 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "node_modules/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "dependencies": { - "uc.micro": "^1.0.1" - } - }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -4030,16 +3612,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - }, "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -4058,12 +3630,8 @@ "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "node_modules/loose-envify": { "version": "1.4.0", @@ -4080,6 +3648,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -4101,46 +3670,6 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, - "node_modules/markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", - "dependencies": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/markdown-it-anchor": { - "version": "8.6.7", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", - "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", - "peerDependencies": { - "@types/markdown-it": "*", - "markdown-it": "*" - } - }, - "node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -4158,6 +3687,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, "engines": { "node": ">= 8" } @@ -4174,6 +3704,7 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -4216,6 +3747,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -4227,21 +3759,11 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -4278,7 +3800,8 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, "node_modules/negotiator": { "version": "0.6.3", @@ -4376,14 +3899,6 @@ } } }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, "node_modules/node-releases": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", @@ -4412,6 +3927,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4420,6 +3936,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, "engines": { "node": ">= 6" } @@ -4432,25 +3949,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, "engines": { "node": ">= 0.4" } @@ -4459,6 +3962,7 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -4473,26 +3977,28 @@ } }, "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -4501,26 +4007,40 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "dev": true, "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -4548,33 +4068,18 @@ "wrappy": "1" } }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -4584,6 +4089,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -4598,6 +4104,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -4612,6 +4119,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, "dependencies": { "callsites": "^3.0.0" }, @@ -4631,6 +4139,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "engines": { "node": ">=8" } @@ -4639,6 +4148,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4647,6 +4157,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "engines": { "node": ">=8" } @@ -4654,7 +4165,8 @@ "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==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-to-regexp": { "version": "0.1.7", @@ -4665,6 +4177,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, "engines": { "node": ">=8" } @@ -4678,6 +4191,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "engines": { "node": ">=8.6" }, @@ -4838,6 +4352,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, "engines": { "node": ">= 0.8.0" } @@ -4912,110 +4427,13 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, - "node_modules/proto3-json-serializer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.1.tgz", - "integrity": "sha512-AwAuY4g9nxx0u52DnSMkqqgyLHaW/XaPLtaAo3y/ZCfeaQB/g4YDH4kb8Wc/mWzWvu0YjOznVnfn373MVZZrgw==", - "dependencies": { - "protobufjs": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/protobufjs": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", - "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/protobufjs-cli": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.1.1.tgz", - "integrity": "sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA==", - "dependencies": { - "chalk": "^4.0.0", - "escodegen": "^1.13.0", - "espree": "^9.0.0", - "estraverse": "^5.1.0", - "glob": "^8.0.0", - "jsdoc": "^4.0.0", - "minimist": "^1.2.0", - "semver": "^7.1.2", - "tmp": "^0.2.1", - "uglify-js": "^3.7.7" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "protobufjs": "^7.0.0" - } - }, - "node_modules/protobufjs-cli/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/protobufjs-cli/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/protobufjs-cli/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -5037,6 +4455,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, "engines": { "node": ">=6" } @@ -5059,6 +4478,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, "funding": [ { "type": "github", @@ -5157,7 +4577,8 @@ "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true }, "node_modules/read-cache": { "version": "1.0.0", @@ -5168,19 +4589,6 @@ "pify": "^2.3.0" } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -5212,19 +4620,41 @@ "node": ">=4" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", + "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true }, "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "set-function-name": "^2.0.0" }, "engines": { "node": ">= 0.4" @@ -5233,26 +4663,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requizzle": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", - "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", - "dependencies": { - "lodash": "^4.17.21" - } - }, "node_modules/resolve": { "version": "1.22.2", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, "dependencies": { "is-core-module": "^2.11.0", "path-parse": "^1.0.7", @@ -5269,26 +4684,25 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, "engines": { "node": ">=4" } }, - "node_modules/retry-request": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-5.0.2.tgz", - "integrity": "sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ==", - "dependencies": { - "debug": "^4.1.1", - "extend": "^3.0.2" - }, - "engines": { - "node": ">=12" + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -5298,6 +4712,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -5312,6 +4727,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, "funding": [ { "type": "github", @@ -5330,6 +4746,24 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -5353,6 +4787,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", @@ -5376,9 +4811,10 @@ } }, "node_modules/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -5444,6 +4880,20 @@ "node": ">= 0.8.0" } }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -5453,6 +4903,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -5464,6 +4915,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "engines": { "node": ">=8" } @@ -5485,6 +4937,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, "engines": { "node": ">=8" } @@ -5524,15 +4977,6 @@ "node": ">= 10" } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -5554,22 +4998,6 @@ "node": ">= 0.8" } }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dependencies": { - "internal-slot": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -5578,44 +5006,20 @@ "node": ">=10.0.0" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", "side-channel": "^1.0.4" }, "funding": { @@ -5623,13 +5027,14 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -5639,26 +5044,28 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5668,6 +5075,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -5679,6 +5087,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, "engines": { "node": ">=4" } @@ -5687,6 +5096,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "engines": { "node": ">=8" }, @@ -5762,6 +5172,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -5773,6 +5184,7 @@ "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" }, @@ -5780,21 +5192,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/synckit": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", - "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", - "dependencies": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, "node_modules/tailwindcss": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.1.tgz", @@ -5841,6 +5238,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, "engines": { "node": ">=6" } @@ -5848,7 +5246,8 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, "node_modules/thenify": { "version": "3.3.1", @@ -5871,30 +5270,11 @@ "node": ">=0.8" } }, - "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==", - "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } - }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -5915,6 +5295,18 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, + "node_modules/ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", @@ -5974,6 +5366,7 @@ "version": "3.14.2", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -5986,29 +5379,11 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -6020,6 +5395,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, "engines": { "node": ">=10" }, @@ -6039,10 +5415,62 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typed-array-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -6056,6 +5484,7 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6064,26 +5493,19 @@ "node": ">=14.17" } }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" + "node_modules/uint8-util": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/uint8-util/-/uint8-util-2.2.4.tgz", + "integrity": "sha512-uEI5lLozmKQPYEevfEhP9LY3Je5ZmrQhaWXrzTVqrLNQl36xsRh8NiAxYwB9J+2BAt99TRbmCkROQB2ZKhx4UA==", + "dependencies": { + "base64-arraybuffer": "^1.0.2" } }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -6154,6 +5576,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "dependencies": { "punycode": "^2.1.0" } @@ -6170,7 +5593,8 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "node_modules/utils-merge": { "version": "1.0.1", @@ -6232,6 +5656,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -6246,6 +5671,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -6257,10 +5683,37 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-collection": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, "dependencies": { "is-map": "^2.0.1", "is-set": "^2.0.1", @@ -6272,16 +5725,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -6290,52 +5743,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "node_modules/xmlcreate": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", - "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/yaml": { "version": "1.10.2", @@ -6346,31 +5763,6 @@ "node": ">= 6" } }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", @@ -6384,6 +5776,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index e8a4a53..a2b49be 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "3.4.6", + "version": "3.4.7", "private": false, "scripts": { "dev": "next dev", @@ -12,18 +12,11 @@ }, "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", - "@google-cloud/firestore": "^6.7.0", "@octokit/rest": "^19.0.7", "@prisma/client": "^5.2.0", - "@types/file-saver": "^2.0.5", - "@types/ioredis": "^5.0.0", - "@types/node": "18.15.10", - "@types/react": "18.0.29", - "@types/react-dom": "18.0.11", - "@types/uuid": "^9.0.1", "axios": "^1.3.5", - "eslint": "8.36.0", - "eslint-config-next": "13.2.4", + "base32-decode": "^1.0.0", + "bencode": "^4.0.0", "express": "^4.18.2", "file-saver": "^2.0.5", "ioredis": "^5.3.2", @@ -40,10 +33,18 @@ }, "devDependencies": { "@types/axios": "^0.14.0", - "@types/node": "^16.11.10", + "@types/bencode": "^2.0.2", + "@types/file-saver": "^2.0.5", + "@types/ioredis": "^5.0.0", + "@types/node": "^20.6.3", "@types/qs": "^6.9.7", + "@types/react": "^18.2.22", + "@types/react-dom": "^18.2.7", "@types/user-agents": "^1.0.2", + "@types/uuid": "^9.0.4", "autoprefixer": "^10.4.14", + "eslint": "^8.49.0", + "eslint-config-next": "^13.5.2", "postcss": "^8.4.21", "prettier": "^2.8.7", "prettier-plugin-organize-imports": "^3.2.2", diff --git a/src/services/availability.ts b/src/services/availability.ts deleted file mode 100644 index 82f7eac..0000000 --- a/src/services/availability.ts +++ /dev/null @@ -1,7 +0,0 @@ -export type Availability = - | 'all:available' - | 'rd:available' - | 'ad:available' - | 'unavailable' - | 'no_videos'; -export type HashAvailability = Record; diff --git a/src/services/btdigg-v2.ts b/src/services/btdigg-v2.ts index 97cb0e7..1ec2ce3 100644 --- a/src/services/btdigg-v2.ts +++ b/src/services/btdigg-v2.ts @@ -1,4 +1,5 @@ import { getMediaType } from '@/utils/mediaType'; +import ProxyManager from '@/utils/proxyManager'; import axios from 'axios'; import { SocksProxyAgent } from 'socks-proxy-agent'; import UserAgent from 'user-agents'; @@ -129,16 +130,10 @@ const processPage = async ( let responseData = ''; let numResults = 0; const searchUrl = createSearchUrl(finalQuery, pageNum); + let proxy = new ProxyManager(); while (true) { try { - const client = createAxiosInstance( - new SocksProxyAgent( - `socks5h://${Math.random().toString(36).substring(2)}:${Math.random() - .toString(36) - .substring(2)}@${process.env.PROXY || ''}`, - { timeout: parseInt(process.env.REQUEST_TIMEOUT!) } - ) - ); + const client = createAxiosInstance(proxy.getWorkingProxy()); const response = await client.get(searchUrl); responseData = response.data; const numResultsStr = responseData.match(/(\d+) results found/) || []; @@ -153,6 +148,7 @@ const processPage = async ( error.message.includes('status code 429') || error.message.includes('"socket" was not created') ) { + proxy.rerollProxy(); console.log('429 error, waiting for a bit longer before retrying...'); retries++; } else if (error.message.includes('timeout of')) { @@ -297,7 +293,7 @@ async function processInBatches( return searchResultsArr; } -export async function scrapeResults( +export async function scrapeBtdigg( finalQuery: string, targetTitle: string, mustHaveTerms: (string | RegExp)[], @@ -332,9 +328,9 @@ export async function scrapeResults( ); pageNum++; } - searchResultsArr.push(...(await processInBatches(promises, 2))); + searchResultsArr.push(...(await processInBatches(promises, 5))); } catch (error) { - console.error('fetchSearchResults page processing error', error); + console.error('scrapeBtdigg page processing error', error); await new Promise((resolve) => setTimeout(resolve, 5000)); } // mkv @@ -364,9 +360,9 @@ export async function scrapeResults( ); pageNum++; } - searchResultsArr.push(...(await processInBatches(promises, 2))); + searchResultsArr.push(...(await processInBatches(promises, 5))); } catch (error) { - console.error('fetchSearchResults mkv page processing error', error); + console.error('scrapeBtdigg mkv page processing error', error); await new Promise((resolve) => setTimeout(resolve, 5000)); } // mp4 @@ -396,9 +392,9 @@ export async function scrapeResults( ); pageNum++; } - searchResultsArr.push(...(await processInBatches(promises, 2))); + searchResultsArr.push(...(await processInBatches(promises, 5))); } catch (error) { - console.error('fetchSearchResults mp4 page processing error', error); + console.error('scrapeBtdigg mp4 page processing error', error); await new Promise((resolve) => setTimeout(resolve, 5000)); } return searchResultsArr; diff --git a/src/services/firestore.ts b/src/services/firestore.ts deleted file mode 100644 index 0540f43..0000000 --- a/src/services/firestore.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Firestore, Settings } from '@google-cloud/firestore'; - -const firebaseSettings: Settings = { - projectId: process.env.FIREBASE_PROJECT_ID, - credentials: { - client_email: process.env.FIREBASE_CLIENT_EMAIL, - private_key: process.env.FIREBASE_PRIVATE_KEY, - }, - ssl: true, - maxIdleChannels: 2, - ignoreUndefinedProperties: true, - preferRest: false, -}; - -export class FirestoreCache { - private db: Firestore; - - constructor() { - this.db = new Firestore(firebaseSettings); - } - - public async cacheJsonValue(key: string[], value: T) { - const sortedKey = key.sort(); - const firestoreKey = sortedKey.join(':'); - - await this.db.runTransaction(async (t) => { - const counterDoc = this.db.doc('counters/cache'); - const counterSnap = await t.get(counterDoc); - const newCount = (counterSnap.data()?.count || 0) + 1; - - t.set(this.db.collection('cache').doc(firestoreKey), { value }); - t.set(counterDoc, { count: newCount }); - }); - } - - public async getCachedJsonValue(key: string[]): Promise { - const sortedKey = key.sort(); - const firestoreKey = sortedKey.join(':'); - const doc = await this.db.collection('cache').doc(firestoreKey).get(); - if (!doc.exists) { - return undefined; - } else { - return doc.data()?.value as T; - } - } - - public async deleteCachedJsonValue(key: string[]): Promise { - const sortedKey = key.sort(); - const firestoreKey = sortedKey.join(':'); - - await this.db.runTransaction(async (t) => { - const counterDoc = this.db.doc('counters/cache'); - const counterSnap = await t.get(counterDoc); - const newCount = (counterSnap.data()?.count || 0) - 1; - - t.delete(this.db.collection('cache').doc(firestoreKey)); - t.set(counterDoc, { count: newCount }); - }); - } - - public async getDbSize(): Promise { - const counterDoc = await this.db.doc('counters/cache').get(); - return counterDoc.data()?.count || 0; - } -} diff --git a/src/services/jackett.ts b/src/services/jackett.ts new file mode 100644 index 0000000..ea90694 --- /dev/null +++ b/src/services/jackett.ts @@ -0,0 +1,221 @@ +import axios from 'axios'; +import bencode from 'bencode'; +import { createHash } from 'crypto'; +import { ScrapeSearchResult } from './mediasearch'; + +const JACKETT = process.env.JACKETT ?? 'http://localhost:9117'; + +function isFoundDateRecent(foundString: string, date: string): boolean { + const foundDate = new Date(foundString); + const airDate = new Date(date); + // Return true if the found date is more recent or equal + return foundDate >= airDate; +} + +const createSearchUrl = (finalQuery: string) => + `${JACKETT}/api/v2.0/indexers/all/results?apikey=2gzag8296wygpbvezrguhc8y2rnezvos&Query=${encodeURIComponent( + finalQuery + )}`; + +function extractHashFromMagnetLink(magnetLink: string) { + const regex = /urn:btih:([A-Fa-f0-9]+)/; + const match = magnetLink.match(regex); + if (match) { + return match[1].toLowerCase(); + } else { + process.stdout.write('x'); + return undefined; + } +} + +async function computeHashFromTorrent(url: string): Promise { + try { + const response = await axios.get(url, { + maxRedirects: 0, // Set maxRedirects to 0 to disable automatic redirects + validateStatus: (status) => status >= 200 && status < 400, + responseType: 'arraybuffer', + timeout: 8888, + }); + + if (response.status === 302) { + const redirectURL = response.headers.location; + if (redirectURL.startsWith('magnet:')) { + // If the redirect URL is a magnet link, return it directly + return extractHashFromMagnetLink(redirectURL); + } + } + + const info = bencode.decode(response.data).info; + const encodedInfo = bencode.encode(info); + const infoHash = createHash('sha1').update(encodedInfo).digest(); + const magnetHash = Array.prototype.map + .call(new Uint8Array(infoHash), (byte) => { + return ('0' + byte.toString(16)).slice(-2); + }) + .join(''); + + return magnetHash.toLowerCase(); + } catch (error: any) { + console.error('getMagnetURI error:', error.message); + process.stdout.write('x'); + return undefined; + } +} + +async function processItem( + item: any, + targetTitle: string, + mustHaveTerms: (string | RegExp)[], + airDate: string +): Promise { + const title = item.Title; + + if (item.Size < 1024 * 1024) { + process.stdout.write('-'); + return undefined; + } + const fileSize = item.Size / 1024 / 1024; + + if (!isFoundDateRecent(item.PublishDate, airDate)) { + process.stdout.write('-'); + return undefined; + } + + // Check if every term in the query (tokenized by space) is contained in the title + const queryTerms = targetTitle + .replaceAll('"', ' ') + .split(' ') + .filter((e) => e !== ''); + let requiredTerms = queryTerms.length <= 3 ? queryTerms.length : queryTerms.length - 1; + const containedTerms = queryTerms.filter((term) => + new RegExp(`${term.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&')}`, 'i').test(title) + ).length; + if (containedTerms < requiredTerms) { + // console.debug(title, '-title match-', targetTitle); + // console.debug('bad title', containedTerms, requiredTerms); + // console.log( + // `โŒ ${item.Tracker} returned a bad result (title match)`, + // containedTerms, + // requiredTerms + // ); + process.stdout.write('x'); + return undefined; + } + const containedMustHaveTerms = mustHaveTerms.filter((term) => { + if (typeof term === 'string') { + return new RegExp(`${term}`, 'i').test(title); + } else if (term instanceof RegExp) { + return term.test(title); + } + return false; + }).length; + if (containedMustHaveTerms < mustHaveTerms.length) { + // console.debug(title, '-must have-', mustHaveTerms); + // console.debug('bad must have terms', containedMustHaveTerms, mustHaveTerms.length); + // console.log( + // `โŒ ${item.Tracker} returned a bad result (must have terms)`, + // containedMustHaveTerms, + // mustHaveTerms.length + // ); + process.stdout.write('x'); + return undefined; + } + if (!targetTitle.match(/xxx/i)) { + if (title.match(/xxx/i)) { + process.stdout.write('x'); + return undefined; + } + } + + const hash = + item.InfoHash?.toLowerCase() || + (item.MagnetUri && extractHashFromMagnetLink(item.MagnetUri)) || + (item.Link && (await computeHashFromTorrent(item.Link))); + if (!hash) { + process.stdout.write('โŒ'); + return undefined; + } + + process.stdout.write('.'); + + return { + title, + fileSize, + hash, + }; +} + +async function processInBatches( + promises: (() => Promise)[], + batchSize: number +): Promise { + let searchResultsArr: ScrapeSearchResult[] = []; + let i = 0; + while (i < promises.length) { + const promisesResults = await Promise.all( + promises.slice(i, i + batchSize).map(async (e) => await e()) + ); + promisesResults.forEach((e) => e && searchResultsArr.push(e)); + i += batchSize; + } + return searchResultsArr; +} + +const processPage = async ( + finalQuery: string, + targetTitle: string, + mustHaveTerms: (string | RegExp)[], + airDate: string +): Promise => { + const MAX_RETRIES = 5; // maximum number of retries + + let results: ScrapeSearchResult[] = []; + let retries = 0; // current number of retries + let responseData = []; + const searchUrl = createSearchUrl(finalQuery); + while (true) { + try { + const response = await axios.get(searchUrl, { timeout: 600000 }); + responseData = response.data.Results; + retries = 0; + break; + } catch (error: any) { + console.log('request error:', error.message); + retries++; + if (retries >= MAX_RETRIES) { + console.error(`Max retries reached (${MAX_RETRIES}), aborting search`); + return results; + } + await new Promise((resolve) => setTimeout(resolve, 10000 * retries)); + } + } + + responseData = responseData + .filter((item: any) => item.Size >= 1024 * 1024 * 100) + .filter((item: any) => item.Seeders > 0 || item.Peers > 0); + console.log(`Jackett processing ${responseData.length} results`); + + const promises: (() => Promise)[] = responseData.map( + (item: any) => { + return () => processItem(item, targetTitle, mustHaveTerms, airDate); + } + ); + results.push(...(await processInBatches(promises, 10))); + + return results; +}; + +export async function scrapeJackett( + finalQuery: string, + targetTitle: string, + mustHaveTerms: (string | RegExp)[], + airDate: string +): Promise { + console.log(`๐Ÿ” Searching Jackett: ${finalQuery}`); + try { + return await processPage(finalQuery, targetTitle, mustHaveTerms, airDate); + } catch (error) { + console.error('scrapeJackett page processing error', error); + } + return []; +} diff --git a/src/services/movieScraper.ts b/src/services/movieScraper.ts index 92fc3b6..3503cbd 100644 --- a/src/services/movieScraper.ts +++ b/src/services/movieScraper.ts @@ -1,8 +1,10 @@ import { cleanSearchQuery } from '@/utils/search'; import fs from 'fs'; -import { flattenAndRemoveDuplicates, groupByParsedTitle, scrapeResults } from './btdigg-v2'; +import { flattenAndRemoveDuplicates, groupByParsedTitle, scrapeBtdigg } from './btdigg-v2'; +import { scrapeJackett } from './jackett'; import { ScrapeSearchResult } from './mediasearch'; import { PlanetScaleCache } from './planetscale'; +import { scrapeProwlarr } from './prowlarr'; let wordSet: Set; try { @@ -29,53 +31,69 @@ const countUncommonWordsInTitle = (title: string) => { return processedTitle.filter((word: string) => !wordSet.has(word)).length; }; +async function scrapeAll( + finalQuery: string, + targetTitle: string, + mustHaveTerms: (string | RegExp)[], + airDate: string +): Promise { + return await Promise.all([ + scrapeBtdigg(finalQuery, targetTitle, mustHaveTerms, airDate), + scrapeProwlarr(finalQuery, targetTitle, mustHaveTerms, airDate), + scrapeJackett(finalQuery, targetTitle, mustHaveTerms, airDate), + ]); +} + const getMovieSearchResults = async (job: MovieScrapeJob) => { let sets: ScrapeSearchResult[][] = []; const hasUncommonWords = countUncommonWordsInTitle(job.title) >= 1; - sets.push(await scrapeResults(`"${job.title}" ${job.year ?? ''}`, job.title, [], job.airDate)); if (job.title.includes('&')) { sets.push( - await scrapeResults( + ...(await scrapeAll( `"${job.title.replaceAll('&', 'and')}" ${job.year ?? ''}`, job.title, [], job.airDate - ) + )) + ); + } else { + sets.push( + ...(await scrapeAll(`"${job.title}" ${job.year ?? ''}`, job.title, [], job.airDate)) ); } if (job.title.split(/\s/).length > 3 || hasUncommonWords) { - sets.push(await scrapeResults(`"${job.title}"`, job.title, [], job.airDate)); + sets.push(...(await scrapeAll(`"${job.title}"`, job.title, [], job.airDate))); } if (job.originalTitle) { sets.push( - await scrapeResults( + ...(await scrapeAll( `"${job.originalTitle}" ${job.year ?? ''}`, job.originalTitle, [], job.airDate - ) + )) ); if (hasUncommonWords) { sets.push( - await scrapeResults(`"${job.originalTitle}"`, job.originalTitle, [], job.airDate) + ...(await scrapeAll(`"${job.originalTitle}"`, job.originalTitle, [], job.airDate)) ); } } if (job.cleanedTitle) { sets.push( - await scrapeResults( + ...(await scrapeAll( `"${job.cleanedTitle}" ${job.year ?? ''}`, job.cleanedTitle, [], job.airDate - ) + )) ); if (hasUncommonWords) { sets.push( - await scrapeResults(`"${job.cleanedTitle}"`, job.cleanedTitle, [], job.airDate) + ...(await scrapeAll(`"${job.cleanedTitle}"`, job.cleanedTitle, [], job.airDate)) ); } } @@ -103,7 +121,11 @@ export async function scrapeMovies( .trim() .toLowerCase(); - if (tmdbData.original_title && tmdbData.original_title !== tmdbData.title) { + if ( + tmdbData.original_title && + tmdbData.original_title !== tmdbData.title && + mdbData.ratings?.length + ) { originalTitle = tmdbData.original_title.toLowerCase(); for (let rating of mdbData.ratings) { if (rating.source === 'tomatoes') { @@ -125,19 +147,21 @@ export async function scrapeMovies( } let anotherTitle; - for (let rating of mdbData.ratings) { - if (rating.source === 'metacritic') { - if (!rating.url) continue; - let metacriticTitle = rating.url.split('/').pop(); - metacriticTitle = metacriticTitle - .split('-') - .map((word: string) => word.replaceAll(/[\W]+/g, '')) - .join(' ') - .trim() - .toLowerCase(); - if (metacriticTitle !== processedTitle && metacriticTitle !== cleanedTitle) { - console.log('๐ŸŽฏ Found another title (2):', metacriticTitle); - anotherTitle = metacriticTitle; + if (mdbData.ratings?.length) { + for (let rating of mdbData.ratings) { + if (rating.source === 'metacritic') { + if (!rating.url) continue; + let metacriticTitle = rating.url.split('/').pop(); + metacriticTitle = metacriticTitle + .split('-') + .map((word: string) => word.replaceAll(/[\W]+/g, '')) + .join(' ') + .trim() + .toLowerCase(); + if (metacriticTitle !== processedTitle && metacriticTitle !== cleanedTitle) { + console.log('๐ŸŽฏ Found another title (2):', metacriticTitle); + anotherTitle = metacriticTitle; + } } } } diff --git a/src/services/prowlarr.ts b/src/services/prowlarr.ts new file mode 100644 index 0000000..d55a43c --- /dev/null +++ b/src/services/prowlarr.ts @@ -0,0 +1,215 @@ +import axios from 'axios'; +import bencode from 'bencode'; +import { createHash } from 'crypto'; +import { ScrapeSearchResult } from './mediasearch'; + +const PROWLARR = process.env.PROWLARR ?? 'http://localhost:9696'; + +function isFoundDateRecent(foundString: string, date: string): boolean { + const foundDate = new Date(foundString); + const airDate = new Date(date); + // Return true if the found date is more recent or equal + return foundDate >= airDate; +} + +const createSearchUrl = (finalQuery: string) => + `${PROWLARR}/api/v1/search?query=${encodeURIComponent( + finalQuery + )}&indexerIds=-2&categories[]=2000&categories[]=5000&type=search&apikey=2475bf3fd3964fdf9983cbfacac7d5fd`; + +function extractHashFromMagnetLink(magnetLink: string) { + const regex = /urn:btih:([A-Fa-f0-9]+)/; + const match = magnetLink.match(regex); + if (match) { + return match[1].toLowerCase(); + } else { + process.stdout.write('x'); + return undefined; + } +} + +async function computeHashFromTorrent(url: string): Promise { + try { + const response = await axios.get(url, { + maxRedirects: 0, // Set maxRedirects to 0 to disable automatic redirects + validateStatus: (status) => status >= 200 && status < 400, + responseType: 'arraybuffer', + timeout: 10000, + }); + + if (response.status === 301 || response.status === 302) { + const redirectURL = response.headers.location; + if (redirectURL.startsWith('magnet:')) { + // If the redirect URL is a magnet link, return it directly + return extractHashFromMagnetLink(redirectURL); + } + } + + const info = bencode.decode(response.data).info; + const encodedInfo = bencode.encode(info); + const infoHash = createHash('sha1').update(encodedInfo).digest(); + const magnetHash = Array.prototype.map + .call(new Uint8Array(infoHash), (byte) => { + return ('0' + byte.toString(16)).slice(-2); + }) + .join(''); + + return magnetHash.toLowerCase(); + } catch (error: any) { + process.stdout.write('x'); + return undefined; + } +} + +async function processItem( + item: any, + targetTitle: string, + mustHaveTerms: (string | RegExp)[], + airDate: string +): Promise { + const title = item.title; + const fileSize = item.size / 1024 / 1024; + + if (!isFoundDateRecent(item.publishDate, airDate)) { + process.stdout.write('-'); + return undefined; + } + + // Check if every term in the query (tokenized by space) is contained in the title + const queryTerms = targetTitle + .replaceAll('"', ' ') + .split(' ') + .filter((e) => e !== ''); + let requiredTerms = queryTerms.length <= 3 ? queryTerms.length : queryTerms.length - 1; + const containedTerms = queryTerms.filter((term) => + new RegExp(`${term.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&')}`, 'i').test(title) + ).length; + if (containedTerms < requiredTerms) { + // console.debug(title, '-title match-', targetTitle); + // console.debug('bad title', containedTerms, requiredTerms); + // console.log( + // `โŒ ${item.indexer} returned a bad result (title match)`, + // containedTerms, + // requiredTerms + // ); + process.stdout.write('x'); + return undefined; + } + const containedMustHaveTerms = mustHaveTerms.filter((term) => { + if (typeof term === 'string') { + return new RegExp(`${term}`, 'i').test(title); + } else if (term instanceof RegExp) { + return term.test(title); + } + return false; + }).length; + if (containedMustHaveTerms < mustHaveTerms.length) { + // console.debug(title, '-must have-', mustHaveTerms); + // console.debug('bad must have terms', containedMustHaveTerms, mustHaveTerms.length); + // console.log( + // `โŒ ${item.indexer} returned a bad result (must have terms)`, + // containedMustHaveTerms, + // mustHaveTerms.length + // ); + process.stdout.write('x'); + return undefined; + } + if (!targetTitle.match(/xxx/i)) { + if (title.match(/xxx/i)) { + process.stdout.write('x'); + return undefined; + } + } + + const hash = + item.infoHash?.toLowerCase() || + (item.magnetUrl && (await computeHashFromTorrent(item.magnetUrl))) || + (item.downloadUrl && (await computeHashFromTorrent(item.downloadUrl))); + if (!hash) { + process.stdout.write(`โŒ ${item.indexer} `); + return undefined; + } + + process.stdout.write('.'); + + return { + title, + fileSize, + hash, + }; +} + +async function processInBatches( + promises: (() => Promise)[], + batchSize: number +): Promise { + let searchResultsArr: ScrapeSearchResult[] = []; + let i = 0; + while (i < promises.length) { + const promisesResults = await Promise.all( + promises.slice(i, i + batchSize).map(async (e) => await e()) + ); + promisesResults.forEach((e) => e && searchResultsArr.push(e)); + i += batchSize; + } + return searchResultsArr; +} + +const processPage = async ( + finalQuery: string, + targetTitle: string, + mustHaveTerms: (string | RegExp)[], + airDate: string +): Promise => { + const MAX_RETRIES = 5; // maximum number of retries + + let results: ScrapeSearchResult[] = []; + let retries = 0; // current number of retries + let responseData = []; + const searchUrl = createSearchUrl(finalQuery); + while (true) { + try { + const response = await axios.get(searchUrl, { timeout: 600000 }); + responseData = response.data; + retries = 0; + break; + } catch (error: any) { + console.log('request error:', error.message); + retries++; + if (retries >= MAX_RETRIES) { + console.error(`Max retries reached (${MAX_RETRIES}), aborting search`); + return results; + } + await new Promise((resolve) => setTimeout(resolve, 10000 * retries)); + } + } + + responseData = responseData + .filter((item: any) => item.size >= 1024 * 1024 * 100) + .filter((item: any) => item.leechers > 0 || item.seeders > 0); + console.log(`Prowlarr๐Ÿ” processing ${responseData.length} results`); + + const promises: (() => Promise)[] = responseData.map( + (item: any) => { + return () => processItem(item, targetTitle, mustHaveTerms, airDate); + } + ); + results.push(...(await processInBatches(promises, 5))); + + return results; +}; + +export async function scrapeProwlarr( + finalQuery: string, + targetTitle: string, + mustHaveTerms: (string | RegExp)[], + airDate: string +): Promise { + console.log(`๐Ÿ” Searching Prowlarr: ${finalQuery}`); + try { + return await processPage(finalQuery, targetTitle, mustHaveTerms, airDate); + } catch (error) { + console.error('scrapeProwlarr page processing error', error); + } + return []; +} diff --git a/src/services/realDebrid.ts b/src/services/realDebrid.ts index 2268a30..c74e0ff 100644 --- a/src/services/realDebrid.ts +++ b/src/services/realDebrid.ts @@ -216,7 +216,10 @@ export const getTorrentInfo = async (accessToken: string, id: string) => { } }; -export const rdInstantCheck = async (accessToken: string, hashes: string[]) => { +export const rdInstantCheck = async ( + accessToken: string, + hashes: string[] +): Promise => { try { const headers = { Authorization: `Bearer ${accessToken}`, @@ -231,7 +234,10 @@ export const rdInstantCheck = async (accessToken: string, hashes: string[]) => { return response.data; } catch (error: any) { console.error('Error fetching torrent information:', error.message); - throw error; + console.log('Retrying availability check...'); + const firstElement = hashes.shift() as string; + hashes.push(firstElement); + return rdInstantCheck(accessToken, hashes); } }; diff --git a/src/services/tvScraper.ts b/src/services/tvScraper.ts index c88e99c..3e2df45 100644 --- a/src/services/tvScraper.ts +++ b/src/services/tvScraper.ts @@ -1,7 +1,9 @@ import { cleanSearchQuery } from '@/utils/search'; -import { flattenAndRemoveDuplicates, groupByParsedTitle, scrapeResults } from './btdigg-v2'; +import { flattenAndRemoveDuplicates, groupByParsedTitle, scrapeBtdigg } from './btdigg-v2'; +import { scrapeJackett } from './jackett'; import { ScrapeSearchResult } from './mediasearch'; import { PlanetScaleCache } from './planetscale'; +import { scrapeProwlarr } from './prowlarr'; type TvScrapeJob = { title: string; @@ -44,21 +46,34 @@ const getSeasonNameAndCode = (season: any) => { const getSeasonYear = (season: any) => season.air_date?.substring(0, 4); +async function scrapeAll( + finalQuery: string, + targetTitle: string, + mustHaveTerms: (string | RegExp)[], + airDate: string +): Promise { + return await Promise.all([ + scrapeBtdigg(finalQuery, targetTitle, mustHaveTerms, airDate), + scrapeProwlarr(finalQuery, targetTitle, mustHaveTerms, airDate), + scrapeJackett(finalQuery, targetTitle, mustHaveTerms, airDate), + ]); +} + const getSearchResults = async (job: TvScrapeJob) => { let sets: ScrapeSearchResult[][] = []; sets.push( - await scrapeResults( + ...(await scrapeAll( `"${job.title}" s${padWithZero(job.seasonNumber)}`, job.title, [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], job.airDate - ) + )) ); if (job.seasonName && job.seasonCode) { sets.push( - await scrapeResults( + ...(await scrapeAll( `"${job.title}" "${job.seasonName}" s${padWithZero(job.seasonCode)}`, job.title, [ @@ -66,38 +81,36 @@ const getSearchResults = async (job: TvScrapeJob) => { ...job.seasonName.split(/\s/), ], job.airDate - ) + )) ); } else if (job.seasonName && job.seasonName !== job.title) { sets.push( - await scrapeResults( + ...(await scrapeAll( `"${job.title}" "${job.seasonName}"`, job.title, [...job.seasonName.split(/\s/)], job.airDate - ) + )) ); } if (job.title.split(/\s/).length > 3 && job.seasonNumber === 1) { - sets.push(await scrapeResults(`"${job.title}"`, job.title, [], job.airDate)); + sets.push(...(await scrapeAll(`"${job.title}"`, job.title, [], job.airDate))); } if (!job.originalTitle) return sets; let sets2: ScrapeSearchResult[][] = []; - sets2.push( - await scrapeResults( - `"${job.originalTitle}" s${padWithZero(job.seasonNumber)}`, - job.originalTitle, - [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], - job.airDate - ) + sets2 = await scrapeAll( + `"${job.originalTitle}" s${padWithZero(job.seasonNumber)}`, + job.originalTitle, + [new RegExp(`[0123]?${job.seasonNumber}[ex\\W_]`, 'i')], + job.airDate ); if (job.seasonName && job.seasonCode) { sets2.push( - await scrapeResults( + ...(await scrapeAll( `"${job.originalTitle}" "${job.seasonName}" s${padWithZero(job.seasonCode)}`, job.originalTitle, [ @@ -105,16 +118,16 @@ const getSearchResults = async (job: TvScrapeJob) => { ...job.seasonName.split(/\s/), ], job.airDate - ) + )) ); } else if (job.seasonName && job.seasonName !== job.originalTitle) { sets2.push( - await scrapeResults( + ...(await scrapeAll( `"${job.originalTitle}" "${job.seasonName}"`, job.originalTitle, [...job.seasonName.split(/\s/)], job.airDate - ) + )) ); } diff --git a/src/utils/bestDownloadOption.ts b/src/utils/bestDownloadOption.ts deleted file mode 100644 index 1892cbd..0000000 --- a/src/utils/bestDownloadOption.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { HashAvailability } from '@/services/availability'; - -export const getBestDownloadOption = ( - searchResults: { hash: string; score: number }[], - masterAvailability: HashAvailability -): string | undefined => { - if (!searchResults.length) return; - const availableHashes = Object.keys(masterAvailability).filter((key) => - masterAvailability[key].endsWith(':available') - ); - if (!availableHashes.length) return; - let bestScore = 0; - const bestHash = availableHashes.reduce((acc: string, curr: string) => { - const currScore = searchResults.find((r) => r.hash === curr)?.score || 0; - if (currScore > bestScore) { - bestScore = currScore; - return curr; - } - return acc; - }, availableHashes[0]); - return bestHash; -}; diff --git a/src/utils/proxyManager.ts b/src/utils/proxyManager.ts new file mode 100644 index 0000000..562d6e8 --- /dev/null +++ b/src/utils/proxyManager.ts @@ -0,0 +1,55 @@ +import { SocksProxyAgent } from 'socks-proxy-agent'; + +class ProxyManager { + static workingProxies: string[] = []; + static nonWorkingProxies: string[] = []; + private myId: string; + + constructor() { + this.myId = ''; + this.rerollProxy(); + } + + getWorkingProxy(): SocksProxyAgent { + if (ProxyManager.workingProxies.length > 5) { + const randomProxy = + ProxyManager.workingProxies[ + Math.floor(Math.random() * ProxyManager.workingProxies.length) + ]; + return new SocksProxyAgent( + `socks5h://${randomProxy}:damama@${process.env.PROXY || ''}`, + { timeout: parseInt(process.env.REQUEST_TIMEOUT!) } + ); + } else { + this.myId = Math.random().toString(36).substring(2); + ProxyManager.workingProxies.push(this.myId); + return new SocksProxyAgent(`socks5h://${this.myId}:damama@${process.env.PROXY || ''}`, { + timeout: parseInt(process.env.REQUEST_TIMEOUT!), + }); + } + } + + rerollProxy() { + if (this.myId) this.removeProxy(this.myId); + if (ProxyManager.workingProxies.length > 5) { + this.myId = + ProxyManager.workingProxies[ + Math.floor(Math.random() * ProxyManager.workingProxies.length) + ]; + } else { + this.myId = Math.random().toString(36).substring(2); + ProxyManager.workingProxies.push(this.myId); + } + if (ProxyManager.nonWorkingProxies.includes(this.myId)) this.rerollProxy(); + } + + private removeProxy(proxyId: string) { + const index = ProxyManager.workingProxies.indexOf(proxyId); + if (index > -1) { + ProxyManager.workingProxies.splice(index, 1); + } + ProxyManager.nonWorkingProxies.push(proxyId); + } +} + +export default ProxyManager; diff --git a/src/utils/selectable.ts b/src/utils/selectable.ts index a5bfa93..abaed6e 100644 --- a/src/utils/selectable.ts +++ b/src/utils/selectable.ts @@ -3,7 +3,7 @@ import { TorrentInfoResponse } from '@/services/realDebrid'; const FILE_SIZE_PCT_THRESHOLD = 0.15; export function isVideoOrSubs(file: { path: string }) { - const filePath = file.path.toLowerCase(); + const filePath = `${file.path}`.toLowerCase(); if (filePath.startsWith('/rarbg')) return false; if (filePath.match(/\bsample\b/)) return false; if (filePath.includes('.xxx.')) return false; From 0d4aa061d54a078e84d07460aa8917eadc03bd10 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Fri, 22 Sep 2023 22:11:13 +0200 Subject: [PATCH 113/272] updater done --- src/pages/api/movieupdater.ts | 28 ++++++++++++++++++++++++++++ src/pages/api/tvupdater.ts | 28 ++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 src/pages/api/movieupdater.ts create mode 100644 src/pages/api/tvupdater.ts diff --git a/src/pages/api/movieupdater.ts b/src/pages/api/movieupdater.ts new file mode 100644 index 0000000..d058f53 --- /dev/null +++ b/src/pages/api/movieupdater.ts @@ -0,0 +1,28 @@ +import { PlanetScaleCache } from '@/services/planetscale'; +import { ScrapeResponse, generateScrapeJobs } from '@/services/scrapeJobs'; +import { NextApiRequest, NextApiResponse } from 'next'; + +const db = new PlanetScaleCache(); + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + const { scrapePassword } = req.query; + if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { + res.status(403).json({ + status: 'error', + errorMessage: 'You are not authorized to use this feature', + }); + return; + } + + while (true) { + let imdbId = await db.getOldestScrapedMedia('movie'); + if (!imdbId) { + console.log('[movieupdater] There must be something wrong with the database, waiting 60 seconds'); + await new Promise((resolve) => setTimeout(resolve, 60000)); + continue; + } + + await db.delete(imdbId); + await generateScrapeJobs(res, imdbId, true); + } +} diff --git a/src/pages/api/tvupdater.ts b/src/pages/api/tvupdater.ts new file mode 100644 index 0000000..3d12bb9 --- /dev/null +++ b/src/pages/api/tvupdater.ts @@ -0,0 +1,28 @@ +import { PlanetScaleCache } from '@/services/planetscale'; +import { ScrapeResponse, generateScrapeJobs } from '@/services/scrapeJobs'; +import { NextApiRequest, NextApiResponse } from 'next'; + +const db = new PlanetScaleCache(); + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + const { scrapePassword } = req.query; + if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { + res.status(403).json({ + status: 'error', + errorMessage: 'You are not authorized to use this feature', + }); + return; + } + + while (true) { + let imdbId = await db.getOldestScrapedMedia('tv'); + if (!imdbId) { + console.log('[tvupdater] There must be something wrong with the database, waiting 60 seconds'); + await new Promise((resolve) => setTimeout(resolve, 60000)); + continue; + } + + await db.delete(imdbId); + await generateScrapeJobs(res, imdbId, true); + } +} From 02f92665cb1a38961dfa764fb5d0f5c7216cb137 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Fri, 22 Sep 2023 22:13:00 +0200 Subject: [PATCH 114/272] processed done --- src/pages/api/processed.ts | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/pages/api/processed.ts diff --git a/src/pages/api/processed.ts b/src/pages/api/processed.ts new file mode 100644 index 0000000..2f98d76 --- /dev/null +++ b/src/pages/api/processed.ts @@ -0,0 +1,26 @@ +import { PlanetScaleCache } from '@/services/planetscale'; +import { ScrapeResponse, generateScrapeJobs } from '@/services/scrapeJobs'; +import { NextApiRequest, NextApiResponse } from 'next'; + +const db = new PlanetScaleCache(); + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + const { scrapePassword } = req.query; + if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { + res.status(403).json({ + status: 'error', + errorMessage: 'You are not authorized to use this feature', + }); + return; + } + + while (true) { + let imdbId = await db.processingMoreThanAnHour(); + if (!imdbId) { + console.log('[processed] No processing jobs found, waiting 60 seconds'); + await new Promise((resolve) => setTimeout(resolve, 60000)); + continue; + } + await generateScrapeJobs(res, imdbId, true); + } +} From ebeb3ad9185e06abe4d35e28c2aaae9fe744f183 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Fri, 22 Sep 2023 22:24:39 +0200 Subject: [PATCH 115/272] requested done --- src/pages/api/requested.ts | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/src/pages/api/requested.ts b/src/pages/api/requested.ts index e4930dd..7b606a2 100644 --- a/src/pages/api/requested.ts +++ b/src/pages/api/requested.ts @@ -5,7 +5,7 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword, processing, override } = req.query; + const { scrapePassword } = req.query; if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { res.status(403).json({ status: 'error', @@ -14,26 +14,22 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< return; } - let imdbId: string | null = ''; - if (processing === 'true') { - imdbId = await db.getOldestProcessing(); - if (!imdbId) { - res.status(200).json({ status: 'done' }); - return; - } - } else { - imdbId = await db.getOldestRequest(); - if (!imdbId) { - res.status(200).json({ status: 'done' }); - return; + let updatedAt = null; + while (true) { + let request = await db.getOldestRequest(updatedAt); + if (!request) { + console.log('[requested] No requested jobs found, waiting 60 seconds'); + await new Promise((resolve) => setTimeout(resolve, 60000)); + continue; } - const isProcessing = await db.keyExists(`processing:${imdbId}`); - if (isProcessing && override !== 'true') { - res.status(200).json({ status: 'processing' }); - return; + const isProcessing = await db.keyExists(`processing:${request.key}`); + if (isProcessing) { + console.log(`[requested] Already processing ${request.key}, skipping`); + updatedAt = request.updatedAt; + continue; } - } - await generateScrapeJobs(res, imdbId, true); + await generateScrapeJobs(res, request.key, true); + } } From 4eb47732193bf160422a9c85644ee96142683a9e Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Fri, 22 Sep 2023 22:25:18 +0200 Subject: [PATCH 116/272] other updates --- src/pages/api/updater.ts | 25 ------------------------- src/services/planetscale.ts | 29 ++++++++++++++++++++--------- 2 files changed, 20 insertions(+), 34 deletions(-) delete mode 100644 src/pages/api/updater.ts diff --git a/src/pages/api/updater.ts b/src/pages/api/updater.ts deleted file mode 100644 index 14da175..0000000 --- a/src/pages/api/updater.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { PlanetScaleCache } from '@/services/planetscale'; -import { ScrapeResponse, generateScrapeJobs } from '@/services/scrapeJobs'; -import { NextApiRequest, NextApiResponse } from 'next'; - -const db = new PlanetScaleCache(); - -export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword, mediaType } = req.query; - if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { - res.status(403).json({ - status: 'error', - errorMessage: 'You are not authorized to use this feature', - }); - return; - } - - let imdbId = await db.getOldestScrapedMedia(mediaType === 'tv' ? 'tv' : 'movie'); - if (!imdbId) { - res.status(200).json({ status: 'done' }); - return; - } - - await db.delete(imdbId); - await generateScrapeJobs(res, imdbId, true); -} diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index 619419a..0c07977 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -31,19 +31,34 @@ export class PlanetScaleCache { return cacheEntry !== null; } - public async getOldestRequest(): Promise { + public async getOldestRequest( + olderThan: Date | null = null + ): Promise<{ key: string; updatedAt: Date } | null> { + const whereCondition: any = { + key: { startsWith: 'requested:' }, + }; + + if (olderThan !== null) { + whereCondition.updatedAt = { gt: olderThan }; + } + const requestedItem = await this.prisma.scraped.findFirst({ - where: { key: { startsWith: 'requested:' } }, + where: whereCondition, orderBy: { updatedAt: 'asc' }, - select: { key: true }, + select: { key: true, updatedAt: true }, }); + if (requestedItem !== null) { - return requestedItem.key.split(':')[1]; + return { + key: requestedItem.key.split(':')[1], + updatedAt: requestedItem.updatedAt, + }; } + return null; } - public async getOldestProcessing(): Promise { + public async processingMoreThanAnHour(): Promise { const oneHourAgo = new Date(); oneHourAgo.setHours(oneHourAgo.getHours() - 1); @@ -64,13 +79,9 @@ export class PlanetScaleCache { } public async getOldestScrapedMedia(mediaType: 'tv' | 'movie'): Promise { - const oneDayAgo = new Date(); - oneDayAgo.setHours(oneDayAgo.getHours() - 24); - const scrapedItem = await this.prisma.scraped.findFirst({ where: { key: { startsWith: `${mediaType}:` }, - updatedAt: { lte: oneDayAgo }, }, orderBy: { updatedAt: 'asc' }, select: { key: true }, From ae9d11ca691c8fa3bdc9817478b82ae43e09be17 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Fri, 22 Sep 2023 22:26:46 +0200 Subject: [PATCH 117/272] scrapers done --- src/pages/api/searchlist.ts | 37 +++++++++++++++++++++++++++ src/pages/api/singlelist.ts | 35 ++++++++++++++++++++++++++ src/services/scrapeInput.ts | 50 +++++++++++++++++++++++++++++++++++++ 3 files changed, 122 insertions(+) create mode 100644 src/pages/api/searchlist.ts create mode 100644 src/pages/api/singlelist.ts create mode 100644 src/services/scrapeInput.ts diff --git a/src/pages/api/searchlist.ts b/src/pages/api/searchlist.ts new file mode 100644 index 0000000..4ccb19a --- /dev/null +++ b/src/pages/api/searchlist.ts @@ -0,0 +1,37 @@ +import { PlanetScaleCache } from '@/services/planetscale'; +import { ScrapeInput } from '@/services/scrapeInput'; +import { ScrapeResponse, generateScrapeJobs } from '@/services/scrapeJobs'; +import { NextApiRequest, NextApiResponse } from 'next'; + +const db = new PlanetScaleCache(); + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + const { scrapePassword, search, override } = req.query; + if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { + res.status(403).json({ + status: 'error', + errorMessage: 'You are not authorized to use this feature', + }); + return; + } + if (!search || typeof search !== 'string') { + res.status(400).json({ + status: 'error', + errorMessage: 'You must provide a search term', + }); + return; + } + + const scrapeInput = new ScrapeInput(); + + for await (let listId of scrapeInput.byLists(search)) { + for await (let imdbId of scrapeInput.byListId(listId)) { + const isProcessing = await db.keyExists(`processing:${imdbId}`); + if (isProcessing && override !== 'true') { + console.log(`[searchlist] Already processing ${imdbId}, skipping`); + continue; + } + await generateScrapeJobs(res, imdbId, true); + } + } +} diff --git a/src/pages/api/singlelist.ts b/src/pages/api/singlelist.ts new file mode 100644 index 0000000..4d01475 --- /dev/null +++ b/src/pages/api/singlelist.ts @@ -0,0 +1,35 @@ +import { PlanetScaleCache } from '@/services/planetscale'; +import { ScrapeInput } from '@/services/scrapeInput'; +import { ScrapeResponse, generateScrapeJobs } from '@/services/scrapeJobs'; +import { NextApiRequest, NextApiResponse } from 'next'; + +const db = new PlanetScaleCache(); + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + const { scrapePassword, listId, override } = req.query; + if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { + res.status(403).json({ + status: 'error', + errorMessage: 'You are not authorized to use this feature', + }); + return; + } + if (!listId || typeof listId !== 'string') { + res.status(400).json({ + status: 'error', + errorMessage: 'You must provide a listId', + }); + return; + } + + const scrapeInput = new ScrapeInput(); + + for await (let imdbId of scrapeInput.byListId(listId)) { + const isProcessing = await db.keyExists(`processing:${imdbId}`); + if (isProcessing && override !== 'true') { + console.log(`[singlelist] Already processing ${imdbId}, skipping`); + continue; + } + await generateScrapeJobs(res, imdbId, true); + } +} diff --git a/src/services/scrapeInput.ts b/src/services/scrapeInput.ts new file mode 100644 index 0000000..04c27ee --- /dev/null +++ b/src/services/scrapeInput.ts @@ -0,0 +1,50 @@ +import axios from 'axios'; + +const apiKey = process.env.MDBLIST_API_KEY || 'demo'; +const searchListsUrl = (term: string) => + `https://mdblist.com/api/lists/search?s=${term}&apikey=${apiKey}`; +const listItemsUrl = (listId: string) => + `https://mdblist.com/api/lists/${listId}/items?apikey=${apiKey}`; + +export class ScrapeInput { + constructor() {} + + async *byListId(listId: string): AsyncIterableIterator { + while (true) { + try { + const listItemsResponse = await axios.get(listItemsUrl(listId)); + const listItems = listItemsResponse.data; + for (const listItem of listItems) { + if (listItem.imdb_id) { + console.log( + `(${listId}:${listItem.rank}/${listItems.length}) ${listItem.title}...`, + listItem + ); + yield listItem.imdb_id; + } + } + break; + } catch (error) { + console.error('byListId error', error); + await new Promise((resolve) => setTimeout(resolve, 10000)); + } + } + } + + async *byLists(searchTerm: string): AsyncIterableIterator { + while (true) { + try { + const searchListResp = await axios.get(searchListsUrl(searchTerm)); + const lists = searchListResp.data; + for (let i = 0; i < lists.length; i++) { + const list = lists[i]; + console.log(`(${searchTerm}:${i}/${lists.length}) ${list.slug}`, list); + yield list.id; + } + } catch (error) { + console.error('byLists error', error); + await new Promise((resolve) => setTimeout(resolve, 10000)); + } + } + } +} From 92aaa164ac6f7189fc229c35b1773a8468276523 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Fri, 22 Sep 2023 22:37:11 +0200 Subject: [PATCH 118/272] format --- src/pages/api/movieupdater.ts | 4 +++- src/pages/api/tvupdater.ts | 4 +++- src/services/tvScraper.ts | 6 +++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/pages/api/movieupdater.ts b/src/pages/api/movieupdater.ts index d058f53..a2a47d3 100644 --- a/src/pages/api/movieupdater.ts +++ b/src/pages/api/movieupdater.ts @@ -17,7 +17,9 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< while (true) { let imdbId = await db.getOldestScrapedMedia('movie'); if (!imdbId) { - console.log('[movieupdater] There must be something wrong with the database, waiting 60 seconds'); + console.log( + '[movieupdater] There must be something wrong with the database, waiting 60 seconds' + ); await new Promise((resolve) => setTimeout(resolve, 60000)); continue; } diff --git a/src/pages/api/tvupdater.ts b/src/pages/api/tvupdater.ts index 3d12bb9..914872e 100644 --- a/src/pages/api/tvupdater.ts +++ b/src/pages/api/tvupdater.ts @@ -17,7 +17,9 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< while (true) { let imdbId = await db.getOldestScrapedMedia('tv'); if (!imdbId) { - console.log('[tvupdater] There must be something wrong with the database, waiting 60 seconds'); + console.log( + '[tvupdater] There must be something wrong with the database, waiting 60 seconds' + ); await new Promise((resolve) => setTimeout(resolve, 60000)); continue; } diff --git a/src/services/tvScraper.ts b/src/services/tvScraper.ts index 3e2df45..dfcb217 100644 --- a/src/services/tvScraper.ts +++ b/src/services/tvScraper.ts @@ -140,7 +140,11 @@ export async function scrapeTv( mdbData: any, db: PlanetScaleCache ): Promise { - console.log(`๐Ÿ Scraping tv show: ${tmdbData.name} (${imdbId})...`); + console.log( + `๐Ÿ Scraping ${getSeasons(mdbData).length} season(s) of tv show: ${ + tmdbData.name + } (${imdbId})...` + ); const scrapeJobs: TvScrapeJob[] = []; let cleanTitle = cleanSearchQuery(tmdbData.name); From 861edb5928d46393086ea1f95928ea0d2fe86bea Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Fri, 22 Sep 2023 23:16:33 +0200 Subject: [PATCH 119/272] scrape fixes --- src/services/planetscale.ts | 5 +++++ src/services/scrapeInput.ts | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index 0c07977..3420471 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -72,6 +72,11 @@ export class PlanetScaleCache { }); if (requestedItem !== null) { + await this.prisma.scraped.update({ + where: { key: requestedItem.key }, + data: { updatedAt: new Date() }, + }); + return requestedItem.key.split(':')[1]; } diff --git a/src/services/scrapeInput.ts b/src/services/scrapeInput.ts index 04c27ee..83c73f5 100644 --- a/src/services/scrapeInput.ts +++ b/src/services/scrapeInput.ts @@ -1,6 +1,6 @@ import axios from 'axios'; -const apiKey = process.env.MDBLIST_API_KEY || 'demo'; +const apiKey = process.env.MDBLIST_KEY || 'demo'; const searchListsUrl = (term: string) => `https://mdblist.com/api/lists/search?s=${term}&apikey=${apiKey}`; const listItemsUrl = (listId: string) => @@ -41,6 +41,7 @@ export class ScrapeInput { console.log(`(${searchTerm}:${i}/${lists.length}) ${list.slug}`, list); yield list.id; } + break; } catch (error) { console.error('byLists error', error); await new Promise((resolve) => setTimeout(resolve, 10000)); From 0b7283c74cb4a0867f43b28c67855cba55a40db9 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 23 Sep 2023 14:42:54 +0200 Subject: [PATCH 120/272] mdblist scrape improvements --- src/pages/api/scrape.ts | 4 ++-- src/pages/api/searchlist.ts | 8 ++++++-- src/pages/api/singlelist.ts | 8 ++++++-- src/services/planetscale.ts | 23 +++++++++++++++++++++++ 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/src/pages/api/scrape.ts b/src/pages/api/scrape.ts index bc1cda5..0691b9e 100644 --- a/src/pages/api/scrape.ts +++ b/src/pages/api/scrape.ts @@ -2,7 +2,7 @@ import { ScrapeResponse, generateScrapeJobs } from '@/services/scrapeJobs'; import { NextApiRequest, NextApiResponse } from 'next'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { imdbId, scrapePassword, override } = req.query; + const { imdbId, scrapePassword } = req.query; if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { res.status(403).json({ status: 'error', @@ -16,5 +16,5 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< return; } - await generateScrapeJobs(res, imdbId.toString().trim(), override === 'true'); + await generateScrapeJobs(res, imdbId.toString().trim(), true); } diff --git a/src/pages/api/searchlist.ts b/src/pages/api/searchlist.ts index 4ccb19a..43c2f3f 100644 --- a/src/pages/api/searchlist.ts +++ b/src/pages/api/searchlist.ts @@ -27,11 +27,15 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< for await (let listId of scrapeInput.byLists(search)) { for await (let imdbId of scrapeInput.byListId(listId)) { const isProcessing = await db.keyExists(`processing:${imdbId}`); - if (isProcessing && override !== 'true') { + if (isProcessing) { console.log(`[searchlist] Already processing ${imdbId}, skipping`); continue; } - await generateScrapeJobs(res, imdbId, true); + await generateScrapeJobs( + res, + imdbId, + override === 'true' || (await db.isOlderThan(imdbId, 60 * 24)) + ); } } } diff --git a/src/pages/api/singlelist.ts b/src/pages/api/singlelist.ts index 4d01475..9a89b96 100644 --- a/src/pages/api/singlelist.ts +++ b/src/pages/api/singlelist.ts @@ -26,10 +26,14 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< for await (let imdbId of scrapeInput.byListId(listId)) { const isProcessing = await db.keyExists(`processing:${imdbId}`); - if (isProcessing && override !== 'true') { + if (isProcessing) { console.log(`[singlelist] Already processing ${imdbId}, skipping`); continue; } - await generateScrapeJobs(res, imdbId, true); + await generateScrapeJobs( + res, + imdbId, + override === 'true' || (await db.isOlderThan(imdbId, 60 * 24)) + ); } } diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index 3420471..cff1e88 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -31,6 +31,29 @@ export class PlanetScaleCache { return cacheEntry !== null; } + public async isOlderThan(imdbId: string, minutesAgo: number): Promise { + const cacheEntry = await this.prisma.scraped.findFirst({ + where: { + OR: [ + { key: { startsWith: `movie:${imdbId}` } }, + { key: { startsWith: `tv:${imdbId}` } }, + ], + }, + select: { updatedAt: true }, + }); + + if (!cacheEntry || !cacheEntry.updatedAt) { + return true; // If it doesn't exist, assume it's old + } + + const currentTime = new Date(); + const updatedAt = new Date(cacheEntry.updatedAt); + const timeDifference = currentTime.getTime() - updatedAt.getTime(); + + const minutesInMillis = minutesAgo * 60 * 1000; + return timeDifference <= minutesInMillis; + } + public async getOldestRequest( olderThan: Date | null = null ): Promise<{ key: string; updatedAt: Date } | null> { From 651969883011fcd63b2b5fc2bb1f2b9fd97a19be Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 23 Sep 2023 14:47:04 +0200 Subject: [PATCH 121/272] olderthen input --- src/pages/api/searchlist.ts | 4 ++-- src/pages/api/singlelist.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pages/api/searchlist.ts b/src/pages/api/searchlist.ts index 43c2f3f..92200d4 100644 --- a/src/pages/api/searchlist.ts +++ b/src/pages/api/searchlist.ts @@ -6,7 +6,7 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword, search, override } = req.query; + const { scrapePassword, search, override, olderThan } = req.query; if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { res.status(403).json({ status: 'error', @@ -34,7 +34,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< await generateScrapeJobs( res, imdbId, - override === 'true' || (await db.isOlderThan(imdbId, 60 * 24)) + override === 'true' || (await db.isOlderThan(imdbId, parseInt(olderThan as string) || 60 * 24)) ); } } diff --git a/src/pages/api/singlelist.ts b/src/pages/api/singlelist.ts index 9a89b96..41fda17 100644 --- a/src/pages/api/singlelist.ts +++ b/src/pages/api/singlelist.ts @@ -6,7 +6,7 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword, listId, override } = req.query; + const { scrapePassword, listId, override, olderThan } = req.query; if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { res.status(403).json({ status: 'error', @@ -33,7 +33,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< await generateScrapeJobs( res, imdbId, - override === 'true' || (await db.isOlderThan(imdbId, 60 * 24)) + override === 'true' || (await db.isOlderThan(imdbId, parseInt(olderThan as string) || 60 * 24)) ); } } From 127f1ec95407b1ed1bb7d3f7041bc26ad50961f2 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 23 Sep 2023 14:54:39 +0200 Subject: [PATCH 122/272] correct logic --- src/services/planetscale.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index cff1e88..45efeca 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -48,10 +48,10 @@ export class PlanetScaleCache { const currentTime = new Date(); const updatedAt = new Date(cacheEntry.updatedAt); - const timeDifference = currentTime.getTime() - updatedAt.getTime(); + const ageInMillis = currentTime.getTime() - updatedAt.getTime(); - const minutesInMillis = minutesAgo * 60 * 1000; - return timeDifference <= minutesInMillis; + const minutesAgoMillis = minutesAgo * 60 * 1000; + return ageInMillis >= minutesAgoMillis; } public async getOldestRequest( From b7de5779d3b7f21efc4689df71ea2636abd6aadf Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 23 Sep 2023 15:23:26 +0200 Subject: [PATCH 123/272] fix logic --- src/pages/api/searchlist.ts | 13 +++++++------ src/pages/api/singlelist.ts | 13 +++++++------ src/services/planetscale.ts | 5 ++++- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/pages/api/searchlist.ts b/src/pages/api/searchlist.ts index 92200d4..abc7419 100644 --- a/src/pages/api/searchlist.ts +++ b/src/pages/api/searchlist.ts @@ -6,7 +6,7 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword, search, override, olderThan } = req.query; + const { scrapePassword, search, olderThanMins } = req.query; if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { res.status(403).json({ status: 'error', @@ -31,11 +31,12 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< console.log(`[searchlist] Already processing ${imdbId}, skipping`); continue; } - await generateScrapeJobs( - res, - imdbId, - override === 'true' || (await db.isOlderThan(imdbId, parseInt(olderThan as string) || 60 * 24)) - ); + if (!await db.isOlderThan(imdbId, parseInt(olderThanMins as string) || 60 * 24)) { + console.log(`[searchlist] ${imdbId} was scraped recently, skipping`); + await new Promise(resolve => setTimeout(resolve, 1000)); + continue; + } + await generateScrapeJobs(res, imdbId, true); } } } diff --git a/src/pages/api/singlelist.ts b/src/pages/api/singlelist.ts index 41fda17..74a6530 100644 --- a/src/pages/api/singlelist.ts +++ b/src/pages/api/singlelist.ts @@ -6,7 +6,7 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword, listId, override, olderThan } = req.query; + const { scrapePassword, listId, olderThanMins } = req.query; if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { res.status(403).json({ status: 'error', @@ -30,10 +30,11 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< console.log(`[singlelist] Already processing ${imdbId}, skipping`); continue; } - await generateScrapeJobs( - res, - imdbId, - override === 'true' || (await db.isOlderThan(imdbId, parseInt(olderThan as string) || 60 * 24)) - ); + if (!await db.isOlderThan(imdbId, parseInt(olderThanMins as string) || 60 * 24)) { + console.log(`[singlelist] ${imdbId} was scraped recently, skipping`); + await new Promise(resolve => setTimeout(resolve, 1000)); + continue; + } + await generateScrapeJobs(res, imdbId, true); } } diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index 45efeca..6cac4bd 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -49,8 +49,11 @@ export class PlanetScaleCache { const currentTime = new Date(); const updatedAt = new Date(cacheEntry.updatedAt); const ageInMillis = currentTime.getTime() - updatedAt.getTime(); - const minutesAgoMillis = minutesAgo * 60 * 1000; + console.log( + `[isOlderThan] ${imdbId} is ${ageInMillis}ms old, checking if ${minutesAgoMillis}ms ago`, + ageInMillis >= minutesAgoMillis + ); return ageInMillis >= minutesAgoMillis; } From 1ad2aaa88b7cdbf8b0c0f378e8ca2682f3a8862a Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 23 Sep 2023 15:27:02 +0200 Subject: [PATCH 124/272] add skip --- src/pages/api/searchlist.ts | 8 +++++--- src/pages/api/singlelist.ts | 6 +++--- src/services/planetscale.ts | 4 ---- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/pages/api/searchlist.ts b/src/pages/api/searchlist.ts index abc7419..5e53619 100644 --- a/src/pages/api/searchlist.ts +++ b/src/pages/api/searchlist.ts @@ -6,7 +6,7 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword, search, olderThanMins } = req.query; + const { scrapePassword, search, olderThanMins, skipMs } = req.query; if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { res.status(403).json({ status: 'error', @@ -31,9 +31,11 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< console.log(`[searchlist] Already processing ${imdbId}, skipping`); continue; } - if (!await db.isOlderThan(imdbId, parseInt(olderThanMins as string) || 60 * 24)) { + if (!(await db.isOlderThan(imdbId, parseInt(olderThanMins as string) || 60 * 24))) { console.log(`[searchlist] ${imdbId} was scraped recently, skipping`); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => + setTimeout(resolve, parseInt(skipMs as string) || 1000) + ); continue; } await generateScrapeJobs(res, imdbId, true); diff --git a/src/pages/api/singlelist.ts b/src/pages/api/singlelist.ts index 74a6530..8f16835 100644 --- a/src/pages/api/singlelist.ts +++ b/src/pages/api/singlelist.ts @@ -6,7 +6,7 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword, listId, olderThanMins } = req.query; + const { scrapePassword, listId, olderThanMins, skipMs } = req.query; if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { res.status(403).json({ status: 'error', @@ -30,9 +30,9 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< console.log(`[singlelist] Already processing ${imdbId}, skipping`); continue; } - if (!await db.isOlderThan(imdbId, parseInt(olderThanMins as string) || 60 * 24)) { + if (!(await db.isOlderThan(imdbId, parseInt(olderThanMins as string) || 60 * 24))) { console.log(`[singlelist] ${imdbId} was scraped recently, skipping`); - await new Promise(resolve => setTimeout(resolve, 1000)); + await new Promise((resolve) => setTimeout(resolve, parseInt(skipMs as string) || 1000)); continue; } await generateScrapeJobs(res, imdbId, true); diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index 6cac4bd..a2526d7 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -50,10 +50,6 @@ export class PlanetScaleCache { const updatedAt = new Date(cacheEntry.updatedAt); const ageInMillis = currentTime.getTime() - updatedAt.getTime(); const minutesAgoMillis = minutesAgo * 60 * 1000; - console.log( - `[isOlderThan] ${imdbId} is ${ageInMillis}ms old, checking if ${minutesAgoMillis}ms ago`, - ageInMillis >= minutesAgoMillis - ); return ageInMillis >= minutesAgoMillis; } From b1cb8f833689744ffc9f5903ba347bcb3f1b6bba Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 23 Sep 2023 22:06:26 +0200 Subject: [PATCH 125/272] update word list --- src/services/movieScraper.ts | 18 +- wordlist.txt | 169472 +++++++++++++++++++++++++++++++- 2 files changed, 169440 insertions(+), 50 deletions(-) diff --git a/src/services/movieScraper.ts b/src/services/movieScraper.ts index 3503cbd..4f84818 100644 --- a/src/services/movieScraper.ts +++ b/src/services/movieScraper.ts @@ -107,7 +107,11 @@ export async function scrapeMovies( mdbData: any, db: PlanetScaleCache ): Promise { - console.log(`๐Ÿน Scraping movie: ${tmdbData.title} (${imdbId})...`); + console.log( + `๐Ÿน Scraping movie: ${tmdbData.title} (${imdbId}) (uncommon: ${countUncommonWordsInTitle( + tmdbData.title + )})...` + ); const cleanTitle = cleanSearchQuery(tmdbData.title); const year = mdbData.year ?? mdbData.released?.substring(0, 4) ?? tmdbData.release_date?.substring(0, 4); @@ -139,7 +143,11 @@ export async function scrapeMovies( .trim() .toLowerCase(); if (tomatoTitle !== processedTitle) { - console.log('๐ŸŽฏ Found another title (1):', tomatoTitle); + console.log( + '๐ŸŽฏ Found another title (1):', + tomatoTitle, + `(uncommon: ${countUncommonWordsInTitle(tomatoTitle)})` + ); cleanedTitle = tomatoTitle; } } @@ -159,7 +167,11 @@ export async function scrapeMovies( .trim() .toLowerCase(); if (metacriticTitle !== processedTitle && metacriticTitle !== cleanedTitle) { - console.log('๐ŸŽฏ Found another title (2):', metacriticTitle); + console.log( + '๐ŸŽฏ Found another title (2):', + metacriticTitle, + `(uncommon: ${countUncommonWordsInTitle(metacriticTitle)})` + ); anotherTitle = metacriticTitle; } } diff --git a/wordlist.txt b/wordlist.txt index 4a42ef5..15995c9 100644 --- a/wordlist.txt +++ b/wordlist.txt @@ -1,3445 +1,172823 @@ -a +aa +aah +aahed +aahing +aahs +aal +aalii +aaliis +aals +aardvark +aardvarks +aardwolf +aardwolves +aargh +aarrgh +aarrghh +aas +aasvogel +aasvogels +ab +aba +abaca +abacas +abaci +aback +abacterial +abacus +abacuses +abaft +abaka +abakas +abalone +abalones +abamp +abampere +abamperes +abamps abandon +abandoned +abandoner +abandoners +abandoning +abandonment +abandonments +abandons +abapical +abas +abase +abased +abasedly +abasement +abasements +abaser +abasers +abases +abash +abashed +abashes +abashing +abashment +abashments +abasia +abasias +abasing +abatable +abate +abated +abatement +abatements +abater +abaters +abates +abating +abatis +abatises +abator +abators +abattis +abattises +abattoir +abattoirs +abaxial +abaxile +abba +abbacies +abbacy +abbas +abbatial +abbe +abbes +abbess +abbesses +abbey +abbeys +abbot +abbotcies +abbotcy +abbots +abbreviate +abbreviated +abbreviates +abbreviating +abbreviation +abbreviations +abbreviator +abbreviators +abdicable +abdicate +abdicated +abdicates +abdicating +abdication +abdications +abdicator +abdicators +abdomen +abdomens +abdomina +abdominal +abdominally +abduce +abduced +abducens +abducent +abducentes +abduces +abducing +abduct +abducted +abducting +abduction +abductions +abductor +abductores +abductors +abducts +abeam +abecedarian +abecedarians +abed +abele +abeles +abelia +abelian +abelias +abelmosk +abelmosks +aberrance +aberrances +aberrancies +aberrancy +aberrant +aberrantly +aberrants +aberrated +aberration +aberrational +aberrations +abet +abetment +abetments +abets +abettal +abettals +abetted +abetter +abetters +abetting +abettor +abettors +abeyance +abeyances +abeyancies +abeyancy +abeyant +abfarad +abfarads +abhenries +abhenry +abhenrys +abhor +abhorred +abhorrence +abhorrences +abhorrent +abhorrently +abhorrer +abhorrers +abhorring +abhors +abidance +abidances +abide +abided +abider +abiders +abides +abiding +abidingly +abigail +abigails +abilities ability +abiogeneses +abiogenesis +abiogenic +abiogenically +abiogenist +abiogenists +abiological +abioses +abiosis +abiotic +abiotically +abject +abjection +abjections +abjectly +abjectness +abjectnesses +abjuration +abjurations +abjure +abjured +abjurer +abjurers +abjures +abjuring +ablate +ablated +ablates +ablating +ablation +ablations +ablative +ablatively +ablatives +ablaut +ablauts +ablaze able +ablegate +ablegates +abler +ables +ablest +ablings +ablins +abloom +abluent +abluents +ablush +abluted +ablution +ablutionary +ablutions +ably +abmho +abmhos +abnegate +abnegated +abnegates +abnegating +abnegation +abnegations +abnegator +abnegators abnormal +abnormalities +abnormality +abnormally +abnormals +abo aboard +abode +aboded +abodes +aboding +abohm +abohms +aboideau +aboideaus +aboideaux +aboil +aboiteau +aboiteaus +aboiteaux abolish +abolishable +abolished +abolisher +abolishers +abolishes +abolishing +abolishment +abolishments +abolition +abolitionary +abolitionism +abolitionisms +abolitionist +abolitionists +abolitions +abolla +abollae +aboma +abomas +abomasa +abomasal +abomasi +abomasum +abomasus +abominable +abominably +abominate +abominated +abominates +abominating +abomination +abominations +abominator +abominators +aboon +aboral +aborally +aboriginal +aboriginally +aboriginals +aborigine +aborigines +aborning +abort +aborted +aborter +aborters +abortifacient +abortifacients +aborting abortion +abortionist +abortionists +abortions +abortive +abortively +abortiveness +abortivenesses +aborts +abos +abought +aboulia +aboulias +aboulic +abound +abounded +abounding +abounds about above +aboveboard +aboveground +aboves +abracadabra +abracadabras +abrachia +abrachias +abradable +abradant +abradants +abrade +abraded +abrader +abraders +abrades +abrading +abrasion +abrasions +abrasive +abrasively +abrasiveness +abrasivenesses +abrasives +abreact +abreacted +abreacting +abreaction +abreactions +abreacts +abreast +abri +abridge +abridged +abridgement +abridgements +abridger +abridgers +abridges +abridging +abridgment +abridgments +abris +abroach abroad +abrogate +abrogated +abrogates +abrogating +abrogation +abrogations +abrosia +abrosias abrupt +abrupter +abruptest +abruption +abruptions +abruptly +abruptness +abruptnesses +abs +abscess +abscessed +abscesses +abscessing +abscise +abscised +abscises +abscisin +abscising +abscisins +abscissa +abscissae +abscissas +abscission +abscissions +abscond +absconded +absconder +absconders +absconding +absconds +abseil +abseiled +abseiling +abseils absence +absences absent +absented +absentee +absenteeism +absenteeisms +absentees +absenter +absenters +absenting +absently +absentminded +absentmindedly +absentmindedness +absentmindednesses +absents +absinth +absinthe +absinthes +absinths absolute +absolutely +absoluteness +absolutenesses +absoluter +absolutes +absolutest +absolution +absolutions +absolutism +absolutisms +absolutist +absolutistic +absolutists +absolutive +absolutize +absolutized +absolutizes +absolutizing +absolve +absolved +absolver +absolvers +absolves +absolving +absonant absorb +absorbabilities +absorbability +absorbable +absorbance +absorbances +absorbancies +absorbancy +absorbant +absorbants +absorbed +absorbencies +absorbency +absorbent +absorbents +absorber +absorbers +absorbing +absorbingly +absorbs +absorptance +absorptances +absorption +absorptions +absorptive +absorptivities +absorptivity +absquatulate +absquatulated +absquatulates +absquatulating +abstain +abstained +abstainer +abstainers +abstaining +abstains +abstemious +abstemiously +abstemiousness +abstemiousnesses +abstention +abstentions +abstentious +absterge +absterged +absterges +absterging +abstinence +abstinences +abstinent +abstinently abstract +abstractable +abstracted +abstractedly +abstractedness +abstractednesses +abstracter +abstracters +abstractest +abstracting +abstraction +abstractional +abstractionism +abstractionisms +abstractionist +abstractionists +abstractions +abstractive +abstractly +abstractness +abstractnesses +abstractor +abstractors +abstracts +abstrict +abstricted +abstricting +abstricts +abstruse +abstrusely +abstruseness +abstrusenesses +abstruser +abstrusest +abstrusities +abstrusity absurd +absurder +absurdest +absurdism +absurdisms +absurdist +absurdists +absurdities +absurdity +absurdly +absurdness +absurdnesses +absurds +abubble +abuilding +abulia +abulias +abulic +abundance +abundances abundant +abundantly +abusable abuse +abused +abuser +abusers +abuses +abusing +abusive +abusively +abusiveness +abusivenesses +abut +abutilon +abutilons +abutment +abutments +abuts +abuttal +abuttals +abutted +abutter +abutters +abutting +abuzz +abvolt +abvolts +abwatt +abwatts +aby +abye +abyes +abying +abys +abysm +abysmal +abysmally +abysms +abyss +abyssal +abysses +acacia +acacias +academe +academes +academia +academias academic +academical +academically +academician +academicians +academicism +academicisms +academics +academies +academism +academisms academy +acajou +acajous +acaleph +acalephae +acalephe +acalephes +acalephs +acanthi +acanthocephalan +acanthocephalans +acanthus +acanthuses +acapnia +acapnias +acari +acariases +acariasis +acaricidal +acaricide +acaricides +acarid +acaridan +acaridans +acarids +acarine +acarines +acaroid +acarpous +acarus +acatalectic +acatalectics +acaudal +acaudate +acaulescent +acauline +acaulose +acaulous +accede +acceded +acceder +acceders +accedes +acceding +accelerando +accelerandos +accelerant +accelerants accelerate +accelerated +accelerates +accelerating +acceleratingly +acceleration +accelerations +accelerative +accelerator +accelerators +accelerometer +accelerometers accent +accented +accenting +accentless +accentor +accentors +accents +accentual +accentually +accentuate +accentuated +accentuates +accentuating +accentuation +accentuations accept +acceptabilities +acceptability +acceptable +acceptableness +acceptablenesses +acceptably +acceptance +acceptances +acceptant +acceptation +acceptations +accepted +acceptedly +acceptee +acceptees +accepter +accepters +accepting +acceptingly +acceptingness +acceptingnesses +acceptive +acceptor +acceptors +accepts access +accessaries +accessary +accessed +accesses +accessibilities +accessibility accessible +accessibleness +accessiblenesses +accessibly +accessing +accession +accessional +accessioned +accessioning +accessions +accessorial +accessories +accessorise +accessorised +accessorises +accessorising +accessorize +accessorized +accessorizes +accessorizing +accessory +acciaccatura +acciaccaturas +accidence +accidences accident +accidental +accidentally +accidentalness +accidentalnesses +accidentals +accidently +accidents +accidia +accidias +accidie +accidies +accipiter +accipiters +accipitrine +accipitrines +acclaim +acclaimed +acclaimer +acclaimers +acclaiming +acclaims +acclamation +acclamations +acclimate +acclimated +acclimates +acclimating +acclimation +acclimations +acclimatise +acclimatised +acclimatises +acclimatising +acclimatization +acclimatizations +acclimatize +acclimatized +acclimatizer +acclimatizers +acclimatizes +acclimatizing +acclivities +acclivity +accolade +accolades +accommodate +accommodated +accommodates +accommodating +accommodatingly accommodation +accommodational +accommodationist +accommodationists +accommodations +accommodative +accommodativeness +accommodativenesses +accommodator +accommodators +accompanied +accompanies +accompaniment +accompaniments +accompanist +accompanists accompany +accompanying +accomplice +accomplices accomplish +accomplishable +accomplished +accomplisher +accomplishers +accomplishes +accomplishing +accomplishment +accomplishments +accord +accordance +accordances +accordant +accordantly +accorded +accorder +accorders +according +accordingly +accordion +accordionist +accordionists +accordions +accords +accost +accosted +accosting +accosts +accouchement +accouchements +accoucheur +accoucheurs account +accountabilities +accountability +accountable +accountableness +accountablenesses +accountably +accountancies +accountancy accountant +accountants +accountantship +accountantships +accounted +accounting +accountings +accounts +accouter +accoutered +accoutering +accouterment +accouterments +accouters +accoutre +accoutred +accoutrement +accoutrements +accoutres +accoutring +accredit +accreditable +accreditation +accreditations +accredited +accrediting +accredits +accrete +accreted +accretes +accreting +accretion +accretionary +accretions +accretive +accruable +accrual +accruals +accrue +accrued +accruement +accruements +accrues +accruing +acculturate +acculturated +acculturates +acculturating +acculturation +acculturational +acculturations +acculturative accumulate +accumulated +accumulates +accumulating +accumulation +accumulations +accumulative +accumulatively +accumulativeness +accumulativenesses +accumulator +accumulators +accuracies accuracy accurate +accurately +accurateness +accuratenesses +accursed +accursedly +accursedness +accursednesses +accurst +accusal +accusals +accusant +accusants +accusation +accusations +accusative +accusatives +accusatory accuse +accused +accuser +accusers +accuses +accusing +accusingly +accustom +accustomation +accustomations accustomed +accustomedness +accustomednesses +accustoming +accustoms +ace +aced +acedia +acedias +aceldama +aceldamas +acellular +acentric +acephalous +acequia +acequias +acerate +acerated +acerb +acerbate +acerbated +acerbates +acerbating +acerber +acerbest +acerbic +acerbically +acerbities +acerbity +acerola +acerolas +acerose +acerous +acervate +acervuli +acervulus +aces +acescent +acescents +aceta +acetabula +acetabular +acetabulum +acetabulums +acetal +acetaldehyde +acetaldehydes +acetals +acetamid +acetamide +acetamides +acetamids +acetaminophen +acetaminophens +acetanilid +acetanilide +acetanilides +acetanilids +acetate +acetated +acetates +acetazolamide +acetazolamides +acetic +acetification +acetifications +acetified +acetifies +acetify +acetifying +acetin +acetins +acetone +acetones +acetonic +acetonitrile +acetonitriles +acetophenetidin +acetophenetidins +acetose +acetous +acetoxyl +acetoxyls +acetum +acetyl +acetylate +acetylated +acetylates +acetylating +acetylation +acetylations +acetylative +acetylcholine +acetylcholines +acetylcholinesterase +acetylcholinesterases +acetylene +acetylenes +acetylenic +acetylic +acetyls +acetylsalicylate +acetylsalicylates +achalasia +achalasias ache +ached +achene +achenes +achenial +aches +achier +achiest +achievable achieve +achieved achievement +achievements +achiever +achievers +achieves +achieving +achillea +achilleas +achiness +achinesses +aching +achingly +achiote +achiotes +achlorhydria +achlorhydrias +achlorhydric +acholia +acholias +achondrite +achondrites +achondritic +achondroplasia +achondroplasias +achondroplastic +achoo +achromat +achromatic +achromatically +achromatism +achromatisms +achromatize +achromatized +achromatizes +achromatizing +achromats +achromic +achy +acicula +aciculae +acicular +aciculas +aciculum +aciculums acid +acidemia +acidemias +acidhead +acidheads +acidic +acidification +acidifications +acidified +acidifier +acidifiers +acidifies +acidify +acidifying +acidimeter +acidimeters +acidimetric +acidimetries +acidimetry +acidities +acidity +acidly +acidness +acidnesses +acidophil +acidophile +acidophiles +acidophilic +acidophils +acidoses +acidosis +acidotic +acids +acidulate +acidulated +acidulates +acidulating +acidulation +acidulations +acidulent +acidulous +aciduria +acidurias +acidy +acierate +acierated +acierates +acierating +aciform +acinar +acing +acini +acinic +acinose +acinous +acinus +ackee +ackees acknowledge +acknowledged +acknowledgedly +acknowledgement +acknowledgements +acknowledges +acknowledging +acknowledgment +acknowledgments +aclinic +acmatic +acme +acmes +acmic +acne +acned +acnes +acnode +acnodes +acock +acoelomate +acoelomates +acold +acolyte +acolytes +aconite +aconites +aconitic +aconitum +aconitums +acorn +acorns +acoustic +acoustical +acoustically +acoustician +acousticians +acoustics +acquaint acquaintance +acquaintances +acquaintanceship +acquaintanceships +acquainted +acquainting +acquaints +acquest +acquests +acquiesce +acquiesced +acquiescence +acquiescences +acquiescent +acquiescently +acquiesces +acquiescing +acquirable acquire +acquired +acquirement +acquirements +acquirer +acquirers +acquires +acquiring acquisition +acquisitional +acquisitions +acquisitive +acquisitively +acquisitiveness +acquisitivenesses +acquisitor +acquisitors +acquit +acquits +acquittal +acquittals +acquittance +acquittances +acquitted +acquitter +acquitters +acquitting +acrasia +acrasias +acrasin +acrasins acre +acreage +acreages +acred +acres +acrid +acrider +acridest +acridine +acridines +acridities +acridity +acridly +acridness +acridnesses +acriflavine +acriflavines +acrimonies +acrimonious +acrimoniously +acrimoniousness +acrimoniousnesses +acrimony +acritarch +acritarchs +acrobat +acrobatic +acrobatically +acrobatics +acrobats +acrocentric +acrocentrics +acrodont +acrodonts +acrogen +acrogens +acrolect +acrolects +acrolein +acroleins +acrolith +acroliths +acromegalic +acromegalics +acromegalies +acromegaly +acromia +acromial +acromion +acromions +acronic +acronym +acronymic +acronymically +acronyms +acropetal +acropetally +acrophobe +acrophobes +acrophobia +acrophobias +acropolis +acropolises +acrosomal +acrosome +acrosomes across +acrostic +acrostical +acrostically +acrostics +acrotic +acrotism +acrotisms +acrylamide +acrylamides +acrylate +acrylates +acrylic +acrylics +acrylonitrile +acrylonitriles act +acta +actabilities +actability +actable +acted +actin +actinal +acting +actings +actinia +actiniae +actinian +actinians +actinias +actinic +actinically +actinide +actinides +actinism +actinisms +actinium +actiniums +actinoid +actinoids +actinolite +actinolites +actinometer +actinometers +actinometric +actinometries +actinometry +actinomorphic +actinomorphies +actinomorphy +actinomyces +actinomycete +actinomycetes +actinomycetous +actinomycin +actinomycins +actinomycoses +actinomycosis +actinomycotic +actinon +actinons +actins action +actionable +actionably +actionless +actions +activate +activated +activates +activating +activation +activations +activator +activators active +actively +activeness +activenesses +actives +activism +activisms +activist +activistic +activists +activities activity +activize +activized +activizes +activizing +actomyosin +actomyosins actor +actorish +actors actress +actresses +actressy +acts actual +actualities +actuality +actualization +actualizations +actualize +actualized +actualizes +actualizing +actually +actuarial +actuarially +actuaries +actuary +actuate +actuated +actuates +actuating +actuation +actuations +actuator +actuators +acuate +acuities +acuity +aculeate +aculei +aculeus +acumen +acumens +acuminate +acupressure +acupressures +acupuncture +acupunctures +acupuncturist +acupuncturists +acutance +acutances acute +acutely +acuteness +acutenesses +acuter +acutes +acutest +acyclic +acyclovir +acyclovirs +acyl +acylate +acylated +acylates +acylating +acylation +acylations +acyloin +acyloins +acyls ad +adage +adages +adagial +adagio +adagios +adamance +adamances +adamancies +adamancy +adamant +adamantine +adamantly +adamants +adamsite +adamsites adapt +adaptabilities +adaptability +adaptable adaptation +adaptational +adaptationally +adaptations +adapted +adaptedness +adaptednesses +adapter +adapters +adapting +adaption +adaptions +adaptive +adaptively +adaptiveness +adaptivenesses +adaptivities +adaptivity +adaptor +adaptors +adapts +adaxial add +addable +addax +addaxes +added +addedly +addend +addenda +addends +addendum +adder +adders +addible +addict addicted +addicting +addiction +addictions +addictive +addicts +adding addition +additional +additionally +additions +additive +additively +additives +additivities +additivity +additory +addle +addled +addlepated +addles +addling address +addressabilities +addressability +addressable +addressed +addressee +addressees +addresser +addressers +addresses +addressing +addrest +adds +adduce +adduced +adducent +adducer +adducers +adduces +adducing +adduct +adducted +adducting +adduction +adductions +adductive +adductor +adductors +adducts +adeem +adeemed +adeeming +adeems +adenine +adenines +adenitis +adenitises +adenocarcinoma +adenocarcinomas +adenocarcinomata +adenocarcinomatous +adenohypophyseal +adenohypophyses +adenohypophysial +adenohypophysis +adenoid +adenoidal +adenoids +adenoma +adenomas +adenomata +adenomatous +adenoses +adenosine +adenosines +adenosis +adenoviral +adenovirus +adenoviruses +adenyl +adenyls +adept +adepter +adeptest +adeptly +adeptness +adeptnesses +adepts +adequacies +adequacy adequate +adequately +adequateness +adequatenesses +adhere +adhered +adherence +adherences +adherend +adherends +adherent +adherently +adherents +adherer +adherers +adheres +adhering +adhesion +adhesional +adhesions +adhesive +adhesively +adhesiveness +adhesivenesses +adhesives +adhibit +adhibited +adhibiting +adhibits +adiabatic +adiabatically +adieu +adieus +adieux +adios +adipic +adipocyte +adipocytes +adipose +adiposes +adiposis +adiposities +adiposity +adipous +adit +adits +adjacencies +adjacency +adjacent +adjacently +adjectival +adjectivally +adjective +adjectively +adjectives +adjoin +adjoined +adjoining +adjoins +adjoint +adjoints +adjourn +adjourned +adjourning +adjournment +adjournments +adjourns +adjudge +adjudged +adjudges +adjudging +adjudicate +adjudicated +adjudicates +adjudicating +adjudication +adjudications +adjudicative +adjudicator +adjudicators +adjudicatory +adjunct +adjunction +adjunctions +adjunctive +adjunctly +adjuncts +adjuration +adjurations +adjuratory +adjure +adjured +adjurer +adjurers +adjures +adjuring +adjuror +adjurors adjust +adjustabilities +adjustability +adjustable +adjusted +adjuster +adjusters +adjusting +adjustive adjustment +adjustmental +adjustments +adjustor +adjustors +adjusts +adjutancies +adjutancy +adjutant +adjutants +adjuvant +adjuvants +adman +admass +admeasure +admeasured +admeasurement +admeasurements +admeasures +admeasuring +admen +administer +administered +administering +administers +administrable +administrant +administrants +administrate +administrated +administrates +administrating administration +administrations +administrative +administratively +administrator +administrators +administratrices +administratrix +admirabilities +admirability admirable +admirableness +admirablenesses +admirably +admiral +admirals +admiralties +admiralty +admiration +admirations admire +admired +admirer +admirers +admires +admiring +admiringly +admissibilities +admissibility +admissible admission +admissions +admissive admit +admits +admittance +admittances +admitted +admittedly +admitter +admitters +admitting +admix +admixed +admixes +admixing +admixt +admixture +admixtures +admonish +admonished +admonisher +admonishers +admonishes +admonishing +admonishingly +admonishment +admonishments +admonition +admonitions +admonitorily +admonitory +adnate +adnation +adnations +adnexa +adnexal +adnoun +adnouns +ado +adobe +adobelike +adobes +adobo +adobos adolescence +adolescences adolescent +adolescently +adolescents +adonis +adonises adopt +adoptabilities +adoptability +adoptable +adopted +adoptee +adoptees +adopter +adopters +adoptianism +adoptianisms +adopting +adoption +adoptionism +adoptionisms +adoptionist +adoptionists +adoptions +adoptive +adoptively +adopts +adorabilities +adorability +adorable +adorableness +adorablenesses +adorably +adoration +adorations adore +adored +adorer +adorers +adores +adoring +adoringly +adorn +adorned +adorner +adorners +adorning +adornment +adornments +adorns +ados +adown +adoze +adrenal +adrenalectomies +adrenalectomized +adrenalectomy +adrenaline +adrenalines +adrenals +adrenergic +adrenergically +adrenochrome +adrenochromes +adrenocortical +adrenocorticosteroid +adrenocorticosteroids +adrenocorticotrophic +adrenocorticotrophin +adrenocorticotrophins +adrenocorticotropic +adrenocorticotropin +adrenocorticotropins +adrift +adroit +adroiter +adroitest +adroitly +adroitness +adroitnesses +ads +adscititious +adscript +adscripts +adsorb +adsorbable +adsorbate +adsorbates +adsorbed +adsorbent +adsorbents +adsorber +adsorbers +adsorbing +adsorbs +adsorption +adsorptions +adsorptive +adularia +adularias +adulate +adulated +adulates +adulating +adulation +adulations +adulator +adulators +adulatory adult +adulterant +adulterants +adulterate +adulterated +adulterates +adulterating +adulteration +adulterations +adulterator +adulterators +adulterer +adulterers +adulteress +adulteresses +adulteries +adulterine +adulterous +adulterously +adultery +adulthood +adulthoods +adultlike +adultly +adultness +adultnesses +adults +adumbral +adumbrate +adumbrated +adumbrates +adumbrating +adumbration +adumbrations +adumbrative +adumbratively +adunc +aduncate +aduncous +adust advance +advanced +advancement +advancements +advancer +advancers +advances +advancing advantage +advantaged +advantageous +advantageously +advantageousness +advantageousnesses +advantages +advantaging +advect +advected +advecting +advection +advections +advective +advects +advent +adventitia +adventitial +adventitias +adventitious +adventitiously +adventive +adventives +advents adventure +adventured +adventurer +adventurers +adventures +adventuresome +adventuresomeness +adventuresomenesses +adventuress +adventuresses +adventuring +adventurism +adventurisms +adventurist +adventuristic +adventurists +adventurous +adventurously +adventurousness +adventurousnesses +adverb +adverbial +adverbially +adverbials +adverbs +adversarial +adversaries +adversariness +adversarinesses +adversary +adversative +adversatively +adversatives +adverse +adversely +adverseness +adversenesses +adversities +adversity +advert +adverted +advertence +advertences +advertencies +advertency +advertent +advertently +adverting advertise +advertised advertisement +advertisements +advertiser +advertisers +advertises +advertising +advertisings +advertize +advertized +advertizement +advertizements +advertizes +advertizing +advertorial +advertorials +adverts advice +advices +advisabilities +advisability +advisable +advisableness +advisablenesses +advisably advise +advised +advisedly +advisee +advisees +advisement +advisements +adviser +advisers +advises +advising +advisor +advisories +advisors +advisory +advocacies +advocacy advocate +advocated +advocates +advocating +advocation +advocations +advocative +advocator +advocators +advowson +advowsons +adynamia +adynamias +adynamic +adyta +adytum +adz +adze +adzes +adzuki +adzukis +ae +aecia +aecial +aecidia +aecidial +aecidium +aeciospore +aeciospores +aecium +aedes +aedile +aediles +aedine +aegis +aegises +aeneous +aeneus +aeolian +aeon +aeonian +aeonic +aeons +aepyornis +aepyornises +aequorin +aequorins +aerate +aerated +aerates +aerating +aeration +aerations +aerator +aerators +aerenchyma +aerenchymas +aerenchymata +aerial +aerialist +aerialists +aerially +aerials +aerie +aeried +aerier +aeries +aeriest +aerified +aerifies +aeriform +aerify +aerifying +aerily +aero +aerobatic +aerobatics +aerobe +aerobes +aerobia +aerobic +aerobically +aerobics +aerobiological +aerobiologies +aerobiology +aerobioses +aerobiosis +aerobium +aerobrake +aerobraked +aerobrakes +aerobraking +aerodrome +aerodromes +aeroduct +aeroducts +aerodynamic +aerodynamical +aerodynamically +aerodynamicist +aerodynamicists +aerodynamics +aerodyne +aerodynes +aeroelastic +aeroelasticities +aeroelasticity +aeroembolism +aeroembolisms +aerofoil +aerofoils +aerogel +aerogels +aerogram +aerogramme +aerogrammes +aerograms +aerolite +aerolites +aerolith +aeroliths +aerologies +aerology +aeromagnetic +aeromechanics +aeromedical +aeromedicine +aeromedicines +aerometer +aerometers +aeronaut +aeronautic +aeronautical +aeronautically +aeronautics +aeronauts +aeronomer +aeronomers +aeronomic +aeronomical +aeronomies +aeronomist +aeronomists +aeronomy +aeroplane +aeroplanes +aerosat +aerosats +aerosol +aerosolization +aerosolizations +aerosolize +aerosolized +aerosolizes +aerosolizing +aerosols +aerospace +aerospaces +aerostat +aerostatics +aerostats +aerothermodynamic +aerothermodynamics +aerugo +aerugos +aery +aesthete +aesthetes +aesthetic +aesthetical +aesthetically +aesthetician +aestheticians +aestheticism +aestheticisms +aestheticize +aestheticized +aestheticizes +aestheticizing +aesthetics +aestival +aestivate +aestivated +aestivates +aestivating +aestivation +aestivations +aether +aetheric +aethers +aetiologies +aetiology +afar +afars +afeard +afeared +afebrile +aff +affabilities +affability +affable +affably affair +affaire +affaires +affairs affect +affectabilities +affectability +affectable +affectation +affectations +affected +affectedly +affectedness +affectednesses +affecter +affecters +affecting +affectingly affection +affectional +affectionally +affectionate +affectionately +affectioned +affectionless +affections +affective +affectively +affectivities +affectivity +affectless +affectlessness +affectlessnesses +affects +affenpinscher +affenpinschers +afferent +afferently +afferents +affiance +affianced +affiances +affiancing +affiant +affiants +affiche +affiches +afficionado +afficionados +affidavit +affidavits +affiliate +affiliated +affiliates +affiliating +affiliation +affiliations +affinal +affine +affined +affinely +affines +affinities +affinity +affirm +affirmable +affirmance +affirmances +affirmation +affirmations +affirmative +affirmatively +affirmatives +affirmed +affirmer +affirmers +affirming +affirms +affix +affixable +affixal +affixation +affixations +affixed +affixer +affixers +affixes +affixial +affixing +affixment +affixments +afflatus +afflatuses +afflict +afflicted +afflicting +affliction +afflictions +afflictive +afflictively +afflicts +affluence +affluences +affluencies +affluency +affluent +affluently +affluents +afflux +affluxes afford +affordabilities +affordability +affordable +affordably +afforded +affording +affords +afforest +afforestation +afforestations +afforested +afforesting +afforests +affray +affrayed +affrayer +affrayers +affraying +affrays +affricate +affricates +affricative +affricatives +affright +affrighted +affrighting +affrights +affront +affronted +affronting +affronts +affusion +affusions +afghan +afghani +afghanis +afghans +aficionada +aficionadas +aficionado +aficionados +afield +afire +aflame +aflatoxin +aflatoxins +afloat +aflutter +afoot +afore +aforementioned +aforesaid +aforethought +afoul afraid -africa -african +afreet +afreets +afresh +afrit +afrits +aft after +afterbirth +afterbirths +afterburner +afterburners +aftercare +aftercares +afterclap +afterclaps +afterdeck +afterdecks +aftereffect +aftereffects +afterglow +afterglows +afterimage +afterimages +afterlife +afterlives +aftermarket +aftermarkets +aftermath +aftermaths +aftermost afternoon +afternoons +afterpiece +afterpieces +afters +aftershave +aftershaves +aftershock +aftershocks +aftertaste +aftertastes +aftertax +afterthought +afterthoughts +aftertime +aftertimes afterward afterwards +afterword +afterwords +afterworld +afterworlds +aftmost +aftosa +aftosas +ag +aga again against +agalloch +agallochs +agalwood +agalwoods +agama +agamas +agamete +agametes +agamic +agammaglobulinemia +agammaglobulinemias +agammaglobulinemic +agamospermies +agamospermy +agamous +agapae +agapai +agapanthus +agapanthuses +agape +agapeic +agar +agaric +agarics +agarose +agaroses +agars +agas +agate +agates +agatize +agatized +agatizes +agatizing +agatoid +agave +agaves +agaze age +aged +agedly +agedness +agednesses +agee +ageing +ageings +ageism +ageisms +ageist +ageists +ageless +agelessly +agelessness +agelessnesses +agelong +agencies agency agenda +agendaless +agendas +agendum +agendums +agene +agenes +ageneses +agenesia +agenesias +agenesis +agenetic +agenize +agenized +agenizes +agenizing agent +agential +agenting +agentings +agentive +agentives +agentries +agentry +agents +ager +ageratum +ageratums +agers +ages +aggadic +agger +aggers +aggie +aggies +aggiornamento +aggiornamentos +agglomerate +agglomerated +agglomerates +agglomerating +agglomeration +agglomerations +agglomerative +agglutinabilities +agglutinability +agglutinable +agglutinate +agglutinated +agglutinates +agglutinating +agglutination +agglutinations +agglutinative +agglutinin +agglutinins +agglutinogen +agglutinogenic +agglutinogens +aggradation +aggradations +aggrade +aggraded +aggrades +aggrading +aggrandise +aggrandised +aggrandises +aggrandising +aggrandize +aggrandized +aggrandizement +aggrandizements +aggrandizer +aggrandizers +aggrandizes +aggrandizing +aggravate +aggravated +aggravates +aggravating +aggravation +aggravations +aggregate +aggregated +aggregately +aggregateness +aggregatenesses +aggregates +aggregating +aggregation +aggregational +aggregations +aggregative +aggregatively +aggress +aggressed +aggresses +aggressing +aggression +aggressions aggressive +aggressively +aggressiveness +aggressivenesses +aggressivities +aggressivity +aggressor +aggressors +aggrieve +aggrieved +aggrievedly +aggrievement +aggrievements +aggrieves +aggrieving +aggro +aggros +agha +aghas +aghast +agile +agilely +agilities +agility +agin +aging +agings +aginner +aginners +agio +agios +agiotage +agiotages +agism +agisms +agist +agisted +agisting +agists +agitable +agitate +agitated +agitatedly +agitates +agitating +agitation +agitational +agitations +agitative +agitato +agitator +agitators +agitprop +agitprops +aglare +agleam +aglee +aglet +aglets +agley +aglimmer +aglitter +aglow +agly +aglycon +aglycone +aglycones +aglycons +agma +agmas +agminate +agnail +agnails +agnate +agnates +agnatic +agnation +agnations +agnize +agnized +agnizes +agnizing +agnomen +agnomens +agnomina +agnosia +agnosias +agnostic +agnosticism +agnosticisms +agnostics ago +agog +agon +agonal +agone +agones +agonic +agonies +agonise +agonised +agonises +agonising +agonist +agonistic +agonistically +agonists +agonize +agonized +agonizes +agonizing +agonizingly +agons +agony +agora +agorae +agoraphobe +agoraphobes +agoraphobia +agoraphobias +agoraphobic +agoraphobics +agoras +agorot +agoroth +agouti +agouties +agoutis +agouty +agrafe +agrafes +agraffe +agraffes +agranulocyte +agranulocytes +agranulocytoses +agranulocytosis +agrapha +agraphia +agraphias +agraphic +agrarian +agrarianism +agrarianisms +agrarians +agravic agree +agreeabilities +agreeability +agreeable +agreeableness +agreeablenesses +agreeably +agreed +agreeing agreement +agreements +agrees +agrestal +agrestic +agria +agrias +agribusiness +agribusinesses +agribusinessman +agribusinessmen +agrichemical +agrichemicals agricultural +agriculturalist +agriculturalists +agriculturally agriculture +agricultures +agriculturist +agriculturists +agrimonies +agrimony +agrochemical +agrochemicals +agroforester +agroforesters +agroforestries +agroforestry +agrologies +agrology +agronomic +agronomically +agronomies +agronomist +agronomists +agronomy +aground +agrypnia +agrypnias +ague +aguelike +agues +agueweed +agueweeds +aguish +aguishly +ah +aha +ahchoo ahead +ahem +ahimsa +ahimsas +ahistoric +ahistorical +ahold +aholds +ahorse +ahoy +ahull +ai +aiblins aid +aide +aided +aider +aiders +aides +aidful +aiding +aidless +aidman +aidmen aids +aiglet +aiglets +aigret +aigrets +aigrette +aigrettes +aiguille +aiguilles +aiguillette +aiguillettes +aikido +aikidos +ail +ailanthus +ailanthuses +ailed +aileron +ailerons +ailing +ailment +ailments +ails +ailurophile +ailurophiles +ailurophobe +ailurophobes +ailurophobia +ailurophobias aim +aimed +aimer +aimers +aimful +aimfully +aiming +aimless +aimlessly +aimlessness +aimlessnesses +aims +ain +ains +ainsell +ainsells +aioli +aiolis air +airboat +airboats +airborne +airbound +airbrush +airbrushed +airbrushes +airbrushing +airburst +airbursts +airbus +airbuses +airbusses +aircheck +airchecks +aircoach +aircoaches aircraft +aircrew +aircrews +airdate +airdates +airdrome +airdromes +airdrop +airdropped +airdropping +airdrops +aired +airer +airers +airest +airfare +airfares +airfield +airfields +airflow +airflows +airfoil +airfoils +airframe +airframes +airfreight +airfreighted +airfreighting +airfreights +airglow +airglows +airhead +airheaded +airheads +airhole +airholes +airier +airiest +airily +airiness +airinesses +airing +airings +airless +airlessness +airlessnesses +airlift +airlifted +airlifting +airlifts +airlike airline +airliner +airliners +airlines airmail +airmailed +airmailing +airmails +airman +airmanship +airmanships +airmen +airmobile +airn +airns +airpark +airparks airplane +airplanes +airplay +airplays airport +airports +airpost +airposts +airpower +airpowers +airproof +airproofed +airproofing +airproofs +airs +airscape +airscapes +airscrew +airscrews +airshed +airsheds +airship +airships +airsick +airsickness +airsicknesses airspace +airspaces +airspeed +airspeeds +airstream +airstreams +airstrip +airstrips +airt +airted +airth +airthed +airthing +airths +airtight +airtightness +airtightnesses +airtime +airtimes +airting +airts +airward +airwave +airwaves +airway +airways +airwise +airwoman +airwomen +airworthier +airworthiest +airworthiness +airworthinesses +airworthy +airy +ais +aisle +aisled +aisles +aisleway +aisleways +ait +aitch +aitchbone +aitchbones +aitches +aits +aiver +aivers +ajar +ajee +ajiva +ajivas +ajowan +ajowans +ajuga +ajugas +akee +akees +akela +akelas +akene +akenes +akimbo +akin +akvavit +akvavits +al +ala +alabaster +alabasters +alabastrine +alack +alacrities +alacritous +alacrity +alae +alameda +alamedas +alamo +alamode +alamodes +alamos +alan +aland +alands +alane +alang +alanin +alanine +alanines +alanins +alans +alant +alants +alanyl +alanyls +alar alarm +alarmed +alarming +alarmingly +alarmism +alarmisms +alarmist +alarmists +alarms +alarum +alarumed +alaruming +alarums +alary +alas +alaska +alaskas +alastor +alastors +alate +alated +alates +alation +alations +alb +alba +albacore +albacores +albas +albata +albatas +albatross +albatrosses +albedo +albedoes +albedos +albeit +albicore +albicores +albinal +albinic +albinism +albinisms +albinistic +albino +albinos +albinotic +albite +albites +albitic +albizia +albizias +albizzia +albizzias +albs album +albumen +albumens +albumin +albuminous +albumins +albuminuria +albuminurias +albuminuric +albumose +albumoses +albums +alburnum +alburnums +alcade +alcades +alcahest +alcahests +alcaic +alcaics +alcaide +alcaides +alcalde +alcaldes +alcayde +alcaydes +alcazar +alcazars +alchemic +alchemical +alchemically +alchemies +alchemist +alchemistic +alchemistical +alchemists +alchemize +alchemized +alchemizes +alchemizing +alchemy +alchymies +alchymy +alcid +alcidine +alcids alcohol alcoholic +alcoholically +alcoholics +alcoholism +alcoholisms +alcohols +alcove +alcoved +alcoves +alcyonarian +alcyonarians +aldehyde +aldehydes +aldehydic +alder +alderflies +alderfly +alderman +aldermanic +aldermen +alders +alderwoman +alderwomen +aldol +aldolase +aldolases +aldolization +aldolizations +aldols +aldose +aldoses +aldosterone +aldosterones +aldosteronism +aldosteronisms +aldrin +aldrins +ale +aleatoric +aleatory +alec +alecs +alee +alef +alefs +alegar +alegars +alehouse +alehouses +alembic +alembics +alencon +alencons +aleph +alephs +alert +alerted +alerter +alertest +alerting +alertly +alertness +alertnesses +alerts +ales +aleuron +aleurone +aleurones +aleurons +alevin +alevins +alewife +alewives +alexander +alexanders +alexandrine +alexandrines +alexandrite +alexandrites +alexia +alexias +alexin +alexine +alexines +alexins +alfa +alfaki +alfakis +alfalfa +alfalfas +alfaqui +alfaquin +alfaquins +alfaquis +alfas +alfilaria +alfilarias +alforja +alforjas +alfresco +alga +algae +algaecide +algaecides +algal +algaroba +algarobas +algarroba +algarrobas +algas algebra +algebraic +algebraically +algebraist +algebraists +algebras +algerine +algerines +algicidal +algicide +algicides +algid +algidities +algidity +algin +alginate +alginates +algins +algoid +algolagnia +algolagniac +algolagniacs +algolagnias +algological +algologies +algologist +algologists +algology +algor +algorism +algorisms +algorithm +algorithmic +algorithmically +algorithms +algors +algum +algums +alias +aliases +alibi +alibied +alibies +alibiing +alibis +alible +alicyclic +alidad +alidade +alidades +alidads +alien +alienabilities +alienability +alienable +alienage +alienages +alienate +alienated +alienates +alienating +alienation +alienations +alienator +alienators +aliened +alienee +alienees +aliener +alieners +aliening +alienism +alienisms +alienist +alienists +alienly +alienness +aliennesses +alienor +alienors +aliens +alif +aliform +alifs +alight +alighted +alighting +alightment +alightments +alights +align +aligned +aligner +aligners +aligning +alignment +alignments +aligns alike +alikeness +alikenesses +aliment +alimentary +alimentation +alimentations +alimented +alimenting +aliments +alimonies +alimony +aline +alined +alinement +alinements +aliner +aliners +alines +alining +aliped +alipeds +aliphatic +aliquant +aliquot +aliquots +alist +alit +aliteracies +aliteracy +aliterate +aliterates +aliunde alive +aliveness +alivenesses +aliya +aliyah +aliyahs +aliyas +aliyos +aliyot +alizarin +alizarins +alkahest +alkahestic +alkahests +alkali +alkalic +alkalies +alkalified +alkalifies +alkalify +alkalifying +alkalimeter +alkalimeters +alkalimetries +alkalimetry +alkalin +alkaline +alkalinities +alkalinity +alkalinization +alkalinizations +alkalinize +alkalinized +alkalinizes +alkalinizing +alkalis +alkalise +alkalised +alkalises +alkalising +alkalize +alkalized +alkalizes +alkalizing +alkaloid +alkaloidal +alkaloids +alkaloses +alkalosis +alkalotic +alkane +alkanes +alkanet +alkanets +alkene +alkenes +alkies +alkine +alkines +alkoxide +alkoxides +alkoxy +alky +alkyd +alkyds +alkyl +alkylate +alkylated +alkylates +alkylating +alkylation +alkylations +alkylic +alkyls +alkyne +alkynes all +allanite +allanites +allantoic +allantoides +allantoin +allantoins +allantois +allargando +allay +allayed +allayer +allayers +allaying +allays +allee +allees +allegation +allegations +allege +alleged +allegedly +alleger +allegers +alleges +allegiance +allegiances +allegiant +alleging +allegorical +allegorically +allegoricalness +allegoricalnesses +allegories +allegorise +allegorised +allegorises +allegorising +allegorist +allegorists +allegorization +allegorizations +allegorize +allegorized +allegorizer +allegorizers +allegorizes +allegorizing +allegory +allegretto +allegrettos +allegro +allegros +allele +alleles +allelic +allelism +allelisms +allelomorph +allelomorphic +allelomorphism +allelomorphisms +allelomorphs +allelopathic +allelopathies +allelopathy +alleluia +alleluias +allemande +allemandes +allergen +allergenic +allergenicities +allergenicity +allergens allergic +allergies +allergin +allergins +allergist +allergists +allergy +allethrin +allethrins +alleviate +alleviated +alleviates +alleviating +alleviation +alleviations +alleviator +alleviators alley +alleys +alleyway +alleyways +allheal +allheals +alliable +alliaceous +alliance +alliances +allicin +allicins +allied +allies +alligator +alligators +alliterate +alliterated +alliterates +alliterating +alliteration +alliterations +alliterative +alliteratively +allium +alliums +alloantibodies +alloantibody +alloantigen +alloantigens +allobar +allobars +allocable +allocatable allocate +allocated +allocates +allocating +allocation +allocations +allocator +allocators +allocution +allocutions +allod +allodia +allodial +allodium +allods +allogamies +allogamous +allogamy +allogeneic +allogenic +allograft +allografted +allografting +allografts +allograph +allographic +allographs +allometric +allometries +allometry +allomorph +allomorphic +allomorphism +allomorphisms +allomorphs +allonge +allonges +allonym +allonyms +allopath +allopaths +allopatric +allopatrically +allopatries +allopatry +allophane +allophanes +allophone +allophones +allophonic +allopolyploid +allopolyploidies +allopolyploids +allopolyploidy +allopurinol +allopurinols +allosaurus +allosauruses +allosteric +allosterically +allosteries +allostery +allot +allotetraploid +allotetraploidies +allotetraploids +allotetraploidy +allotment +allotments +allotrope +allotropes +allotropic +allotropies +allotropy +allots +allotted +allottee +allottees +allotter +allotters +allotting +allotype +allotypes +allotypic +allotypically +allotypies +allotypy +allover +allovers allow +allowable +allowably allowance +allowanced +allowances +allowancing +allowed +allowedly +allowing +allows +alloxan +alloxans +alloy +alloyed +alloying +alloys +alls +allseed +allseeds +allspice +allspices +allude +alluded +alludes +alluding +allure +allured +allurement +allurements +allurer +allurers +allures +alluring +alluringly +allusion +allusions +allusive +allusively +allusiveness +allusivenesses +alluvia +alluvial +alluvials +alluvion +alluvions +alluvium +alluviums +ally +allying +allyl +allylic +allyls +alma +almagest +almagests +almah +almahs +almanac +almanacs +almandine +almandines +almandite +almandites +almas +alme +almeh +almehs +almemar +almemars +almes +almightiness +almightinesses +almighty +almner +almners +almond +almonds +almoner +almoners +almonries +almonry almost +alms +almsgiver +almsgivers +almsgiving +almsgivings +almshouse +almshouses +almsman +almsmen +almuce +almuces +almud +almude +almudes +almuds +almug +almugs +alnico +alnicoes +alodia +alodial +alodium +aloe +aloes +aloetic +aloft +alogical +alogically +aloha +alohas +aloin +aloins alone +aloneness +alonenesses along +alongshore alongside +aloof +aloofly +aloofness +aloofnesses +alopecia +alopecias +alopecic aloud +alow +alp +alpaca +alpacas +alpenglow +alpenglows +alpenhorn +alpenhorns +alpenstock +alpenstocks +alpha alphabet +alphabeted +alphabetic +alphabetical +alphabetically +alphabeting +alphabetization +alphabetizations +alphabetize +alphabetized +alphabetizer +alphabetizers +alphabetizes +alphabetizing +alphabets +alphameric +alphanumeric +alphanumerical +alphanumerically +alphanumerics +alphas +alphorn +alphorns +alphosis +alphosises +alphyl +alphyls +alpine +alpinely +alpines +alpinism +alpinisms +alpinist +alpinists +alps already +alright +als +alsike +alsikes also +alt +altar +altarpiece +altarpieces +altars +altazimuth +altazimuths +alter +alterabilities +alterability +alterable +alterably +alterant +alterants +alteration +alterations +altercate +altercated +altercates +altercating +altercation +altercations +altered +alterer +alterers +altering +alternate +alternated +alternately +alternates +alternating +alternation +alternations alternative +alternatively +alternativeness +alternativenesses +alternatives +alternator +alternators +alters +althaea +althaeas +althea +altheas +altho +althorn +althorns although +altimeter +altimeters +altimetries +altimetry +altiplano +altiplanos altitude +altitudes +altitudinal +altitudinous +alto +altocumuli +altocumulus altogether +altogethers +altoist +altoists +altos +altostrati +altostratus +altricial +altruism +altruisms +altruist +altruistic +altruistically +altruists +alts +aludel +aludels +alula +alulae +alular +alum +alumin +alumina +aluminas +aluminate +aluminates +alumine +alumines +aluminic +aluminium +aluminiums +aluminize +aluminized +aluminizes +aluminizing +aluminosilicate +aluminosilicates +aluminous +alumins aluminum +aluminums +alumna +alumnae +alumni +alumnus +alumroot +alumroots +alums +alunite +alunites +alveolar +alveolarly +alveolars +alveolate +alveoli +alveolus +alvine +alway always +alyssum +alyssums am +ama +amadavat +amadavats +amadou +amadous +amah +amahs +amain +amalgam +amalgamate +amalgamated +amalgamates +amalgamating +amalgamation +amalgamations +amalgamator +amalgamators +amalgams +amandine +amanita +amanitas +amanitin +amanitins +amantadine +amantadines +amanuenses +amanuensis +amaranth +amaranthine +amaranths +amarelle +amarelles +amaretti +amaretto +amarettos +amarna +amaryllis +amaryllises +amas +amass +amassed +amasser +amassers +amasses +amassing +amassment +amassments amateur +amateurish +amateurishly +amateurishness +amateurishnesses +amateurism +amateurisms +amateurs +amative +amatively +amativeness +amativenesses +amatol +amatols +amatory +amauroses +amaurosis +amaurotic amaze +amazed +amazedly +amazement +amazements +amazes amazing +amazingly +amazon +amazonite +amazonites +amazons +amazonstone +amazonstones +ambage +ambages +ambari +ambaries +ambaris +ambary ambassador +ambassadorial +ambassadors +ambassadorship +ambassadorships ambassadress +ambassadresses +ambeer +ambeers +amber +ambergris +ambergrises +amberies +amberina +amberinas +amberjack +amberjacks +amberoid +amberoids +ambers +ambery +ambiance +ambiances +ambidexterities +ambidexterity +ambidextrous +ambidextrously +ambience +ambiences +ambient +ambients +ambiguities +ambiguity ambiguous +ambiguously +ambiguousness +ambiguousnesses +ambisexual +ambisexualities +ambisexuality +ambisexuals +ambit ambition +ambitioned +ambitioning +ambitionless +ambitions +ambitious +ambitiously +ambitiousness +ambitiousnesses +ambits +ambivalence +ambivalences +ambivalent +ambivalently +ambiversion +ambiversions +ambivert +ambiverts +amble +ambled +ambler +amblers +ambles +ambling +amblygonite +amblygonites +amblyopia +amblyopias +amblyopic +ambo +amboina +amboinas +ambones +ambos +amboyna +amboynas +ambries +ambroid +ambroids +ambrosia +ambrosial +ambrosially +ambrosias +ambrotype +ambrotypes +ambry +ambsace +ambsaces +ambulacra +ambulacral +ambulacrum ambulance -america +ambulances +ambulant +ambulate +ambulated +ambulates +ambulating +ambulation +ambulations +ambulatories +ambulatorily +ambulatory +ambuscade +ambuscaded +ambuscader +ambuscaders +ambuscades +ambuscading +ambush +ambushed +ambusher +ambushers +ambushes +ambushing +ambushment +ambushments +ameba +amebae +ameban +amebas +amebean +amebiases +amebiasis +amebic +amebocyte +amebocytes +ameboid +ameer +ameerate +ameerates +ameers +amelcorn +amelcorns +ameliorate +ameliorated +ameliorates +ameliorating +amelioration +ameliorations +ameliorative +ameliorator +ameliorators +amelioratory +ameloblast +ameloblasts +amen +amenabilities +amenability +amenable +amenably +amend +amendable +amendatory +amended +amender +amenders +amending +amendment +amendments +amends +amenities +amenity +amenorrhea +amenorrheas +amenorrheic +amens +ament +amentia +amentias +amentiferous +aments +amerce +amerced +amercement +amercements +amercer +amercers +amerces +amerciable +amercing +americium +americiums +amesace +amesaces +amethyst +amethystine +amethysts +ametropia +ametropias +ametropic +ami +amia +amiabilities +amiability +amiable +amiableness +amiablenesses +amiably +amiantus +amiantuses +amias +amicabilities +amicability +amicable +amicableness +amicablenesses +amicably +amice +amices +amici +amicus +amid +amidase +amidases +amide +amides +amidic +amidin +amidine +amidines +amidins +amido +amidogen +amidogens +amidol +amidols +amidone +amidones +amids +amidship +amidships +amidst +amie +amies +amiga +amigas +amigo +amigos +amin +amine +amines +aminic +aminities +aminity +amino +aminoaciduria +aminoacidurias +aminopeptidase +aminopeptidases +aminophylline +aminophyllines +aminopterin +aminopterins +aminopyrine +aminopyrines +aminotransferase +aminotransferases +amins +amir +amirate +amirates +amirs +amis +amiss +amities +amitoses +amitosis +amitotic +amitotically +amitriptyline +amitriptylines +amitrole +amitroles +amity +ammeter +ammeters +ammine +ammines +ammino +ammo +ammocete +ammocetes +ammonal +ammonals +ammonia +ammoniac +ammoniacal +ammoniacs +ammonias +ammoniate +ammoniated +ammoniates +ammoniating +ammoniation +ammoniations +ammonic +ammonification +ammonifications +ammonified +ammonifies +ammonify +ammonifying +ammonite +ammonites +ammonitic +ammonium +ammoniums +ammono +ammonoid +ammonoids +ammos +ammunition +ammunitions +amnesia +amnesiac +amnesiacs +amnesias +amnesic +amnesics +amnestic +amnestied +amnesties +amnesty +amnestying +amnia +amnic +amniocenteses +amniocentesis +amnion +amnionic +amnions +amniote +amniotes +amniotic +amobarbital +amobarbitals +amoeba +amoebae +amoeban +amoebas +amoebean +amoebiases +amoebiasis +amoebic +amoebocyte +amoebocytes +amoeboid +amok +amoks +amole +amoles among +amongst +amontillado +amontillados +amoral +amoralism +amoralisms +amoralities +amorality +amorally +amoretti +amoretto +amorettos +amorini +amorino +amorist +amoristic +amorists +amoroso +amorous +amorously +amorousness +amorousnesses +amorphous +amorphously +amorphousness +amorphousnesses +amort +amortise +amortised +amortises +amortising +amortizable +amortization +amortizations +amortize +amortized +amortizes +amortizing +amosite +amosites +amotion +amotions amount +amounted +amounting +amounts +amour +amours +amoxicillin +amoxicillins +amoxycillin +amoxycillins +amp +amperage +amperages +ampere +amperes +amperometric +ampersand +ampersands +amphetamine +amphetamines +amphibia +amphibian +amphibians +amphibious +amphibiously +amphibiousness +amphibiousnesses +amphibole +amphiboles +amphibolies +amphibolite +amphibolites +amphibologies +amphibology +amphiboly +amphibrach +amphibrachic +amphibrachs +amphictyonic +amphictyonies +amphictyony +amphidiploid +amphidiploidies +amphidiploids +amphidiploidy +amphimacer +amphimacers +amphimixes +amphimixis +amphioxi +amphioxus +amphioxuses +amphipathic +amphiphile +amphiphiles +amphiphilic +amphiploid +amphiploidies +amphiploids +amphiploidy +amphipod +amphipods +amphiprostyle +amphiprostyles +amphisbaena +amphisbaenas +amphisbaenic +amphitheater +amphitheaters +amphitheatric +amphitheatrical +amphitheatrically +amphora +amphorae +amphoral +amphoras +amphoteric +ampicillin +ampicillins ample +ampleness +amplenesses +ampler +amplest +amplexus +amplexuses +amplidyne +amplidynes +amplification +amplifications +amplified +amplifier +amplifiers +amplifies +amplify +amplifying +amplitude +amplitudes +amply +ampoule +ampoules +amps +ampul +ampule +ampules +ampulla +ampullae +ampullar +ampullary +ampuls +amputate +amputated +amputates +amputating +amputation +amputations +amputee +amputees +amreeta +amreetas +amrita +amritas +amtrac +amtrack +amtracks +amtracs +amu +amuck +amucks +amulet +amulets +amus +amusable amuse +amused +amusedly amusement +amusements +amuser +amusers +amuses +amusia +amusias +amusing +amusingly +amusingness +amusingnesses +amusive +amygdala +amygdalae +amygdale +amygdales +amygdalin +amygdalins +amygdaloid +amygdaloidal +amygdaloids +amygdule +amygdules +amyl +amylase +amylases +amylene +amylenes +amylic +amylogen +amylogens +amyloid +amyloidoses +amyloidosis +amyloidosises +amyloids +amylolytic +amylopectin +amylopectins +amyloplast +amyloplasts +amylopsin +amylopsins +amylose +amyloses +amyls +amylum +amylums +amyotonia +amyotonias an +ana +anabaena +anabaenas +anabaptism +anabaptisms +anabas +anabases +anabasis +anabatic +anableps +anablepses +anabolic +anabolism +anabolisms +anachronic +anachronism +anachronisms +anachronistic +anachronistically +anachronous +anachronously +anaclitic +anacolutha +anacoluthic +anacoluthically +anacoluthon +anacoluthons +anaconda +anacondas +anacreontic +anacreontics +anacruses +anacrusis +anadem +anadems +anadiploses +anadiplosis +anadromous +anaemia +anaemias +anaemic +anaerobe +anaerobes +anaerobic +anaerobically +anaerobioses +anaerobiosis +anaesthesia +anaesthesias +anaesthetic +anaesthetics +anageneses +anagenesis +anaglyph +anaglyphic +anaglyphs +anagnorises +anagnorisis +anagoge +anagoges +anagogic +anagogical +anagogically +anagogies +anagogy +anagram +anagrammatic +anagrammatical +anagrammatically +anagrammatization +anagrammatizations +anagrammatize +anagrammatized +anagrammatizes +anagrammatizing +anagrammed +anagramming +anagrams +anal +analcime +analcimes +analcite +analcites +analecta +analects +analemma +analemmas +analemmata +analemmatic +analeptic +analeptics +analgesia +analgesias +analgesic +analgesics +analgetic +analgetics +analgia +analgias +analities +anality +anally +analog +analogic +analogical +analogically +analogies +analogist +analogists +analogize +analogized +analogizes +analogizing +analogous +analogously +analogousness +analogousnesses +analogs +analogue +analogues +analogy +analphabet +analphabetic +analphabetics +analphabetism +analphabetisms +analphabets +analysand +analysands analyse +analysed +analyser +analysers +analyses +analysing analysis +analyst +analysts +analytic +analytical +analytically +analyticities +analyticity +analytics +analyzabilities +analyzability +analyzable +analyzation +analyzations +analyze +analyzed +analyzer +analyzers +analyzes +analyzing +anamneses +anamnesis +anamnestic +anamorphic +ananke +anankes +anapaest +anapaests +anapest +anapestic +anapestics +anapests +anaphase +anaphases +anaphasic +anaphor +anaphora +anaphoras +anaphoric +anaphorically +anaphors +anaphrodisiac +anaphrodisiacs +anaphylactic +anaphylactically +anaphylactoid +anaphylaxes +anaphylaxis +anaplasia +anaplasias +anaplasmoses +anaplasmosis +anaplastic +anarch +anarchic +anarchical +anarchically +anarchies +anarchism +anarchisms +anarchist +anarchistic +anarchists +anarchs +anarchy +anas +anasarca +anasarcas +anasarcous +anastigmat +anastigmatic +anastigmats +anastomose +anastomosed +anastomoses +anastomosing +anastomosis +anastomotic +anastrophe +anastrophes +anatase +anatases +anathema +anathemas +anathemata +anathematize +anathematized +anathematizes +anathematizing +anatomic +anatomical +anatomically +anatomies +anatomise +anatomised +anatomises +anatomising +anatomist +anatomists +anatomize +anatomized +anatomizes +anatomizing +anatomy +anatoxin +anatoxins +anatropous +anatto +anattos ancestor +ancestored +ancestoring +ancestors +ancestral +ancestrally +ancestress +ancestresses +ancestries +ancestry anchor +anchorage +anchorages +anchored +anchoress +anchoresses +anchoret +anchorets +anchoring +anchorite +anchorites +anchoritic +anchoritically +anchorless +anchorman +anchormen +anchorpeople +anchorperson +anchorpersons +anchors +anchorwoman +anchorwomen +anchoveta +anchovetas +anchovetta +anchovettas +anchovies +anchovy +anchusa +anchusas +anchusin +anchusins ancient +ancienter +ancientest +anciently +ancientness +ancientnesses +ancientries +ancientry +ancients +ancilla +ancillae +ancillaries +ancillary +ancillas +ancon +anconal +ancone +anconeal +ancones +anconoid +ancress +ancresses +ancylostomiases +ancylostomiasis and +andalusite +andalusites +andante +andantes +andantino +andantinos +andesite +andesites +andesitic +andesyte +andesytes +andiron +andirons +andouille +andouilles +andouillette +andouillettes +andradite +andradites +androcentric +androecia +androecium +androgen +androgeneses +androgenesis +androgenetic +androgenic +androgens +androgyne +androgynes +androgynies +androgynous +androgyny +android +androids +andromeda +andromedas +androsterone +androsterones +ands +ane +anear +aneared +anearing +anears +anecdota +anecdotage +anecdotages +anecdotal +anecdotalism +anecdotalisms +anecdotalist +anecdotalists +anecdotally anecdote +anecdotes +anecdotic +anecdotical +anecdotically +anecdotist +anecdotists +anechoic +anelastic +anelasticities +anelasticity +anele +aneled +aneles +aneling +anemia +anemias +anemic +anemically +anemograph +anemographs +anemometer +anemometers +anemometries +anemometry +anemone +anemones +anemophilous +anemoses +anemosis +anencephalic +anencephalies +anencephaly +anenst +anent +anergia +anergias +anergic +anergies +anergy +aneroid +aneroids +anes +anesthesia +anesthesias +anesthesiologies +anesthesiologist +anesthesiologists +anesthesiology +anesthetic +anesthetically +anesthetics +anesthetist +anesthetists +anesthetize +anesthetized +anesthetizes +anesthetizing +anestri +anestrous +anestrus +anestruses +anethol +anethole +anetholes +anethols +aneuploid +aneuploidies +aneuploids +aneuploidy +aneurin +aneurins +aneurism +aneurisms +aneurysm +aneurysmal +aneurysms +anew +anfractuosities +anfractuosity +anfractuous +anga +angakok +angakoks +angaria +angarias +angaries +angary +angas +angel +angeled +angelfish +angelfishes +angelic +angelica +angelical +angelically +angelicas +angeling +angelologies +angelologist +angelologists +angelology +angels +angelus +angeluses anger +angered +angering +angerless +angerly +angers +angina +anginal +anginas +anginose +anginous +angiocardiographic +angiocardiographies +angiocardiography +angiogeneses +angiogenesis +angiogenic +angiogram +angiograms +angiographic +angiographies +angiography +angioma +angiomas +angiomata +angiomatous +angioplasties +angioplasty +angiosperm +angiospermous +angiosperms +angiotensin +angiotensins angle +angled +anglepod +anglepods +angler +anglerfish +anglerfishes +anglers +angles +anglesite +anglesites +angleworm +angleworms +anglice +anglicise +anglicised +anglicises +anglicising +anglicism +anglicisms +anglicization +anglicizations +anglicize +anglicized +anglicizes +anglicizing +angling +anglings +anglophone +angora +angoras +angrier +angriest +angrily +angriness +angrinesses angry +angst +angstrom +angstroms +angsts +anguine +anguish +anguished +anguishes +anguishing +angular +angularities +angularity +angularly +angulate +angulated +angulates +angulating +angulation +angulations +angulose +angulous +anhedonia +anhedonias +anhedonic +anhinga +anhingas +anhydride +anhydrides +anhydrite +anhydrites +anhydrous +ani +anil +anile +anilin +anilinctus +anilinctuses +aniline +anilines +anilingus +anilinguses +anilins +anilities +anility +anils +anima +animadversion +animadversions +animadvert +animadverted +animadverting +animadverts animal +animalcula +animalcule +animalcules +animalculum +animalic +animalier +animaliers +animalism +animalisms +animalistic +animalities +animality +animalization +animalizations +animalize +animalized +animalizes +animalizing +animallike +animally +animals +animas +animate +animated +animatedly +animately +animateness +animatenesses +animater +animaters +animates +animating +animation +animations +animato +animator +animators +anime +animes +animi +animis +animism +animisms +animist +animistic +animists +animosities +animosity +animus +animuses +anion +anionic +anions +anis +anise +aniseed +aniseeds +aniseikonia +aniseikonias +aniseikonic +anises +anisette +anisettes +anisic +anisogamies +anisogamous +anisogamy +anisole +anisoles +anisometropia +anisometropias +anisometropic +anisotropic +anisotropically +anisotropies +anisotropism +anisotropisms +anisotropy +ankerite +ankerites +ankh +ankhs ankle +anklebone +anklebones +ankled +ankles +anklet +anklets +ankling +ankus +ankuses +ankush +ankushes +ankylosaur +ankylosaurs +ankylosaurus +ankylosauruses +ankylose +ankylosed +ankyloses +ankylosing +ankylosis +ankylostomiases +ankylostomiasis +ankylotic +anlace +anlaces +anlage +anlagen +anlages +anlas +anlases +anna +annal +annalist +annalistic +annalists +annals +annas +annates +annatto +annattos +anneal +annealed +annealer +annealers +annealing +anneals +annelid +annelidan +annelidans +annelids +annex +annexation +annexational +annexationist +annexationists +annexations +annexe +annexed +annexes +annexing +annihilate +annihilated +annihilates +annihilating +annihilation +annihilations +annihilator +annihilators +annihilatory +anniversaries anniversary +annotate +annotated +annotates +annotating +annotation +annotations +annotative +annotator +annotators announce +announced +announcement +announcements +announcer +announcers +announces +announcing annoy +annoyance +annoyances +annoyed +annoyer +annoyers +annoying +annoyingly +annoys annual +annualize +annualized +annualizes +annualizing +annually +annuals +annuitant +annuitants +annuities +annuity +annul +annular +annulate +annulation +annulations +annulet +annulets +annuli +annulled +annulling +annulment +annulments +annulose +annuls +annulus +annuluses +annunciate +annunciated +annunciates +annunciating +annunciation +annunciations +annunciator +annunciators +annunciatory +anoa +anoas +anodal +anodally +anode +anodes +anodic +anodically +anodization +anodizations +anodize +anodized +anodizes +anodizing +anodyne +anodynes +anodynic +anoint +anointed +anointer +anointers +anointing +anointment +anointments +anoints +anole +anoles +anolyte +anolytes +anomalies +anomalous +anomalously +anomalousness +anomalousnesses +anomaly +anomic +anomie +anomies +anomy +anon +anonym +anonymities +anonymity +anonymous +anonymously +anonymousness +anonymousnesses +anonyms +anoopsia +anoopsias +anopheles +anopheline +anophelines +anopia +anopias +anopsia +anopsias +anorak +anoraks +anorectic +anorectics +anoretic +anoretics +anorexia +anorexias +anorexic +anorexics +anorexies +anorexigenic +anorexy +anorthic +anorthite +anorthites +anorthitic +anorthosite +anorthosites +anorthositic +anosmia +anosmias +anosmic another +anovular +anovulatory +anoxemia +anoxemias +anoxemic +anoxia +anoxias +anoxic +ansa +ansae +ansate +ansated +anserine +anserines +anserous answer +answerable +answered +answerer +answerers +answering +answers ant +anta +antacid +antacids +antae +antagonism +antagonisms +antagonist +antagonistic +antagonistically +antagonists +antagonize +antagonized +antagonizes +antagonizing +antalgic +antalgics antarctic +antas +antbear +antbears +ante +anteater +anteaters +antebellum +antecede +anteceded +antecedence +antecedences +antecedent +antecedently +antecedents +antecedes +anteceding +antecessor +antecessors +antechamber +antechambers +antechapel +antechapels +antechoir +antechoirs +anted +antedate +antedated +antedates +antedating +antediluvian +antediluvians +anteed +antefix +antefixa +antefixae +antefixes +anteing +antelope +antelopes +antemortem +antenatal +antenatally +antenna +antennae +antennal +antennas +antennular +antennule +antennules +antenuptial +antepast +antepasts +antependia +antependium +antependiums +antepenult +antepenultima +antepenultimas +antepenultimate +antepenultimates +antepenults +anterior +anteriorly +anteroom +anterooms +antes +antetype +antetypes +antevert +anteverted +anteverting +anteverts +anthelia +anthelices +anthelion +anthelions +anthelix +anthelixes +anthelmintic +anthelmintics +anthem +anthemed +anthemia +antheming +anthemion +anthems +anther +antheral +antherid +antheridia +antheridial +antheridium +antherids +anthers +antheses +anthesis +anthill +anthills +anthocyan +anthocyanin +anthocyanins +anthocyans +anthodia +anthodium +anthoid +anthological +anthologies +anthologist +anthologists +anthologize +anthologized +anthologizer +anthologizers +anthologizes +anthologizing +anthology +anthophilous +anthophyllite +anthophyllites +anthozoan +anthozoans +anthracene +anthracenes +anthraces +anthracite +anthracites +anthracitic +anthracnose +anthracnoses +anthranilate +anthranilates +anthraquinone +anthraquinones +anthrax +anthropic +anthropical +anthropocentric +anthropocentrically +anthropocentricities +anthropocentricity +anthropocentrism +anthropocentrisms +anthropogenic +anthropoid +anthropoids +anthropological +anthropologically +anthropologies +anthropologist +anthropologists +anthropology +anthropometric +anthropometries +anthropometry +anthropomorph +anthropomorphic +anthropomorphically +anthropomorphism +anthropomorphisms +anthropomorphist +anthropomorphists +anthropomorphization +anthropomorphizations +anthropomorphize +anthropomorphized +anthropomorphizes +anthropomorphizing +anthropomorphs +anthropopathism +anthropopathisms +anthropophagi +anthropophagies +anthropophagous +anthropophagus +anthropophagy +anthroposophies +anthroposophy +anthurium +anthuriums +anti +antiabortion +antiabortionist +antiabortionists +antiacademic +antiacademics +antiadministration +antiaggression +antiaging +antiair +antiaircraft +antiaircrafts +antialcohol +antialcoholism +antialcoholisms +antialien +antiallergenic +antiallergenics +antianemia +antianxiety +antiapartheid +antiapartheids +antiaphrodisiac +antiaphrodisiacs +antiar +antiarin +antiarins +antiaristocratic +antiarrhythmic +antiarrhythmics +antiars +antiarthritic +antiarthritics +antiarthritis +antiassimilation +antiassimilations +antiasthma +antiatom +antiatoms +antiauthoritarian +antiauthoritarianism +antiauthoritarianisms +antiauthority +antiauxin +antiauxins +antibacklash +antibacterial +antibacterials +antibaryon +antibaryons +antibias +antibillboard +antibioses +antibiosis +antibiotic +antibiotically +antibiotics +antiblack +antiblackism +antiblackisms +antibodies +antibody +antiboss +antibourgeois +antiboycott +antiboycotts +antibug +antibureaucratic +antiburglar +antiburglary +antibusiness +antibusing +antic +anticaking +antically +anticancer +anticapitalism +anticapitalisms +anticapitalist +anticapitalists +anticar +anticarcinogen +anticarcinogenic +anticarcinogens +anticaries +anticatalyst +anticatalysts +anticathode +anticathodes +anticellulite +anticensorship +anticholesterol +anticholinergic +anticholinergics +anticholinesterase +anticholinesterases +antichurch +anticigarette +anticipant +anticipants +anticipatable +anticipate +anticipated +anticipates +anticipating +anticipation +anticipations +anticipator +anticipators +anticipatory +anticity +antick +anticked +anticking +anticks +anticlassical +anticlerical +anticlericalism +anticlericalisms +anticlericalist +anticlericalists +anticlericals +anticlimactic +anticlimactical +anticlimactically +anticlimax +anticlimaxes +anticlinal +anticline +anticlines +anticling +anticlockwise +anticlotting +anticly +anticoagulant +anticoagulants +anticodon +anticodons +anticold +anticollision +anticolonial +anticolonialism +anticolonialisms +anticolonialist +anticolonialists +anticolonials +anticommercial +anticommercialism +anticommercialisms +anticommunism +anticommunisms +anticommunist +anticommunists +anticompetitive +anticonglomerate +anticonservation +anticonservationist +anticonservationists +anticonservations +anticonsumer +anticonsumers +anticonventional +anticonvulsant +anticonvulsants +anticonvulsive +anticonvulsives +anticorporate +anticorrosion +anticorrosive +anticorrosives +anticorruption +anticorruptions +anticounterfeiting +anticrack +anticreative +anticrime +anticruelty +antics +anticult +anticultural +anticyclone +anticyclones +anticyclonic +antidandruff +antidefamation +antidemocratic +antidepressant +antidepressants +antidepression +antidepressions +antiderivative +antiderivatives +antidesegregation +antidesertification +antidesiccant +antidesiccants +antidevelopment +antidiabetic +antidiarrheal +antidilution +antidiscrimination +antidogmatic +antidora +antidotal +antidotally +antidote +antidoted +antidotes +antidoting +antidraft +antidromic +antidromically +antidrug +antidumping +antieconomic +antieducational +antiegalitarian +antielectron +antielectrons +antielite +antielites +antielitism +antielitisms +antielitist +antielitists +antiemetic +antiemetics +antientropic +antiepilepsy +antiepileptic +antiepileptics +antierotic +antiestablishment +antiestrogen +antiestrogens +antievolution +antievolutionary +antievolutionism +antievolutionisms +antievolutionist +antievolutionists +antifamily +antifascism +antifascisms +antifascist +antifascists +antifashion +antifashionable +antifashions +antifat +antifatigue +antifederalist +antifederalists +antifemale +antifeminine +antifeminism +antifeminisms +antifeminist +antifeminists +antiferromagnet +antiferromagnetic +antiferromagnetically +antiferromagnetism +antiferromagnetisms +antiferromagnets +antifertility +antifilibuster +antifilibusters +antiflu +antifluoridationist +antifluoridationists +antifoam +antifoaming +antifogging +antiforeclosure +antiforeign +antiforeigner +antiformalist +antiformalists +antifouling +antifraud +antifreeze +antifreezes +antifriction +antifrictions +antifungal +antifungals +antifur +antigambling +antigay +antigen +antigene +antigenes +antigenic +antigenically +antigenicities +antigenicity +antigens +antiglare +antiglobulin +antiglobulins +antigovernment +antigravities +antigravity +antigrowth +antiguerrilla +antiguerrillas +antigun +antihero +antiheroes +antiheroic +antiheroine +antiheroines +antiherpes +antihierarchical +antihijack +antihistamine +antihistamines +antihistaminic +antihistaminics +antihistorical +antihomosexual +antihuman +antihumanism +antihumanisms +antihumanistic +antihumanitarian +antihumanitarians +antihunter +antihunting +antihuntings +antihypertensive +antihypertensives +antihysteric +antihysterics +antijam +antijamming +antikickback +antiking +antikings +antiknock +antiknocks +antilabor +antileak +antileft +antileprosy +antilepton +antileptons +antileukemic +antiliberal +antiliberalism +antiliberalisms +antiliberals +antilibertarian +antilibertarians +antilife +antiliterate +antiliterates +antilitter +antilittering +antilock +antilog +antilogarithm +antilogarithmic +antilogarithms +antilogical +antilogies +antilogs +antilogy +antilynching +antimacassar +antimacassars +antimacho +antimagnetic +antimalaria +antimalarial +antimalarials +antimale +antiman +antimanagement +antimanagements +antimarijuana +antimarket +antimask +antimasks +antimaterialism +antimaterialisms +antimaterialist +antimaterialists +antimatter +antimatters +antimechanist +antimechanists +antimere +antimeres +antimerger +antimetabolic +antimetabolics +antimetabolite +antimetabolites +antimetaphysical +antimicrobial +antimicrobials +antimilitarism +antimilitarisms +antimilitarist +antimilitarists +antimilitary +antimiscegenation +antimissile +antimissiles +antimitotic +antimitotics +antimodern +antimodernist +antimodernists +antimoderns +antimonarchical +antimonarchist +antimonarchists +antimonial +antimonials +antimonide +antimonides +antimonies +antimonopolist +antimonopolists +antimonopoly +antimony +antimosquito +antimusical +antimycin +antimycins +antinarrative +antinational +antinationalist +antinationalists +antinatural +antinature +antinatures +antinausea +antineoplastic +antinepotism +antinepotisms +antineutrino +antineutrinos +antineutron +antineutrons +anting +antings +antinodal +antinode +antinodes +antinoise +antinomian +antinomianism +antinomianisms +antinomians +antinomic +antinomies +antinomy +antinovel +antinovelist +antinovelists +antinovels +antinuclear +antinucleon +antinucleons +antinuke +antiobesities +antiobesity +antiobscenities +antiobscenity +antiorganization +antiorganizations +antioxidant +antioxidants +antiozonant +antiozonants +antipapal +antiparallel +antiparasitic +antiparasitics +antiparticle +antiparticles +antiparty +antipasti +antipasto +antipastos +antipathetic +antipathetically +antipathies +antipathy +antiperiodic +antipersonnel +antiperspirant +antiperspirants +antipesticide +antiphlogistic +antiphon +antiphonal +antiphonally +antiphonals +antiphonaries +antiphonary +antiphonies +antiphons +antiphony +antiphrases +antiphrasis +antipill +antipiracies +antipiracy +antiplague +antiplagues +antiplaque +antipleasure +antipleasures +antipoaching +antipodal +antipodals +antipode +antipodean +antipodeans +antipodes +antipoetic +antipole +antipoles +antipolice +antipolitical +antipolitics +antipollution +antipollutions +antipope +antipopes +antipopular +antiporn +antipornographic +antipornography +antipot +antipoverty +antipredator +antipredators +antipress +antiprofiteering +antiprogressive +antiprostitution +antiproton +antiprotons +antipruritic +antipruritics +antipsychotic +antipsychotics +antipyic +antipyics +antipyreses +antipyresis +antipyretic +antipyretics +antipyrine +antipyrines +antiquarian +antiquarianism +antiquarianisms +antiquarians +antiquaries +antiquark +antiquarks +antiquary +antiquate +antiquated +antiquates +antiquating +antiquation +antiquations antique +antiqued +antiquer +antiquers +antiques +antiquing +antiquities +antiquity +antirabies +antirachitic +antiracism +antiracisms +antiracist +antiracists +antiracketeering +antiradar +antiradical +antiradicalism +antiradicalisms +antirape +antirational +antirationalism +antirationalisms +antirationalist +antirationalists +antirationalities +antirationality +antirealism +antirealisms +antirealist +antirealists +antirecession +antirecessionary +antirecessions +antired +antireductionism +antireductionisms +antireductionist +antireductionists +antireflection +antireflective +antireform +antiregulatory +antirejection +antireligion +antireligious +antirevolutionaries +antirevolutionary +antirheumatic +antirheumatics +antiriot +antiritualism +antiritualisms +antirock +antiroll +antiromantic +antiromanticism +antiromanticisms +antiromantics +antiroyalist +antiroyalists +antirrhinum +antirrhinums +antirust +antirusts +antis +antisag +antisatellite +antischizophrenia +antischizophrenic +antiscience +antisciences +antiscientific +antiscorbutic +antiscorbutics +antisecrecy +antisegregation +antiseizure +antisense +antisentimental +antiseparatist +antiseparatists +antisepses +antisepsis +antiseptic +antiseptically +antiseptics +antisera +antiserum +antiserums +antisex +antisexist +antisexists +antisexual +antisexualities +antisexuality +antishark +antiship +antishock +antishoplifting +antiskid +antislaveries +antislavery +antisleep +antislip +antismog +antismoke +antismoker +antismokers +antismoking +antismuggling +antismut +antisnob +antisocial +antisocialist +antisocialists +antisocially +antisolar +antispasmodic +antispasmodics +antispeculation +antispeculative +antispending +antistat +antistate +antistatic +antistick +antistories +antistory +antistress +antistrike +antistrophe +antistrophes +antistrophic +antistrophically +antistudent +antisubmarine +antisubsidy +antisubversion +antisubversions +antisubversive +antisubversives +antisuicide +antisymmetric +antisyphilitic +antisyphilitics +antitakeover +antitank +antitarnish +antitax +antitechnological +antitechnologies +antitechnology +antiterrorism +antiterrorisms +antiterrorist +antiterrorists +antitheft +antitheoretical +antitheses +antithesis +antithetic +antithetical +antithetically +antithrombin +antithrombins +antithyroid +antitobacco +antitotalitarian +antitoxic +antitoxin +antitoxins +antitrades +antitraditional +antitrust +antitruster +antitrusters +antitubercular +antituberculosis +antituberculous +antitumor +antitumoral +antitussive +antitussives +antitype +antitypes +antityphoid +antiulcer +antiunemployment +antiunion +antiuniversities +antiuniversity +antiurban +antivenin +antivenins +antiviolence +antiviral +antivirus +antivitamin +antivitamins +antivivisection +antivivisectionist +antivivisectionists +antiwar +antiwear +antiweed +antiwelfare +antiwhaling +antiwhite +antiwoman +antiwrinkle +antler +antlered +antlers +antlike +antlion +antlions +antonomasia +antonomasias +antonym +antonymic +antonymies +antonymous +antonyms +antonymy +antra +antral +antre +antres +antrorse +antrum +antrums +ants +antsier +antsiest +antsy +anural +anuran +anurans +anureses +anuresis +anuretic +anuria +anurias +anuric +anurous +anus +anuses +anvil +anviled +anviling +anvilled +anvilling +anvils +anviltop +anviltops +anxieties anxiety +anxiolytic +anxiolytics anxious +anxiously +anxiousness +anxiousnesses any +anybodies anybody anyhow +anymore anyone +anyplace anything +anythings +anytime anyway +anyways anywhere +anywheres +anywise +aorist +aoristic +aoristically +aorists +aorta +aortae +aortal +aortas +aortic +aortographic +aortographies +aortography +aoudad +aoudads +apace +apache +apaches +apagoge +apagoges +apagogic +apanage +apanages +aparejo +aparejos apart +apartheid +apartheids apartment +apartmental +apartments +apartness +apartnesses +apatetic +apathetic +apathetically +apathies +apathy +apatite +apatites +apatosaurus +apatosauruses +ape +apeak +aped +apeek +apelike +aper +apercu +apercus +aperient +aperients +aperies +aperiodic +aperiodically +aperiodicities +aperiodicity +aperitif +aperitifs +apers +aperture +apertures +apery +apes +apetalies +apetalous +apetaly +apex +apexes +aphaereses +aphaeresis +aphaeretic +aphagia +aphagias +aphanite +aphanites +aphanitic +aphasia +aphasiac +aphasiacs +aphasias +aphasic +aphasics +aphelia +aphelian +aphelion +aphelions +aphereses +apheresis +apheses +aphesis +aphetic +aphetically +aphid +aphides +aphidian +aphidians +aphids +aphis +apholate +apholates +aphonia +aphonias +aphonic +aphonics +aphorise +aphorised +aphorises +aphorising +aphorism +aphorisms +aphorist +aphoristic +aphoristically +aphorists +aphorize +aphorized +aphorizes +aphorizing +aphotic +aphrodisiac +aphrodisiacal +aphrodisiacs +aphtha +aphthae +aphthous +aphyllies +aphylly +apian +apiarian +apiarians +apiaries +apiarist +apiarists +apiary +apical +apically +apicals +apices +apiculate +apiculi +apicultural +apiculture +apicultures +apiculturist +apiculturists +apiculus +apiece +apimania +apimanias +aping +apiologies +apiology +apish +apishly +apishness +apishnesses +aplanatic +aplasia +aplasias +aplastic +aplenty +aplite +aplites +aplitic +aplomb +aplombs +apnea +apneal +apneas +apneic +apnoea +apnoeal +apnoeas +apnoeic +apoapsides +apoapsis +apocalypse +apocalypses +apocalyptic +apocalyptical +apocalyptically +apocalypticism +apocalypticisms +apocalyptism +apocalyptisms +apocalyptist +apocalyptists +apocarp +apocarpies +apocarps +apocarpy +apochromatic +apocope +apocopes +apocopic +apocrine +apocrypha +apocryphal +apocryphally +apocryphalness +apocryphalnesses +apod +apodal +apodeictic +apodictic +apodictically +apodoses +apodosis +apodous +apods +apoenzyme +apoenzymes +apogamic +apogamies +apogamous +apogamy +apogeal +apogean +apogee +apogees +apogeic +apolipoprotein +apolipoproteins +apolitical +apolitically +apollo +apollos +apolog +apologal +apologetic +apologetically +apologetics +apologia +apologiae +apologias +apologies +apologise +apologised +apologises +apologising +apologist +apologists apologize +apologized +apologizer +apologizers +apologizes +apologizing +apologs +apologue +apologues apology +apolune +apolunes +apomict +apomictic +apomictically +apomicts +apomixes +apomixis +apomorphine +apomorphines +aponeuroses +aponeurosis +aponeurotic +apophonies +apophony +apophthegm +apophthegms +apophyge +apophyges +apophyllite +apophyllites +apophyseal +apophyses +apophysis +apoplectic +apoplectically +apoplexies +apoplexy +aport +aposematic +aposematically +aposiopeses +aposiopesis +aposiopetic +apospories +aposporous +apospory +apostacies +apostacy +apostasies +apostasy +apostate +apostates +apostatise +apostatised +apostatises +apostatising +apostatize +apostatized +apostatizes +apostatizing +apostil +apostils +apostle +apostles +apostleship +apostleships +apostolate +apostolates +apostolic +apostolicities +apostolicity +apostrophe +apostrophes +apostrophic +apostrophise +apostrophised +apostrophises +apostrophising +apostrophize +apostrophized +apostrophizes +apostrophizing +apothecaries +apothecary +apothece +apotheces +apothecia +apothecial +apothecium +apothegm +apothegmatic +apothegms +apothem +apothems +apotheoses +apotheosis +apotheosize +apotheosized +apotheosizes +apotheosizing +apotropaic +apotropaically +appal +appall +appalled +appalling +appallingly +appalls +appals +appanage +appanages +apparat +apparatchik +apparatchiki +apparatchiks +apparats +apparatus +apparatuses +apparel +appareled +appareling +apparelled +apparelling +apparels apparent +apparently +apparentness +apparentnesses +apparition +apparitional +apparitions +apparitor +apparitors appeal +appealabilities +appealability +appealable +appealed +appealer +appealers +appealing +appealingly +appeals appear appearance +appearances +appeared +appearing +appears +appeasable +appease +appeased +appeasement +appeasements +appeaser +appeasers +appeases +appeasing +appel +appellant +appellants +appellate +appellation +appellations +appellative +appellatively +appellatives +appellee +appellees +appellor +appellors +appels +append +appendage +appendages +appendant +appendants +appendectomies +appendectomy +appended +appendicectomies +appendicectomy +appendices +appendicites +appendicitides +appendicitis +appendicitises +appendicular +appending appendix +appendixes +appends +apperceive +apperceived +apperceives +apperceiving +apperception +apperceptions +apperceptive +appertain +appertained +appertaining +appertains +appestat +appestats +appetence +appetences +appetencies +appetency +appetent +appetiser +appetisers +appetising appetite +appetites +appetitive +appetizer +appetizers +appetizing +appetizingly applaud +applaudable +applaudably +applauded +applauder +applauders +applauding +applauds +applause +applauses apple +applecart +applecarts +applejack +applejacks +apples +applesauce +applesauces +appliance +appliances +applicabilities +applicability +applicable applicant +applicants application +applications +applicative +applicatively +applicator +applicators +applicatory +applied +applier +appliers +applies +applique +appliqued +appliqueing +appliques apply +applying +appoggiatura +appoggiaturas appoint +appointed +appointee +appointees +appointing +appointive appointment +appointments +appoints +apportion +apportionable +apportioned +apportioning +apportionment +apportionments +apportions +appose +apposed +apposer +apposers +apposes +apposing +apposite +appositely +appositeness +appositenesses +apposition +appositional +appositions +appositive +appositively +appositives +appraisal +appraisals +appraise +appraised +appraisee +appraisees +appraisement +appraisements +appraiser +appraisers +appraises +appraising +appraisingly +appraisive +appreciable +appreciably appreciate +appreciated +appreciates +appreciating appreciation +appreciations +appreciative +appreciatively +appreciativeness +appreciativenesses +appreciator +appreciators +appreciatory +apprehend +apprehended +apprehending +apprehends +apprehensible +apprehensibly +apprehension +apprehensions +apprehensive +apprehensively +apprehensiveness +apprehensivenesses +apprentice +apprenticed +apprentices +apprenticeship +apprenticeships +apprenticing +appressed +appressoria +appressorium +apprise +apprised +appriser +apprisers +apprises +apprising +apprize +apprized +apprizer +apprizers +apprizes +apprizing +approach +approachabilities +approachability +approachable +approached +approaches +approaching +approbate +approbated +approbates +approbating +approbation +approbations +approbatory +appropriable appropriate +appropriated +appropriately +appropriateness +appropriatenesses +appropriates +appropriating +appropriation +appropriations +appropriative +appropriator +appropriators +approvable +approvably approval +approvals approve +approved +approver +approvers +approves +approving +approvingly +approximate +approximated approximately +approximates +approximating +approximation +approximations +approximative +appulse +appulses +appurtenance +appurtenances +appurtenant +appurtenants +apractic +apraxia +apraxias +apraxic +apres +apricot +apricots +apriorities +apriority apron +aproned +aproning +aprons +apropos +aprotic +apse +apses +apsidal +apsides +apsis +apt +apter +apteral +apteria +apterium +apterous +apteryx +apteryxes +aptest +aptitude +aptitudes +aptitudinal +aptitudinally +aptly +aptness +aptnesses +apyrase +apyrases +apyretic +aqua +aquacade +aquacades +aquacultural +aquaculture +aquacultures +aquaculturist +aquaculturists +aquae +aquamarine +aquamarines +aquanaut +aquanauts +aquaplane +aquaplaned +aquaplaner +aquaplaners +aquaplanes +aquaplaning +aquarelle +aquarelles +aquarellist +aquarellists +aquaria +aquarial +aquarian +aquarians +aquarist +aquarists +aquarium +aquariums +aquas +aquatic +aquatically +aquatics +aquatint +aquatinted +aquatinter +aquatinters +aquatinting +aquatintist +aquatintists +aquatints +aquatone +aquatones +aquavit +aquavits +aqueduct +aqueducts +aqueous +aquiculture +aquicultures +aquifer +aquiferous +aquifers +aquilegia +aquilegias +aquiline +aquilinities +aquilinity +aquiver +ar +arabesk +arabesks +arabesque +arabesques +arabic +arabica +arabicas +arabicization +arabicizations +arabicize +arabicized +arabicizes +arabicizing +arabilities +arability +arabinose +arabinoses +arabinoside +arabinosides +arabize +arabized +arabizes +arabizing +arable +arables +araceous +arachnid +arachnids +arachnoid +arachnoids +aragonite +aragonites +aragonitic +arak +araks +aramid +aramids +araneid +araneids +arapaima +arapaimas +araroba +ararobas +araucaria +araucarian +araucarias +arb +arbalest +arbalests +arbalist +arbalists +arbelest +arbelests +arbiter +arbiters +arbitrable +arbitrage +arbitraged +arbitrager +arbitragers +arbitrages +arbitrageur +arbitrageurs +arbitraging +arbitral +arbitrament +arbitraments +arbitrarily +arbitrariness +arbitrarinesses arbitrary +arbitrate +arbitrated +arbitrates +arbitrating +arbitration +arbitrational +arbitrations +arbitrative +arbitrator +arbitrators +arbor +arboreal +arboreally +arbored +arboreous +arbores +arborescence +arborescences +arborescent +arboreta +arboretum +arboretums +arboricultural +arboriculture +arboricultures +arborist +arborists +arborization +arborizations +arborize +arborized +arborizes +arborizing +arborous +arbors +arborvitae +arborvitaes +arbour +arboured +arbours +arbovirus +arboviruses +arbs +arbuscle +arbuscles +arbute +arbutean +arbutes +arbutus +arbutuses +arc +arcade +arcaded +arcades +arcadia +arcadian +arcadians +arcadias +arcading +arcadings +arcana +arcane +arcanum +arcanums +arcature +arcatures +arccosine +arccosines +arced arch +archaebacteria +archaebacterium +archaeoastronomies +archaeoastronomy +archaeological +archaeologically +archaeologies +archaeologist +archaeologists +archaeology +archaeopteryx +archaeopteryxes +archaic +archaically +archaise +archaised +archaises +archaising +archaism +archaisms +archaist +archaistic +archaists +archaize +archaized +archaizes +archaizing +archangel +archangelic +archangels +archbishop +archbishopric +archbishoprics +archbishops +archconservative +archconservatives +archdeacon +archdeaconries +archdeaconry +archdeacons +archdiocesan +archdiocese +archdioceses +archducal +archduchess +archduchesses +archduchies +archduchy +archduke +archdukedom +archdukedoms +archdukes +arched +archegonia +archegonial +archegoniate +archegoniates +archegonium +archenemies +archenemy +archenteron +archenterons +archeological +archeologically +archeologies +archeologist +archeologists +archeology +archer +archerfish +archerfishes +archeries +archers +archery +arches +archesporia +archesporial +archesporium +archetypal +archetypally +archetype +archetypes +archetypical +archfiend +archfiends +archidiaconal +archiepiscopal +archiepiscopally +archiepiscopate +archiepiscopates +archil +archils +archimandrite +archimandrites +archine +archines +arching +archings +archipelagic +archipelago +archipelagoes +archipelagos +architect +architectonic +architectonically +architectonics +architects +architectural +architecturally architecture +architectures +architrave +architraves +archival +archive +archived +archives +archiving +archivist +archivists +archivolt +archivolts +archly +archness +archnesses +archon +archons +archosaur +archosaurian +archosaurs +archpriest +archpriests +archway +archways +arciform +arcing +arcked +arcking +arco +arcs +arcsine +arcsines +arctangent +arctangents arctic +arctically +arctics +arcuate +arcuated +arcuately +arcus +arcuses +ardeb +ardebs +ardencies +ardency +ardent +ardently +ardor +ardors +ardour +ardours +arduous +arduously +arduousness +arduousnesses are area +areae +areal +areally +areas +areaway +areaways +areca +arecas +arecoline +arecolines +areic +arena +arenaceous +arenas +arenicolous +arenite +arenites +arenose +arenous +areocentric +areola +areolae +areolar +areolas +areolate +areole +areoles +areologies +areology +ares +arete +aretes +arethusa +arethusas +arf +arfs +argal +argala +argalas +argali +argalis +argals +argent +argental +argentic +argentiferous +argentine +argentines +argentite +argentites +argents +argentum +argentums +argil +argillaceous +argillite +argillites +argils +arginase +arginases +arginine +arginines +argle +argled +argles +argling +argol +argols +argon +argonaut +argonauts +argons +argosies +argosy +argot +argotic +argots +arguable +arguably argue +argued +arguer +arguers +argues +argufied +argufier +argufiers +argufies +argufy +argufying +arguing argument +argumenta +argumentation +argumentations +argumentative +argumentatively +argumentive +arguments +argumentum +argus +arguses +argyle +argyles +argyll +argylls +arhat +arhats +arhatship +arhatships +aria +arias +ariboflavinoses +ariboflavinosis +ariboflavinosises +arid +arider +aridest +aridities +aridity +aridly +aridness +aridnesses +ariel +ariels +arietta +ariettas +ariette +ariettes +aright +aril +ariled +arillate +arillode +arillodes +arilloid +arils +ariose +ariosi +arioso +ariosos arise +arisen +arises +arising +arista +aristae +aristas +aristate +aristo +aristocracies +aristocracy +aristocrat +aristocratic +aristocratically +aristocrats +aristos arithmetic +arithmetical +arithmetically +arithmetician +arithmeticians +arithmetics +ark +arkose +arkoses +arkosic +arks +arles arm +armada +armadas +armadillo +armadillos +armagnac +armagnacs +armament +armamentaria +armamentarium +armaments +armature +armatured +armatures +armaturing +armband +armbands armchair +armchairs +armed +armer +armers +armet +armets +armful +armfuls +armhole +armholes +armies +armiger +armigeral +armigero +armigeros +armigerous +armigers +armilla +armillae +armillas +arming +armings +armistice +armistices +armless +armlet +armlets +armlike +armload +armloads +armlock +armlocks +armoire +armoires +armonica +armonicas +armor +armored +armorer +armorers +armorial +armorially +armorials +armories +armoring +armorless +armors +armory +armour +armoured +armourer +armourers +armouries +armouring +armours +armoury +armpit +armpits +armrest +armrests +arms +armsful +armure +armures army +armyworm +armyworms +arnatto +arnattos +arnica +arnicas +arnotto +arnottos +aroid +aroids +aroint +arointed +arointing +aroints +aroma +aromas +aromatherapies +aromatherapist +aromatherapists +aromatherapy +aromatic +aromatically +aromaticities +aromaticity +aromatics +aromatization +aromatizations +aromatize +aromatized +aromatizes +aromatizing +arose around +arousal +arousals +arouse +aroused +arouser +arousers +arouses +arousing +aroynt +aroynted +aroynting +aroynts +arpeggiate +arpeggiated +arpeggiates +arpeggiating +arpeggio +arpeggios +arpen +arpens +arpent +arpents +arquebus +arquebuses +arrack +arracks +arraign +arraigned +arraigning +arraignment +arraignments +arraigns arrange +arranged arrangement +arrangements +arranger +arrangers +arranges +arranging +arrant +arrantly +arras +arrased +array +arrayal +arrayals +arrayed +arrayer +arrayers +arraying +arrays +arrear +arrearage +arrearages +arrears arrest +arrestant +arrestants +arrested +arrestee +arrestees +arrester +arresters +arresting +arrestingly +arrestment +arrestments +arrestor +arrestors +arrests +arrhizal +arrhythmia +arrhythmias +arrhythmic +arris +arrises arrival +arrivals arrive +arrived +arriver +arrivers +arrives +arriving +arriviste +arrivistes +arroba +arrobas +arrogance +arrogances +arrogant +arrogantly +arrogate +arrogated +arrogates +arrogating +arrogation +arrogations +arrondissement +arrondissements arrow +arrowed +arrowhead +arrowheads +arrowing +arrowroot +arrowroots +arrows +arrowwood +arrowwoods +arrowworm +arrowworms +arrowy +arroyo +arroyos +ars +arse +arsenal +arsenals +arsenate +arsenates +arsenic +arsenical +arsenicals +arsenics +arsenide +arsenides +arsenious +arsenite +arsenites +arseno +arsenopyrite +arsenopyrites +arsenous +arses +arshin +arshins +arsine +arsines +arsino +arsis +arson +arsonist +arsonists +arsonous +arsons +arsphenamine +arsphenamines art +artal +artefact +artefacts +artel +artels +artemisia +artemisias +arterial +arterially +arterials +arteries +arteriogram +arteriograms +arteriographic +arteriographies +arteriography +arteriolar +arteriole +arterioles +arterioscleroses +arteriosclerosis +arteriosclerotic +arteriosclerotics +arteriovenous +arteritides +arteritis +artery +artful +artfully +artfulness +artfulnesses +arthralgia +arthralgias +arthralgic +arthritic +arthritically +arthritics +arthritides +arthritis +arthrodeses +arthrodesis +arthropathies +arthropathy +arthropod +arthropodan +arthropods +arthroscope +arthroscopes +arthroscopic +arthroscopies +arthroscopy +arthroses +arthrosis +arthrospore +arthrospores +artichoke +artichokes article +articled +articles +articling +articulable +articulacies +articulacy +articular +articulate +articulated +articulately +articulateness +articulatenesses +articulates +articulating +articulation +articulations +articulative +articulator +articulators +articulatory +artier +artiest +artifact +artifacts +artifactual +artifice +artificer +artificers +artifices artificial +artificialities +artificiality +artificially +artificialness +artificialnesses +artilleries +artillerist +artillerists +artillery +artilleryman +artillerymen +artily +artiness +artinesses +artiodactyl +artiodactyls +artisan +artisanal +artisans +artisanship +artisanships artist +artiste +artistes +artistic +artistically +artistries +artistry +artists +artless +artlessly +artlessness +artlessnesses +arts +artsier +artsiest +artsy +artwork +artworks +arty +arugola +arugolas +arugula +arugulas +arum +arums +aruspex +aruspices +arval +arvo +arvos +aryl +aryls +arytenoid +arytenoids +arythmia +arythmias +arythmic as +asafetida +asafetidas +asafoetida +asafoetidas +asana +asanas +asarum +asarums +asbestic +asbestos +asbestoses +asbestosis +asbestus +asbestuses +ascariases +ascariasis +ascarid +ascarides +ascarids +ascaris +ascend +ascendable +ascendance +ascendances +ascendancies +ascendancy +ascendant +ascendantly +ascendants +ascended +ascendence +ascendences +ascendencies +ascendency +ascendent +ascendents +ascender +ascenders +ascendible +ascending +ascends +ascension +ascensional +ascensions +ascensive +ascent +ascents +ascertain +ascertainable +ascertained +ascertaining +ascertainment +ascertainments +ascertains +asceses +ascesis +ascetic +ascetical +ascetically +asceticism +asceticisms +ascetics +asci +ascidia +ascidian +ascidians +ascidium +ascites +ascitic +asclepiad +asclepiads +ascocarp +ascocarpic +ascocarps +ascogonia +ascogonium +ascomycete +ascomycetes +ascomycetous +ascorbate +ascorbates +ascorbic +ascospore +ascospores +ascosporic +ascot +ascots +ascribable +ascribe +ascribed +ascribes +ascribing +ascription +ascriptions +ascriptive +ascus +asdic +asdics +asea +asepses +asepsis +aseptic +aseptically +asexual +asexualities +asexuality +asexually ash ashamed -asia -asian +ashamedly +ashcan +ashcans +ashed +ashen +ashes +ashfall +ashfalls +ashier +ashiest +ashiness +ashinesses +ashing +ashlar +ashlared +ashlaring +ashlars +ashler +ashlered +ashlering +ashlers +ashless +ashman +ashmen +ashore +ashplant +ashplants +ashram +ashrams +ashtray +ashtrays +ashy aside +asides +asinine +asininely +asininities +asininity ask +askance +askant +asked +asker +askers +askeses +askesis +askew +askewness +askewnesses +asking +askings +askoi +askos +asks +aslant asleep +aslope +asocial +asp +asparagine +asparagines +asparagus +asparkle +aspartame +aspartames +aspartate +aspartates aspect +aspects +aspectual +aspen +aspens +asper +asperate +asperated +asperates +asperating +asperges +aspergilla +aspergilli +aspergilloses +aspergillosis +aspergillum +aspergillums +aspergillus +asperities +asperity +aspers +asperse +aspersed +asperser +aspersers +asperses +aspersing +aspersion +aspersions +aspersor +aspersors +asphalt +asphalted +asphaltic +asphalting +asphaltite +asphaltites +asphalts +asphaltum +asphaltums +aspheric +aspherical +asphodel +asphodels +asphyxia +asphyxias +asphyxiate +asphyxiated +asphyxiates +asphyxiating +asphyxiation +asphyxiations +asphyxies +asphyxy +aspic +aspics +aspidistra +aspidistras +aspirant +aspirants +aspirata +aspiratae +aspirate +aspirated +aspirates +aspirating +aspiration +aspirational +aspirations +aspirator +aspirators +aspire +aspired +aspirer +aspirers +aspires +aspirin +aspiring +aspirins +aspis +aspises +aspish +asps +asquint +asrama +asramas +ass +assagai +assagaied +assagaiing +assagais +assai +assail +assailable +assailant +assailants +assailed +assailer +assailers +assailing +assails +assais +assassin +assassinate +assassinated +assassinates +assassinating +assassination +assassinations +assassinator +assassinators +assassins +assault +assaulted +assaulter +assaulters +assaulting +assaultive +assaultively +assaultiveness +assaultivenesses +assaults +assay +assayed +assayer +assayers +assaying +assays +assegai +assegaied +assegaiing +assegais +assemblage +assemblages +assemblagist +assemblagists +assemble +assembled +assembler +assemblers +assembles +assemblies +assembling +assembly +assemblyman +assemblymen +assemblywoman +assemblywomen +assent +assentation +assentations +assented +assenter +assenters +assenting +assentor +assentors +assents +assert +asserted +assertedly +asserter +asserters +asserting +assertion +assertions +assertive +assertively +assertiveness +assertivenesses +assertor +assertors +asserts +asses assess +assessable +assessed +assesses +assessing assessment +assessments +assessor +assessors +asset +assets +asseverate +asseverated +asseverates +asseverating +asseveration +asseverations +asseverative +asshole +assholes +assiduities +assiduity +assiduous +assiduously +assiduousness +assiduousnesses +assign +assignabilities +assignability +assignable +assignat +assignation +assignations +assignats +assigned +assignee +assignees +assigner +assigners +assigning +assignment +assignments +assignor +assignors +assigns +assimilabilities +assimilability +assimilable +assimilate +assimilated +assimilates +assimilating +assimilation +assimilationism +assimilationisms +assimilationist +assimilationists +assimilations +assimilative +assimilator +assimilators +assimilatory assist assistance +assistances assistant +assistants +assistantship +assistantships +assisted +assister +assisters +assisting +assistor +assistors +assists +assize +assizes +asslike associate +associated +associates +associateship +associateships +associating association +associational +associationism +associationisms +associationist +associationistic +associationists +associations +associative +associatively +associativities +associativity +assoil +assoiled +assoiling +assoilment +assoilments +assoils +assonance +assonances +assonant +assonantal +assonants +assort +assortative +assortatively +assorted +assorter +assorters +assorting +assortment +assortments +assorts +assuage +assuaged +assuagement +assuagements +assuages +assuaging +assuasive +assumabilities +assumability +assumable +assumably assume +assumed +assumer +assumers +assumes +assuming +assumpsit +assumpsits assumption +assumptions +assumptive +assurance +assurances +assure +assured +assuredly +assuredness +assurednesses +assureds +assurer +assurers +assures +assurgent +assuring +assuror +assurors +asswage +asswaged +asswages +asswaging +astarboard +astasia +astasias +astatic +astatine +astatines +aster +asteria +asterias +asteriated +asterisk +asterisked +asterisking +asteriskless +asterisks +asterism +asterisms +astern +asternal +asteroid +asteroidal +asteroids +asters +asthenia +asthenias +asthenic +asthenics +asthenies +asthenosphere +asthenospheres +asthenospheric +astheny +asthma +asthmas +asthmatic +asthmatically +asthmatics +astigmatic +astigmatics +astigmatism +astigmatisms +astigmia +astigmias +astilbe +astilbes +astir +astomous +astonied +astonies astonish +astonished +astonishes +astonishing +astonishingly +astonishment +astonishments +astony +astonying +astound +astounded +astounding +astoundingly +astounds +astraddle +astragal +astragals +astrakhan +astrakhans +astral +astrally +astrals +astray +astrict +astricted +astricting +astricts +astride +astringe +astringed +astringencies +astringency +astringent +astringently +astringents +astringes +astringing +astrobiologies +astrobiologist +astrobiologists +astrobiology +astrocyte +astrocytes +astrocytic +astrocytoma +astrocytomas +astrocytomata +astrodome +astrodomes +astrolabe +astrolabes +astrologer +astrologers +astrological +astrologically +astrologies +astrology +astrometric +astrometries +astrometry astronaut +astronautic +astronautical +astronautically +astronautics +astronauts astronomer +astronomers +astronomic +astronomical +astronomically +astronomies astronomy +astrophotograph +astrophotographer +astrophotographers +astrophotographies +astrophotographs +astrophotography +astrophysical +astrophysically +astrophysicist +astrophysicists +astrophysics +astute +astutely +astuteness +astutenesses +astylar +asunder +aswarm +aswirl +aswoon +asyla +asylum +asylums +asymmetric +asymmetrical +asymmetrically +asymmetries +asymmetry +asymptomatic +asymptomatically +asymptote +asymptotes +asymptotic +asymptotically +asynapses +asynapsis +asynchronies +asynchronism +asynchronisms +asynchronous +asynchronously +asynchrony +asyndeta +asyndetic +asyndetically +asyndeton +asyndetons at +atabal +atabals +atactic +ataghan +ataghans +atalaya +atalayas +ataman +atamans +atamasco +atamascos +atap +ataps +ataractic +ataractics +ataraxia +ataraxias +ataraxic +ataraxics +ataraxies +ataraxy +atavic +atavism +atavisms +atavist +atavistic +atavistically +atavists +ataxia +ataxias +ataxic +ataxics +ataxies +ataxy +ate +atechnic +atelectases +atelectasis +atelic +atelier +ateliers +atemoya +atemoyas +atemporal +ates +athanasies +athanasy +atheism +atheisms +atheist +atheistic +atheistical +atheistically +atheists +atheling +athelings +athenaeum +athenaeums +atheneum +atheneums +atheoretical +atherogeneses +atherogenesis +atherogenic +atheroma +atheromas +atheromata +atheromatous +atheroscleroses +atherosclerosis +atherosclerotic +athetoid +athirst athlete +athletes athletic -atlantic +athletically +athleticism +athleticisms +athletics +athodyd +athodyds +athrocyte +athrocytes +athwart +athwartship +athwartships +atilt +atingle +atlantes +atlas +atlases +atlatl +atlatls +atma +atman +atmans +atmas +atmometer +atmometers atmosphere +atmosphered +atmospheres +atmospheric +atmospherically +atmospherics +atoll +atolls atom +atomic +atomical +atomically +atomics +atomies +atomise +atomised +atomiser +atomisers +atomises +atomising +atomism +atomisms +atomist +atomistic +atomistically +atomists +atomization +atomizations +atomize +atomized +atomizer +atomizers +atomizes +atomizing +atoms +atomy +atonable +atonal +atonalism +atonalisms +atonalist +atonalists +atonalities +atonality +atonally +atone +atoned +atonement +atonements +atoner +atoners +atones +atonic +atonics +atonies +atoning +atony +atop +atopic +atopies +atopy +atrabilious +atrabiliousness +atrabiliousnesses +atrazine +atrazines +atremble +atresia +atresias +atria +atrial +atrioventricular +atrip +atrium +atriums +atrocious +atrociously +atrociousness +atrociousnesses +atrocities +atrocity +atrophia +atrophias +atrophic +atrophied +atrophies +atrophy +atrophying +atropin +atropine +atropines +atropins +atropism +atropisms +att +attaboy attach +attachable +attache +attached +attacher +attachers +attaches +attaching +attachment +attachments attack +attacked +attacker +attackers +attacking +attackman +attackmen +attacks attain +attainabilities +attainability +attainable +attainder +attainders +attained +attainer +attainers +attaining +attainment +attainments +attains +attaint +attainted +attainting +attaints +attar +attars +attemper +attempered +attempering +attempers attempt +attemptable +attempted +attempting +attempts attend +attendance +attendances +attendant +attendants +attended +attendee +attendees +attender +attenders +attending +attends +attent attention +attentional +attentions +attentive +attentively +attentiveness +attentivenesses +attenuate +attenuated +attenuates +attenuating +attenuation +attenuations +attenuator +attenuators +attest +attestation +attestations +attested +attester +attesters +attesting +attestor +attestors +attests +attic +atticism +atticisms +atticist +atticists +attics +attire +attired +attires +attiring attitude +attitudes +attitudinal +attitudinally +attitudinise +attitudinised +attitudinises +attitudinising +attitudinize +attitudinized +attitudinizes +attitudinizing +attorn +attorned +attorney +attorneys +attorneyship +attorneyships +attorning +attornment +attornments +attorns attract +attractance +attractances +attractancies +attractancy +attractant +attractants +attracted +attracting attraction +attractions attractive +attractively +attractiveness +attractivenesses +attractor +attractors +attracts +attributable +attribute +attributed +attributes +attributing +attribution +attributional +attributions +attributive +attributively +attributives +attrite +attrited +attrition +attritional +attritions +attune +attuned +attunement +attunements +attunes +attuning +atwain +atween +atwitter +atypic +atypical +atypicalities +atypicality +atypically +aubade +aubades +auberge +auberges +aubergine +aubergines +aubretia +aubretias +aubrieta +aubrietas +auburn +auburns +auction +auctioned +auctioneer +auctioneers +auctioning +auctions +auctorial +aucuba +aucubas +audacious +audaciously +audaciousness +audaciousnesses +audacities +audacity +audad +audads +audial +audibilities +audibility +audible +audibles +audibly audience +audiences +audient +audients +audile +audiles +auding +audings +audio +audiocassette +audiocassettes +audiogenic +audiogram +audiograms +audiologic +audiological +audiologies +audiologist +audiologists +audiology +audiometer +audiometers +audiometric +audiometries +audiometry +audiophile +audiophiles +audios +audiotape +audiotapes +audiovisual +audiovisuals +audit +auditable +audited +auditing +audition +auditioned +auditioning +auditions +auditive +auditives +auditor +auditoria +auditories +auditorily +auditorium +auditoriums +auditors +auditory +audits +augend +augends +auger +augers +aught +aughts +augite +augites +augitic +augment +augmentation +augmentations +augmentative +augmentatives +augmented +augmenter +augmenters +augmenting +augmentor +augmentors +augments +augur +augural +augured +augurer +augurers +auguries +auguring +augurs +augury +august +auguster +augustest +augustly +augustness +augustnesses +auk +auklet +auklets +auks +auld +aulder +auldest +aulic aunt +aunthood +aunthoods +auntie +aunties +auntlier +auntliest +auntlike +auntly +aunts +aunty +aura +aurae +aural +aurally +aurar +auras +aurate +aurated +aureate +aurei +aureola +aureolae +aureolas +aureole +aureoled +aureoles +aureoling +aures +aureus +auric +auricle +auricled +auricles +auricula +auriculae +auricular +auriculas +auriculate +auriferous +auriform +auris +aurist +aurists +aurochs +aurochses +aurora +aurorae +auroral +auroras +aurorean +aurous +aurum +aurums +auscultate +auscultated +auscultates +auscultating +auscultation +auscultations +auscultatory +ausform +ausformed +ausforming +ausforms +auslander +auslanders +auspex +auspice +auspices +auspicious +auspiciously +auspiciousness +auspiciousnesses +austenite +austenites +austenitic +austere +austerely +austereness +austerenesses +austerer +austerest +austerities +austerity +austral +australes +australopithecine +australopithecines +australs +ausubo +ausubos +autacoid +autacoids +autarchic +autarchical +autarchies +autarchy +autarkic +autarkical +autarkies +autarky +autecism +autecisms +autecological +autecologies +autecology +auteur +auteurist +auteurists +auteurs authentic +authentically +authenticate +authenticated +authenticates +authenticating +authentication +authentications +authenticator +authenticators +authenticities +authenticity author +authored +authoress +authoresses +authorial +authoring +authorise +authorised +authorises +authorising +authoritarian +authoritarianism +authoritarianisms +authoritarians +authoritative +authoritatively +authoritativeness +authoritativenesses +authorities authority +authorization +authorizations +authorize +authorized +authorizer +authorizers +authorizes +authorizing +authors +authorship +authorships +autism +autisms +autistic +autistically +autistics +auto +autoantibodies +autoantibody +autobahn +autobahnen +autobahns +autobiographer +autobiographers +autobiographic +autobiographical +autobiographically +autobiographies +autobiography +autobus +autobuses +autobusses +autocade +autocades +autocatalyses +autocatalysis +autocatalytic +autocatalytically +autocephalies +autocephalous +autocephaly +autochthon +autochthones +autochthonous +autochthonously +autochthons +autoclave +autoclaved +autoclaves +autoclaving +autocoid +autocoids +autocorrelation +autocorrelations +autocracies +autocracy +autocrat +autocratic +autocratical +autocratically +autocrats +autocross +autocrosses +autodidact +autodidactic +autodidacts +autodyne +autodynes +autoecious +autoeciously +autoecism +autoecisms +autoed +autoerotic +autoeroticism +autoeroticisms +autoerotism +autoerotisms +autogamies +autogamous +autogamy +autogenic +autogenies +autogenous +autogenously +autogeny +autogiro +autogiros +autograft +autografted +autografting +autografts +autograph +autographed +autographic +autographically +autographies +autographing +autographs +autography +autogyro +autogyros +autohypnoses +autohypnosis +autohypnotic +autoimmune +autoimmunities +autoimmunity +autoimmunization +autoimmunizations +autoinfection +autoinfections +autoing +autointoxication +autointoxications +autoloading +autologous +autolysate +autolysates +autolyse +autolysed +autolyses +autolysing +autolysis +autolytic +autolyzate +autolyzates +autolyze +autolyzed +autolyzes +autolyzing +automaker +automakers +automan +automata +automatable +automate +automated +automates automatic +automatically +automaticities +automaticity +automatics +automating +automation +automations +automatism +automatisms +automatist +automatists +automatization +automatizations +automatize +automatized +automatizes +automatizing +automaton +automatons +automen +automobile +automobiled +automobiles +automobiling +automobilist +automobilists +automobilities +automobility +automorphism +automorphisms +automotive +autonomic +autonomically +autonomies +autonomist +autonomists autonomous +autonomously +autonomy +autopilot +autopilots +autopolyploid +autopolyploidies +autopolyploids +autopolyploidy +autopsic +autopsied +autopsies +autopsy +autopsying +autoradiogram +autoradiograms +autoradiograph +autoradiographic +autoradiographies +autoradiographs +autoradiography +autorotate +autorotated +autorotates +autorotating +autorotation +autorotations +autoroute +autoroutes +autos +autosexing +autosomal +autosomally +autosome +autosomes +autostrada +autostradas +autostrade +autosuggest +autosuggested +autosuggesting +autosuggestion +autosuggestions +autosuggests +autotelic +autotetraploid +autotetraploidies +autotetraploids +autotetraploidy +autotomies +autotomize +autotomized +autotomizes +autotomizing +autotomous +autotomy +autotransformer +autotransformers +autotransfusion +autotransfusions +autotroph +autotrophic +autotrophically +autotrophies +autotrophs +autotrophy +autotype +autotypes +autotypies +autotypy +autoworker +autoworkers +autoxidation +autoxidations autumn +autumnal +autumnally +autumns +autunite +autunites +auxeses +auxesis +auxetic +auxetics +auxiliaries +auxiliary +auxin +auxinic +auxins +auxotroph +auxotrophic +auxotrophies +auxotrophs +auxotrophy +ava +avadavat +avadavats +avail +availabilities +availability available +availableness +availablenesses +availably +availed +availing +avails +avalanche +avalanched +avalanches +avalanching +avant +avarice +avarices +avaricious +avariciously +avariciousness +avariciousnesses +avascular +avascularities +avascularity +avast +avatar +avatars +avaunt +ave +avellan +avellane +avenge +avenged +avenger +avengers +avenges +avenging +avens +avenses +aventail +aventails +aventurine +aventurines avenue +avenues +aver average +averaged +averagely +averageness +averagenesses +averages +averaging +averment +averments +averred +averring +avers +averse +aversely +averseness +aversenesses +aversion +aversions +aversive +aversively +aversiveness +aversivenesses +avert +averted +averting +averts +aves +avgas +avgases +avgasses +avgolemono +avgolemonos +avian +avianize +avianized +avianizes +avianizing +avians +aviaries +aviarist +aviarists +aviary +aviate +aviated +aviates +aviating +aviation +aviations +aviator +aviators +aviatrices +aviatrix +aviatrixes +avicular +aviculture +avicultures +aviculturist +aviculturists +avid +avidin +avidins +avidities +avidity +avidly +avidness +avidnesses +avifauna +avifaunae +avifaunal +avifaunas +avigator +avigators +avion +avionic +avionics +avions +avirulent +aviso +avisos +avitaminoses +avitaminosis +avitaminotic +avo +avocado +avocadoes +avocados +avocation +avocational +avocationally +avocations +avocet +avocets +avodire +avodires avoid +avoidable +avoidably +avoidance +avoidances +avoided +avoider +avoiders +avoiding +avoids +avoirdupois +avoirdupoises +avos +avoset +avosets +avouch +avouched +avoucher +avouchers +avouches +avouching +avouchment +avouchments +avow +avowable +avowably +avowal +avowals +avowed +avowedly +avower +avowers +avowing +avows +avulse +avulsed +avulses +avulsing +avulsion +avulsions +avuncular +avuncularities +avuncularity +avuncularly +aw +awa +await +awaited +awaiter +awaiters +awaiting +awaits awake +awaked +awaken +awakened +awakener +awakeners +awakening +awakens +awakes +awaking award +awardable +awarded +awardee +awardees +awarder +awarders +awarding +awards aware +awareness +awarenesses +awash away +awayness +awaynesses +awe +aweary +aweather +awed +awee +aweigh +aweing +aweless +awes awesome +awesomely +awesomeness +awesomenesses +awestricken +awestruck awful +awfuller +awfullest +awfully +awfulness +awfulnesses +awhile +awhirl +awing awkward +awkwarder +awkwardest +awkwardly +awkwardness +awkwardnesses +awl +awless +awls +awlwort +awlworts +awmous +awn +awned +awning +awninged +awnings +awnless +awns +awny +awoke +awoken +awol +awols +awry +ax +axal +axe +axed +axel +axels +axeman +axemen +axenic +axenically +axes +axial +axialities +axiality +axially +axil +axile +axilla +axillae +axillar +axillaries +axillars +axillary +axillas +axils +axing +axiological +axiologically +axiologies +axiology +axiom +axiomatic +axiomatically +axiomatisation +axiomatisations +axiomatization +axiomatizations +axiomatize +axiomatized +axiomatizes +axiomatizing +axioms +axion +axions +axis +axised +axises +axisymmetric +axisymmetrical +axisymmetries +axisymmetry +axite +axites +axle +axled +axles +axletree +axletrees +axlike +axman +axmen +axolotl +axolotls +axon +axonal +axone +axonemal +axoneme +axonemes +axones +axonic +axonometric +axons +axoplasm +axoplasmic +axoplasms +axseed +axseeds +ay +ayah +ayahs +ayahuasca +ayahuascas +ayatollah +ayatollahs +aye +ayes +ayin +ayins +ays +ayurveda +ayurvedas +azalea +azaleas +azan +azans +azathioprine +azathioprines +azeotrope +azeotropes +azide +azides +azido +azidothymidine +azidothymidines +azimuth +azimuthal +azimuthally +azimuths +azine +azines +azlon +azlons +azo +azoic +azole +azoles +azon +azonal +azonic +azons +azoospermia +azoospermias +azote +azoted +azotemia +azotemias +azotemic +azotes +azoth +azoths +azotic +azotise +azotised +azotises +azotising +azotize +azotized +azotizes +azotizing +azotobacter +azotobacters +azoturia +azoturias +azure +azures +azurite +azurites +azygos +azygoses +azygous +ba +baa +baaed +baaing +baal +baalim +baalism +baalisms +baals +baas +baases +baaskaap +baaskaaps +baba +babas +babassu +babassus +babbitt +babbitted +babbitting +babbitts +babble +babbled +babblement +babblements +babbler +babblers +babbles +babbling +babblings +babe +babel +babels +babes +babesia +babesias +babesioses +babesiosis +babesiosises +babiche +babiches +babied +babies +babirusa +babirusas +babka +babkas +baboo +babool +babools +baboon +baboons +baboos +babu +babul +babuls +babus +babushka +babushkas baby +babyhood +babyhoods +babying +babyish +babysitter +babysitters +bacalao +bacalaos +bacca +baccae +baccalaureate +baccalaureates +baccara +baccaras +baccarat +baccarats +baccate +baccated +bacchanal +bacchanalia +bacchanalian +bacchanalians +bacchanals +bacchant +bacchante +bacchantes +bacchants +bacchic +bacchii +bacchius +bach +bached bachelor +bachelordom +bachelordoms +bachelorette +bachelorettes +bachelorhood +bachelorhoods +bachelors +baches +baching +bacillar +bacillary +bacilli +bacillus +bacitracin +bacitracins back +backache +backaches +backbeat +backbeats +backbench +backbencher +backbenchers +backbenches +backbend +backbends +backbit +backbite +backbiter +backbiters +backbites +backbiting +backbitings +backbitten +backblock +backblocks +backboard +backboards +backbone +backbones +backbreaker +backbreakers +backbreaking +backcast +backcasts +backchat +backchats +backcloth +backcloths +backcountries +backcountry +backcourt +backcourtman +backcourtmen +backcourts +backcross +backcrossed +backcrosses +backcrossing +backdate +backdated +backdates +backdating +backdoor +backdrop +backdropped +backdropping +backdrops +backdropt +backed +backer +backers +backfield +backfields +backfill +backfilled +backfilling +backfills +backfire +backfired +backfires +backfiring +backfit +backfits +backfitted +backfitting +backflow +backflows +backgammon +backgammons background +backgrounded +backgrounder +backgrounders +backgrounding +backgrounds +backhand +backhanded +backhandedly +backhander +backhanders +backhanding +backhands +backhaul +backhauled +backhauling +backhauls +backhoe +backhoes +backhouse +backhouses +backing +backings +backland +backlands +backlash +backlashed +backlasher +backlashers +backlashes +backlashing +backless +backlight +backlighted +backlighting +backlights +backlist +backlisted +backlisting +backlists +backlit +backlog +backlogged +backlogging +backlogs +backmost +backout +backouts +backpack +backpacked +backpacker +backpackers +backpacking +backpacks +backpedal +backpedaled +backpedaling +backpedalled +backpedalling +backpedals +backrest +backrests +backroom +backrooms +backrush +backrushes +backs +backsaw +backsaws +backscatter +backscattered +backscattering +backscatterings +backscatters +backseat +backseats +backset +backsets +backside +backsides +backslap +backslapped +backslapper +backslappers +backslapping +backslaps +backslash +backslashes +backslid +backslidden +backslide +backslider +backsliders +backslides +backsliding +backspace +backspaced +backspaces +backspacing +backspin +backspins +backsplash +backsplashes +backstab +backstabbed +backstabber +backstabbers +backstabbing +backstabbings +backstabs +backstage +backstairs +backstay +backstays +backstitch +backstitched +backstitches +backstitching +backstop +backstopped +backstopping +backstops +backstreet +backstreets +backstretch +backstretches +backstroke +backstrokes +backswept +backswing +backswings +backsword +backswords +backtrack +backtracked +backtracking +backtracks +backup +backups backward +backwardly +backwardness +backwardnesses backwards +backwash +backwashed +backwashes +backwashing +backwater +backwaters +backwood +backwoods +backwoodsman +backwoodsmen +backwoodsy +backwrap +backwraps +backyard +backyards bacon +bacons +bacteremia +bacteremias +bacteremic bacteria +bacterial +bacterially +bacterias +bactericidal +bactericidally +bactericide +bactericides +bacterin +bacterins +bacteriochlorophyll +bacteriochlorophylls +bacteriocin +bacteriocins +bacteriologic +bacteriological +bacteriologically +bacteriologies +bacteriologist +bacteriologists +bacteriology +bacteriolyses +bacteriolysis +bacteriolytic +bacteriophage +bacteriophages +bacteriophagies +bacteriophagy +bacteriorhodopsin +bacteriorhodopsins +bacteriostases +bacteriostasis +bacteriostat +bacteriostatic +bacteriostats +bacterium +bacteriuria +bacteriurias +bacterization +bacterizations +bacterize +bacterized +bacterizes +bacterizing +bacteroid +bacteroids +bacula +baculine +baculum +baculums bad +badass +badassed +badasses +badder +baddest +baddie +baddies +baddy +bade +badge +badged +badger +badgered +badgering +badgerly +badgers +badges +badging +badinage +badinaged +badinages +badinaging +badland +badlands +badly +badman +badmen badminton +badmintons +badmouth +badmouthed +badmouthing +badmouths +badness +badnesses +bads +baff +baffed +baffies +baffing +baffle +baffled +bafflegab +bafflegabs +bafflement +bafflements +baffler +bafflers +baffles +baffling +bafflingly +baffs +baffy bag +bagass +bagasse +bagasses +bagatelle +bagatelles +bagel +bagels +bagful +bagfuls baggage +baggages +bagged +bagger +baggers +baggie +baggier +baggies +baggiest +baggily +bagginess +bagginesses +bagging +baggings +baggy +baghouse +baghouses +bagman +bagmen +bagnio +bagnios +bagpipe +bagpiper +bagpipers +bagpipes +bags +bagsful +baguet +baguets +baguette +baguettes +bagwig +bagwigs +bagworm +bagworms +bah +bahadur +bahadurs +baht +bahts +baidarka +baidarkas +bail +bailable +bailed +bailee +bailees +bailer +bailers +bailey +baileys +bailie +bailies +bailiff +bailiffs +bailiffship +bailiffships +bailing +bailiwick +bailiwicks +bailment +bailments +bailor +bailors +bailout +bailouts +bails +bailsman +bailsmen +bairn +bairnish +bairnlier +bairnliest +bairnly +bairns +bait +baited +baiter +baiters +baith +baiting +baits +baiza +baizas +baize +baizes +bake +baked +bakemeat +bakemeats +baker +bakeries +bakers bakery +bakes +bakeshop +bakeshops +baking +bakings +baklava +baklavas +baklawa +baklawas +baksheesh +baksheeshes +bakshish +bakshished +bakshishes +bakshishing +bal +balaclava +balaclavas +balalaika +balalaikas balance +balanced +balancer +balancers +balances +balancing +balas +balases +balata +balatas +balboa +balboas +balbriggan +balbriggans +balconied +balconies balcony +bald +baldachin +baldachino +baldachinos +baldachins +balded +balder +balderdash +balderdashes +baldest +baldhead +baldheaded +baldheads +baldies +balding +baldish +baldly +baldness +baldnesses +baldpate +baldpates +baldric +baldrick +baldricks +baldrics +balds +baldy +bale +baled +baleen +baleens +balefire +balefires +baleful +balefully +balefulness +balefulnesses +baler +balers +bales +baling +balisaur +balisaurs +balk +balkanization +balkanizations +balkanize +balkanized +balkanizes +balkanizing +balked +balker +balkers +balkier +balkiest +balkily +balkiness +balkinesses +balking +balkline +balklines +balks +balky ball +ballad +ballade +balladeer +balladeers +ballades +balladic +balladist +balladists +balladries +balladry +ballads +ballast +ballasted +ballasting +ballasts +ballcarrier +ballcarriers +balled +baller +ballerina +ballerinas +ballers ballet +balletic +balletomane +balletomanes +balletomania +balletomanias +ballets +ballgame +ballgames +ballhandling +ballhandlings +ballhawk +ballhawks +ballies +balling +ballista +ballistae +ballistic +ballistically +ballistics +ballon +ballonet +ballonets +ballonne +ballonnes +ballons balloon +ballooned +ballooning +balloonings +balloonist +balloonists +balloons +ballot +balloted +balloter +balloters +balloting +ballots +ballpark +ballparks +ballplayer +ballplayers +ballpoint +ballpoints +ballroom +ballrooms +balls +ballsier +ballsiest +ballsy +ballute +ballutes +bally +ballyhoo +ballyhooed +ballyhooing +ballyhoos +ballyrag +ballyragged +ballyragging +ballyrags +balm +balmacaan +balmacaans +balmier +balmiest +balmily +balminess +balminesses +balmlike +balmoral +balmorals +balms +balmy +balneal +balneologies +balneology +baloney +baloneys +bals +balsa +balsam +balsamed +balsamic +balsaming +balsams +balsas +baluster +balusters +balustrade +balustraded +balustrades +bam +bambini +bambino +bambinos bamboo +bamboos +bamboozle +bamboozled +bamboozlement +bamboozlements +bamboozles +bamboozling +bammed +bamming +bams ban +banal +banalities +banality +banalize +banalized +banalizes +banalizing +banally banana +bananas +banausic +banco +bancos +band bandage +bandaged +bandager +bandagers +bandages +bandaging +bandana +bandanas +bandanna +bandannas +bandbox +bandboxes +bandeau +bandeaus +bandeaux +banded +bander +banderilla +banderillas +banderillero +banderilleros +banderol +banderole +banderoles +banderols +banders +bandicoot +bandicoots +bandied +bandies +banding +bandit +banditries +banditry +bandits +banditti +bandleader +bandleaders +bandmaster +bandmasters +bandog +bandogs +bandoleer +bandoleers +bandolier +bandoliers +bandora +bandoras +bandore +bandores +bands +bandsman +bandsmen +bandstand +bandstands +bandwagon +bandwagons +bandwidth +bandwidths +bandy +bandying +bane +baneberries +baneberry +baned +baneful +banefully +banes +bang +banged +banger +bangers +banging +bangkok +bangkoks +bangle +bangles +bangs +bangtail +bangtails +bani +banian +banians +baning +banish +banished +banisher +banishers +banishes +banishing +banishment +banishments +banister +banistered +banisters +banjax +banjaxed +banjaxes +banjaxing +banjo +banjoes +banjoist +banjoists +banjos bank +bankabilities +bankability +bankable +bankbook +bankbooks +bankcard +bankcards +banked +banker +bankerly +bankers +banking +bankings +banknote +banknotes +bankroll +bankrolled +bankroller +bankrollers +bankrolling +bankrolls +bankrupt +bankruptcies +bankruptcy +bankrupted +bankrupting +bankrupts +banks +banksia +banksias +bankside +banksides +banned +banner +bannered +banneret +bannerets +bannerette +bannerettes +bannering +bannerol +bannerols +banners +bannet +bannets +banning +bannister +bannisters +bannock +bannocks +banns +banquet +banqueted +banqueter +banqueters +banqueting +banquets +banquette +banquettes +bans +banshee +banshees +banshie +banshies +bantam +bantams +bantamweight +bantamweights +banteng +bantengs +banter +bantered +banterer +banterers +bantering +banteringly +banters +banties +bantling +bantlings +banty +banyan +banyans +banzai +banzais +baobab +baobabs +bap +baps +baptise +baptised +baptises +baptisia +baptisias +baptising +baptism +baptismal +baptismally +baptisms +baptist +baptisteries +baptistery +baptistries +baptistry +baptists +baptize +baptized +baptizer +baptizers +baptizes +baptizing bar +barathea +baratheas +barb +barbal +barbarian +barbarianism +barbarianisms +barbarians +barbaric +barbarically +barbarism +barbarisms +barbarities +barbarity +barbarization +barbarizations +barbarize +barbarized +barbarizes +barbarizing +barbarous +barbarously +barbarousness +barbarousnesses +barbasco +barbascoes +barbascos +barbate +barbe barbecue +barbecued +barbecuer +barbecuers +barbecues +barbecuing +barbed +barbel +barbell +barbells +barbels +barbeque +barbequed +barbeques +barbequing barber +barbered +barbering +barberries +barberry +barbers barbershop +barbershops +barbes +barbet +barbets +barbette +barbettes +barbican +barbicans +barbicel +barbicels +barbing +barbital +barbitals +barbitone +barbitones +barbiturate +barbiturates +barbless +barbs +barbule +barbules +barbut +barbuts +barbwire +barbwires +barcarole +barcaroles +barcarolle +barcarolles +barchan +barchans +bard +barde +barded +bardes +bardic +barding +bardolater +bardolaters +bardolatries +bardolatry +bards bare +bareback +barebacked +bareboat +bareboats +bared +barefaced +barefacedly +barefacedness +barefacednesses +barefit +barefoot +barefooted +barege +bareges +barehead +bareheaded +barely +bareness +barenesses +barer +bares +baresark +baresarks +barest +barf +barfed +barfing +barflies +barfly +barfs bargain +bargained +bargainer +bargainers +bargaining +bargains +barge +bargeboard +bargeboards +barged +bargee +bargees +bargello +bargellos +bargeman +bargemen +barges +barghest +barghests +barging +barguest +barguests +barhop +barhopped +barhopping +barhops +baric +barilla +barillas +baring +barite +barites +baritonal +baritone +baritones +barium +bariums bark +barked +barkeep +barkeeper +barkeepers +barkeeps +barkentine +barkentines +barker +barkers +barkier +barkiest +barking +barkless +barks +barky +barleduc +barleducs +barless +barley +barleycorn +barleycorns +barleys +barlow +barlows +barm +barmaid +barmaids +barman +barmen +barmie +barmier +barmiest +barms +barmy +barn +barnacle +barnacled +barnacles +barnier +barniest +barnlike +barns +barnstorm +barnstormed +barnstormer +barnstormers +barnstorming +barnstorms +barny +barnyard +barnyards +baroceptor +baroceptors +barogram +barograms +barograph +barographic +barographs +barometer +barometers +barometric +barometrically +barometries +barometry +baron +baronage +baronages +baroness +baronesses +baronet +baronetage +baronetages +baronetcies +baronetcy +baronets +barong +barongs +baronial +baronies +baronne +baronnes +barons +barony +baroque +baroquely +baroques +baroreceptor +baroreceptors +barouche +barouches +barque +barquentine +barquentines +barques +barquette +barquettes +barrable +barrack +barracked +barracker +barrackers +barracking +barracks +barracoon +barracoons +barracouta +barracoutas +barracuda +barracudas +barrage +barraged +barrages +barraging +barramunda +barramundas +barramundi +barramundis +barranca +barrancas +barranco +barrancos +barrater +barraters +barrator +barrators +barratries +barratry +barre +barred +barrel +barrelage +barrelages +barreled +barrelful +barrelfuls +barrelhead +barrelheads +barrelhouse +barrelhouses +barreling +barrelled +barrelling +barrels +barrelsful +barren +barrener +barrenest +barrenly +barrenness +barrennesses +barrens +barres +barret +barretor +barretors +barretries +barretry +barrets +barrette +barrettes +barricade +barricaded +barricades +barricading +barricado +barricadoed +barricadoes +barricadoing barrier +barriers +barring +barrio +barrios +barrister +barristers +barroom +barrooms +barrow +barrows +bars +barstool +barstools +bartend +bartended +bartender +bartenders +bartending +bartends +barter +bartered +barterer +barterers +bartering +barters +bartisan +bartisans +bartizan +bartizans +barware +barwares +barye +baryes +baryon +baryonic +baryons +baryta +barytas +baryte +barytes +barytic +barytone +barytones +bas +basal +basally +basalt +basaltes +basaltic +basalts +bascule +bascules base baseball +baseballs +baseboard +baseboards +baseborn +based +baseless +baseline +baseliner +baseliners +baselines +basely +baseman +basemen basement +basementless +basements +baseness +basenesses +basenji +basenjis +baser +baserunning +baserunnings +bases +basest +bash +bashaw +bashaws +bashed +basher +bashers +bashes +bashful +bashfully +bashfulness +bashfulnesses +bashing +bashlyk +bashlyks basic +basically +basicities +basicity +basics +basidia +basidial +basidiomycete +basidiomycetes +basidiomycetous +basidiospore +basidiospores +basidium +basification +basifications +basified +basifier +basifiers +basifies +basify +basifying +basil +basilar +basilary +basilic +basilica +basilicae +basilican +basilicas +basilisk +basilisks +basils basin +basinal +basined +basinet +basinets +basinful +basinfuls +basing +basins +basion +basions +basipetal +basipetally basis +bask +basked basket basketball +basketballs +basketful +basketfuls +basketlike +basketries +basketry +baskets +basketsful +basketwork +basketworks +basking +basks +basmati +basmatis +basophil +basophile +basophiles +basophilia +basophilias +basophilic +basophils +basque +basques +bass +basses +basset +basseted +basseting +bassets +bassett +bassetted +bassetting +bassetts +bassi +bassinet +bassinets +bassist +bassists +bassly +bassness +bassnesses +basso +bassoon +bassoonist +bassoonists +bassoons +bassos +basswood +basswoods +bassy +bast +bastard +bastardies +bastardise +bastardised +bastardises +bastardising +bastardization +bastardizations +bastardize +bastardized +bastardizes +bastardizing +bastardly +bastards +bastardy +baste +basted +baster +basters +bastes +bastile +bastiles +bastille +bastilles +bastinade +bastinades +bastinado +bastinadoed +bastinadoes +bastinadoing +basting +bastings +bastion +bastioned +bastions +basts bat +batboy +batboys +batch +batched +batcher +batchers +batches +batching +bate +bateau +bateaux +bated +bates +batfish +batfishes +batfowl +batfowled +batfowling +batfowls bath bathe +bathed +bather +bathers +bathes +bathetic +bathetically +bathhouse +bathhouses +bathing +bathless +bathmat +bathmats +batholith +batholithic +batholiths +bathos +bathoses +bathrobe +bathrobes bathroom +bathrooms +baths bathtub +bathtubs +bathwater +bathwaters +bathyal +bathymetric +bathymetrical +bathymetrically +bathymetries +bathymetry +bathypelagic +bathyscaph +bathyscaphe +bathyscaphes +bathyscaphs +bathysphere +bathyspheres +bathythermograph +bathythermographs +batik +batiks +bating +batiste +batistes +batlike +batman +batmen +baton +batons +batrachian +batrachians +bats +batsman +batsmen +batt +battailous +battalia +battalias +battalion +battalions +batteau +batteaux +batted +battement +battements +batten +battened +battener +batteners +battening +battens +batter +battered +batterie +batteries +battering +batters battery +battier +battiest +battik +battiks +battiness +battinesses +batting +battings battle +battled +battlefield +battlefields +battlefront +battlefronts +battleground +battlegrounds +battlement +battlemented +battlements +battler +battlers +battles +battleship +battleships +battlewagon +battlewagons +battling +batts +battu +battue +battues +batty +batwing +baubee +baubees +bauble +baubles +baud +baudekin +baudekins +baudrons +baudronses +bauds +bauhinia +bauhinias +baulk +baulked +baulkier +baulkiest +baulking +baulks +baulky +bausond +bauxite +bauxites +bauxitic +bawbee +bawbees +bawcock +bawcocks +bawd +bawdier +bawdies +bawdiest +bawdily +bawdiness +bawdinesses +bawdric +bawdrics +bawdries +bawdry +bawds +bawdy +bawdyhouse +bawdyhouses +bawl +bawled +bawler +bawlers +bawling +bawls +bawsunt +bawtie +bawties +bawty bay -bc +bayadeer +bayadeers +bayadere +bayaderes +bayamo +bayamos +bayard +bayards +bayberries +bayberry +bayed +baying +bayman +baymen +bayonet +bayoneted +bayoneting +bayonets +bayonetted +bayonetting +bayou +bayous +bays +baywood +baywoods +bazaar +bazaars +bazar +bazars +bazoo +bazooka +bazookas +bazooms +bazoos +bdellium +bdelliums be beach +beachboy +beachboys +beachcomb +beachcombed +beachcomber +beachcombers +beachcombing +beachcombs +beached +beaches +beachfront +beachfronts +beachgoer +beachgoers +beachhead +beachheads +beachier +beachiest +beaching +beachside +beachwear +beachy +beacon +beaconed +beaconing +beacons +bead +beaded +beadier +beadiest +beadily +beading +beadings +beadle +beadles +beadlike +beadman +beadmen +beadroll +beadrolls +beads +beadsman +beadsmen +beadwork +beadworks +beady +beagle +beagles +beak +beaked +beaker +beakers +beakier +beakiest +beakless +beaklike +beaks +beaky +beam +beamed +beamier +beamiest +beamily +beaming +beamish +beamishly +beamless +beamlike +beams +beamy bean +beanbag +beanbags +beanball +beanballs +beaned +beaneries +beanery +beanie +beanies +beaning +beanlike +beano +beanos +beanpole +beanpoles +beans +beanstalk +beanstalks bear +bearabilities +bearability +bearable +bearably +bearbaiting +bearbaitings +bearberries +bearberry +bearcat +bearcats beard +bearded +beardedness +beardednesses +bearding +beardless +beards +beardtongue +beardtongues +bearer +bearers +bearhug +bearhugs +bearing +bearings +bearish +bearishly +bearishness +bearishnesses +bearlike +bears +bearskin +bearskins +bearwood +bearwoods beast +beastie +beasties +beastings +beastlier +beastliest +beastliness +beastlinesses +beastly +beasts beat +beatable +beaten +beater +beaters +beatific +beatifically +beatification +beatifications +beatified +beatifies +beatify +beatifying +beating +beatings +beatitude +beatitudes +beatless +beatnik +beatniks +beats +beau +beaucoup +beauish +beaus +beaut +beauteous +beauteously +beauteousness +beauteousnesses +beautician +beauticians +beauties +beautification +beautifications +beautified +beautifier +beautifiers +beautifies beautiful +beautifuler +beautifulest +beautifully +beautifulness +beautifulnesses +beautify +beautifying +beauts beauty +beaux +beaver +beaverboard +beaverboards +beavered +beavering +beavers +bebeeru +bebeerus +beblood +beblooded +beblooding +bebloods +bebop +bebopper +beboppers +bebops +becalm +becalmed +becalming +becalms +became +becap +becapped +becapping +becaps +becarpet +becarpeted +becarpeting +becarpets because +bechalk +bechalked +bechalking +bechalks +bechamel +bechamels +bechance +bechanced +bechances +bechancing +becharm +becharmed +becharming +becharms +beck +becked +becket +beckets +becking +beckon +beckoned +beckoner +beckoners +beckoning +beckons +becks +beclamor +beclamored +beclamoring +beclamors +beclasp +beclasped +beclasping +beclasps +becloak +becloaked +becloaking +becloaks +beclog +beclogged +beclogging +beclogs +beclothe +beclothed +beclothes +beclothing +becloud +beclouded +beclouding +beclouds +beclown +beclowned +beclowning +beclowns become +becomes +becoming +becomingly +becomings +becoward +becowarded +becowarding +becowards +becrawl +becrawled +becrawling +becrawls +becrime +becrimed +becrimes +becriming +becrowd +becrowded +becrowding +becrowds +becrust +becrusted +becrusting +becrusts +becudgel +becudgeled +becudgeling +becudgelled +becudgelling +becudgels +becurse +becursed +becurses +becursing +becurst bed +bedabble +bedabbled +bedabbles +bedabbling +bedamn +bedamned +bedamning +bedamns +bedarken +bedarkened +bedarkening +bedarkens +bedaub +bedaubed +bedaubing +bedaubs +bedazzle +bedazzled +bedazzlement +bedazzlements +bedazzles +bedazzling +bedbug +bedbugs +bedchair +bedchairs +bedchamber +bedchambers +bedclothes +bedcover +bedcovering +bedcoverings +bedcovers +beddable +bedded +bedder +bedders +bedding beddings +bedeafen +bedeafened +bedeafening +bedeafens +bedeck +bedecked +bedecking +bedecks +bedel +bedell +bedells +bedels +bedeman +bedemen +bedesman +bedesmen +bedevil +bedeviled +bedeviling +bedevilled +bedevilling +bedevilment +bedevilments +bedevils +bedew +bedewed +bedewing +bedews +bedfast +bedfellow +bedfellows +bedframe +bedframes +bedgown +bedgowns +bediaper +bediapered +bediapering +bediapers +bedight +bedighted +bedighting +bedights +bedim +bedimmed +bedimming +bedimple +bedimpled +bedimples +bedimpling +bedims +bedirtied +bedirties +bedirty +bedirtying +bedizen +bedizened +bedizening +bedizenment +bedizenments +bedizens +bedlam +bedlamite +bedlamites +bedlamp +bedlamps +bedlams +bedless +bedlike +bedmaker +bedmakers +bedmate +bedmates +bedotted +bedouin +bedouins +bedpan +bedpans +bedplate +bedplates +bedpost +bedposts +bedquilt +bedquilts +bedraggle +bedraggled +bedraggles +bedraggling +bedrail +bedrails +bedrape +bedraped +bedrapes +bedraping +bedrench +bedrenched +bedrenches +bedrenching +bedrid +bedridden +bedrivel +bedriveled +bedriveling +bedrivelled +bedrivelling +bedrivels +bedrock +bedrocks +bedroll +bedrolls bedroom +bedroomed +bedrooms +bedrug +bedrugged +bedrugging +bedrugs +beds +bedsheet +bedsheets +bedside +bedsides +bedsit +bedsits +bedsonia +bedsoniae +bedsonias +bedsore +bedsores +bedspread +bedspreads +bedspring +bedsprings +bedstand +bedstands +bedstead +bedsteads +bedstraw +bedstraws +bedtick +bedticks +bedtime +bedtimes +bedu +beduin +beduins +bedumb +bedumbed +bedumbing +bedumbs +bedunce +bedunced +bedunces +beduncing +bedward +bedwards +bedwarf +bedwarfed +bedwarfing +bedwarfs bee +beebee +beebees +beebread +beebreads +beech +beechdrops +beechen +beeches +beechier +beechiest +beechnut +beechnuts +beechy beef +beefalo +beefaloes +beefalos +beefcake +beefcakes +beefeater +beefeaters +beefed +beefier +beefiest +beefily +beefing +beefless +beefs +beefsteak +beefsteaks +beefwood +beefwoods +beefy +beehive +beehives +beekeeper +beekeepers +beekeeping +beekeepings +beelike +beeline +beelined +beelines +beelining +been +beep +beeped +beeper +beepers +beeping +beeps beer +beerier +beeriest +beers +beery +bees +beestings +beeswax +beeswaxes +beeswing +beeswings +beet +beetle +beetled +beetler +beetlers +beetles +beetling +beetroot +beetroots +beets +beeves +beeyard +beeyards +beezer +beezers +befall +befallen +befalling +befalls +befell +befinger +befingered +befingering +befingers +befit +befits +befitted +befitting +befittingly +beflag +beflagged +beflagging +beflags +beflea +befleaed +befleaing +befleas +befleck +beflecked +beflecking +beflecks +beflower +beflowered +beflowering +beflowers +befog +befogged +befogging +befogs +befool +befooled +befooling +befools before +beforehand +beforetime +befoul +befouled +befouler +befoulers +befouling +befouls +befret +befrets +befretted +befretting +befriend +befriended +befriending +befriends +befringe +befringed +befringes +befringing +befuddle +befuddled +befuddlement +befuddlements +befuddles +befuddling beg +begall +begalled +begalling +begalls +began +begat +begaze +begazed +begazes +begazing +beget +begets +begetter +begetters +begetting +beggar +beggared +beggaries +beggaring +beggarliness +beggarlinesses +beggarly +beggars +beggarweed +beggarweeds +beggary +begged +begging begin +beginner +beginners +beginning +beginnings +begins +begird +begirded +begirding +begirdle +begirdled +begirdles +begirdling +begirds +begirt +begirting +beglad +begladded +begladding +beglads +beglamor +beglamored +beglamoring +beglamors +beglamour +beglamoured +beglamouring +beglamours +begloom +begloomed +beglooming +beglooms +begone +begonia +begonias +begorah +begorra +begorrah +begot +begotten +begrim +begrime +begrimed +begrimes +begriming +begrimmed +begrimming +begrims +begroan +begroaned +begroaning +begroans +begrudge +begrudged +begrudges +begrudging +begrudgingly +begs +beguile +beguiled +beguilement +beguilements +beguiler +beguilers +beguiles +beguiling +beguilingly +beguine +beguines +begulf +begulfed +begulfing +begulfs +begum +begums +begun behalf +behalves behave +behaved +behaver +behavers +behaves +behaving behavior +behavioral +behaviorally +behaviorism +behaviorisms +behaviorist +behavioristic +behaviorists +behaviors behaviour +behaviours +behead +beheaded +beheading +beheadings +beheads +beheld +behemoth +behemoths +behest +behests behind +behindhand +behinds +behold +beholden +beholder +beholders +beholding +beholds +behoof +behoove +behooved +behooves +behooving +behove +behoved +behoves +behoving +behowl +behowled +behowling +behowls +beige +beiges +beignet +beignets +beigy being +beings +bejabers +bejeezus +bejesus +bejewel +bejeweled +bejeweling +bejewelled +bejewelling +bejewels +bejumble +bejumbled +bejumbles +bejumbling +bekiss +bekissed +bekisses +bekissing +beknight +beknighted +beknighting +beknights +beknot +beknots +beknotted +beknotting +bel +belabor +belabored +belaboring +belabors +belabour +belaboured +belabouring +belabours +belaced +beladied +beladies +belady +beladying +belated +belatedly +belatedness +belatednesses +belaud +belauded +belauding +belauds +belay +belayed +belaying +belays +belch +belched +belcher +belchers +belches +belching +beldam +beldame +beldames +beldams +beleaguer +beleaguered +beleaguering +beleaguerment +beleaguerments +beleaguers +beleap +beleaped +beleaping +beleaps +beleapt +belemnite +belemnites +belfried +belfries +belfry +belga +belgas +belie +belied belief +beliefs +belier +beliers +belies +believabilities +believability +believable +believably believe +believed +believer +believers +believes +believing +belike +beliquor +beliquored +beliquoring +beliquors +belittle +belittled +belittlement +belittlements +belittler +belittlers +belittles +belittling +belive bell +belladonna +belladonnas +bellbird +bellbirds +bellboy +bellboys +belle +belled +belleek +belleeks +belles +belletrist +belletristic +belletrists +bellflower +bellflowers +bellhop +bellhops +bellicose +bellicosely +bellicosities +bellicosity +bellied +bellies +belligerence +belligerences +belligerencies +belligerency +belligerent +belligerently +belligerents +belling +bellman +bellmen +bellow +bellowed +bellower +bellowers +bellowing +bellows +bellpull +bellpulls +bells +bellwether +bellwethers +bellwort +bellworts belly +bellyache +bellyached +bellyacher +bellyachers +bellyaches +bellyaching +bellyband +bellybands +bellybutton +bellybuttons +bellyful +bellyfuls +bellying belong +belonged +belonging +belongingness +belongingnesses +belongings +belongs +beloved +beloveds below +belowdecks +belowground +belows +bels belt +belted +belter +belters +belting +beltings +beltless +beltline +beltlines +belts +beltway +beltways +beluga +belugas +belvedere +belvederes +belying +bema +bemadam +bemadamed +bemadaming +bemadams +bemadden +bemaddened +bemaddening +bemaddens +bemas +bemata +bemean +bemeaned +bemeaning +bemeans +bemedaled +bemedalled +bemingle +bemingled +bemingles +bemingling +bemire +bemired +bemires +bemiring +bemist +bemisted +bemisting +bemists +bemix +bemixed +bemixes +bemixing +bemixt +bemoan +bemoaned +bemoaning +bemoans +bemock +bemocked +bemocking +bemocks +bemuddle +bemuddled +bemuddles +bemuddling +bemurmur +bemurmured +bemurmuring +bemurmurs +bemuse +bemused +bemusedly +bemusement +bemusements +bemuses +bemusing +bemuzzle +bemuzzled +bemuzzles +bemuzzling +ben +bename +benamed +benames +benaming bench +benched +bencher +benchers +benches +benching +benchland +benchlands +benchmark +benchmarks +benchwarmer +benchwarmers bend +bendable +benday +bendayed +bendaying +bendays +bended +bendee +bendees +bender +benders +bending +bends +bendways +bendwise +bendy +bendys +bene beneath +benedick +benedicks +benedict +benediction +benedictions +benedictory +benedicts +benefaction +benefactions +benefactor +benefactors +benefactress +benefactresses +benefic +benefice +beneficed +beneficence +beneficences +beneficent +beneficently +benefices beneficial +beneficially +beneficialness +beneficialnesses +beneficiaries +beneficiary +beneficiate +beneficiated +beneficiates +beneficiating +beneficiation +beneficiations +beneficing benefit +benefited +benefiter +benefiters +benefiting +benefits +benefitted +benefitting +benempt +benempted +benes +benevolence +benevolences +benevolent +benevolently +benevolentness +benevolentnesses +bengaline +bengalines +benighted +benightedly +benightedness +benightednesses +benign +benignancies +benignancy +benignant +benignantly +benignities +benignity +benignly +benison +benisons +benjamin +benjamins +benne +bennes +bennet +bennets +benni +bennies +bennis +benny +benomyl +benomyls +bens bent +benthal +benthic +benthonic +benthos +benthoses +bentonite +bentonites +bentonitic +bents +bentwood +bentwoods +benumb +benumbed +benumbing +benumbs +benzal +benzaldehyde +benzaldehydes +benzanthracene +benzanthracenes +benzene +benzenes +benzenoid +benzidin +benzidine +benzidines +benzidins +benzimidazole +benzimidazoles +benzin +benzine +benzines +benzins +benzoapyrene +benzoapyrenes +benzoate +benzoates +benzocaine +benzocaines +benzodiazepine +benzodiazepines +benzofuran +benzofurans +benzoic +benzoin +benzoins +benzol +benzole +benzoles +benzols +benzophenone +benzophenones +benzoyl +benzoyls +benzyl +benzylic +benzyls +bepaint +bepainted +bepainting +bepaints +bepimple +bepimpled +bepimples +bepimpling +bequeath +bequeathal +bequeathals +bequeathed +bequeathing +bequeaths +bequest +bequests +berake +beraked +berakes +beraking +berascal +berascaled +berascaling +berascals +berate +berated +berates +berating +berberin +berberine +berberines +berberins +berberis +berberises +berceuse +berceuses +berdache +berdaches +bereave +bereaved +bereavement +bereavements +bereaver +bereavers +bereaves +bereaving +bereft +beret +berets +beretta +berettas +berg +bergamot +bergamots +bergere +bergeres +bergs +berhyme +berhymed +berhymes +berhyming +beribboned +beriberi +beriberis +berime +berimed +berimes +beriming +beringed +berkelium +berkeliums +berlin +berline +berlines +berlins +berm +berme +bermes +berms +bermudas +bernicle +bernicles +berobed +berouged +berretta +berrettas +berried +berries +berry +berrying +berrylike +berseem +berseems +berserk +berserker +berserkers +berserkly +berserks +berth +bertha +berthas +berthed +berthing +berths +beryl +beryline +beryllium +berylliums +beryls +bescorch +bescorched +bescorches +bescorching +bescour +bescoured +bescouring +bescours +bescreen +bescreened +bescreening +bescreens +beseech +beseeched +beseeches +beseeching +beseechingly +beseem +beseemed +beseeming +beseems +beset +besetment +besetments +besets +besetter +besetters +besetting +beshadow +beshadowed +beshadowing +beshadows +beshame +beshamed +beshames +beshaming +beshiver +beshivered +beshivering +beshivers +beshout +beshouted +beshouting +beshouts +beshrew +beshrewed +beshrewing +beshrews +beshroud +beshrouded +beshrouding +beshrouds beside besides +besiege +besieged +besieger +besiegers +besieges +besieging +beslaved +beslime +beslimed +beslimes +besliming +besmear +besmeared +besmearing +besmears +besmile +besmiled +besmiles +besmiling +besmirch +besmirched +besmirches +besmirching +besmoke +besmoked +besmokes +besmoking +besmooth +besmoothed +besmoothing +besmooths +besmudge +besmudged +besmudges +besmudging +besmut +besmuts +besmutted +besmutting +besnow +besnowed +besnowing +besnows +besom +besoms +besoothe +besoothed +besoothes +besoothing +besot +besots +besotted +besotting +besought +bespake +bespatter +bespattered +bespattering +bespatters +bespeak +bespeaking +bespeaks +bespectacled +bespoke +bespoken +bespouse +bespoused +bespouses +bespousing +bespread +bespreading +bespreads +besprent +besprinkle +besprinkled +besprinkles +besprinkling +best +bestead +besteaded +besteading +besteads +bested +bestial +bestialities +bestiality +bestialize +bestialized +bestializes +bestializing +bestially +bestiaries +bestiary +besting +bestir +bestirred +bestirring +bestirs +bestow +bestowal +bestowals +bestowed +bestowing +bestows +bestrew +bestrewed +bestrewing +bestrewn +bestrews +bestrid +bestridden +bestride +bestrides +bestriding +bestrode +bestrow +bestrowed +bestrowing +bestrown +bestrows +bests +bestseller +bestsellerdom +bestsellerdoms +bestsellers +bestud +bestudded +bestudding +bestuds +beswarm +beswarmed +beswarming +beswarms +bet +beta +betaine +betaines +betake +betaken +betakes +betaking +betas +betatron +betatrons +betatter +betattered +betattering +betatters +betaxed +betel +betelnut +betelnuts +betels +beth +bethank +bethanked +bethanking +bethanks +bethel +bethels +bethesda +bethesdas +bethink +bethinking +bethinks +bethorn +bethorned +bethorning +bethorns +bethought +beths +bethump +bethumped +bethumping +bethumps +betide +betided +betides +betiding +betime +betimes +betise +betises +betoken +betokened +betokening +betokens +beton +betonies +betons +betony +betook betray +betrayal +betrayals +betrayed +betrayer +betrayers +betraying +betrays +betroth +betrothal +betrothals +betrothed +betrotheds +betrothing +betroths +bets +betta +bettas +betted +better +bettered +bettering +betterment +betterments +betters +betting +bettor +bettors between +betweenbrain +betweenbrains +betweenness +betweennesses +betweentimes +betweenwhiles +betwixt +beuncled +bevatron +bevatrons +bevel +beveled +beveler +bevelers +beveling +bevelled +beveller +bevellers +bevelling +bevels +beverage +beverages +bevies +bevomit +bevomited +bevomiting +bevomits +bevor +bevors +bevy +bewail +bewailed +bewailer +bewailers +bewailing +bewails +beware +bewared +bewares +bewaring +bewearied +bewearies +beweary +bewearying +beweep +beweeping +beweeps +bewept +bewhiskered +bewig +bewigged +bewigging +bewigs +bewilder +bewildered +bewilderedly +bewilderedness +bewilderednesses +bewildering +bewilderingly +bewilderment +bewilderments +bewilders +bewinged +bewitch +bewitched +bewitcheries +bewitchery +bewitches +bewitching +bewitchingly +bewitchment +bewitchments +beworm +bewormed +beworming +beworms +beworried +beworries +beworry +beworrying +bewrap +bewrapped +bewrapping +bewraps +bewrapt +bewray +bewrayed +bewrayer +bewrayers +bewraying +bewrays +bey +beylic +beylics +beylik +beyliks beyond +beyonds +beys +bezant +bezants +bezazz +bezazzes +bezel +bezels +bezil +bezils +bezique +beziques +bezoar +bezoars +bezzant +bezzants +bhakta +bhaktas +bhakti +bhaktis +bhang +bhangs +bharal +bharals +bheestie +bheesties +bheesty +bhistie +bhisties +bhoot +bhoots +bhut +bhuts +bi +biacetyl +biacetyls +biali +bialis +bialy +bialys +biannual +biannually +bias +biased +biasedly +biases +biasing +biasness +biasnesses +biassed +biasses +biassing +biathlete +biathletes +biathlon +biathlons +biaxal +biaxial +biaxially +bib +bibasic +bibb +bibbed +bibber +bibberies +bibbers +bibbery +bibbing +bibbs +bibcock +bibcocks +bibelot +bibelots +bible +bibles +bibless +biblical +biblically +biblicism +biblicisms +biblicist +biblicists +biblike +bibliographer +bibliographers +bibliographic +bibliographical +bibliographically +bibliographies +bibliography +bibliolater +bibliolaters +bibliolatries +bibliolatrous +bibliolatry +bibliologies +bibliology +bibliomania +bibliomaniac +bibliomaniacal +bibliomaniacs +bibliomanias +bibliopegic +bibliopegies +bibliopegist +bibliopegists +bibliopegy +bibliophile +bibliophiles +bibliophilic +bibliophilies +bibliophilism +bibliophilisms +bibliophily +bibliopole +bibliopoles +bibliopolist +bibliopolists +bibliotheca +bibliothecae +bibliothecal +bibliothecas +bibliotherapies +bibliotherapy +bibliotic +bibliotics +bibliotist +bibliotists +biblist +biblists +bibs +bibulous +bibulously +bibulousness +bibulousnesses +bicameral +bicameralism +bicameralisms +bicarb +bicarbonate +bicarbonates +bicarbs +bicaudal +bice +bicentenaries +bicentenary +bicentennial +bicentennials +biceps +bicepses +bices +bichromate +bichromated +bichromates +bichrome +bicipital +bicker +bickered +bickerer +bickerers +bickering +bickers +bicoastal +bicolor +bicolored +bicolors +bicolour +bicolours +bicomponent +biconcave +biconcavities +biconcavity +biconditional +biconditionals +biconvex +biconvexities +biconvexity +bicorn +bicorne +bicornes +bicron +bicrons +bicultural +biculturalism +biculturalisms +bicuspid +bicuspids bicycle +bicycled +bicycler +bicyclers +bicycles +bicyclic +bicycling +bicyclist +bicyclists bid +bidarka +bidarkas +bidarkee +bidarkees +biddabilities +biddability +biddable +biddably +bidden +bidder +bidders +biddies +bidding +biddings +biddy +bide +bided +bidental +bider +biders +bides +bidet +bidets +bidialectal +bidialectalism +bidialectalisms +biding +bidirectional +bidirectionally +bidonville +bidonvilles +bids +bield +bielded +bielding +bields +biennale +biennales +biennia +biennial +biennially +biennials +biennium +bienniums +bier +biers +biface +bifaces +bifacial +bifacially +biff +biffed +biffies +biffin +biffing +biffins +biffs +biffy +bifid +bifidities +bifidity +bifidly +bifilar +bifilarly +biflagellate +biflex +bifocal +bifocals +bifold +biforate +biforked +biform +biformed +bifunctional +bifurcate +bifurcated +bifurcates +bifurcating +bifurcation +bifurcations big +bigamies +bigamist +bigamists +bigamous +bigamously +bigamy +bigarade +bigarades +bigaroon +bigaroons +bigeminal +bigeminies +bigeminy +bigeneric +bigeye +bigeyes +bigfeet +bigfoot +bigfoots +bigger +biggest +biggety +biggie +biggies +biggin +bigging +biggings +biggins +biggish +biggity +bighead +bigheaded +bigheads +bighearted +bigheartedly +bigheartedness +bigheartednesses +bighorn +bighorns +bight +bighted +bighting +bights +bigly +bigmouth +bigmouthed +bigmouths +bigness +bignesses +bignonia +bignonias +bigot +bigoted +bigotedly +bigotries +bigotry +bigots +bigs +bigwig +bigwigs +bihourly +bijection +bijections +bijective +bijou +bijous +bijouterie +bijouteries +bijoux +bijugate +bijugous bike +biked +biker +bikers +bikes +bikeway +bikeways +bikie +bikies +biking +bikini +bikinied +bikinis +bilabial +bilabials +bilabiate +bilander +bilanders +bilateral +bilateralism +bilateralisms +bilaterally +bilayer +bilayers +bilberries +bilberry +bilbo +bilboa +bilboas +bilboes +bilbos +bildungsroman +bildungsromane +bildungsromans +bile +biles +bilge +bilged +bilges +bilgewater +bilgewaters +bilgier +bilgiest +bilging +bilgy +bilharzia +bilharzial +bilharzias +bilharziases +bilharziasis +biliary +bilinear +bilingual +bilingualism +bilingualisms +bilingually +bilinguals +bilious +biliously +biliousness +biliousnesses +bilirubin +bilirubins +biliverdin +biliverdins +bilk +bilked +bilker +bilkers +bilking +bilks bill +billable +billabong +billabongs +billboard +billboarded +billboarding +billboards +billbug +billbugs +billed +biller +billers +billet +billeted +billeter +billeters +billeting +billets +billfish +billfishes +billfold +billfolds +billhead +billheads +billhook +billhooks +billiard +billiards +billie +billies +billing +billings +billingsgate +billingsgates +billion +billionaire +billionaires +billions +billionth +billionths +billon +billons +billow +billowed +billowier +billowiest +billowing +billows +billowy +bills +billy +billycan +billycans +billycock +billycocks +bilobate +bilobed +bilocation +bilocations +bilsted +bilsteds +biltong +biltongs +bima +bimah +bimahs +bimanous +bimanual +bimanually +bimas +bimbo +bimboes +bimbos +bimensal +bimester +bimesters +bimetal +bimetallic +bimetallics +bimetallism +bimetallisms +bimetallist +bimetallistic +bimetallists +bimetals +bimethyl +bimethyls +bimillenaries +bimillenary +bimillennial +bimillennials +bimodal +bimodalities +bimodality +bimolecular +bimolecularly +bimonthlies +bimonthly +bimorph +bimorphemic +bimorphs +bin +binal +binaries +binary +binate +binately +binational +binaural +binaurally +bind +bindable +binder +binderies +binders +bindery +bindi +binding +bindingly +bindingness +bindingnesses +bindings +bindis +bindle +bindles +binds +bindweed +bindweeds +bine +bines +binge +binged +bingeing +binger +bingers +binges +binging bingo +bingos +binit +binits +binnacle +binnacles +binned +binning +binocle +binocles +binocs +binocular +binocularities +binocularity +binocularly +binoculars +binomial +binomially +binomials +bins +bint +bints +binucleate +binucleated +bio +bioacoustics +bioactive +bioactivities +bioactivity +bioassay +bioassayed +bioassaying +bioassays +bioavailabilities +bioavailability +bioavailable +biocenoses +biocenosis +biochemical +biochemically +biochemicals +biochemist +biochemistries biochemistry +biochemists +biochip +biochips +biocidal +biocide +biocides +bioclean +bioclimatic +biocoenoses +biocoenosis +biocompatibilities +biocompatibility +biocompatible +biocontrol +biocontrols +bioconversion +bioconversions +biocycle +biocycles +biodegradabilities +biodegradability +biodegradable +biodegradation +biodegradations +biodegrade +biodegraded +biodegrades +biodegrading +biodeterioration +biodeteriorations +biodiversities +biodiversity +biodynamic +bioelectric +bioelectrical +bioelectricities +bioelectricity +bioenergetic +bioenergetics +bioengineer +bioengineered +bioengineering +bioengineerings +bioengineers +bioethic +bioethical +bioethicist +bioethicists +bioethics +biofeedback +biofeedbacks +biofouling +biofoulings +biogas +biogases +biogasses +biogen +biogeneses +biogenesis +biogenetic +biogenetically +biogenic +biogenies +biogenous +biogens +biogeny +biogeochemical +biogeochemicals +biogeochemistries +biogeochemistry +biogeographer +biogeographers +biogeographic +biogeographical +biogeographies +biogeography +biographee +biographees +biographer +biographers +biographic +biographical +biographically +biographies biography +biohazard +biohazards +bioherm +bioherms +biologic +biological +biologically +biologicals +biologics +biologies +biologism +biologisms +biologist +biologistic +biologists biology +bioluminescence +bioluminescences +bioluminescent +biolyses +biolysis +biolytic +biomass +biomasses +biomaterial +biomaterials +biomathematical +biomathematician +biomathematicians +biomathematics +biome +biomechanical +biomechanically +biomechanics +biomedical +biomedicine +biomedicines +biomes +biometeorological +biometeorologies +biometeorology +biometric +biometrical +biometrician +biometricians +biometrics +biometries +biometry +biomolecular +biomolecule +biomolecules +biomorphic +bionic +bionics +bionomic +bionomics +bionomies +bionomy +biont +biontic +bionts +biophysical +biophysicist +biophysicists +biophysics +biopic +biopics +bioplasm +bioplasms +biopolymer +biopolymers +biopsic +biopsied +biopsies +biopsy +biopsying +bioptic +bioreactor +bioreactors +biorhythm +biorhythmic +biorhythms +bios +biosafeties +biosafety +bioscience +biosciences +bioscientific +bioscientist +bioscientists +bioscope +bioscopes +bioscopies +bioscopy +biosensor +biosensors +biosocial +biosocially +biosphere +biospheres +biospheric +biostatistical +biostatistician +biostatisticians +biostatistics +biostratigraphic +biostratigraphies +biostratigraphy +biosyntheses +biosynthesis +biosynthetic +biosynthetically +biosystematic +biosystematics +biosystematist +biosystematists +biota +biotas +biotech +biotechnical +biotechnological +biotechnologies +biotechnologist +biotechnologists +biotechnology +biotechs +biotelemetric +biotelemetries +biotelemetry +biotic +biotical +biotics +biotin +biotins +biotite +biotites +biotitic +biotope +biotopes +biotoxin +biotoxins +biotransformation +biotransformations +biotron +biotrons +biotype +biotypes +biotypic +biovular +bipack +bipacks +biparental +biparentally +biparous +biparted +bipartisan +bipartisanism +bipartisanisms +bipartisanship +bipartisanships +bipartite +bipartitely +bipartition +bipartitions +biparty +biped +bipedal +bipedalism +bipedalisms +bipedalities +bipedality +bipedally +bipeds +biphasic +biphenyl +biphenyls +bipinnate +bipinnately +biplane +biplanes +bipod +bipods +bipolar +bipolarities +bipolarity +bipolarization +bipolarizations +bipolarize +bipolarized +bipolarizes +bipolarizing +bipropellant +bipropellants +bipyramid +bipyramidal +bipyramids +biquadratic +biquadratics +biracial +biracialism +biracialisms +biradial +biramose +biramous +birch +birched +birchen +birches +birching bird +birdbath +birdbaths +birdbrain +birdbrained +birdbrains +birdcage +birdcages +birdcall +birdcalls +birded +birder +birders +birdfarm +birdfarms +birdhouse +birdhouses +birdie +birdied +birdieing +birdies +birding +birdings +birdlike +birdlime +birdlimed +birdlimes +birdliming +birdman +birdmen +birds +birdseed +birdseeds +birdseye +birdseyes +birdshot +birdshots +birdsong +birdsongs +birdwatcher +birdwatchers +birefringence +birefringences +birefringent +bireme +biremes +biretta +birettas +birk +birkie +birkies +birks +birl +birle +birled +birler +birlers +birles +birling +birlings +birls +birr +birred +birretta +birrettas +birring +birrotch +birrs +birse +birses birth +birthdate +birthdates birthday +birthdays +birthed +birthing +birthmark +birthmarks birthplace +birthplaces +birthrate +birthrates +birthright +birthrights +birthroot +birthroots +births +birthstone +birthstones +birthwort +birthworts +bis biscuit +biscuits +bise +bisect +bisected +bisecting +bisection +bisectional +bisectionally +bisections +bisector +bisectors +bisects +bises +bisexual +bisexualities +bisexuality +bisexually +bisexuals bishop +bishoped +bishoping +bishopric +bishoprics +bishops +bisk +bisks +bismuth +bismuthic +bismuths +bisnaga +bisnagas +bison +bisons +bisontine +bisque +bisques +bistate +bister +bistered +bisters +bistort +bistorts +bistouries +bistoury +bistre +bistred +bistres +bistro +bistroic +bistros +bisulfate +bisulfates +bisulfide +bisulfides +bisulfite +bisulfites bit +bitable +bitartrate +bitartrates +bitch +bitched +bitcheries +bitchery +bitches +bitchier +bitchiest +bitchily +bitchiness +bitchinesses +bitching +bitchy bite +biteable +biter +biters +bites +bitewing +bitewings +biting +bitingly +bits +bitstock +bitstocks +bitsy +bitt +bitted +bitten bitter +bitterbrush +bitterbrushes +bittered +bitterer +bitterest +bittering +bitterish +bitterly +bittern +bitterness +bitternesses +bitterns +bitterroot +bitterroots +bitters +bittersweet +bittersweetly +bittersweetness +bittersweetnesses +bittersweets +bitterweed +bitterweeds +bittier +bittiest +bitting +bittings +bittock +bittocks +bitts +bitty +bitumen +bitumens +bituminization +bituminizations +bituminize +bituminized +bituminizes +bituminizing +bituminous +biunique +biuniqueness +biuniquenesses +bivalent +bivalents +bivalve +bivalved +bivalves +bivariate +bivinyl +bivinyls +bivouac +bivouacked +bivouacking +bivouacks +bivouacs +biweeklies +biweekly +biyearly +biz +bizarre +bizarrely +bizarreness +bizarrenesses +bizarrerie +bizarreries +bizarres +bize +bizes +biznaga +biznagas +bizonal +bizone +bizones +bizzes +blab +blabbed +blabber +blabbered +blabbering +blabbermouth +blabbermouths +blabbers +blabbing +blabby +blabs black +blackamoor +blackamoors +blackball +blackballed +blackballing +blackballs +blackberries +blackberry +blackbird +blackbirded +blackbirder +blackbirders +blackbirding +blackbirds blackboard +blackboards +blackbodies +blackbody +blackboy +blackboys +blackcap +blackcaps +blackcock +blackcocks +blacked +blacken +blackened +blackener +blackeners +blackening +blackenings +blackens +blacker +blackest +blackface +blackfaces +blackfin +blackfins +blackfish +blackfishes +blackflies +blackfly +blackguard +blackguarded +blackguarding +blackguardism +blackguardisms +blackguardly +blackguards +blackgum +blackgums +blackhander +blackhanders +blackhead +blackheads +blackheart +blackhearts +blacking +blackings +blackish +blackjack +blackjacked +blackjacking +blackjacks +blackland +blacklands +blacklead +blackleads +blackleg +blacklegs +blacklist +blacklisted +blacklister +blacklisters +blacklisting +blacklists +blackly +blackmail +blackmailed +blackmailer +blackmailers +blackmailing +blackmails +blackness +blacknesses +blackout +blackouts +blackpoll +blackpolls +blacks +blacksmith +blacksmithing +blacksmithings +blacksmiths +blacksnake +blacksnakes +blacktail +blacktails +blackthorn +blackthorns +blacktop +blacktopped +blacktopping +blacktops +blackwater +blackwaters +blackwood +blackwoods +bladder +bladderlike +bladdernut +bladdernuts +bladders +bladderwort +bladderworts +bladdery +blade +bladed +bladelike +blades +blae +blaeberries +blaeberry +blah +blahs +blain +blains +blam +blamable +blamably blame +blamed +blameful +blamefully +blameless +blamelessly +blamelessness +blamelessnesses +blamer +blamers +blames +blameworthiness +blameworthinesses +blameworthy +blaming +blams +blanch +blanched +blancher +blanchers +blanches +blanching +blancmange +blancmanges +bland +blander +blandest +blandish +blandished +blandisher +blandishers +blandishes +blandishing +blandishment +blandishments +blandly +blandness +blandnesses blank +blanked +blanker +blankest blanket +blanketed +blanketflower +blanketflowers +blanketing +blanketlike +blankets +blanking +blankly +blankness +blanknesses +blanks +blanquette +blanquettes +blare +blared +blares +blaring +blarney +blarneyed +blarneying +blarneys +blase +blaspheme +blasphemed +blasphemer +blasphemers +blasphemes +blasphemies +blaspheming +blasphemous +blasphemously +blasphemousness +blasphemousnesses +blasphemy +blast +blasted +blastema +blastemal +blastemas +blastemata +blastematic +blaster +blasters +blastie +blastier +blasties +blastiest +blasting +blastings +blastment +blastments +blastocoel +blastocoele +blastocoeles +blastocoelic +blastocoels +blastocyst +blastocysts +blastoderm +blastoderms +blastodisc +blastodiscs +blastoff +blastoffs +blastoma +blastomas +blastomata +blastomere +blastomeres +blastomycoses +blastomycosis +blastopore +blastopores +blastoporic +blastospore +blastospores +blasts +blastula +blastulae +blastulas +blastulation +blastulations +blasty +blat +blatancies +blatancy +blatant +blatantly +blate +blather +blathered +blatherer +blatherers +blathering +blathers +blatherskite +blatherskites +blats +blatted +blatter +blattered +blattering +blatters +blatting +blaubok +blauboks +blaw +blawed +blawing +blawn +blaws +blaxploitation +blaxploitations +blaze +blazed +blazer +blazers +blazes +blazing +blazingly +blazon +blazoned +blazoner +blazoners +blazoning +blazonings +blazonries +blazonry +blazons +bleach +bleachable +bleached +bleacher +bleacherite +bleacherites +bleachers +bleaches +bleaching +bleak +bleaker +bleakest +bleakish +bleakly +bleakness +bleaknesses +bleaks +blear +bleared +blearier +bleariest +blearily +bleariness +blearinesses +blearing +blears +bleary +bleat +bleated +bleater +bleaters +bleating +bleats +bleb +blebby +blebs +bled bleed +bleeder +bleeders +bleeding +bleedings +bleeds +bleep +bleeped +bleeping +bleeps +blellum +blellums +blemish +blemished +blemishes +blemishing +blench +blenched +blencher +blenchers +blenches +blenching +blend +blende +blended +blender +blenders +blendes +blending +blends +blennies +blenny +blent +blepharoplast +blepharoplasties +blepharoplasts +blepharoplasty +blepharospasm +blepharospasms +blesbok +blesboks +blesbuck +blesbucks bless +blessed +blesseder +blessedest +blessedly +blessedness +blessednesses +blesser +blessers +blesses +blessing +blessings +blest +blet +blether +blethered +blethering +blethers +blets +blew +blight +blighted +blighter +blighters +blighties +blighting +blights +blighty +blimey +blimp +blimpish +blimpishly +blimpishness +blimpishnesses +blimps +blimy +blin blind +blindage +blindages +blinded +blinder +blinders +blindest +blindfish +blindfishes +blindfold +blindfolded +blindfolding +blindfolds +blinding +blindingly +blindly +blindness +blindnesses +blinds +blindside +blindsided +blindsides +blindsiding +blindworm +blindworms +blini +blinis +blink +blinkard +blinkards +blinked +blinker +blinkered +blinkering +blinkers +blinking +blinks +blintz +blintze +blintzes +blip +blipped +blipping +blips +bliss +blissed +blisses +blissful +blissfully +blissfulness +blissfulnesses +blissing +blister +blistered +blistering +blisteringly +blisters +blistery +blite +blites +blithe +blithely +blither +blithered +blithering +blithers +blithesome +blithesomely +blithest +blitz +blitzed +blitzes +blitzing +blitzkrieg +blitzkriegs +blizzard +blizzardly +blizzards +blizzardy +bloat +bloated +bloater +bloaters +bloating +bloats +blob +blobbed +blobbing +blobs +bloc block +blockade +blockaded +blockader +blockaders +blockades +blockading +blockage +blockages +blockbuster +blockbusters +blockbusting +blockbustings +blocked +blocker +blockers +blockhead +blockheads +blockhouse +blockhouses +blockier +blockiest +blocking +blockish +blocks +blocky +blocs +bloke +blokes +blond +blonde +blonder +blondes +blondest +blondish +blonds blood +bloodbath +bloodbaths +bloodcurdling +blooded +bloodfin +bloodfins +bloodguilt +bloodguiltiness +bloodguiltinesses +bloodguilts +bloodguilty +bloodhound +bloodhounds +bloodied +bloodier +bloodies +bloodiest +bloodily +bloodiness +bloodinesses +blooding +bloodings +bloodless +bloodlessly +bloodlessness +bloodlessnesses +bloodletting +bloodlettings +bloodline +bloodlines +bloodmobile +bloodmobiles +bloodred +bloodroot +bloodroots +bloods +bloodshed +bloodsheds +bloodshot +bloodstain +bloodstained +bloodstains +bloodstock +bloodstocks +bloodstone +bloodstones +bloodstream +bloodstreams +bloodsucker +bloodsuckers +bloodsucking +bloodthirstily +bloodthirstiness +bloodthirstinesses +bloodthirsty +bloodworm +bloodworms +bloody +bloodying +blooey +blooie +bloom +bloomed +bloomer +bloomeries +bloomers +bloomery +bloomier +bloomiest +blooming +blooms +bloomy +bloop +blooped +blooper +bloopers +blooping +bloops +blossom +blossomed +blossoming +blossoms +blossomy +blot +blotch +blotched +blotches +blotchier +blotchiest +blotchily +blotching +blotchy +blotless +blots +blotted +blotter +blotters +blottier +blottiest +blotting +blotto +blotty blouse +bloused +blouses +blousier +blousiest +blousily +blousing +blouson +blousons +blousy +bloviate +bloviated +bloviates +bloviating blow +blowback +blowbacks +blowball +blowballs +blowby +blowbys +blowdown +blowdowns +blowed +blower +blowers +blowfish +blowfishes +blowflies +blowfly +blowgun +blowguns +blowhard +blowhards +blowhole +blowholes +blowier +blowiest +blowing +blowjob +blowjobs +blown +blowoff +blowoffs +blowout +blowouts +blowpipe +blowpipes +blows +blowsed +blowsier +blowsiest +blowsily +blowsy +blowtorch +blowtorches +blowtube +blowtubes +blowup +blowups +blowy +blowzed +blowzier +blowziest +blowzily +blowzy +blub +blubbed +blubber +blubbered +blubbering +blubbers +blubbery +blubbing +blubs +blucher +bluchers +bludgeon +bludgeoned +bludgeoning +bludgeons +bludger +bludgers blue +blueball +blueballs +bluebeard +bluebeards +bluebell +bluebells +blueberries +blueberry +bluebill +bluebills +bluebird +bluebirds +bluebonnet +bluebonnets +bluebook +bluebooks +bluebottle +bluebottles +bluecap +bluecaps +bluecoat +bluecoats +blued +bluefin +bluefins +bluefish +bluefishes +bluegill +bluegills +bluegrass +bluegrasses +bluegum +bluegums +bluehead +blueheads +blueing +blueings +blueish +bluejack +bluejacket +bluejackets +bluejacks +bluejay +bluejays +bluejeans +blueline +bluelines +bluely +blueness +bluenesses +bluenose +bluenoses +bluepoint +bluepoints +blueprint +blueprinted +blueprinting +blueprints +bluer +blues +blueshift +blueshifted +blueshifts +bluesier +bluesiest +bluesman +bluesmen +bluest +bluestem +bluestems +bluestocking +bluestockings +bluestone +bluestones +bluesy +bluet +bluetick +blueticks +bluetongue +bluetongues +bluets +blueweed +blueweeds +bluewood +bluewoods +bluey +blueys +bluff +bluffed +bluffer +bluffers +bluffest +bluffing +bluffly +bluffness +bluffnesses +bluffs +bluing +bluings +bluish +bluishness +bluishnesses +blume +blumed +blumes +bluming +blunder +blunderbuss +blunderbusses +blundered +blunderer +blunderers +blundering +blunderingly +blunders +blunge +blunged +blunger +blungers +blunges +blunging +blunt +blunted +blunter +bluntest +blunting +bluntly +bluntness +bluntnesses +blunts +blur +blurb +blurbed +blurbing +blurbs +blurred +blurrier +blurriest +blurrily +blurriness +blurrinesses +blurring +blurringly +blurry +blurs +blurt +blurted +blurter +blurters +blurting +blurts +blush +blushed +blusher +blushers +blushes +blushful +blushing +blushingly +bluster +blustered +blusterer +blusterers +blustering +blusteringly +blusterous +blusters +blustery +blype +blypes +bo +boa +boar board +boarded +boarder +boarders +boarding +boardinghouse +boardinghouses +boardings +boardlike +boardman +boardmen +boardroom +boardrooms +boards +boardsailing +boardsailings +boardsailor +boardsailors +boardwalk +boardwalks +boarfish +boarfishes +boarish +boars +boart +boarts +boas +boast +boasted +boaster +boasters +boastful +boastfully +boastfulness +boastfulnesses +boasting +boasts boat +boatable +boatbill +boatbills +boatbuilder +boatbuilders +boatbuilding +boatbuildings +boated +boatel +boatels +boater +boaters +boatful +boatfuls +boathook +boathooks +boathouse +boathouses +boating +boatings +boatlike +boatload +boatloads +boatman +boatmen +boats +boatsman +boatsmen +boatswain +boatswains +boatyard +boatyards +bob +bobbed +bobber +bobberies +bobbers +bobbery +bobbies +bobbin +bobbinet +bobbinets +bobbing +bobbins +bobble +bobbled +bobbles +bobbling +bobby +bobcat +bobcats +bobeche +bobeches +bobolink +bobolinks +bobs +bobsled +bobsledded +bobsledder +bobsledders +bobsledding +bobsleddings +bobsleds +bobstay +bobstays +bobtail +bobtailed +bobtailing +bobtails +bobwhite +bobwhites +bocaccio +bocaccios +bocce +bocces +bocci +boccia +boccias +boccie +boccies +boccis +boche +boches +bock +bocks +bod +bodacious +bodaciously +boddhisattva +boddhisattvas +bode +boded +bodega +bodegas +bodement +bodements +bodes +bodhisattva +bodhisattvas +bodhran +bodhrans +bodice +bodices +bodied +bodies +bodiless +bodily +boding +bodingly +bodings +bodkin +bodkins +bods body +bodybuilder +bodybuilders +bodybuilding +bodybuildings +bodycheck +bodychecked +bodychecking +bodychecks +bodyguard +bodyguards +bodying +bodysuit +bodysuits +bodysurf +bodysurfed +bodysurfer +bodysurfers +bodysurfing +bodysurfs +bodywork +bodyworks +boehmite +boehmites +boff +boffin +boffins +boffo +boffola +boffolas +boffos +boffs +bog +bogan +bogans +bogbean +bogbeans +bogey +bogeyed +bogeying +bogeyman +bogeymen +bogeys +bogged +boggier +boggiest +bogging +boggish +boggle +boggled +boggler +bogglers +boggles +boggling +boggy +bogie +bogies +bogle +bogles +bogs +bogus +bogwood +bogwoods +bogy +bogyism +bogyisms +bogyman +bogymen +bohea +boheas +bohemia +bohemian +bohemianism +bohemianisms +bohemians +bohemias +bohunk +bohunks boil +boilable +boiled +boiler +boilermaker +boilermakers +boilerplate +boilerplates +boilers +boilersuit +boilersuits +boiling +boiloff +boiloffs +boils +boing +boiserie +boiseries +boisterous +boisterously +boisterousness +boisterousnesses +boite +boites +bola +bolar +bolas +bolases +bold +bolder +boldest +boldface +boldfaced +boldfaces +boldfacing +boldly +boldness +boldnesses +bolds +bole +bolero +boleros +boles +bolete +boletes +boleti +boletus +boletuses +bolide +bolides +bolivar +bolivares +bolivars +bolivia +boliviano +bolivianos +bolivias +boll +bollard +bollards +bolled +bolling +bollix +bollixed +bollixes +bollixing +bollocks +bollox +bolloxed +bolloxes +bolloxing +bolls +bollworm +bollworms +bolo +bologna +bolognas +bolometer +bolometers +bolometric +bolometrically +boloney +boloneys +bolos +bolshevism +bolshevisms +bolshevize +bolshevized +bolshevizes +bolshevizing +bolshie +bolshies +bolshy +bolson +bolsons +bolster +bolstered +bolsterer +bolsterers +bolstering +bolsters +bolt +bolted +bolter +bolters +bolthead +boltheads +bolthole +boltholes +bolting +boltonia +boltonias +boltrope +boltropes +bolts +bolus +boluses bomb +bombard +bombarded +bombardier +bombardiers +bombarding +bombardment +bombardments +bombardon +bombardons +bombards +bombast +bombastic +bombastically +bombasts +bombax +bombazine +bombazines +bombe +bombed +bomber +bombers +bombes +bombesin +bombesins +bombinate +bombinated +bombinates +bombinating +bombination +bombinations +bombing +bombings +bombload +bombloads +bombproof +bombs +bombshell +bombshells +bombsight +bombsights +bombycid +bombycids +bombyx +bombyxes +bonaci +bonacis +bonanza +bonanzas +bonbon +bonbons bond +bondable +bondage +bondages +bonded +bonder +bonders +bondholder +bondholders +bonding +bondings +bondmaid +bondmaids +bondman +bondmen +bonds +bondsman +bondsmen +bondstone +bondstones +bonduc +bonducs +bondwoman +bondwomen bone +boned +bonefish +bonefishes +bonefishing +bonefishings +bonehead +boneheaded +boneheadedness +boneheadednesses +boneheads +boneless +bonemeal +bonemeals +boner +boners +bones +boneset +bonesets +bonesetter +bonesetters +boney +boneyard +boneyards +bonfire +bonfires +bong +bonged +bonging +bongo +bongoes +bongoist +bongoists +bongos +bongs +bonhomie +bonhomies +bonhomous +bonier +boniest +boniface +bonifaces +boniness +boninesses +boning +bonita +bonitas +bonito +bonitoes +bonitos +bonk +bonked +bonkers +bonking +bonks +bonne +bonnes +bonnet +bonneted +bonneting +bonnets +bonnie +bonnier +bonniest +bonnily +bonnock +bonnocks +bonny +bonnyclabber +bonnyclabbers +bonsai +bonspell +bonspells +bonspiel +bonspiels +bontebok +bonteboks bonus +bonuses +bony +bonze +bonzer +bonzes +boo +boob +boobed +boobie +boobies +boobing +boobish +booboisie +booboisies +booboo +booboos +boobs +booby +boodle +boodled +boodler +boodlers +boodles +boodling +booed +booger +boogerman +boogermen +boogers +boogey +boogeyed +boogeying +boogeyman +boogeymen +boogeys +boogie +boogied +boogies +boogy +boogying +boogyman +boogymen +boohoo +boohooed +boohooing +boohoos +booing book +bookable +bookbinder +bookbinderies +bookbinders +bookbindery +bookbinding +bookbindings +bookcase +bookcases +booked +bookend +bookends +booker +bookers +bookful +bookfuls +bookie +bookies +booking +bookings +bookish +bookishly +bookishness +bookishnesses +bookkeeper +bookkeepers +bookkeeping +bookkeepings +booklet +booklets +booklice +booklore +booklores +booklouse +bookmaker +bookmakers +bookmaking +bookmakings +bookman +bookmark +bookmarker +bookmarkers +bookmarks +bookmen +bookmobile +bookmobiles +bookplate +bookplates +bookrack +bookracks +bookrest +bookrests +books +bookseller +booksellers +bookselling +booksellings +bookshelf +bookshelves +bookshop +bookshops +bookstall +bookstalls +bookstore +bookstores +bookworm +bookworms boom +boombox +boomboxes +boomed +boomer +boomerang +boomeranged +boomeranging +boomerangs +boomers +boomier +boomiest +booming +boomkin +boomkins +boomlet +boomlets +booms +boomtown +boomtowns +boomy +boon +boondock +boondocks +boondoggle +boondoggled +boondoggler +boondogglers +boondoggles +boondoggling +boonies +boons +boor +boorish +boorishly +boorishness +boorishnesses +boors +boos +boost +boosted +booster +boosterism +boosterisms +boosters +boosting +boosts boot +bootable +bootblack +bootblacks +booted +bootee +bootees +booteries +bootery booth +booths +bootie +booties +booting +bootjack +bootjacks +bootlace +bootlaces +bootleg +bootlegged +bootlegger +bootleggers +bootlegging +bootlegs +bootless +bootlessly +bootlessness +bootlessnesses +bootlick +bootlicked +bootlicker +bootlickers +bootlicking +bootlicks +boots +bootstrap +bootstrapped +bootstrapping +bootstraps +booty +booze +boozed +boozer +boozers +boozes +boozier +booziest +boozily +boozing +boozy +bop +bopeep +bopeeps +bopped +bopper +boppers +bopping +bops +bora +boraces +boracic +boracite +boracites +borage +borages +boral +borals +borane +boranes +boras +borate +borated +borates +borating +borax +boraxes +borborygmi +borborygmus +bordeaux +bordel +bordello +bordellos +bordels border +bordereau +bordereaux +bordered +borderer +borderers +bordering +borderland +borderlands +borderline +borderlines +borders +bordure +bordures +bore +boreal +borecole +borecoles bored +boredom +boredoms +boreen +boreens +borehole +boreholes +borer +borers +bores +borescope +borescopes +boresome +boric +boride +borides boring +boringly +boringness +boringnesses +borings born +borne +borneol +borneols +bornite +bornites +borohydride +borohydrides +boron +boronic +borons +borosilicate +borosilicates +borough +boroughs borrow +borrowed +borrower +borrowers +borrowing +borrowings +borrows +borsch +borsches +borscht +borschts +borsht +borshts +borstal +borstals +bort +borts +borty +bortz +bortzes +borzoi +borzois +bos +boscage +boscages +boschbok +boschboks +bosh +boshbok +boshboks +boshes +boshvark +boshvarks +bosk +boskage +boskages +bosker +bosket +boskets +boskier +boskiest +bosks +bosky +bosom +bosomed +bosoming +bosoms +bosomy +boson +bosons +bosque +bosques +bosquet +bosquets boss +bossdom +bossdoms +bossed +bosses +bossier +bossies +bossiest +bossily +bossiness +bossinesses +bossing +bossism +bossisms +bossy +boston +bostons +bosun +bosuns +bot +bota +botanic +botanica botanical +botanically +botanicals +botanicas +botanies +botanise +botanised +botanises +botanising +botanist +botanists +botanize +botanized +botanizes +botanizing botany +botas +botch +botched +botcher +botcheries +botchers +botchery +botches +botchier +botchiest +botchily +botching +botchy +botel +botels +botflies +botfly both bother +botheration +botherations +bothered +bothering +bothers +bothersome +bothies +bothria +bothrium +bothriums +bothy +botonee +botonnee +botryoid +botryoidal +botryose +botrytis +botrytises +bots +bott bottle +bottlebrush +bottlebrushes +bottled +bottleful +bottlefuls +bottleneck +bottlenecked +bottlenecking +bottlenecks +bottler +bottlers +bottles +bottling +bottlings bottom +bottomed +bottomer +bottomers +bottoming +bottomland +bottomlands +bottomless +bottomlessly +bottomlessness +bottomlessnesses +bottommost +bottomries +bottomry +bottoms +botts +botulin +botulinal +botulins +botulinum +botulinums +botulinus +botulinuses +botulism +botulisms +boubou +boubous +bouchee +bouchees +boucle +boucles +boudoir +boudoirs +bouffant +bouffants +bouffe +bouffes +bougainvillaea +bougainvillaeas +bougainvillea +bougainvilleas +bough +boughed +boughpot +boughpots +boughs +bought +boughten +bougie +bougies +bouillabaisse +bouillabaisses +bouillon +bouillons +boulder +bouldered +boulders +bouldery +boule +boules +boulevard +boulevardier +boulevardiers +boulevards +bouleversement +bouleversements +boulle +boulles bounce +bounced +bouncer +bouncers +bounces +bouncier +bounciest +bouncily +bouncing +bouncingly +bouncy bound +boundaries boundary +bounded +boundedness +boundednesses +bounden +bounder +bounderish +bounders +bounding +boundless +boundlessly +boundlessness +boundlessnesses +bounds +bounteous +bounteously +bounteousness +bounteousnesses +bountied +bounties +bountiful +bountifully +bountifulness +bountifulnesses +bounty +bouquet +bouquets +bourbon +bourbonism +bourbonisms +bourbons +bourdon +bourdons +bourg +bourgeois +bourgeoise +bourgeoises +bourgeoisie +bourgeoisies +bourgeoisification +bourgeoisifications +bourgeoisified +bourgeoisifies +bourgeoisify +bourgeoisifying +bourgeon +bourgeoned +bourgeoning +bourgeons +bourgs +bourguignon +bourguignonne +bourn +bourne +bournes +bourns +bourree +bourrees +bourride +bourrides +bourse +bourses +bourtree +bourtrees +bouse +boused +bouses +bousing +bousouki +bousoukia +bousoukis +boustrophedon +boustrophedonic +boustrophedons +bousy +bout +boutique +boutiques +bouton +boutonniere +boutonnieres +boutons +bouts +bouvier +bouviers +bouzouki +bouzoukia +bouzoukis +bovid +bovids +bovine +bovinely +bovines +bovinities +bovinity bow +bowdlerise +bowdlerised +bowdlerises +bowdlerising +bowdlerization +bowdlerizations +bowdlerize +bowdlerized +bowdlerizer +bowdlerizers +bowdlerizes +bowdlerizing +bowed +bowel +boweled +boweling +bowelled +bowelless +bowelling +bowels +bower +bowerbird +bowerbirds +bowered +boweries +bowering +bowers +bowery +bowfin +bowfins +bowfront +bowhead +bowheads +bowing +bowingly +bowings +bowknot +bowknots bowl +bowlder +bowlders +bowled +bowleg +bowlegged +bowlegs +bowler +bowlers +bowless +bowlful +bowlfuls +bowlike +bowline +bowlines bowling +bowlings +bowllike +bowls +bowman +bowmen +bowpot +bowpots +bows +bowse +bowsed +bowses +bowshot +bowshots +bowsing +bowsprit +bowsprits +bowstring +bowstrings +bowwow +bowwowed +bowwowing +bowwows +bowyer +bowyers box +boxberries +boxberry +boxboard +boxboards +boxcar +boxcars +boxed +boxer +boxers +boxes +boxfish +boxfishes +boxful +boxfuls +boxhaul +boxhauled +boxhauling +boxhauls +boxier +boxiest +boxiness +boxinesses boxing +boxings +boxlike +boxthorn +boxthorns +boxwood +boxwoods +boxy boy +boyar +boyard +boyards +boyarism +boyarisms +boyars +boychick +boychicks +boychik +boychiks boycott +boycotted +boycotter +boycotters +boycotting +boycotts +boyfriend +boyfriends +boyhood +boyhoods +boyish +boyishly +boyishness +boyishnesses +boyla +boylas +boyo +boyos +boys +boysenberries +boysenberry +bozo +bozos +bra +brabble +brabbled +brabbler +brabblers +brabbles +brabbling +brace +braced +bracelet +bracelets +bracer +bracero +braceros +bracers +braces +brach +braches +brachet +brachets +brachia +brachial +brachials +brachiate +brachiated +brachiates +brachiating +brachiation +brachiations +brachiator +brachiators +brachiopod +brachiopods +brachium +brachs +brachycephalic +brachycephalies +brachycephaly +brachypterous +bracing +bracingly +bracings +braciola +braciolas +braciole +bracioles +bracken +brackens +bracket +bracketed +bracketing +brackets +brackish +brackishness +brackishnesses +braconid +braconids +bract +bracteal +bracteate +bracted +bracteole +bracteoles +bractlet +bractlets +bracts +brad +bradawl +bradawls +bradded +bradding +bradoon +bradoons +brads +bradycardia +bradycardias +bradykinin +bradykinins +brae +braes +brag +braggadocio +braggadocios +braggart +braggarts +bragged +bragger +braggers +braggest +braggier +braggiest +bragging +braggy +brags +brahma +brahmas +braid +braided +braider +braiders +braiding +braidings +braids +brail +brailed +brailing +braille +brailled +brailles +braillewriter +braillewriters +brailling +braillist +braillists +brails brain +braincase +braincases +brainchild +brainchildren +brained +brainier +brainiest +brainily +braininess +braininesses +braining +brainish +brainless +brainlessly +brainlessness +brainlessnesses +brainpan +brainpans +brainpower +brainpowers +brains +brainsick +brainsickly +brainstorm +brainstormed +brainstormer +brainstormers +brainstorming +brainstormings +brainstorms +brainteaser +brainteasers +brainwash +brainwashed +brainwasher +brainwashers +brainwashes +brainwashing +brainwashings +brainy +braise +braised +braises +braising +braize +braizes brake +brakeage +brakeages +braked +brakeless +brakeman +brakemen +brakes +brakier +brakiest +braking +braky +braless +bramble +brambled +brambles +bramblier +brambliest +brambling +brambly +bran branch +branched +branches +branchia +branchiae +branchial +branchier +branchiest +branching +branchiopod +branchiopods +branchless +branchlet +branchlets +branchline +branchlines +branchy brand +branded +brander +branders +brandied +brandies +branding +brandish +brandished +brandishes +brandishing +brands +brandy +brandying +brank +branks +branned +branner +branners +brannier +branniest +brannigan +brannigans +branning +branny +brans +brant +brantail +brantails +brants +bras +brash +brasher +brashes +brashest +brashier +brashiest +brashly +brashness +brashnesses +brashy +brasier +brasiers +brasil +brasilin +brasilins +brasils +brass +brassage +brassages +brassard +brassards +brassart +brassarts +brassbound +brassed +brasserie +brasseries +brasses +brassica +brassicas +brassie +brassier +brassiere +brassieres +brassies +brassiest +brassily +brassiness +brassinesses +brassing +brassish +brassy +brat +brats +brattice +bratticed +brattices +bratticing +brattier +brattiest +brattiness +brattinesses +brattish +brattle +brattled +brattles +brattling +bratty +bratwurst +bratwursts +braunite +braunites +braunschweiger +braunschweigers +brava +bravado +bravadoes +bravados +bravas brave +braved +bravely +braver +braveries +bravers bravery +braves +bravest +bravi +braving +bravo +bravoed +bravoes +bravoing +bravos +bravura +bravuras +bravure +braw +brawer +brawest +brawl +brawled +brawler +brawlers +brawlie +brawlier +brawliest +brawling +brawls +brawly +brawn +brawnier +brawniest +brawnily +brawniness +brawninesses +brawns +brawny +braws +braxies +braxy +bray +brayed +brayer +brayers +braying +brays +braza +brazas +braze +brazed +brazen +brazened +brazening +brazenly +brazenness +brazennesses +brazens +brazer +brazers +brazes +brazier +braziers +brazil +brazilin +brazilins +brazils +brazilwood +brazilwoods +brazing +breach +breached +breacher +breachers +breaches +breaching bread +breadbasket +breadbaskets +breadboard +breadboarded +breadboarding +breadboards +breadbox +breadboxes +breaded +breadfruit +breadfruits +breading +breadline +breadlines +breadnut +breadnuts +breads +breadstuff +breadstuffs +breadth +breadths +breadthwise +breadwinner +breadwinners +breadwinning +breadwinnings +bready break +breakable +breakables +breakage +breakages +breakaway +breakaways +breakdown +breakdowns +breaker +breakers +breakeven +breakevens breakfast +breakfasted +breakfaster +breakfasters +breakfasting +breakfasts +breakfront +breakfronts +breaking +breakings +breakneck +breakout +breakouts +breaks +breaksaway breakthrough +breakthroughs +breakup +breakups +breakwater +breakwaters +bream +breamed +breaming +breams breast +breastbone +breastbones +breasted +breasting +breastplate +breastplates +breasts +breaststroke +breaststroker +breaststrokers +breaststrokes +breastwork +breastworks breath +breathabilities +breathability +breathable breathe +breathed +breather +breathers +breathes +breathier +breathiest +breathily +breathiness +breathinesses +breathing +breathings breathless +breathlessly +breathlessness +breathlessnesses +breaths +breathtaking +breathtakingly +breathy +breccia +breccial +breccias +brecciate +brecciated +brecciates +brecciating +brecciation +brecciations +brecham +brechams +brechan +brechans +bred +brede +bredes +bree +breech +breechblock +breechblocks +breechcloth +breechcloths +breechclout +breechclouts +breeched +breeches +breeching +breechings +breechloader +breechloaders +breed +breeder +breeders +breeding +breedings +breeds +breeks +brees +breeze +breezed +breezeless +breezes +breezeway +breezeways +breezier +breeziest +breezily +breeziness +breezinesses +breezing +breezy +bregma +bregmata +bregmate +bremsstrahlung +bremsstrahlungs +bren +brens +brent +brents +brethren +breve +breves +brevet +brevetcies +brevetcy +breveted +breveting +brevets +brevetted +brevetting +breviaries +breviary +brevier +breviers +brevities +brevity +brew +brewage +brewages +brewed +brewer +breweries +brewers brewery +brewing +brewings +brewis +brewises +brews +briar +briard +briards +briars +briary +bribable +bribe +bribed +bribee +bribees +briber +briberies +bribers +bribery +bribes +bribing brick +brickbat +brickbats +bricked +brickfield +brickfields +brickier +brickiest +bricking +bricklayer +bricklayers +bricklaying +bricklayings +brickle +brickles +bricks +brickwork +brickworks +bricky +brickyard +brickyards +bricolage +bricolages +bricole +bricoles +bridal +bridally +bridals bride bridegroom +bridegrooms +brides +bridesmaid +bridesmaids +bridewell +bridewells bridge +bridgeable +bridged +bridgehead +bridgeheads +bridgeless +bridges +bridgework +bridgeworks +bridging +bridgings +bridle +bridled +bridler +bridlers +bridles +bridling +bridoon +bridoons +brie brief +briefcase +briefcases +briefed +briefer +briefers +briefest +briefing +briefings +briefless +briefly +briefness +briefnesses +briefs +brier +briers +briery +bries +brig +brigade +brigaded +brigades +brigadier +brigadiers +brigading +brigand +brigandage +brigandages +brigandine +brigandines +brigands +brigantine +brigantines bright +brighten +brightened +brightener +brighteners +brightening +brightens +brighter +brightest +brightly +brightness +brightnesses +brights +brightwork +brightworks +brigs +brill +brilliance +brilliances +brilliancies +brilliancy brilliant +brilliantine +brilliantines +brilliantly +brilliants +brills +brim +brimful +brimfull +brimless +brimmed +brimmer +brimmers +brimming +brims +brimstone +brimstones +brin +brinded +brindle +brindled +brindles +brine +brined +briner +briners +brines bring +bringdown +bringdowns +bringer +bringers +bringing +brings +brinier +brinies +briniest +brininess +brininesses +brining +brinish +brink +brinkmanship +brinkmanships +brinks +brinksmanship +brinksmanships +brins +briny +brio +brioche +brioches +briolette +briolettes +brionies +briony +brios +briquet +briquets +briquette +briquetted +briquettes +briquetting +bris +brisance +brisances +brisant +brisk +brisked +brisker +briskest +brisket +briskets +brisking +briskly +briskness +brisknesses +brisks +brisling +brislings +brisses +bristle +bristled +bristlelike +bristles +bristletail +bristletails +bristlier +bristliest +bristling +bristly +bristol +bristols +brit +britches +brits +britska +britskas +britt +brittle +brittled +brittlely +brittleness +brittlenesses +brittler +brittles +brittlest +brittling +brittly +britts +britzka +britzkas +britzska +britzskas +bro +broach +broached +broacher +broachers +broaches +broaching broad +broadax +broadaxe +broadaxes +broadband broadcast +broadcasted +broadcaster +broadcasters +broadcasting +broadcasts +broadcloth +broadcloths +broaden +broadened +broadening +broadens +broader +broadest +broadish +broadleaf +broadloom +broadlooms +broadly +broadness +broadnesses +broads +broadscale +broadsheet +broadsheets +broadside +broadsided +broadsides +broadsiding +broadsword +broadswords +broadtail +broadtails +brocade +brocaded +brocades +brocading +brocatel +brocatelle +brocatelles +brocatels +broccoli +broccolis +broche +brochette +brochettes brochure +brochures +brock +brockage +brockages +brocket +brockets +brocks +brocoli +brocolis +brogan +brogans +brogue +brogueries +broguery +brogues +broguish +broider +broidered +broideries +broidering +broiders +broidery +broil +broiled +broiler +broilers +broiling +broils +brokage +brokages +broke broken +brokenhearted +brokenly +brokenness +brokennesses +broker +brokerage +brokerages +brokered +brokering +brokerings +brokers +broking +brokings +brollies +brolly +bromal +bromals +bromate +bromated +bromates +bromating +brome +bromegrass +bromegrasses +bromelain +bromelains +bromeliad +bromeliads +bromelin +bromelins +bromes +bromic +bromid +bromide +bromides +bromidic +bromids +bromin +brominate +brominated +brominates +brominating +bromination +brominations +bromine +bromines +bromins +bromism +bromisms +bromize +bromized +bromizes +bromizing +bromo +bromocriptine +bromocriptines +bromos +bromouracil +bromouracils +bronc +bronchi +bronchia +bronchial +bronchially +bronchiectases +bronchiectasis +bronchiolar +bronchiole +bronchioles +bronchites +bronchitic +bronchitides +bronchitis +bronchitises +bronchium +broncho +bronchodilator +bronchodilators +bronchogenic +bronchopneumonia +bronchopneumonias +bronchos +bronchoscope +bronchoscopes +bronchoscopic +bronchoscopies +bronchoscopist +bronchoscopists +bronchoscopy +bronchospasm +bronchospasms +bronchospastic +bronchus +bronco +broncobuster +broncobusters +broncos +broncs +brontosaur +brontosaurs +brontosaurus +brontosauruses +bronze +bronzed +bronzer +bronzers +bronzes +bronzier +bronziest +bronzing +bronzings +bronzy +broo +brooch +brooches +brood +brooded +brooder +brooders +broodier +broodiest +broodily +broodiness +broodinesses +brooding +broodingly +broodmare +broodmares +broods +broody +brook +brooked +brookie +brookies +brooking +brookite +brookites +brooklet +brooklets +brooks broom +broomball +broomballer +broomballers +broomballs +broomcorn +broomcorns +broomed +broomier +broomiest +brooming +broomrape +broomrapes +brooms +broomstick +broomsticks +broomy +broos +bros +brose +broses +brosy +broth +brothel +brothels brother +brothered +brotherhood +brotherhoods +brothering +brotherliness +brotherlinesses +brotherly +brothers +broths +brothy +brougham +broughams +brought +brouhaha +brouhahas +brow +browband +browbands +browbeat +browbeaten +browbeating +browbeats +browed +browless brown +browned +browner +brownest +brownie +brownier +brownies +browniest +browning +brownish +brownnose +brownnosed +brownnoser +brownnosers +brownnoses +brownnosing +brownout +brownouts +browns +brownshirt +brownshirts +brownstone +brownstones +browny +browridge +browridges +brows +browse +browsed +browser +browsers +browses +browsing +brr +brrr +brucella +brucellae +brucellas +brucelloses +brucellosis +brucin +brucine +brucines +brucins +brugh +brughs +bruin +bruins +bruise +bruised +bruiser +bruisers +bruises +bruising +bruit +bruited +bruiter +bruiters +bruiting +bruits +brulot +brulots +brulyie +brulyies +brulzie +brulzies +brumal +brumbies +brumby +brume +brumes +brummagem +brummagems +brumous brunch +brunched +brunches +brunching +brunet +brunets +brunette +brunettes +brunizem +brunizems +brunt +brunts brush -buddhism +brushabilities +brushability +brushback +brushbacks +brushed +brusher +brushers +brushes +brushfire +brushier +brushiest +brushing +brushland +brushlands +brushoff +brushoffs +brushup +brushups +brushwood +brushwoods +brushwork +brushworks +brushy +brusk +brusker +bruskest +brusque +brusquely +brusqueness +brusquenesses +brusquer +brusquerie +brusqueries +brusquest +brut +brutal +brutalise +brutalised +brutalises +brutalising +brutalities +brutality +brutalization +brutalizations +brutalize +brutalized +brutalizes +brutalizing +brutally +brute +bruted +brutely +brutes +brutified +brutifies +brutify +brutifying +bruting +brutish +brutishly +brutishness +brutishnesses +brutism +brutisms +bruxism +bruxisms +bryological +bryologies +bryologist +bryologists +bryology +bryonies +bryony +bryophyllum +bryophyllums +bryophyte +bryophytes +bryophytic +bryozoan +bryozoans +bub +bubal +bubale +bubales +bubaline +bubalis +bubalises +bubals +bubbies +bubble +bubbled +bubblegum +bubblegums +bubblehead +bubbleheaded +bubbleheads +bubbler +bubblers +bubbles +bubblier +bubblies +bubbliest +bubbling +bubbly +bubby +bubinga +bubingas +bubo +buboed +buboes +bubonic +bubs +buccal +buccally +buccaneer +buccaneered +buccaneering +buccaneerish +buccaneers +buccinator +buccinators +buck +buckaroo +buckaroos +buckayro +buckayros +buckbean +buckbeans +buckboard +buckboards +bucked +buckeen +buckeens +bucker +buckeroo +buckeroos +buckers +bucket +bucketed +bucketful +bucketfuls +bucketing +buckets +bucketsful +buckeye +buckeyes +bucking +buckish +buckle +buckled +buckler +bucklered +bucklering +bucklers +buckles +buckling +buckminsterfullerene +buckminsterfullerenes +bucko +buckoes +buckra +buckram +buckramed +buckraming +buckrams +buckras +bucks +bucksaw +bucksaws +buckshee +buckshees +buckshot +buckshots +buckskin +buckskinned +buckskins +bucktail +bucktails +buckteeth +buckthorn +buckthorns +bucktooth +bucktoothed +buckwheat +buckwheats +buckyball +buckyballs +bucolic +bucolically +bucolics +bud +budded +budder +budders +buddied +buddies +budding +buddings +buddle +buddleia +buddleias +buddles +buddy +buddying +budge +budged +budger +budgerigar +budgerigars +budgers +budges budget +budgetary +budgeted +budgeteer +budgeteers +budgeter +budgeters +budgeting +budgets +budgie +budgies +budging +budless +budlike +buds +budworm +budworms +buff +buffable +buffalo +buffaloberries +buffaloberry +buffaloed +buffaloes +buffalofish +buffalofishes +buffaloing +buffalos +buffed +buffer +buffered +buffering +buffers buffet +buffeted +buffeter +buffeters +buffeting +buffets +buffi +buffier +buffiest +buffing +bufflehead +buffleheads +buffo +buffoon +buffooneries +buffoonery +buffoonish +buffoons +buffos +buffs +buffy +bug +bugaboo +bugaboos +bugbane +bugbanes +bugbear +bugbears +bugeye +bugeyes +bugged +bugger +buggered +buggeries +buggering +buggers +buggery +buggier +buggies +buggiest +bugging +buggy +bughouse +bughouses +bugle +bugled +bugler +buglers +bugles +bugleweed +bugleweeds +bugling +bugloss +buglosses +bugs +bugseed +bugseeds +bugsha +bugshas +buhl +buhls +buhlwork +buhlworks +buhr +buhrs +buhrstone +buhrstones build +buildable +builded +builder +builders building +buildings +builds +buildup +buildups +built +buirdly +bulb +bulbar +bulbed +bulbel +bulbels +bulbil +bulbils +bulblet +bulblets +bulbous +bulbously +bulbs +bulbul +bulbuls +bulge +bulged +bulger +bulgers +bulges +bulgier +bulgiest +bulging +bulgur +bulgurs +bulgy +bulimia +bulimiac +bulimias +bulimic +bulimics +bulk +bulkage +bulkages +bulked +bulkhead +bulkheads +bulkier +bulkiest +bulkily +bulkiness +bulkinesses +bulking +bulks +bulky +bull +bulla +bullace +bullaces +bullae +bullate +bullbaiting +bullbaitings +bullbat +bullbats +bulldog +bulldogged +bulldogger +bulldoggers +bulldogging +bulldoggings +bulldogs +bulldoze +bulldozed +bulldozer +bulldozers +bulldozes +bulldozing +bulled +bullet +bulleted +bulletin +bulletined +bulleting +bulletining +bulletins +bulletproof +bullets +bullfight +bullfighter +bullfighters +bullfighting +bullfightings +bullfights +bullfinch +bullfinches +bullfrog +bullfrogs +bullhead +bullheaded +bullheadedly +bullheadedness +bullheadednesses +bullheads +bullhorn +bullhorns +bullied +bullier +bullies +bulliest +bulling +bullion +bullions +bullish +bullishly +bullishness +bullishnesses +bullmastiff +bullmastiffs +bullneck +bullnecked +bullnecks +bullnose +bullnoses +bullock +bullocks +bullocky +bullous +bullpen +bullpens +bullpout +bullpouts +bullring +bullrings +bullrush +bullrushes +bulls +bullshit +bullshits +bullshitted +bullshitting +bullshot +bullshots +bullterrier +bullterriers +bullweed +bullweeds +bullwhip +bullwhipped +bullwhipping +bullwhips +bully +bullyboy +bullyboys +bullying +bullyrag +bullyragged +bullyragging +bullyrags +bulrush +bulrushes +bulwark +bulwarked +bulwarking +bulwarks +bum +bumbershoot +bumbershoots +bumble +bumblebee +bumblebees +bumbled +bumbler +bumblers +bumbles +bumbling +bumblingly +bumblings +bumboat +bumboats +bumf +bumfs +bumkin +bumkins +bummed +bummer +bummers +bummest +bumming +bump +bumped +bumper +bumpered +bumpering +bumpers +bumph +bumphs +bumpier +bumpiest +bumpily +bumpiness +bumpinesses +bumping +bumpkin +bumpkinish +bumpkinly +bumpkins +bumps +bumptious +bumptiously +bumptiousness +bumptiousnesses +bumpy +bums +bun bunch +bunchberries +bunchberry +bunched +bunches +bunchgrass +bunchgrasses +bunchier +bunchiest +bunchily +bunching +bunchy +bunco +buncoed +buncoing +buncombe +buncombes +buncos +bund +bundist +bundists +bundle +bundled +bundler +bundlers +bundles +bundling +bundlings +bunds +bundt +bundts +bung bungalow +bungalows +bunged +bungee +bungees +bunghole +bungholes +bunging +bungle +bungled +bungler +bunglers +bungles +bunglesome +bungling +bunglingly +bunglings +bungs +bunion +bunions +bunk +bunked +bunker +bunkered +bunkering +bunkers +bunkhouse +bunkhouses +bunking +bunkmate +bunkmates +bunko +bunkoed +bunkoing +bunkos +bunks +bunkum +bunkums +bunn +bunnies +bunns +bunny +bunraku +bunrakus +buns +bunt +bunted +bunter +bunters +bunting +buntings +buntline +buntlines +bunts +bunya +bunyas +buoy +buoyage +buoyages +buoyance +buoyances +buoyancies +buoyancy +buoyant +buoyantly +buoyed +buoying +buoys +buppie +buppies +buqsha +buqshas +bur +bura +buran +burans +buras +burble +burbled +burbler +burblers +burbles +burblier +burbliest +burbling +burbly +burbot +burbots +burbs +burd burden +burdened +burdener +burdeners +burdening +burdens +burdensome +burdie +burdies +burdock +burdocks +burds +bureau +bureaucracies +bureaucracy +bureaucrat +bureaucratese +bureaucrateses bureaucratic +bureaucratically +bureaucratise +bureaucratised +bureaucratises +bureaucratising +bureaucratism +bureaucratisms +bureaucratization +bureaucratizations +bureaucratize +bureaucratized +bureaucratizes +bureaucratizing +bureaucrats +bureaus +bureaux +buret +burets +burette +burettes +burg +burgage +burgages +burgee +burgees +burgeon +burgeoned +burgeoning +burgeons +burger +burgers +burgess +burgesses +burgh +burghal +burgher +burghers +burghs burglar +burglaries +burglarious +burglariously +burglarize +burglarized +burglarizes +burglarizing +burglarproof +burglars +burglary +burgle +burgled +burgles +burgling +burgomaster +burgomasters +burgonet +burgonets +burgoo +burgoos +burgout +burgouts +burgrave +burgraves +burgs +burgundies +burgundy +burial +burials +buried +burier +buriers +buries +burin +burins +burke +burked +burker +burkers +burkes +burking +burkite +burkites +burl +burladero +burladeros +burlap +burlaps +burled +burler +burlers +burlesk +burlesks +burlesque +burlesqued +burlesquely +burlesquer +burlesquers +burlesques +burlesquing +burley +burleys +burlier +burliest +burlily +burliness +burlinesses +burling +burls +burly burn +burnable +burnables +burned +burner +burners +burnet +burnets +burnie +burnies +burning +burningly +burnings +burnish +burnished +burnisher +burnishers +burnishes +burnishing +burnishings +burnoose +burnoosed +burnooses +burnous +burnouses +burnout +burnouts +burns +burnsides +burnt +burp +burped +burping +burps +burr +burred +burrer +burrers +burrier +burriest +burring +burrito +burritos +burro +burros +burrow +burrowed +burrower +burrowers +burrowing +burrows +burrs +burrstone +burrstones +burry +burs +bursa +bursae +bursal +bursar +bursaries +bursars +bursary +bursas +bursate +burse +burseed +burseeds +bursera +burses +bursitis +bursitises +burst +bursted +burster +bursters +bursting +burstone +burstones +bursts +burthen +burthened +burthening +burthens +burton +burtons +burweed +burweeds bury +burying bus +busbar +busbars +busbies +busboy +busboys +busby +bused +buses bush +bushbuck +bushbucks +bushed +bushel +busheled +busheler +bushelers +busheling +bushelled +bushelling +bushels +busher +bushers +bushes +bushfire +bushfires +bushgoat +bushgoats +bushido +bushidos +bushier +bushiest +bushily +bushiness +bushinesses +bushing +bushings +bushland +bushlands +bushless +bushlike +bushman +bushmaster +bushmasters +bushmen +bushpig +bushpigs +bushranger +bushrangers +bushranging +bushrangings +bushtit +bushtits +bushwa +bushwah +bushwahs +bushwas +bushwhack +bushwhacked +bushwhacker +bushwhackers +bushwhacking +bushwhacks +bushy +busied +busier +busies +busiest +busily business +businesses +businesslike businessman +businessmen +businesspeople +businessperson +businesspersons businesswoman +businesswomen +busing +busings +busk +busked +busker +buskers +buskin +buskined +busking +buskins +busks +busload +busloads +busman +busmen +buss +bussed +busses +bussing +bussings +bust +bustard +bustards +busted +buster +busters +bustic +bustics +bustier +bustiers +bustiest +busting +bustle +bustled +bustles +bustline +bustlines +bustling +bustlingly +busts +busty +busulfan +busulfans busy +busybodies +busybody +busying +busyness +busynesses +busywork +busyworks but +butadiene +butadienes +butane +butanes +butanol +butanols +butanone +butanones +butch butcher +butchered +butcheries +butchering +butcherly +butchers +butchery +butches +bute +butene +butenes +buteo +buteos +butle +butled +butler +butleries +butlers +butlery +butles +butling +buts +butt +buttals +butte +butted butter +butterball +butterballs +buttercup +buttercups +buttered +butterfat +butterfats +butterfingered +butterfingers +butterfish +butterfishes +butterflied +butterflies butterfly +butterflyer +butterflyers +butterflying +butterier +butteries +butteriest +buttering +butterless +buttermilk +buttermilks +butternut +butternuts +butters +butterscotch +butterscotches +butterweed +butterweeds +butterwort +butterworts +buttery +buttes +butties +butting +buttinski +buttinskies +buttinsky +buttock +buttocks button +buttonball +buttonballs +buttonbush +buttonbushes +buttoned +buttoner +buttoners +buttonhole +buttonholed +buttonholer +buttonholers +buttonholes +buttonholing +buttonhook +buttonhooked +buttonhooking +buttonhooks +buttoning +buttonless +buttons +buttonwood +buttonwoods +buttony +buttress +buttressed +buttresses +buttressing +butts +buttstock +buttstocks +butty +butut +bututs +butyl +butylate +butylated +butylates +butylating +butylation +butylations +butylene +butylenes +butyls +butyral +butyraldehyde +butyraldehydes +butyrals +butyrate +butyrates +butyric +butyrin +butyrins +butyrophenone +butyrophenones +butyrous +butyryl +butyryls +buxom +buxomer +buxomest +buxomly +buxomness +buxomnesses buy +buyable +buyback +buybacks +buyer +buyers +buying +buyout +buyouts +buys +buzuki +buzukia +buzukis +buzz +buzzard +buzzards +buzzed +buzzer +buzzers +buzzes +buzzing +buzzwig +buzzwigs +buzzword +buzzwords +bwana +bwanas by bye +byelaw +byelaws +byes +bygone +bygones +bylaw +bylaws +byline +bylined +byliner +byliners +bylines +bylining +byname +bynames +bypass +bypassed +bypasses +bypassing +bypast +bypath +bypaths +byplay +byplays +byproduct +byproducts +byre +byres +byrl +byrled +byrling +byrls +byrnie +byrnies +byroad +byroads +bys +byssi +byssinoses +byssinosis +byssus +byssuses +bystander +bystanders +bystreet +bystreets +bytalk +bytalks +byte +bytes +byway +byways +byword +bywords +bywork +byworks +byzant +byzantine +byzants cab +cabal +cabala +cabalas +cabaletta +cabalettas +cabalism +cabalisms +cabalist +cabalistic +cabalists +caballed +caballero +caballeros +caballing +cabals +cabana +cabanas +cabaret +cabarets cabbage +cabbaged +cabbages +cabbageworm +cabbageworms +cabbaging +cabbala +cabbalah +cabbalahs +cabbalas +cabbed +cabbie +cabbies +cabbing +cabby +cabdriver +cabdrivers +caber +cabernet +cabernets +cabers +cabestro +cabestros +cabezon +cabezone +cabezones +cabezons +cabildo +cabildos +cabin +cabined +cabinet +cabinetmaker +cabinetmakers +cabinetmaking +cabinetmakings +cabinetries +cabinetry +cabinets +cabinetwork +cabinetworks +cabining +cabins +cable +cabled +cablegram +cablegrams +cables +cablet +cablets +cableway +cableways +cabling +cabman +cabmen +cabob +cabobs +caboched +cabochon +cabochons +cabomba +cabombas +caboodle +caboodles +caboose +cabooses +caboshed +cabotage +cabotages +cabresta +cabrestas +cabresto +cabrestos +cabretta +cabrettas +cabrilla +cabrillas +cabriole +cabrioles +cabriolet +cabriolets +cabs +cabstand +cabstands +caca +cacao +cacaos +cacas +cacciatore +cachalot +cachalots +cache +cachectic +cached +cachepot +cachepots +caches +cachet +cacheted +cacheting +cachets +cachexia +cachexias +cachexic +cachexies +cachexy +caching +cachinnate +cachinnated +cachinnates +cachinnating +cachinnation +cachinnations +cachou +cachous +cachucha +cachuchas +cacique +caciques +caciquism +caciquisms +cackle +cackled +cackler +cacklers +cackles +cackling +cacodemon +cacodemonic +cacodemons +cacodyl +cacodyls +cacoethes +cacographical +cacographies +cacography +cacomistle +cacomistles +cacomixl +cacomixls +cacophonies +cacophonous +cacophonously +cacophony +cacti +cactoid +cactus +cactuses +cacuminal +cad +cadaster +cadasters +cadastral +cadastrally +cadastre +cadastres +cadaver +cadaveric +cadaverine +cadaverines +cadaverous +cadaverously +cadavers +caddice +caddices +caddie +caddied +caddies +caddis +caddises +caddish +caddishly +caddishness +caddishnesses +caddisworm +caddisworms +caddy +caddying +cade +cadelle +cadelles +cadence +cadenced +cadences +cadencies +cadencing +cadency +cadent +cadential +cadenza +cadenzas +cades +cadet +cadets +cadetship +cadetships +cadge +cadged +cadger +cadgers +cadges +cadging +cadgy +cadi +cadis +cadmic +cadmium +cadmiums +cadre +cadres +cads +caducean +caducei +caduceus +caducities +caducity +caducous +caeca +caecal +caecally +caecilian +caecilians +caecum +caeoma +caeomas +caesar +caesarean +caesareans +caesarian +caesarians +caesars +caesium +caesiums +caespitose +caestus +caestuses +caesura +caesurae +caesural +caesuras +caesuric cafe +cafes cafeteria +cafeterias +cafetorium +cafetoriums +caff +caffein +caffeinated +caffeine +caffeines +caffeins +caffs +caftan +caftans cage +caged +cageful +cagefuls +cageling +cagelings +cager +cagers +cages +cagey +cageyness +cageynesses +cagier +cagiest +cagily +caginess +caginesses +caging +cagy +cahier +cahiers +cahoot +cahoots +cahow +cahows +caid +caids +caiman +caimans +cain +cains +caique +caiques +caird +cairds +cairn +cairned +cairngorm +cairngorms +cairns +cairny +caisson +caissons +caitiff +caitiffs +cajaput +cajaputs +cajeput +cajeputs +cajole +cajoled +cajolement +cajolements +cajoler +cajoleries +cajolers +cajolery +cajoles +cajoling +cajon +cajones +cajuput +cajuputs cake +caked +cakes +cakewalk +cakewalked +cakewalker +cakewalkers +cakewalking +cakewalks +cakey +cakier +cakiest +caking +caky +calabash +calabashes +calaboose +calabooses +caladium +caladiums +calamander +calamanders +calamar +calamari +calamaries +calamaris +calamars +calamary +calami +calamine +calamined +calamines +calamining +calamint +calamints +calamite +calamites +calamities +calamitous +calamitously +calamity +calamondin +calamondins +calamus +calando +calash +calashes +calathi +calathos +calathus +calcanea +calcaneal +calcanei +calcaneum +calcaneus +calcar +calcareous +calcareously +calcaria +calcars +calceate +calces +calcic +calcicole +calcicoles +calcicolous +calciferol +calciferols +calciferous +calcific +calcification +calcifications +calcified +calcifies +calcifuge +calcifuges +calcifugous +calcify +calcifying +calcimine +calcimined +calcimines +calcimining +calcination +calcinations +calcine +calcined +calcines +calcining +calcinoses +calcinosis +calcite +calcites +calcitic +calcitonin +calcitonins +calcium +calciums +calcspar +calcspars +calctufa +calctufas +calctuff +calctuffs +calculable calculate +calculated +calculatedly +calculatedness +calculatednesses +calculates +calculating +calculatingly +calculation +calculational +calculations +calculator +calculators +calculi +calculous +calculus +calculuses +caldaria +caldarium +caldera +calderas +caldron +caldrons +caleche +caleches +calefactories +calefactory +calendal +calendar +calendared +calendaring +calendars +calender +calendered +calenderer +calenderers +calendering +calenders +calendric +calendrical +calends +calendula +calendulas +calenture +calentures +calesa +calesas +calf +calflike +calfs +calfskin +calfskins +caliber +calibers +calibrate +calibrated +calibrates +calibrating +calibration +calibrations +calibrator +calibrators +calibre +calibred +calibres +calices +caliche +caliches +calicle +calicles +calico +calicoes +calicos +calif +califate +califates +californium +californiums +califs +caliginous +calipash +calipashes +calipee +calipees +caliper +calipered +calipering +calipers +caliph +caliphal +caliphate +caliphates +caliphs +calisaya +calisayas +calisthenic +calisthenics +calix +calk +calked +calker +calkers +calkin +calking +calkins +calks call +calla +callable +callaloo +callaloos +callan +callans +callant +callants +callas +callback +callbacks +callboy +callboys +called +caller +callers +callet +callets +calligrapher +calligraphers +calligraphic +calligraphically +calligraphies +calligraphist +calligraphists +calligraphy +calling +callings +calliope +calliopes +callipee +callipees +calliper +callipered +callipering +callipers +callipygian +callipygous +callithump +callithumpian +callithumps +callose +calloses +callosities +callosity +callous +calloused +callouses +callousing +callously +callousness +callousnesses +callow +callower +callowest +callowness +callownesses +calls +callus +callused +calluses +callusing calm +calmative +calmatives +calmed +calmer +calmest +calming +calmly +calmness +calmnesses +calmodulin +calmodulins +calms +calo +calomel +calomels +caloric +calorically +calorics +calorie +calories +calorific +calorimeter +calorimeters +calorimetric +calorimetrically +calorimetries +calorimetry +calorize +calorized +calorizes +calorizing +calory +calotte +calottes +calotype +calotypes +caloyer +caloyers +calpac +calpack +calpacks +calpacs +calque +calqued +calques +calquing +calthrop +calthrops +caltrap +caltraps +caltrop +caltrops +calumet +calumets +calumniate +calumniated +calumniates +calumniating +calumniation +calumniations +calumniator +calumniators +calumnies +calumnious +calumniously +calumny +calutron +calutrons +calvados +calvadoses +calvaria +calvarias +calvaries +calvarium +calvary +calve +calved +calves +calving +calx +calxes +calycate +calyceal +calyces +calycine +calycle +calycles +calyculi +calyculus +calypso +calypsoes +calypsonian +calypsonians +calypsos +calypter +calypters +calyptra +calyptras +calyx +calyxes +calzone +calzones +cam +camail +camailed +camails +camaraderie +camaraderies +camarilla +camarillas +camas +camases +camass +camasses +camber +cambered +cambering +cambers +cambia +cambial +cambism +cambisms +cambist +cambists +cambium +cambiums +cambogia +cambogias +cambric +cambrics +camcorder +camcorders +came camel +camelback +camelbacks +cameleer +cameleers +camelia +camelias +camellia +camellias +camelopard +camelopards +camels +cameo +cameoed +cameoing +cameos camera +camerae +cameral +cameraman +cameramen +cameraperson +camerapersons +cameras +camerawoman +camerawomen +camerlengo +camerlengos +cames +camion +camions +camisa +camisade +camisades +camisado +camisadoes +camisados +camisas +camise +camises +camisia +camisias +camisole +camisoles +camlet +camlets +camomile +camomiles +camorra +camorras +camorrista +camorristi +camouflage +camouflageable +camouflaged +camouflages +camouflagic +camouflaging camp +campagna +campagne campaign +campaigned +campaigner +campaigners +campaigning +campaigns +campanile +campaniles +campanili +campanologies +campanologist +campanologists +campanology +campanula +campanulas +campanulate +campcraft +campcrafts +camped +camper +campers +campesino +campesinos +campestral +campfire +campfires +campground +campgrounds +camphene +camphenes +camphine +camphines +camphire +camphires +camphol +camphols +camphor +camphoraceous +camphorate +camphorated +camphorates +camphorating +camphors +campi +campier +campiest +campily +campiness +campinesses +camping +campings +campion +campions +campo +campong +campongs +camporee +camporees +campos +camps +campsite +campsites +campus +campused +campuses +campusing +campy +campylobacter +campylobacters +campylotropous +cams +camshaft +camshafts can +canaille +canailles +canakin +canakins +canal +canaled +canalicular +canaliculi +canaliculus +canaling +canalise +canalised +canalises +canalising +canalization +canalizations +canalize +canalized +canalizes +canalizing +canalled +canaller +canallers +canalling +canals +canape +canapes +canard +canards +canaries +canary +canasta +canastas +cancan +cancans cancel +cancelable +cancelation +cancelations +canceled +canceler +cancelers +canceling +cancellable +cancellation +cancellations +cancelled +canceller +cancellers +cancelling +cancellous +cancels cancer +cancerous +cancerously +cancers +cancha +canchas +cancroid +cancroids +candela +candelabra +candelabras +candelabrum +candelabrums +candelas +candent +candescence +candescences +candescent +candid +candida +candidacies +candidacy +candidas candidate +candidates +candidature +candidatures +candider +candidest +candidiases +candidiasis +candidly +candidness +candidnesses +candids +candied +candies candle +candleberries +candleberry +candled +candlefish +candlefishes +candleholder +candleholders +candlelight +candlelighted +candlelighter +candlelighters +candlelights +candlelit +candlenut +candlenuts +candlepin +candlepins +candlepower +candlepowers +candler +candlers +candles +candlesnuffer +candlesnuffers +candlestick +candlesticks +candlewick +candlewicks +candlewood +candlewoods +candling +candor +candors +candour +candours candy +candyfloss +candyflosses +candying +candytuft +candytufts +cane +canebrake +canebrakes +caned +canella +canellas +canephor +canephors +caner +caners +canes +canescent +caneware +canewares +canfield +canfields +canful +canfuls +cangue +cangues +canicular +canid +canids +canikin +canikins +canine +canines +caning +caninities +caninity +canister +canisters +canities +canker +cankered +cankering +cankerous +cankers +cankerworm +cankerworms +canna +cannabic +cannabin +cannabinoid +cannabinoids +cannabinol +cannabinols +cannabins +cannabis +cannabises +cannas +canned +cannel +cannelloni +cannelon +cannelons +cannels +canner +canneries +canners +cannery +cannibal +cannibalise +cannibalised +cannibalises +cannibalising +cannibalism +cannibalisms +cannibalistic +cannibalization +cannibalizations +cannibalize +cannibalized +cannibalizes +cannibalizing +cannibals +cannie +cannier +canniest +cannikin +cannikins +cannily +canniness +canninesses +canning +cannings +cannister +cannisters +cannoli +cannon +cannonade +cannonaded +cannonades +cannonading +cannonball +cannonballed +cannonballing +cannonballs +cannoned +cannoneer +cannoneers +cannoning +cannonries +cannonry +cannons +cannot +cannula +cannulae +cannular +cannulas +canny +canoe +canoeable +canoed +canoeing +canoeist +canoeists +canoes +canola +canon +canoness +canonesses +canonic +canonical +canonically +canonicals +canonicities +canonicity +canonise +canonised +canonises +canonising +canonist +canonists +canonization +canonizations +canonize +canonized +canonizes +canonizing +canonries +canonry +canons +canoodle +canoodled +canoodles +canoodling +canopied +canopies +canopy +canopying +canorous +canorously +canorousness +canorousnesses +cans +cansful +canso +cansos +canst +cant +cantabile +cantala +cantalas +cantaloup +cantaloupe +cantaloupes +cantaloups +cantankerous +cantankerously +cantankerousness +cantankerousnesses +cantata +cantatas +cantatrice +cantatrices +cantatrici +cantdog +cantdogs +canted canteen +canteens +canter +cantered +cantering +canters +canthal +cantharides +cantharidin +cantharidins +cantharis +canthaxanthin +canthaxanthins +canthi +canthus +cantic +canticle +canticles +cantilena +cantilenas +cantilever +cantilevered +cantilevering +cantilevers +cantillate +cantillated +cantillates +cantillating +cantillation +cantillations +cantina +cantinas +canting +cantle +cantles +canto +canton +cantonal +cantoned +cantoning +cantonment +cantonments +cantons +cantor +cantorial +cantors +cantos +cantraip +cantraips +cantrap +cantraps +cantrip +cantrips +cants +cantus +canty +canula +canulae +canulas +canulate +canulated +canulates +canulating +canvas +canvasback +canvasbacks +canvased +canvaser +canvasers +canvases +canvasing +canvaslike +canvass +canvassed +canvasser +canvassers +canvasses +canvassing +canyon +canyons +canzona +canzonas +canzone +canzones +canzonet +canzonets +canzoni +caoutchouc +caoutchoucs cap +capabilities +capability +capable +capableness +capablenesses +capabler +capablest +capably +capacious +capaciously +capaciousness +capaciousnesses +capacitance +capacitances +capacitate +capacitated +capacitates +capacitating +capacitation +capacitations +capacities +capacitive +capacitively +capacitor +capacitors +capacity +caparison +caparisoned +caparisoning +caparisons +cape +caped +capelan +capelans +capelet +capelets +capelin +capelins +caper +capercaillie +capercaillies +capercailzie +capercailzies +capered +caperer +caperers +capering +capers +capes +capeskin +capeskins +capework +capeworks +capful +capfuls +caph +caphs +capias +capiases +capillaries +capillarities +capillarity +capillary +capita capital +capitalise +capitalised +capitalises +capitalising +capitalism +capitalisms +capitalist +capitalistic +capitalistically +capitalists +capitalization +capitalizations +capitalize +capitalized +capitalizes +capitalizing +capitally +capitals +capitate +capitation +capitations +capitol +capitols +capitula +capitular +capitularies +capitulary +capitulate +capitulated +capitulates +capitulating +capitulation +capitulations +capitulum +capless +caplet +caplets +caplin +caplins +capmaker +capmakers +capo +capon +caponata +caponatas +caponier +caponiers +caponize +caponized +caponizes +caponizing +capons +caporal +caporals +capos +capote +capotes +capouch +capouches +capped +cappelletti +capper +cappers +capping +cappings +cappuccino +cappuccinos +capric +capricci +capriccio +capriccios +caprice +caprices +capricious +capriciously +capriciousness +capriciousnesses +caprification +caprifications +caprifig +caprifigs +caprine +capriole +caprioled +caprioles +caprioling +capris +caprock +caprocks +caprolactam +caprolactams +caps +capsaicin +capsaicins +capsicin +capsicins +capsicum +capsicums +capsid +capsidal +capsids +capsize +capsized +capsizes +capsizing +capsomer +capsomers +capstan +capstans +capstone +capstones +capsular +capsulated capsule +capsuled +capsules +capsuling +capsulize +capsulized +capsulizes +capsulizing captain +captaincies +captaincy +captained +captaining +captains +captainship +captainships +captan +captans caption +captioned +captioning +captionless +captions +captious +captiously +captiousness +captiousnesses +captivate +captivated +captivates +captivating +captivation +captivations +captivator +captivators +captive +captives +captivities +captivity +captopril +captoprils +captor +captors +capture +captured +capturer +capturers +captures +capturing +capuche +capuched +capuches +capuchin +capuchins +caput +capybara +capybaras car +carabao +carabaos +carabid +carabids +carabin +carabine +carabineer +carabineers +carabiner +carabinero +carabineros +carabiners +carabines +carabinier +carabiniere +carabinieri +carabiniers +carabins +caracal +caracals +caracara +caracaras +carack +caracks +caracol +caracole +caracoled +caracoles +caracoling +caracolled +caracolling +caracols +caracul +caraculs +carafe +carafes +caragana +caraganas +carageen +carageens +caramba +carambola +carambolas +caramel +caramelise +caramelised +caramelises +caramelising +caramelize +caramelized +caramelizes +caramelizing +caramels +carangid +carangids +carapace +carapaces +carapax +carapaxes +carassow +carassows +carat +carate +carates +carats +caravan +caravaned +caravaner +caravaners +caravaning +caravanned +caravanner +caravanners +caravanning +caravans +caravansaries +caravansary +caravanserai +caravanserais +caravel +caravels +caraway +caraways +carb +carbachol +carbachols +carbamate +carbamates +carbamic +carbamide +carbamides +carbamino +carbamyl +carbamyls +carbanion +carbanions +carbarn +carbarns +carbaryl +carbaryls +carbazole +carbazoles +carbide +carbides +carbine +carbines +carbinol +carbinols +carbo +carbocyclic +carbohydrase +carbohydrases +carbohydrate +carbohydrates +carbolic +carbolics carbon +carbonaceous +carbonade +carbonades +carbonado +carbonadoed +carbonadoes +carbonadoing +carbonados +carbonara +carbonaras +carbonate +carbonated +carbonates +carbonating +carbonation +carbonations +carbonic +carboniferous +carbonization +carbonizations +carbonize +carbonized +carbonizes +carbonizing +carbonless +carbonnade +carbonnades +carbons +carbonyl +carbonylation +carbonylations +carbonylic +carbonyls +carbora +carboras +carbos +carboxyl +carboxylase +carboxylases +carboxylate +carboxylated +carboxylates +carboxylating +carboxylation +carboxylations +carboxylic +carboxyls +carboxymethylcellulose +carboxymethylcelluloses +carboxypeptidase +carboxypeptidases +carboy +carboyed +carboys +carbs +carbuncle +carbuncled +carbuncles +carbuncular +carburet +carbureted +carbureting +carburetion +carburetions +carburetor +carburetors +carburets +carburetted +carburetter +carburetters +carburetting +carburettor +carburettors +carburise +carburised +carburises +carburising +carburization +carburizations +carburize +carburized +carburizes +carburizing +carcajou +carcajous +carcanet +carcanets +carcase +carcases +carcass +carcasses +carcel +carcels +carcinogen +carcinogeneses +carcinogenesis +carcinogenic +carcinogenicities +carcinogenicity +carcinogens +carcinoid +carcinoids +carcinoma +carcinomas +carcinomata +carcinomatoses +carcinomatosis +carcinomatosises +carcinomatous +carcinosarcoma +carcinosarcomas +carcinosarcomata card +cardamom +cardamoms +cardamon +cardamons +cardamum +cardamums +cardboard +cardboards +cardcase +cardcases +carded +carder +carders +cardholder +cardholders +cardia +cardiac +cardiacs +cardiae +cardias +cardigan +cardigans +cardinal +cardinalate +cardinalates +cardinalities +cardinality +cardinally +cardinals +cardinalship +cardinalships +carding +cardings +cardiogenic +cardiogram +cardiograms +cardiograph +cardiographic +cardiographies +cardiographs +cardiography +cardioid +cardioids +cardiological +cardiologies +cardiologist +cardiologists +cardiology +cardiomyopathies +cardiomyopathy +cardiopathies +cardiopathy +cardiopulmonary +cardiorespiratory +cardiothoracic +cardiotonic +cardiotonics +cardiovascular +carditic +carditis +carditises +cardoon +cardoons +cardplayer +cardplayers +cards +cardsharp +cardsharper +cardsharpers +cardsharps care +cared +careen +careened +careener +careeners +careening +careens +career +careered +careerer +careerers +careering +careerism +careerisms +careerist +careerists +careers +carefree careful +carefuller +carefullest +carefully +carefulness +carefulnesses +caregiver +caregivers +caregiving +caregivings careless +carelessly +carelessness +carelessnesses +carer +carers +cares +caress +caressed +caresser +caressers +caresses +caressing +caressingly +caressive +caressively +caret +caretake +caretaken +caretaker +caretakers +caretakes +caretaking +caretakings +caretook +carets +careworn +carex +carfare +carfares +carful +carfuls +cargo +cargoes +cargos +carhop +carhops +caribe +caribes +caribou +caribous +caricatural +caricature +caricatured +caricatures +caricaturing +caricaturist +caricaturists +carices +caried +caries +carillon +carillonned +carillonneur +carillonneurs +carillonning +carillons +carina +carinae +carinal +carinas +carinate +carinated +caring +carioca +cariocas +cariogenic +cariole +carioles +carious +caritas +caritases +carjacker +carjackers +carjacking +carjackings +cark +carked +carking +carks +carl +carle +carles +carless +carlin +carline +carlines +carling +carlings +carlins +carlish +carload +carloads +carls +carmagnole +carmagnoles +carmaker +carmakers +carman +carmen +carminative +carminatives +carmine +carmines +carn +carnage +carnages +carnal +carnalities +carnality +carnallite +carnallites +carnally +carnassial +carnassials +carnation +carnations +carnauba +carnaubas +carnelian +carnelians +carnet +carnets +carney +carneys +carnie +carnies +carnified +carnifies +carnify +carnifying +carnitine +carnitines +carnival +carnivals +carnivora +carnivore +carnivores +carnivorous +carnivorously +carnivorousness +carnivorousnesses +carnotite +carnotites +carns +carny +caroach +caroaches +carob +carobs +caroch +caroche +caroches +carol +caroled +caroler +carolers +caroli +caroling +carolled +caroller +carollers +carolling +carols +carolus +caroluses +carom +caromed +caroming +caroms +carotene +carotenes +carotenoid +carotenoids +carotid +carotids +carotin +carotinoid +carotinoids +carotins +carousal +carousals +carouse +caroused +carousel +carousels +carouser +carousers +carouses +carousing +carp +carpaccio +carpaccios +carpal +carpale +carpalia +carpals +carped +carpel +carpellary +carpellate +carpels carpenter +carpentered +carpentering +carpenters +carpentries +carpentry +carper +carpers carpet +carpetbag +carpetbagger +carpetbaggeries +carpetbaggers +carpetbaggery +carpetbagging +carpetbags +carpeted +carpeting +carpetings +carpets +carpetweed +carpetweeds +carpi +carping +carpingly +carpings +carpogonia +carpogonial +carpogonium +carpool +carpooled +carpooler +carpoolers +carpooling +carpools +carpophore +carpophores +carport +carports +carpospore +carpospores +carps +carpus +carr +carrack +carracks +carrageen +carrageenan +carrageenans +carrageenin +carrageenins +carrageens +carragheen +carragheens +carrefour +carrefours +carrel +carrell +carrells +carrels carriage +carriages +carriageway +carriageways +carried carrier +carriers +carries +carriole +carrioles +carrion +carrions +carritch +carritches +carroch +carroches +carrom +carromed +carroming +carroms +carronade +carronades carrot +carrotier +carrotiest +carrotin +carrotins +carrots +carrottop +carrottopped +carrottops +carroty +carrousel +carrousels +carrs carry +carryall +carryalls +carryback +carrybacks +carryforward +carryforwards +carrying +carryon +carryons +carryout +carryouts +carryover +carryovers +cars +carse +carses +carsick +carsickness +carsicknesses +cart +cartable +cartage +cartages +carte +carted +cartel +cartelise +cartelised +cartelises +cartelising +cartelization +cartelizations +cartelize +cartelized +cartelizes +cartelizing +cartels +carter +carters +cartes +cartilage +cartilages +cartilaginous +carting +cartload +cartloads +cartographer +cartographers +cartographic +cartographical +cartographically +cartographies +cartography +carton +cartoned +cartoning +cartons cartoon +cartooned +cartooning +cartoonings +cartoonish +cartoonishly +cartoonist +cartoonists +cartoonlike +cartoons +cartoony +cartop +cartopper +cartoppers +cartouch +cartouche +cartouches +cartridge +cartridges +carts +cartularies +cartulary +cartwheel +cartwheeled +cartwheeler +cartwheelers +cartwheeling +cartwheels +caruncle +caruncles +carvacrol +carvacrols carve +carved +carvel +carvels +carven +carver +carvers +carves +carving +carvings +carwash +carwashes +caryatic +caryatid +caryatides +caryatids +caryopses +caryopsides +caryopsis +caryotin +caryotins +casa +casaba +casabas +casas +casava +casavas +casbah +casbahs +cascabel +cascabels +cascable +cascables +cascade +cascaded +cascades +cascading +cascara +cascaras +cascarilla +cascarillas case +casease +caseases +caseate +caseated +caseates +caseating +caseation +caseations +casebearer +casebearers +casebook +casebooks +cased +casefied +casefies +casefy +casefying +caseic +casein +caseinate +caseinates +caseins +caseload +caseloads +casemate +casemates +casement +casements +caseose +caseoses +caseous +casern +caserne +casernes +caserns +cases +casette +casettes +casework +caseworker +caseworkers +caseworks +caseworm +caseworms cash +cashable +cashaw +cashaws +cashbook +cashbooks +cashbox +cashboxes +cashed +cashes +cashew +cashews +cashier +cashiered +cashiering +cashiers +cashing +cashless +cashmere +cashmeres +cashoo +cashoos +casimere +casimeres +casimire +casimires +casing +casings +casini +casino +casinos +casita +casitas +cask +casked +casket +casketed +casketing +caskets +casking +casks +casky +casque +casqued +casques +cassaba +cassabas +cassata +cassatas +cassava +cassavas +casserole +casseroles cassette +cassettes +cassia +cassias +cassimere +cassimeres +cassino +cassinos +cassis +cassises +cassiterite +cassiterites +cassock +cassocks +cassoulet +cassoulets +cassowaries +cassowary cast +castabilities +castability +castable +castanet +castanets +castaway +castaways +caste +casteism +casteisms +castellan +castellans +castellated +caster +casters +castes +castigate +castigated +castigates +castigating +castigation +castigations +castigator +castigators +casting +castings castle +castled +castles +castling +castoff +castoffs +castor +castoreum +castoreums +castors +castrate +castrated +castrates +castrati +castrating +castration +castrations +castrato +castrator +castrators +castratory +castratos +casts casual +casually +casualness +casualnesses +casuals +casualties +casualty +casuarina +casuarinas +casuist +casuistic +casuistical +casuistries +casuistry +casuists +casus cat +catabolic +catabolically +catabolism +catabolisms +catabolite +catabolites +catabolize +catabolized +catabolizes +catabolizing +catachreses +catachresis +catachrestic +catachrestical +catachrestically +cataclysm +cataclysmal +cataclysmic +cataclysmically +cataclysms +catacomb +catacombs +catadioptric +catadromous +catafalque +catafalques +catalase +catalases +catalatic +catalectic +catalectics +catalepsies +catalepsy +cataleptic +cataleptically +cataleptics +catalexes +catalexis +catalo +cataloes +catalog +cataloged +cataloger +catalogers +cataloging +catalogs catalogue +catalogued +cataloguer +cataloguers +catalogues +cataloguing +catalos +catalpa +catalpas +catalyses +catalysis +catalyst +catalysts +catalytic +catalytically +catalyze +catalyzed +catalyzer +catalyzers +catalyzes +catalyzing +catamaran +catamarans +catamenia +catamenial +catamite +catamites +catamount +catamounts +cataphora +cataphoras +cataphoreses +cataphoresis +cataphoretic +cataphoretically +cataphoric +cataplasm +cataplasms +cataplexies +cataplexy +catapult +catapulted +catapulting +catapults +cataract +cataractous +cataracts +catarrh +catarrhal +catarrhally +catarrhine +catarrhines +catarrhs catastrophe +catastrophes +catastrophic +catastrophically +catastrophism +catastrophisms +catastrophist +catastrophists +catatonia +catatonias +catatonic +catatonically +catatonics +catawba +catawbas +catbird +catbirds +catboat +catboats +catbrier +catbriers +catcall +catcalled +catcalling +catcalls catch +catchable +catchall +catchalls +catcher +catchers +catches +catchflies +catchfly +catchier +catchiest +catching +catchment +catchments +catchpenny +catchphrase +catchphrases +catchpole +catchpoles +catchpoll +catchpolls +catchup +catchups +catchword +catchwords +catchy +catclaw +catclaws +cate +catecheses +catechesis +catechetical +catechin +catechins +catechism +catechismal +catechisms +catechist +catechistic +catechists +catechization +catechizations +catechize +catechized +catechizer +catechizers +catechizes +catechizing +catechol +catecholamine +catecholaminergic +catecholamines +catechols +catechu +catechumen +catechumens +catechus +categoric +categorical +categorically +categories +categorise +categorised +categorises +categorising +categorization +categorizations +categorize +categorized +categorizes +categorizing category +catena +catenae +catenaries +catenary +catenas +catenate +catenated +catenates +catenating +catenation +catenations +catenoid +catenoids cater +cateran +caterans +catercorner +catercornered +catered +caterer +caterers +cateress +cateresses +catering +caterpillar +caterpillars +caters +caterwaul +caterwauled +caterwauling +caterwauls +cates +catface +catfaces +catfacing +catfacings +catfall +catfalls +catfight +catfights +catfish +catfishes +catgut +catguts +catharses +catharsis +cathartic +cathartics +cathead +catheads +cathect +cathected +cathectic +cathecting +cathects +cathedra +cathedrae +cathedral +cathedrals +cathedras +cathepsin +cathepsins +catheter +catheterization +catheterizations +catheterize +catheterized +catheterizes +catheterizing +catheters +cathexes +cathexis +cathodal +cathodally +cathode +cathodes +cathodic +cathodically catholic +catholically +catholicate +catholicates +catholicities +catholicity +catholicize +catholicized +catholicizes +catholicizing +catholicoi +catholicon +catholicons +catholicos +catholicoses +catholics +cathouse +cathouses +cation +cationic +cationically +cations +catkin +catkins +catlike +catlin +catling +catlings +catlins +catmint +catmints +catnap +catnaper +catnapers +catnapped +catnapper +catnappers +catnapping +catnaps +catnip +catnips +catoptric +cats +catspaw +catspaws +catsup +catsups +cattail +cattails +cattalo +cattaloes +cattalos +catted +catteries +cattery +cattie +cattier +catties +cattiest +cattily +cattiness +cattinesses +catting +cattish cattle +cattleman +cattlemen +cattleya +cattleyas +catty +catwalk +catwalks +caucus +caucused +caucuses +caucusing +caucussed +caucusses +caucussing +caudad +caudal +caudally +caudate +caudated +caudates +caudex +caudexes +caudices +caudillismo +caudillismos +caudillo +caudillos +caudle +caudles +caught +caul +cauld +cauldron +cauldrons +caulds +caules +caulicle +caulicles +cauliflower +caulifloweret +cauliflowerets +cauliflowers +cauline +caulis +caulk +caulked +caulker +caulkers +caulking +caulkings +caulks +cauls +causable +causal +causalgia +causalgias +causalgic +causalities +causality +causally +causals +causation +causations +causative +causatively +causatives cause +caused +causeless +causer +causerie +causeries +causers +causes +causeway +causewayed +causewaying +causeways +causey +causeys +causing +caustic +caustically +causticities +causticity +caustics +cauteries +cauterization +cauterizations +cauterize +cauterized +cauterizes +cauterizing +cautery caution +cautionary +cautioned +cautioning +cautions cautious +cautiously +cautiousness +cautiousnesses +cavalcade +cavalcades +cavalero +cavaleros +cavaletti +cavalier +cavaliered +cavaliering +cavalierism +cavalierisms +cavalierly +cavaliers +cavalla +cavallas +cavalletti +cavallies +cavally +cavalries +cavalry +cavalryman +cavalrymen +cavatina +cavatinas +cavatine cave -cd +caveat +caveated +caveating +caveator +caveators +caveats +caved +cavefish +cavefishes +cavelike +caveman +cavemen +caver +cavern +caverned +cavernicolous +caverning +cavernous +cavernously +caverns +cavers +caves +cavetti +cavetto +cavettos +caviar +caviare +caviares +caviars +cavicorn +cavie +cavies +cavil +caviled +caviler +cavilers +caviling +cavilled +caviller +cavillers +cavilling +cavils +caving +cavings +cavitary +cavitate +cavitated +cavitates +cavitating +cavitation +cavitations +cavitied +cavities +cavity +cavort +cavorted +cavorter +cavorters +cavorting +cavorts +cavy +caw +cawed +cawing +caws +cay +cayenne +cayenned +cayennes +cayman +caymans +cays +cayuse +cayuses +cazique +caziques +ceanothus +ceanothuses +cease +ceased +ceaseless +ceaselessly +ceaselessness +ceaselessnesses +ceases +ceasing +cebid +cebids +ceboid +ceboids +ceca +cecal +cecally +cecum +cedar +cedarbird +cedarbirds +cedarn +cedars +cedarwood +cedarwoods +cede +ceded +ceder +ceders +cedes +cedi +cedilla +cedillas +ceding +cedis +cedula +cedulas +cee +cees +ceiba +ceibas +ceil +ceiled +ceiler +ceilers ceiling +ceilinged +ceilings +ceilometer +ceilometers +ceils +ceinture +ceintures +cel +celadon +celadons +celandine +celandines +celeb +celebrant +celebrants celebrate +celebrated +celebratedness +celebratednesses +celebrates +celebrating celebration +celebrations +celebrator +celebrators +celebratory +celebrities +celebrity +celebs +celeriac +celeriacs +celeries +celerities +celerity +celery +celesta +celestas +celeste +celestes +celestial +celestially +celestials +celestite +celestites +celiac +celiacs +celibacies +celibacy +celibate +celibates cell +cella +cellae +cellar +cellarage +cellarages +cellared +cellarer +cellarers +cellaret +cellarets +cellarette +cellarettes +cellaring +cellars +cellblock +cellblocks +celled +celli +celling +cellist +cellists +cellmate +cellmates +cello +cellobiose +cellobioses +celloidin +celloidins +cellophane +cellophanes +cellos +cells +cellular +cellularities +cellularity +cellulase +cellulases +cellule +cellules +cellulite +cellulites +cellulitides +cellulitis +cellulitises +celluloid +celluloids +cellulolytic +cellulose +celluloses +cellulosic +cellulosics +celom +celomata +celoms +celosia +celosias +cels +celt +celts +cembali +cembalo +cembalos +cement +cementa +cementation +cementations +cemented +cementer +cementers +cementing +cementite +cementites +cementitious +cements +cementum +cemeteries +cemetery +cenacle +cenacles +cenobite +cenobites +cenobitic +cenospecies +cenotaph +cenotaphs +cenote +cenotes +cense +censed +censer +censers +censes +censing +censor +censored +censorial +censoring +censorious +censoriously +censoriousness +censoriousnesses +censors +censorship +censorships +censual +censurable +censure +censured +censurer +censurers +censures +censuring +census +censused +censuses +censusing cent +cental +centals +centare +centares +centaur +centaurea +centaureas +centauries +centaurs +centaury +centavo +centavos +centenarian +centenarians +centenaries +centenary +centennial +centennially +centennials center +centerboard +centerboards +centered +centeredness +centerednesses +centerfold +centerfolds +centering +centerless +centerline +centerlines +centerpiece +centerpieces +centers +centeses +centesimal +centesimi +centesimo +centesimos +centesis +centiare +centiares centigrade +centigram +centigrams +centile +centiles +centiliter +centiliters +centillion +centillions +centime +centimes centimeter -centimetre +centimeters +centimo +centimorgan +centimorgans +centimos +centipede +centipedes +centner +centners +cento +centones +centos +centra central +centraler +centralest +centralise +centralised +centralises +centralising +centralism +centralisms +centralist +centralistic +centralists +centralities +centrality +centralization +centralizations +centralize +centralized +centralizer +centralizers +centralizes +centralizing +centrally +centrals centre +centred +centres +centric +centrically +centricities +centricity +centrifugal +centrifugally +centrifugals +centrifugation +centrifugations +centrifuge +centrifuged +centrifuges +centrifuging +centring +centrings +centriole +centrioles +centripetal +centripetally +centrism +centrisms +centrist +centrists +centroid +centroids +centromere +centromeres +centromeric +centrosome +centrosomes +centrosymmetric +centrum +centrums +cents +centum +centums +centuple +centupled +centuples +centupling +centuries +centurion +centurions century +ceorl +ceorlish +ceorls +cep +cepe +cepes +cephalad +cephalexin +cephalexins +cephalic +cephalically +cephalin +cephalins +cephalization +cephalizations +cephalometric +cephalometries +cephalometry +cephalopod +cephalopods +cephaloridine +cephaloridines +cephalosporin +cephalosporins +cephalothin +cephalothins +cephalothoraces +cephalothorax +cephalothoraxes +cepheid +cepheids +ceps +ceramal +ceramals +ceramic +ceramicist +ceramicists +ceramics +ceramist +ceramists +cerastes +cerate +cerated +cerates +ceratin +ceratins +ceratoid +ceratopsian +ceratopsians +cercaria +cercariae +cercarial +cercarias +cerci +cercis +cercises +cercus +cere +cereal +cereals +cerebella +cerebellar +cerebellum +cerebellums +cerebra +cerebral +cerebrally +cerebrals +cerebrate +cerebrated +cerebrates +cerebrating +cerebration +cerebrations +cerebric +cerebroside +cerebrosides +cerebrospinal +cerebrovascular +cerebrum +cerebrums +cerecloth +cerecloths +cered +cerement +cerements +ceremonial +ceremonialism +ceremonialisms +ceremonialist +ceremonialists +ceremonially +ceremonials +ceremonies +ceremonious +ceremoniously +ceremoniousness +ceremoniousnesses ceremony +ceres +cereus +cereuses +ceria +cerias +ceric +cering +ceriph +ceriphs +cerise +cerises +cerite +cerites +cerium +ceriums +cermet +cermets +cernuous +cero +ceros +cerotic +cerotype +cerotypes +cerous certain +certainer +certainest +certainly +certainties +certainty +certes +certifiable +certifiably certificate +certificated +certificates +certificating +certification +certifications +certificatory +certified +certifier +certifiers +certifies +certify +certifying +certiorari +certioraris +certitude +certitudes +cerulean +ceruleans +ceruloplasmin +ceruloplasmins +cerumen +cerumens +ceruminous +ceruse +ceruses +cerusite +cerusites +cerussite +cerussites +cervelas +cervelases +cervelat +cervelats +cervical +cervices +cervicites +cervicitides +cervicitis +cervicitises +cervid +cervine +cervix +cervixes +cesarean +cesareans +cesarian +cesarians +cesium +cesiums +cess +cessation +cessations +cessed +cesses +cessing +cession +cessions +cesspit +cesspits +cesspool +cesspools +cesta +cestas +cesti +cestode +cestodes +cestoi +cestoid +cestoids +cestos +cestus +cestuses +cesura +cesurae +cesuras +cetacean +cetaceans +cetaceous +cetane +cetanes +cete +cetes +cetologies +cetologist +cetologists +cetology +ceviche +ceviches +chablis +chabouk +chabouks +chabuk +chabuks +chacma +chacmas +chaconne +chaconnes +chad +chadar +chadarim +chadars +chadless +chador +chadors +chadri +chads +chaeta +chaetae +chaetal +chaetognath +chaetognaths +chafe +chafed +chafer +chafers +chafes +chaff +chaffed +chaffer +chaffered +chafferer +chafferers +chaffering +chaffers +chaffier +chaffiest +chaffinch +chaffinches +chaffing +chaffs +chaffy +chafing +chagrin +chagrined +chagrining +chagrinned +chagrinning +chagrins chain +chaine +chained +chaines +chaining +chainman +chainmen +chains +chainsaw +chainsawed +chainsawing +chainsaws +chainwheel +chainwheels chair +chaired +chairing +chairlift +chairlifts chairman +chairmaned +chairmaning +chairmanned +chairmanning +chairmans +chairmanship +chairmanships +chairmen +chairperson +chairpersons +chairs chairwoman +chairwomen +chaise +chaises +chakra +chakras +chalah +chalahs +chalaza +chalazae +chalazal +chalazas +chalazia +chalazion +chalazions +chalcedonic +chalcedonies +chalcedony +chalcid +chalcids +chalcocite +chalcocites +chalcogen +chalcogenide +chalcogenides +chalcogens +chalcopyrite +chalcopyrites +chaldron +chaldrons +chaleh +chalehs +chalet +chalets +chalice +chaliced +chalices chalk +chalkboard +chalkboards +chalked +chalkier +chalkiest +chalking +chalks +chalky +challa +challah +challahs +challas challenge +challenged +challenger +challengers +challenges challenging +challengingly +challie +challies +challis +challises +challot +challoth +chally +chalone +chalones +chalot +chaloth +chalutz +chalutzim +chalybeate +chalybeates +cham +chamade +chamades +chamaephyte +chamaephytes +chamber +chambered +chambering +chamberlain +chamberlains +chambermaid +chambermaids +chambers +chambray +chambrays +chameleon +chameleonic +chameleonlike +chameleons +chamfer +chamfered +chamfering +chamfers +chamfron +chamfrons +chamise +chamises +chamiso +chamisos +chammied +chammies +chammy +chammying +chamois +chamoised +chamoises +chamoising +chamoix +chamomile +chamomiles +champ +champac +champacs +champagne +champagnes +champaign +champaigns +champak +champaks +champed +champer +champers +champerties +champertous +champerty +champignon +champignons +champing champion +championed +championing +champions +championship +championships +champleve +champleves +champs +champy +chams chance +chanced +chanceful +chancel +chancelleries +chancellery +chancellor +chancellories +chancellors +chancellorship +chancellorships +chancellory +chancels +chanceries +chancery +chances +chancier +chanciest +chancily +chanciness +chancinesses +chancing +chancre +chancres +chancroid +chancroidal +chancroids +chancrous +chancy +chandelier +chandeliered +chandeliers +chandelle +chandelled +chandelles +chandelling +chandler +chandleries +chandlers +chandlery +chanfron +chanfrons +chang change +changeabilities +changeability changeable +changeableness +changeablenesses +changeably +changed +changeful +changefully +changefulness +changefulnesses +changeless +changelessly +changelessness +changelessnesses +changeling +changelings +changeover +changeovers +changer +changers +changes +changing +changs channel +channeled +channeler +channelers +channeling +channelization +channelizations +channelize +channelized +channelizes +channelizing +channelled +channelling +channels +chanson +chansonnier +chansonniers +chansons chant +chantage +chantages +chanted +chanter +chanterelle +chanterelles +chanters +chanteuse +chanteuses +chantey +chanteys +chanticleer +chanticleers +chanties +chanting +chantor +chantors +chantries +chantry +chants +chanty +chao chaos +chaoses +chaotic +chaotically +chap +chaparajos +chaparejos +chaparral +chaparrals +chapati +chapatis +chapatti +chapattis +chapbook +chapbooks +chape +chapeau +chapeaus +chapeaux +chapel +chapels +chaperon +chaperonage +chaperonages +chaperone +chaperoned +chaperones +chaperoning +chaperons +chapes +chapfallen +chapiter +chapiters +chaplain +chaplaincies +chaplaincy +chaplains +chaplet +chapleted +chaplets +chapman +chapmen +chappati +chappatis +chapped +chapping +chaps +chapt chapter +chaptered +chaptering +chapters +chaqueta +chaquetas +char +charabanc +charabancs +characid +characids +characin +characins character +charactered +characterful +characteries +charactering characteristic +characteristically +characteristics +characterization +characterizations +characterize +characterized +characterizes +characterizing +characterless +characterological +characterologically +characters +charactery +charade +charades +charas +charases +charbroil +charbroiled +charbroiler +charbroilers +charbroiling +charbroils +charcoal +charcoaled +charcoaling +charcoals +charcuterie +charcuteries +chard +chardonnay +chardonnays +chards +chare +chared +chares charge +chargeable +charged +chargehand +chargehands +charger +chargers +charges +charging +charier +chariest +charily +chariness +charinesses +charing +chariot +charioted +charioteer +charioteers +charioting +chariots +charism +charisma +charismata +charismatic +charismatics +charisms +charitable +charitableness +charitablenesses +charitably +charities +charity +charivari +charivaris +chark +charka +charkas +charked +charkha +charkhas +charking +charks +charladies +charlady +charlatan +charlatanism +charlatanisms +charlatanries +charlatanry +charlatans +charley +charleys +charlie +charlies +charlock +charlocks +charlotte +charlottes +charm +charmed +charmer +charmers +charmeuse +charmeuses +charming +charminger +charmingest +charmingly +charmless +charms +charnel +charnels +charpai +charpais +charpoy +charpoys +charqui +charquid +charquis +charr +charred +charrier +charriest +charring +charro +charros +charrs +charry +chars chart +charted +charter +chartered +charterer +charterers +chartering +charters +charting +chartist +chartists +chartreuse +chartreuses +charts +chartularies +chartulary +charwoman +charwomen +chary +chase +chased +chaser +chasers +chases +chasing +chasings +chasm +chasmal +chasmed +chasmic +chasms +chasmy +chasse +chassed +chasseing +chassepot +chassepots +chasses +chasseur +chasseurs +chassis +chaste +chastely +chasten +chastened +chastener +chasteners +chasteness +chastenesses +chastening +chastens +chaster +chastest +chastise +chastised +chastisement +chastisements +chastiser +chastisers +chastises +chastising +chastities +chastity +chasuble +chasubles chat +chatchka +chatchkas +chatchke +chatchkes +chateau +chateaubriand +chateaubriands +chateaus +chateaux +chatelain +chatelaine +chatelaines +chatelains +chatoyance +chatoyances +chatoyancies +chatoyancy +chatoyant +chatoyants +chats +chatted +chattel +chattels +chatter +chatterbox +chatterboxes +chattered +chatterer +chatterers +chattering +chatters +chattery +chattier +chattiest +chattily +chattiness +chattinesses +chatting +chatty +chaufer +chaufers +chauffer +chauffers +chauffeur +chauffeured +chauffeuring +chauffeurs +chaulmoogra +chaulmoogras +chaunt +chaunted +chaunter +chaunters +chaunting +chaunts +chausses +chaussure +chaussures +chautauqua +chautauquas +chauvinism +chauvinisms +chauvinist +chauvinistic +chauvinistically +chauvinists +chaw +chawbacon +chawbacons +chawed +chawer +chawers +chawing +chaws +chay +chayote +chayotes +chays +chazan +chazanim +chazans +chazzan +chazzanim +chazzans +chazzen +chazzenim +chazzens cheap +cheapen +cheapened +cheapening +cheapens +cheaper +cheapest +cheapie +cheapies +cheapish +cheapishly +cheapjack +cheapjacks +cheaply +cheapness +cheapnesses +cheapo +cheapos +cheaps +cheapskate +cheapskates cheat +cheated +cheater +cheaters +cheating +cheats +chebec +chebecs +chechako +chechakos check +checkable +checkbook +checkbooks +checked +checker +checkerberries +checkerberry +checkerboard +checkerboards +checkered +checkering +checkers +checking +checkless +checklist +checklists +checkmark +checkmarked +checkmarking +checkmarks +checkmate +checkmated +checkmates +checkmating +checkoff +checkoffs +checkout +checkouts +checkpoint +checkpoints +checkrein +checkreins +checkroom +checkrooms +checkrow +checkrowed +checkrowing +checkrows +checks +checkup +checkups +cheddar +cheddars +cheddite +cheddites +cheder +cheders +chedite +chedites +cheechako +cheechakos cheek +cheekbone +cheekbones +cheeked +cheekful +cheekfuls +cheekier +cheekiest +cheekily +cheekiness +cheekinesses +cheeking +cheeks +cheeky +cheep +cheeped +cheeper +cheepers +cheeping +cheeps cheer +cheered +cheerer +cheerers cheerful +cheerfuller +cheerfullest +cheerfully +cheerfulness +cheerfulnesses +cheerier +cheeriest +cheerily +cheeriness +cheerinesses +cheering +cheerio +cheerios +cheerlead +cheerleader +cheerleaders +cheerleading +cheerleads +cheerled +cheerless +cheerlessly +cheerlessness +cheerlessnesses +cheerly +cheero +cheeros cheers +cheery cheese +cheeseburger +cheeseburgers +cheesecake +cheesecakes +cheesecloth +cheesecloths +cheesed +cheeseparing +cheeseparings +cheeses +cheesier +cheesiest +cheesily +cheesiness +cheesinesses +cheesing +cheesy +cheetah +cheetahs chef +chefdom +chefdoms +cheffed +cheffing +chefs +chegoe +chegoes +chela +chelae +chelas +chelatable +chelate +chelated +chelates +chelating +chelation +chelations +chelator +chelators +chelicera +chelicerae +cheliceral +cheliped +chelipeds +cheloid +cheloids +chelonian +chelonians +chemic chemical +chemically +chemicals +chemics +chemiluminescence +chemiluminescences +chemiluminescent +chemiosmotic +chemise +chemises +chemisette +chemisettes +chemism +chemisms +chemisorb +chemisorbed +chemisorbing +chemisorbs +chemisorption +chemisorptions chemist +chemistries chemistry +chemists +chemo +chemoautotrophic +chemoautotrophies +chemoautotrophy +chemoprophylactic +chemoprophylaxes +chemoprophylaxis +chemoreception +chemoreceptions +chemoreceptive +chemoreceptor +chemoreceptors +chemos +chemosurgeries +chemosurgery +chemosurgical +chemosyntheses +chemosynthesis +chemosynthetic +chemotactic +chemotactically +chemotaxes +chemotaxis +chemotaxonomic +chemotaxonomies +chemotaxonomist +chemotaxonomists +chemotaxonomy +chemotherapeutic +chemotherapeutically +chemotherapeutics +chemotherapies +chemotherapist +chemotherapists +chemotherapy +chemotropism +chemotropisms +chemurgies +chemurgy +chenille +chenilles +chenopod +chenopods +cheongsam +cheongsams cheque +chequer +chequered +chequering +chequers +cheques +cherimoya +cherimoyas +cherish +cherishable +cherished +cherisher +cherishers +cherishes +cherishing +chernozem +chernozemic +chernozems +cheroot +cheroots +cherries +cherry +cherrylike +cherrystone +cherrystones +chert +chertier +chertiest +cherts +cherty +cherub +cherubic +cherubically +cherubim +cherubims +cherublike +cherubs +chervil +chervils chess +chessboard +chessboards +chesses +chessman +chessmen chest +chested +chesterfield +chesterfields +chestful +chestfuls +chestier +chestiest +chestnut +chestnuts +chests +chesty +chetah +chetahs +cheth +cheths +chetrum +chetrums +chevalet +chevalets +chevalier +chevaliers +chevelure +chevelures +cheveron +cheverons +chevied +chevies +cheviot +cheviots +chevre +chevres +chevron +chevrons +chevy +chevying chew +chewable +chewed +chewer +chewers +chewier +chewiest +chewing +chewink +chewinks +chews +chewy +chez +chi +chia +chiao +chiaroscurist +chiaroscurists +chiaroscuro +chiaroscuros +chias +chiasm +chiasma +chiasmal +chiasmas +chiasmata +chiasmatic +chiasmi +chiasmic +chiasms +chiasmus +chiastic +chiaus +chiauses +chibouk +chibouks +chibouque +chibouques +chic +chicane +chicaned +chicaner +chicaneries +chicaners +chicanery +chicanes +chicaning +chicano +chicanos +chiccories +chiccory +chicer +chicest +chichi +chichis +chick +chickadee +chickadees +chickaree +chickarees +chickee +chickees chicken +chickened +chickenhearted +chickening +chickenpox +chickenpoxes +chickens +chickenshit +chickenshits +chickories +chickory +chickpea +chickpeas +chicks +chickweed +chickweeds +chicle +chicles +chicly +chicness +chicnesses +chico +chicories +chicory +chicos +chics +chid +chidden +chide +chided +chider +chiders +chides +chiding chief +chiefdom +chiefdoms +chiefer +chiefest +chiefly +chiefs +chiefship +chiefships +chieftain +chieftaincies +chieftaincy +chieftains +chieftainship +chieftainships +chiel +chield +chields +chiels +chiffchaff +chiffchaffs +chiffon +chiffonade +chiffonades +chiffonier +chiffoniers +chiffons +chifforobe +chifforobes +chigetai +chigetais +chigger +chiggers +chignon +chignons +chigoe +chigoes +chihuahua +chihuahuas +chilblain +chilblains child +childbearing +childbearings +childbed +childbeds +childbirth +childbirths +childe +childes childhood +childhoods +childing +childish +childishly +childishness +childishnesses +childless +childlessness +childlessnesses +childlier +childliest +childlike +childlikeness +childlikenesses +childly +childproof +childproofed +childproofing +childproofs +children +chile +chiles +chili +chiliad +chiliads +chiliasm +chiliasms +chiliast +chiliastic +chiliasts +chilidog +chilidogs +chilies +chill +chilled +chiller +chillers +chillest +chilli +chillier +chillies +chilliest +chillily +chilliness +chillinesses +chilling +chillingly +chillness +chillnesses +chills +chillum +chillums +chilly +chilopod +chilopods +chimaera +chimaeras +chimaeric +chimaerism +chimaerisms +chimar +chimars +chimb +chimbley +chimbleys +chimblies +chimbly +chimbs +chime +chimed +chimer +chimera +chimeras +chimere +chimeres +chimeric +chimerical +chimerically +chimerism +chimerisms +chimers +chimes +chimichanga +chimichangas +chiming +chimla +chimlas +chimley +chimleys +chimney +chimneylike +chimneypiece +chimneypieces +chimneys +chimp +chimpanzee +chimpanzees +chimps +chin +china +chinaberries +chinaberry +chinas +chinaware +chinawares +chinbone +chinbones +chinch +chincherinchee +chincherinchees +chinches +chinchier +chinchiest +chinchilla +chinchillas +chinchy +chine +chined +chines +chining +chink +chinkapin +chinkapins +chinked +chinkier +chinkiest +chinking +chinks +chinky +chinless +chinned +chinning +chino +chinoiserie +chinoiseries +chinone +chinones +chinook +chinooks +chinos +chinquapin +chinquapins +chins +chints +chintses +chintz +chintzes +chintzier +chintziest +chintzy +chionodoxa +chionodoxas +chip +chipboard +chipboards +chipmuck +chipmucks +chipmunk +chipmunks +chipped +chipper +chippered +chippering +chippers +chippie +chippier +chippies +chippiest +chipping +chippy +chips +chiral +chiralities +chirality +chirimoya +chirimoyas +chirk +chirked +chirker +chirkest +chirking +chirks +chirm +chirmed +chirming +chirms +chiro +chirographer +chirographers +chirographic +chirographical +chirographies +chirography +chiromancer +chiromancers +chiromancies +chiromancy +chironomid +chironomids +chiropodies +chiropodist +chiropodists +chiropody +chiropractic +chiropractics +chiropractor +chiropractors +chiropteran +chiropterans +chiros +chirp +chirped +chirper +chirpers +chirpier +chirpiest +chirpily +chirping +chirps +chirpy +chirr +chirre +chirred +chirres +chirring +chirrs +chirrup +chirruped +chirruping +chirrups +chirrupy +chirurgeon +chirurgeons +chis +chisel +chiseled +chiseler +chiselers +chiseling +chiselled +chiseller +chisellers +chiselling +chisels +chit +chital +chitchat +chitchats +chitchatted +chitchatting +chitin +chitinous +chitins +chitlin +chitling +chitlings +chitlins +chiton +chitons +chitosan +chitosans +chits +chitter +chittered +chittering +chitterlings +chitters +chitties +chitty +chivalric +chivalries +chivalrous +chivalrously +chivalrousness +chivalrousnesses +chivalry +chivaree +chivareed +chivareeing +chivarees +chivari +chivaried +chivaries +chivariing +chive +chives +chivied +chivies +chivvied +chivvies +chivvy +chivvying +chivy +chivying +chlamydes +chlamydia +chlamydiae +chlamydial +chlamydospore +chlamydospores +chlamys +chlamyses +chloasma +chloasmata +chloracne +chloracnes +chloral +chloralose +chloralosed +chloraloses +chlorals +chloramine +chloramines +chloramphenicol +chloramphenicols +chlorate +chlorates +chlordan +chlordane +chlordanes +chlordans +chlordiazepoxide +chlordiazepoxides +chlorella +chlorellas +chlorenchyma +chlorenchymas +chlorenchymata +chloric +chlorid +chloride +chlorides +chlorids +chlorin +chlorinate +chlorinated +chlorinates +chlorinating +chlorination +chlorinations +chlorinator +chlorinators +chlorine +chlorines +chlorinities +chlorinity +chlorins +chlorite +chlorites +chloritic +chlorobenzene +chlorobenzenes +chlorofluorocarbon +chlorofluorocarbons +chlorofluoromethane +chlorofluoromethanes +chloroform +chloroformed +chloroforming +chloroforms +chlorohydrin +chlorohydrins +chlorophyll +chlorophyllous +chlorophylls +chloropicrin +chloropicrins +chloroplast +chloroplastic +chloroplasts +chloroprene +chloroprenes +chloroquine +chloroquines +chloroses +chlorosis +chlorothiazide +chlorothiazides +chlorotic +chlorous +chlorpromazine +chlorpromazines +chlorpropamide +chlorpropamides +chlortetracycline +chlortetracyclines +choana +choanae +choanocyte +choanocytes +chock +chockablock +chocked +chockful +chocking +chocks +chocoholic +chocoholics chocolate +chocolates +chocolatey +chocolatier +chocolatiers +chocolaty choice +choicely +choiceness +choicenesses +choicer +choices +choicest choir +choirboy +choirboys +choired +choiring +choirmaster +choirmasters +choirs choke +chokeberries +chokeberry +chokecherries +chokecherry +choked +choker +chokers +chokes +chokey +chokier +chokiest +choking +chokingly +choky +cholangiogram +cholangiograms +cholangiographic +cholangiographies +cholangiography +cholate +cholates +cholecalciferol +cholecalciferols +cholecystectomies +cholecystectomized +cholecystectomy +cholecystites +cholecystitides +cholecystitis +cholecystitises +cholecystokinin +cholecystokinins +cholelithiases +cholelithiasis +cholent +cholents +choler +cholera +choleras +choleric +cholerically +cholers +cholestases +cholestasis +cholestatic +cholesteric +cholesterol +cholesterols +cholestyramine +cholestyramines +choline +cholinergic +cholinergically +cholines +cholinesterase +cholinesterases +cholla +chollas +cholo +cholos +chomp +chomped +chomper +chompers +chomping +chomps +chon +chondriosome +chondriosomes +chondrite +chondrites +chondritic +chondrocrania +chondrocranium +chondrocraniums +chondroitin +chondroitins +chondrule +chondrules +chook +chooks choose +chooser +choosers +chooses +choosey +choosier +choosiest +choosing +choosy +chop +chopfallen +chophouse +chophouses +chopin +chopine +chopines +chopins +choplogic +choplogics +chopped +chopper +choppered +choppering +choppers +choppier +choppiest +choppily +choppiness +choppinesses +chopping +choppy +chops +chopstick chopsticks +choragi +choragic +choragus +choraguses +choral +chorale +chorales +chorally +chorals +chord +chordal +chordamesoderm +chordamesodermal +chordamesoderms +chordate +chordates +chorded +chording +chords +chore +chorea +choreal +choreas +chored +choregi +choregus +choreguses +choreic +choreiform +choreman +choremen +choreograph +choreographed +choreographer +choreographers +choreographic +choreographically +choreographies +choreographing +choreographs +choreography +choreoid +chores +chorial +choriamb +choriambs +choric +chorine +chorines +choring +chorioallantoic +chorioallantoides +chorioallantois +choriocarcinoma +choriocarcinomas +choriocarcinomata +chorioid +chorioids +chorion +chorionic +chorions +chorister +choristers +chorizo +chorizos +chorographer +chorographers +chorographic +chorographies +chorography +choroid +choroidal +choroids +chortle +chortled +chortler +chortlers +chortles +chortling chorus -christian -christmas +chorused +choruses +chorusing +chorussed +chorusses +chorussing +chose +chosen +choses +chott +chotts +chough +choughs +chouse +choused +chouser +chousers +chouses +choush +choushes +chousing +chow +chowchow +chowchows +chowder +chowdered +chowderhead +chowderheaded +chowderheads +chowdering +chowders +chowed +chowhound +chowhounds +chowing +chows +chowse +chowsed +chowses +chowsing +chowtime +chowtimes +chresard +chresards +chrestomathies +chrestomathy +chrism +chrisma +chrismal +chrismation +chrismations +chrismon +chrismons +chrisms +chrisom +chrisoms +christen +christened +christening +christenings +christens +christiania +christianias +christie +christies +christy +chroma +chromaffin +chromas +chromate +chromates +chromatic +chromatically +chromaticism +chromaticisms +chromaticities +chromaticity +chromatics +chromatid +chromatids +chromatin +chromatinic +chromatins +chromatogram +chromatograms +chromatograph +chromatographed +chromatographer +chromatographers +chromatographic +chromatographically +chromatographies +chromatographing +chromatographs +chromatography +chromatolyses +chromatolysis +chromatolytic +chromatophore +chromatophores +chrome +chromed +chromes +chromic +chromide +chromides +chrominance +chrominances +chroming +chromings +chromite +chromites +chromium +chromiums +chromize +chromized +chromizes +chromizing +chromo +chromocenter +chromocenters +chromodynamics +chromogen +chromogenic +chromogens +chromolithograph +chromolithographed +chromolithographer +chromolithographers +chromolithographic +chromolithographies +chromolithographing +chromolithographs +chromolithography +chromomere +chromomeres +chromomeric +chromonema +chromonemata +chromonematic +chromophil +chromophobe +chromophore +chromophores +chromophoric +chromoplast +chromoplasts +chromoprotein +chromoproteins +chromos +chromosomal +chromosomally +chromosome +chromosomes +chromosphere +chromospheres +chromospheric +chromous +chromyl +chromyls +chronaxie +chronaxies +chronaxy +chronic +chronically +chronicities +chronicity +chronicle +chronicled +chronicler +chroniclers +chronicles +chronicling +chronics +chronobiologic +chronobiological +chronobiologies +chronobiologist +chronobiologists +chronobiology +chronogram +chronograms +chronograph +chronographic +chronographies +chronographs +chronography +chronologer +chronologers +chronologic +chronological +chronologically +chronologies +chronologist +chronologists +chronology +chronometer +chronometers +chronometric +chronometrical +chronometrically +chronometries +chronometry +chronon +chronons +chronotherapies +chronotherapy +chrysalid +chrysalides +chrysalids +chrysalis +chrysalises +chrysanthemum +chrysanthemums +chrysarobin +chrysarobins +chrysoberyl +chrysoberyls +chrysolite +chrysolites +chrysomelid +chrysomelids +chrysophyte +chrysophytes +chrysoprase +chrysoprases +chrysotile +chrysotiles +chthonian +chthonic +chub +chubasco +chubascos +chubbier +chubbiest +chubbily +chubbiness +chubbinesses +chubby +chubs +chuck +chuckawalla +chuckawallas +chucked +chuckhole +chuckholes +chuckies +chucking +chuckle +chuckled +chucklehead +chuckleheaded +chuckleheads +chuckler +chucklers +chuckles +chucklesome +chuckling +chucklingly +chucks +chuckwalla +chuckwallas +chucky +chuddah +chuddahs +chuddar +chuddars +chudder +chudders +chufa +chufas +chuff +chuffed +chuffer +chuffest +chuffier +chuffiest +chuffing +chuffs +chuffy +chug +chugalug +chugalugged +chugalugging +chugalugs +chugged +chugger +chuggers +chugging +chugs +chukar +chukars +chukka +chukkar +chukkars +chukkas +chukker +chukkers +chum +chummed +chummier +chummiest +chummily +chumminess +chumminesses +chumming +chummy +chump +chumped +chumping +chumps +chums +chumship +chumships +chunk +chunked +chunkier +chunkiest +chunkily +chunking +chunks +chunky +chunter +chuntered +chuntering +chunters church +churched +churches +churchgoer +churchgoers +churchgoing +churchgoings +churchianities +churchianity +churchier +churchiest +churching +churchings +churchless +churchlier +churchliest +churchliness +churchlinesses +churchly +churchman +churchmanship +churchmanships +churchmen +churchwarden +churchwardens +churchwoman +churchwomen +churchy +churchyard +churchyards +churl +churlish +churlishly +churlishness +churlishnesses +churls +churn +churned +churner +churners +churning +churnings +churns +churr +churred +churrigueresque +churring +churrs +chute +chuted +chutes +chuting +chutist +chutists +chutnee +chutnees +chutney +chutneys +chutzpa +chutzpah +chutzpahs +chutzpas +chyle +chyles +chylomicron +chylomicrons +chylous +chyme +chymes +chymic +chymics +chymist +chymists +chymosin +chymosins +chymotrypsin +chymotrypsinogen +chymotrypsinogens +chymotrypsins +chymotryptic +chymous +ciao +cibol +cibols +ciboria +ciborium +ciboule +ciboules +cicada +cicadae +cicadas +cicala +cicalas +cicale +cicatrices +cicatricial +cicatrix +cicatrixes +cicatrization +cicatrizations +cicatrize +cicatrized +cicatrizes +cicatrizing +cicelies +cicely +cicero +cicerone +cicerones +ciceroni +ciceros +cichlid +cichlidae +cichlids +cicisbei +cicisbeism +cicisbeisms +cicisbeo +cicisbeos +cicoree +cicorees +cider +ciders cigar +cigaret +cigarets cigarette +cigarettes +cigarillo +cigarillos +cigars +ciguatera +ciguateras +cilantro +cilantros +cilia +ciliary +ciliate +ciliated +ciliates +ciliation +ciliations +cilice +cilices +cilium +cimbalom +cimbaloms +cimetidine +cimetidines +cimex +cimices +cinch +cinched +cinches +cinching +cinchona +cinchonas +cinchonine +cinchonines +cinchonism +cinchonisms +cincture +cinctured +cinctures +cincturing +cinder +cindered +cindering +cinders +cindery +cine +cineast +cineaste +cineastes +cineasts cinema +cinemagoer +cinemagoers +cinemas +cinematheque +cinematheques +cinematic +cinematically +cinematize +cinematized +cinematizes +cinematizing +cinematograph +cinematographer +cinematographers +cinematographic +cinematographically +cinematographies +cinematographs +cinematography +cineol +cineole +cineoles +cineols +cineraria +cinerarias +cinerarium +cinerary +cinereous +cinerin +cinerins +cines +cingula +cingulate +cingulum +cinnabar +cinnabarine +cinnabars +cinnamic +cinnamon +cinnamons +cinnamyl +cinnamyls +cinquain +cinquains +cinque +cinquecentist +cinquecentisti +cinquecentists +cinquecento +cinquecentos +cinquefoil +cinquefoils +cinques +cion +cions +cioppino +cioppinos +cipher +ciphered +ciphering +ciphers +ciphertext +ciphertexts +ciphonies +ciphony +cipolin +cipolins +circa +circadian +circinate +circinately circle +circled +circler +circlers +circles +circlet +circlets +circling circuit +circuital +circuited +circuities +circuiting +circuitous +circuitously +circuitousness +circuitousnesses +circuitries +circuitry +circuits +circuity +circular +circularise +circularised +circularises +circularising +circularities +circularity +circularization +circularizations +circularize +circularized +circularizes +circularizing +circularly +circularness +circularnesses +circulars +circulatable circulate +circulated +circulates +circulating +circulation +circulations +circulative +circulator +circulators +circulatory +circumambient +circumambiently +circumambulate +circumambulated +circumambulates +circumambulating +circumambulation +circumambulations +circumcenter +circumcenters +circumcircle +circumcircles +circumcise +circumcised +circumciser +circumcisers +circumcises +circumcising +circumcision +circumcisions +circumference +circumferences +circumferential +circumflex +circumflexes +circumfluent +circumfluous +circumfuse +circumfused +circumfuses +circumfusing +circumfusion +circumfusions +circumjacent +circumlocution +circumlocutions +circumlocutory +circumlunar +circumnavigate +circumnavigated +circumnavigates +circumnavigating +circumnavigation +circumnavigations +circumnavigator +circumnavigators +circumpolar +circumscissile +circumscribe +circumscribed +circumscribes +circumscribing +circumscription +circumscriptions +circumspect +circumspection +circumspections +circumspectly circumstance +circumstanced +circumstances +circumstantial +circumstantialities +circumstantiality +circumstantially +circumstantiate +circumstantiated +circumstantiates +circumstantiating +circumstellar +circumvallate +circumvallated +circumvallates +circumvallating +circumvallation +circumvallations +circumvent +circumvented +circumventing +circumvention +circumventions +circumvents +circumvolution +circumvolutions +circus +circuses +circusy +cire +cires +cirque +cirques +cirrate +cirrhoses +cirrhosis +cirrhotic +cirrhotics +cirri +cirriped +cirripeds +cirrocumuli +cirrocumulus +cirrose +cirrostrati +cirrostratus +cirrous +cirrus +cirsoid +cis +cisalpine +cisco +ciscoes +ciscos +cislunar +cisplatin +cisplatins +cissies +cissoid +cissoids +cissy +cist +cistern +cisterna +cisternae +cisternal +cisterns +cistron +cistronic +cistrons +cists +cistus +cistuses +citable +citadel +citadels +citation +citational +citations +citator +citators +citatory +cite +citeable +cited +citer +citers +cites +cithara +citharas +cither +cithern +citherns +cithers +cithren +cithrens +citied +cities +citification +citifications +citified +citifies +citify +citifying +citing citizen +citizeness +citizenesses +citizenly +citizenries +citizenry +citizens +citizenship +citizenships +citola +citolas +citole +citoles +citral +citrals +citrate +citrated +citrates +citreous +citric +citriculture +citricultures +citriculturist +citriculturists +citrin +citrine +citrines +citrinin +citrinins +citrins +citron +citronella +citronellal +citronellals +citronellas +citronellol +citronellols +citrons +citrous +citrulline +citrullines +citrus +citruses +citrusy +cittern +citterns city +cityfied +cityscape +cityscapes +cityward +citywide +civet +civets +civic +civically +civicism +civicisms +civics +civie +civies civil civilian +civilianization +civilianizations +civilianize +civilianized +civilianizes +civilianizing +civilians +civilisation +civilisations +civilise +civilised +civilises +civilising +civilities +civility civilization +civilizational +civilizations +civilize +civilized +civilizer +civilizers +civilizes +civilizing +civilly +civism +civisms +civvies +civvy +clabber +clabbered +clabbering +clabbers +clach +clachan +clachans +clachs +clack +clacked +clacker +clackers +clacking +clacks +clad +cladding +claddings +clade +clades +cladist +cladistic +cladistically +cladistics +cladists +cladoceran +cladocerans +cladode +cladodes +cladodial +cladogeneses +cladogenesis +cladogenetic +cladogenetically +cladogram +cladograms +cladophyll +cladophylla +cladophylls +cladophyllum +clads +clag +clagged +clagging +clags +claim +claimable +claimant +claimants +claimed +claimer +claimers +claiming +claims +clairaudience +clairaudiences +clairaudient +clairaudiently +clairvoyance +clairvoyances +clairvoyant +clairvoyantly +clairvoyants +clam +clamant +clamantly +clambake +clambakes +clamber +clambered +clamberer +clamberers +clambering +clambers +clammed +clammer +clammers +clammier +clammiest +clammily +clamminess +clamminesses +clamming +clammy +clamor +clamored +clamorer +clamorers +clamoring +clamorous +clamorously +clamorousness +clamorousnesses +clamors +clamour +clamoured +clamouring +clamours +clamp +clampdown +clampdowns +clamped +clamper +clampers +clamping +clamps +clams +clamshell +clamshells +clamworm +clamworms +clan +clandestine +clandestinely +clandestineness +clandestinenesses +clandestinities +clandestinity +clang +clanged +clanger +clangers +clanging +clangor +clangored +clangoring +clangorous +clangorously +clangors +clangour +clangoured +clangouring +clangours +clangs +clank +clanked +clanking +clankingly +clanks +clannish +clannishly +clannishness +clannishnesses +clans +clansman +clansmen clap +clapboard +clapboarded +clapboarding +clapboards +clapped +clapper +clapperclaw +clapperclawed +clapperclawing +clapperclaws +clappers +clapping +claps +clapt +claptrap +claptraps +claque +claquer +claquers +claques +claqueur +claqueurs +clarence +clarences +claret +clarets +claries +clarification +clarifications +clarified +clarifier +clarifiers +clarifies clarify +clarifying +clarinet +clarinetist +clarinetists +clarinets +clarinettist +clarinettists +clarion +clarioned +clarioning +clarions +clarities +clarity +clarkia +clarkias +claro +claroes +claros +clary +clash +clashed +clasher +clashers +clashes +clashing +clasp +clasped +clasper +claspers +clasping +clasps +claspt class +classed +classer +classers +classes classic +classical +classicalities +classicality +classically +classicism +classicisms +classicist +classicistic +classicists +classicize +classicized +classicizes +classicizing +classico +classics +classier +classiest +classifiable +classification +classifications +classificatory +classified +classifier +classifiers +classifies classify +classifying +classily +classiness +classinesses +classing +classis +classism +classisms +classist +classists +classless +classlessness +classlessnesses classmate +classmates classroom +classrooms +classy +clast +clastic +clastics +clasts +clathrate +clathrates +clatter +clattered +clatterer +clatterers +clattering +clatteringly +clatters +clattery +claucht +claudication +claudications +claught +claughted +claughting +claughts +clausal +clause +clauses +claustra +claustral +claustrophobe +claustrophobes +claustrophobia +claustrophobias +claustrophobic +claustrophobically +claustrum +clavate +clave +claver +clavered +clavering +clavers +claves +clavi +clavichord +clavichordist +clavichordists +clavichords +clavicle +clavicles +clavicular +clavier +clavierist +clavieristic +clavierists +claviers +clavus claw +clawed +clawer +clawers +clawhammer +clawing +clawless +clawlike +claws +claxon +claxons clay +claybank +claybanks +clayed +clayey +clayier +clayiest +claying +clayish +claylike +claymore +claymores +claypan +claypans +clays +clayware +claywares clean +cleanabilities +cleanability +cleanable +cleaned cleaner +cleaners +cleanest +cleanhanded +cleaning +cleanlier +cleanliest +cleanliness +cleanlinesses +cleanly +cleanness +cleannesses +cleans +cleanse +cleansed +cleanser +cleansers +cleanses +cleansing +cleanup +cleanups clear +clearable +clearance +clearances +cleared +clearer +clearers +clearest +clearheaded +clearheadedly +clearheadedness +clearheadednesses +clearing +clearinghouse +clearinghouses +clearings +clearly +clearness +clearnesses +clears +clearstories +clearstory +clearwing +clearwings +cleat +cleated +cleating +cleats +cleavable +cleavage +cleavages +cleave +cleaved +cleaver +cleavers +cleaves +cleaving +cleek +cleeked +cleeking +cleeks +clef +clefs +cleft +clefted +clefting +clefts +cleidoic +cleistogamic +cleistogamies +cleistogamous +cleistogamously +cleistogamy +clematis +clematises +clemencies +clemency +clement +clemently +clench +clenched +clencher +clenchers +clenches +clenching +cleome +cleomes +clepe +cleped +clepes +cleping +clepsydra +clepsydrae +clepsydras +clept +clerestories +clerestory +clergies +clergy +clergyman +clergymen +clergywoman +clergywomen +cleric +clerical +clericalism +clericalisms +clericalist +clericalists +clerically +clericals +clerics +clerid +clerids +clerihew +clerihews +clerisies +clerisy clerk +clerkdom +clerkdoms +clerked +clerking +clerkish +clerklier +clerkliest +clerkly +clerks +clerkship +clerkships +cleveite +cleveites clever +cleverer +cleverest +cleverish +cleverly +cleverness +clevernesses +clevis +clevises +clew +clewed +clewing +clews +cliche +cliched +cliches click +clicked +clicker +clickers +clicking +clicks +client +clientage +clientages +cliental +clientele +clienteles +clientless +clients +cliff +cliffhanger +cliffhangers +cliffier +cliffiest +cliffs +cliffy +clift +clifts +climacteric +climacterics +climactic +climactically +climatal climate +climates +climatic +climatically +climatological +climatologically +climatologies +climatologist +climatologists +climatology +climax +climaxed +climaxes +climaxing +climaxless climb +climbable +climbed +climber +climbers +climbing +climbs +clime +climes +clinal +clinally +clinch +clinched +clincher +clinchers +clinches +clinching +clinchingly +cline +clines +cling +clinged +clinger +clingers +clingier +clingiest +clinging +clings +clingstone +clingstones +clingy clinic +clinical +clinically +clinician +clinicians +clinicopathologic +clinicopathological +clinicopathologically +clinics +clink +clinked +clinker +clinkered +clinkering +clinkers +clinking +clinks +clinometer +clinometers +clinquant +clinquants +clintonia +clintonias +cliometric +cliometrician +cliometricians +cliometrics +clip +clipboard +clipboards +clipped +clipper +clippers +clipping +clippings +clips +clipsheet +clipsheets +clipt +clique +cliqued +cliques +cliquey +cliquier +cliquiest +cliquing +cliquish +cliquishly +cliquishness +cliquishnesses +cliquy +clitella +clitellum +clitic +clitics +clitoral +clitorectomies +clitorectomy +clitoric +clitoridectomies +clitoridectomy +clitorides +clitoris +clitorises +clivers +clivia +clivias +cloaca +cloacae +cloacal +cloacas +cloak +cloaked +cloaking +cloakroom +cloakrooms +cloaks +clobber +clobbered +clobbering +clobbers +clochard +clochards +cloche +cloches clock +clocked +clocker +clockers +clocking +clocklike +clocks +clockwise +clockwork +clockworks +clod +cloddier +cloddiest +cloddish +cloddishness +cloddishnesses +cloddy +clodhopper +clodhoppers +clodhopping +clodpate +clodpates +clodpole +clodpoles +clodpoll +clodpolls +clods +clofibrate +clofibrates +clog +clogged +clogger +cloggers +cloggier +cloggiest +clogging +cloggy +clogs +cloisonne +cloisonnes +cloister +cloistered +cloistering +cloisters +cloistral +cloistress +cloistresses +clomb +clomiphene +clomiphenes +clomp +clomped +clomping +clomps +clon +clonal +clonally clone +cloned +cloner +cloners +clones +clonic +clonicities +clonicity +clonidine +clonidines +cloning +clonings +clonism +clonisms +clonk +clonked +clonking +clonks +clons +clonus +clonuses +cloot +cloots +clop +clopped +clopping +clops +cloque +cloques +closable close +closeable +closed +closedown +closedowns +closefisted +closely +closemouthed +closeness +closenesses +closeout +closeouts +closer +closers +closes +closest +closestool +closestools +closet +closeted +closetful +closetfuls +closeting +closets +closing +closings +clostridia +clostridial +clostridium +closure +closured +closures +closuring +clot cloth +clothbound +clothe +clothed clothes +clotheshorse +clotheshorses +clothesline +clotheslined +clotheslines +clotheslining +clothespin +clothespins +clothespress +clothespresses +clothier +clothiers clothing +clothings +cloths +clots +clotted +clotting +clotty +cloture +clotured +clotures +cloturing cloud +cloudberries +cloudberry +cloudburst +cloudbursts +clouded +cloudier +cloudiest +cloudily +cloudiness +cloudinesses +clouding +cloudland +cloudlands +cloudless +cloudlessly +cloudlessness +cloudlessnesses +cloudlet +cloudlets +clouds +cloudscape +cloudscapes cloudy +clough +cloughs +clour +cloured +clouring +clours +clout +clouted +clouter +clouters +clouting +clouts +clove +cloven +clover +cloverleaf +cloverleafs +cloverleaves +clovers +cloves +clowder +clowders +clown +clowned +clowneries +clownery +clowning +clownish +clownishly +clownishness +clownishnesses +clowns +cloxacillin +cloxacillins +cloy +cloyed +cloying +cloyingly +cloys +cloze +clozes club +clubable +clubbable +clubbed +clubber +clubbers +clubbier +clubbiest +clubbiness +clubbinesses +clubbing +clubbish +clubby +clubfeet +clubfoot +clubfooted +clubhand +clubhands +clubhaul +clubhauled +clubhauling +clubhauls +clubhouse +clubhouses +clubman +clubmen +clubroom +clubrooms +clubroot +clubroots +clubs +cluck +clucked +clucking +clucks +clue +clued +clueing +clueless +clues +cluing +clumber +clumbers +clump +clumped +clumpier +clumpiest +clumping +clumpish +clumps +clumpy +clumsier +clumsiest +clumsily +clumsiness +clumsinesses clumsy +clung +clunk +clunked +clunker +clunkers +clunkier +clunkiest +clunking +clunks +clunky +clupeid +clupeids +clupeoid +clupeoids +cluster +clustered +clustering +clusters +clustery +clutch +clutched +clutches +clutching +clutchy +clutter +cluttered +cluttering +clutters +cluttery +clypeal +clypeate +clypei +clypeus +clyster +clysters +cnidarian +cnidarians +coacervate +coacervates +coacervation +coacervations coach +coachable +coached +coacher +coachers +coaches +coaching +coachman +coachmen +coachwork +coachworks +coact +coacted +coacting +coaction +coactions +coactive +coactor +coactors +coacts +coadaptation +coadaptations +coadapted +coadjutor +coadjutors +coadjutrices +coadjutrix +coadministration +coadministrations +coadmire +coadmired +coadmires +coadmiring +coadmit +coadmits +coadmitted +coadmitting +coaeval +coaevals +coagencies +coagency +coagent +coagents +coagula +coagulabilities +coagulability +coagulable +coagulant +coagulants +coagulase +coagulases +coagulate +coagulated +coagulates +coagulating +coagulation +coagulations +coagulum +coagulums coal +coala +coalas +coalbin +coalbins +coalbox +coalboxes +coaled +coaler +coalers +coalesce +coalesced +coalescence +coalescences +coalescent +coalesces +coalescing +coalfield +coalfields +coalfish +coalfishes +coalhole +coalholes +coalier +coaliest +coalification +coalifications +coalified +coalifies +coalify +coalifying +coaling +coalition +coalitionist +coalitionists +coalitions +coalless +coalpit +coalpits +coals +coalsack +coalsacks +coalshed +coalsheds +coaly +coalyard +coalyards +coaming +coamings +coanchor +coanchored +coanchoring +coanchors +coannex +coannexed +coannexes +coannexing +coappear +coappeared +coappearing +coappears +coapt +coaptation +coaptations +coapted +coapting +coapts +coarctation +coarctations +coarse +coarsely +coarsen +coarsened +coarseness +coarsenesses +coarsening +coarsens +coarser +coarsest +coassist +coassisted +coassisting +coassists +coassume +coassumed +coassumes +coassuming coast +coastal +coasted +coaster +coasters +coastguard +coastguardman +coastguardmen +coastguards +coastguardsman +coastguardsmen +coasting +coastings +coastland +coastlands +coastline +coastlines +coasts +coastward +coastwards +coastwise coat +coatdress +coatdresses +coated +coatee +coatees +coater +coaters +coati +coatimundi +coatimundis +coating +coatings +coatis +coatless +coatrack +coatracks +coatroom +coatrooms +coats +coattail +coattails +coattend +coattended +coattending +coattends +coattest +coattested +coattesting +coattests +coauthor +coauthored +coauthoring +coauthors +coauthorship +coauthorships +coax +coaxal +coaxed +coaxer +coaxers +coaxes +coaxial +coaxially +coaxing +cob +cobalamin +cobalamins +cobalt +cobaltic +cobaltine +cobaltines +cobaltite +cobaltites +cobaltous +cobalts +cobb +cobber +cobbers +cobbier +cobbiest +cobble +cobbled +cobbler +cobblers +cobbles +cobblestone +cobblestoned +cobblestones +cobbling +cobbs +cobby +cobelligerent +cobelligerents +cobia +cobias +coble +cobles +cobnut +cobnuts +cobra +cobras +cobs +cobweb +cobwebbed +cobwebbier +cobwebbiest +cobwebbing +cobwebby +cobwebs +coca +cocain +cocaine +cocaines +cocainization +cocainizations +cocainize +cocainized +cocainizes +cocainizing +cocains +cocaptain +cocaptained +cocaptaining +cocaptains +cocarboxylase +cocarboxylases +cocarcinogen +cocarcinogenic +cocarcinogens +cocas +cocatalyst +cocatalysts +coccal +cocci +coccic +coccid +coccidia +coccidioidomycoses +coccidioidomycosis +coccidioses +coccidiosis +coccidium +coccids +coccoid +coccoids +coccous +coccus +coccygeal +coccyges +coccyx +coccyxes +cochair +cochaired +cochairing +cochairman +cochairmen +cochairperson +cochairpersons +cochairs +cochairwoman +cochairwomen +cochampion +cochampions +cochin +cochineal +cochineals +cochins +cochlea +cochleae +cochlear +cochleas +cocinera +cocineras +cock +cockade +cockaded +cockades +cockalorum +cockalorums +cockamamie +cockamamy +cockapoo +cockapoos +cockatiel +cockatiels +cockatoo +cockatoos +cockatrice +cockatrices +cockbill +cockbilled +cockbilling +cockbills +cockboat +cockboats +cockchafer +cockchafers +cockcrow +cockcrows +cocked +cocker +cockered +cockerel +cockerels +cockering +cockers +cockeye +cockeyed +cockeyedly +cockeyedness +cockeyednesses +cockeyes +cockfight +cockfighting +cockfightings +cockfights +cockhorse +cockhorses +cockier +cockiest +cockily +cockiness +cockinesses +cocking +cockish +cockle +cocklebur +cockleburs +cockled +cockles +cockleshell +cockleshells +cocklike +cockling +cockloft +cocklofts +cockney +cockneyfied +cockneyfies +cockneyfy +cockneyfying +cockneyish +cockneyism +cockneyisms +cockneys +cockpit +cockpits +cockroach +cockroaches +cocks +cockscomb +cockscombs +cocksfoot +cocksfoots +cockshies +cockshut +cockshuts +cockshy +cockspur +cockspurs +cocksucker +cocksuckers +cocksure +cocksurely +cocksureness +cocksurenesses +cocktail +cocktailed +cocktailing +cocktails +cockup +cockups +cocky +coco cocoa +cocoanut +cocoanuts +cocoas +cocobola +cocobolas +cocobolo +cocobolos +cocomat +cocomats +cocomposer +cocomposers +coconspirator +coconspirators +coconut +coconuts +cocoon +cocooned +cocooning +cocoonings +cocoons +cocos +cocotte +cocottes +cocounsel +cocounseled +cocounseling +cocounselled +cocounselling +cocounsels +cocoyam +cocoyams +cocreate +cocreated +cocreates +cocreating +cocreator +cocreators +cocultivate +cocultivated +cocultivates +cocultivating +cocultivation +cocultivations +coculture +cocultured +cocultures +coculturing +cocurator +cocurators +cocurricular +cod +coda +codable +codas +codded +codder +codders +codding +coddle +coddled +coddler +coddlers +coddles +coddling +code +codebook +codebooks +codebtor +codebtors +codec +codecs +coded +codefendant +codefendants +codeia +codeias +codein +codeina +codeinas +codeine +codeines +codeins +codeless +coden +codens +codependence +codependences +codependencies +codependency +codependent +codependents +coder +coderive +coderived +coderives +coderiving +coders +codes +codesign +codesigned +codesigning +codesigns +codetermination +codeterminations +codevelop +codeveloped +codeveloper +codevelopers +codeveloping +codevelops +codex +codfish +codfishes +codger +codgers +codices +codicil +codicillary +codicils +codicological +codicologies +codicology +codifiabilities +codifiability +codification +codifications +codified +codifier +codifiers +codifies +codify +codifying +coding +codirect +codirected +codirecting +codirection +codirections +codirector +codirectors +codirects +codiscover +codiscovered +codiscoverer +codiscoverers +codiscovering +codiscovers +codlin +codling +codlings +codlins +codominant +codominants +codon +codons +codpiece +codpieces +codrive +codriven +codriver +codrivers +codrives +codriving +codrove +cods +codswallop +codswallops +coed +coedit +coedited +coediting +coeditor +coeditors +coedits +coeds +coeducation +coeducational +coeducationally +coeducations +coeffect +coeffects +coefficient +coefficients +coelacanth +coelacanths +coelentera +coelenterate +coelenterates +coelenteron +coeliac +coelom +coelomata +coelomate +coelomates +coelome +coelomes +coelomic +coeloms +coembodied +coembodies +coembody +coembodying +coemploy +coemployed +coemploying +coemploys +coempt +coempted +coempting +coempts +coenact +coenacted +coenacting +coenacts +coenamor +coenamored +coenamoring +coenamors +coendure +coendured +coendures +coenduring +coenobite +coenobites +coenocyte +coenocytes +coenocytic +coenure +coenures +coenuri +coenurus +coenzymatic +coenzymatically +coenzyme +coenzymes +coequal +coequalities +coequality +coequally +coequals +coequate +coequated +coequates +coequating +coerce +coerced +coercer +coercers +coerces +coercible +coercing +coercion +coercions +coercive +coercively +coerciveness +coercivenesses +coercivities +coercivity +coerect +coerected +coerecting +coerects +coesite +coesites +coetaneous +coeternal +coeval +coevalities +coevality +coevally +coevals +coevolution +coevolutionary +coevolutions +coevolve +coevolved +coevolves +coevolving +coexecutor +coexecutors +coexert +coexerted +coexerting +coexerts +coexist +coexisted +coexistence +coexistences +coexistent +coexisting +coexists +coextend +coextended +coextending +coextends +coextensive +coextensively +cofactor +cofactors +cofavorite +cofavorites +cofeature +cofeatured +cofeatures +cofeaturing +coff coffee +coffeecake +coffeecakes +coffeehouse +coffeehouses +coffeemaker +coffeemakers +coffeepot +coffeepots +coffees +coffer +cofferdam +cofferdams +coffered +coffering +coffers +coffin +coffined +coffing +coffining +coffins +coffle +coffled +coffles +coffling +coffret +coffrets +coffs +cofinance +cofinanced +cofinances +cofinancing +cofound +cofounded +cofounder +cofounders +cofounding +cofounds +coft +cofunction +cofunctions +cog +cogencies +cogency +cogeneration +cogenerations +cogenerator +cogenerators +cogent +cogently +cogged +cogging +cogitable +cogitate +cogitated +cogitates +cogitating +cogitation +cogitations +cogitative +cogito +cogitos +cognac +cognacs +cognate +cognately +cognates +cognation +cognations +cognise +cognised +cognises +cognising +cognition +cognitional +cognitions +cognitive +cognitively +cognizable +cognizably +cognizance +cognizances +cognizant +cognize +cognized +cognizer +cognizers +cognizes +cognizing +cognomen +cognomens +cognomina +cognominal +cognoscente +cognoscenti +cognoscible +cognovit +cognovits +cogon +cogons +cogs +cogway +cogways +cogwheel +cogwheels +cohabit +cohabitant +cohabitants +cohabitation +cohabitations +cohabited +cohabiting +cohabits +cohead +coheaded +coheading +coheads +coheir +coheiress +coheiresses +coheirs +cohere +cohered +coherence +coherences +coherencies +coherency +coherent +coherently +coherer +coherers +coheres +cohering +cohesion +cohesionless +cohesions +cohesive +cohesively +cohesiveness +cohesivenesses +coho +cohobate +cohobated +cohobates +cohobating +cohog +cohogs +coholder +coholders +cohomological +cohomologies +cohomology +cohort +cohorts +cohos +cohosh +cohoshes +cohost +cohosted +cohostess +cohostessed +cohostesses +cohostessing +cohosting +cohosts +cohune +cohunes +coif +coifed +coiffe +coiffed +coiffes +coiffeur +coiffeurs +coiffeuse +coiffeuses +coiffing +coiffure +coiffured +coiffures +coiffuring +coifing +coifs +coign +coigne +coigned +coignes +coigning +coigns +coil +coilabilities +coilability +coiled +coiler +coilers +coiling +coils coin +coinable +coinage +coinages +coincide +coincided coincidence +coincidences +coincident +coincidental +coincidentally +coincidently +coincides +coinciding +coined +coiner +coiners +coinfer +coinferred +coinferring +coinfers +coinhere +coinhered +coinheres +coinhering +coining +coinmate +coinmates +coins +coinsurance +coinsurances +coinsure +coinsured +coinsurer +coinsurers +coinsures +coinsuring +cointer +cointerred +cointerring +cointers +coinvent +coinvented +coinventing +coinventor +coinventors +coinvents +coinvestigator +coinvestigators +coinvestor +coinvestors +coir +coirs +coistrel +coistrels +coistril +coistrils +coital +coitally +coition +coitional +coitions +coitus +coituses +cojoin +cojoined +cojoining +cojoins coke +coked +cokehead +cokeheads +cokes +coking +col +cola +colander +colanders +colas +colatitude +colatitudes +colcannon +colcannons +colchicine +colchicines +colchicum +colchicums cold +coldblood +coldcock +coldcocked +coldcocking +coldcocks +colder +coldest +coldhearted +coldheartedly +coldheartedness +coldheartednesses +coldish +coldly +coldness +coldnesses +colds +cole +colead +coleader +coleaders +coleading +coleads +coled +colemanite +colemanites +coleoptera +coleopteran +coleopterans +coleopterist +coleopterists +coleopterous +coleoptile +coleoptiles +coleorhiza +coleorhizae +coles +coleseed +coleseeds +coleslaw +coleslaws +colessee +colessees +colessor +colessors +coleus +coleuses +colewort +coleworts +colic +colicin +colicine +colicines +colicins +colicky +colicroot +colicroots +colics +colies +coliform +coliforms +colin +colinear +colinearities +colinearity +colins +coliphage +coliphages +coliseum +coliseums +colistin +colistins +colitic +colitis +colitises +collaborate +collaborated +collaborates +collaborating +collaboration +collaborationism +collaborationisms +collaborationist +collaborationists +collaborations +collaborative +collaboratively +collaboratives +collaborator +collaborators +collage +collaged +collagen +collagenase +collagenases +collagenous +collagens +collages +collaging +collagist +collagists +collapse +collapsed +collapses +collapsibilities +collapsibility +collapsible +collapsing collar +collarbone +collarbones +collard +collards +collared +collaret +collarets +collaring +collarless +collars +collate +collated +collateral +collateralities +collaterality +collateralize +collateralized +collateralizes +collateralizing +collaterally +collaterals +collates +collating +collation +collations +collator +collators colleague +colleagues +colleagueship +colleagueships collect +collectable +collectables +collectanea +collected +collectedly +collectedness +collectednesses +collectible +collectibles +collecting collection +collections +collective +collectively +collectives +collectivise +collectivised +collectivises +collectivising +collectivism +collectivisms +collectivist +collectivistic +collectivistically +collectivists +collectivities +collectivity +collectivization +collectivizations +collectivize +collectivized +collectivizes +collectivizing +collector +collectors +collectorship +collectorships +collects +colleen +colleens college +colleger +collegers +colleges +collegia +collegial +collegialities +collegiality +collegially +collegian +collegians +collegiate +collegiately +collegium +collegiums +collembolan +collembolans +collembolous +collenchyma +collenchymas +collenchymata +collenchymatous +collet +colleted +colleting +collets +collide +collided +collider +colliders +collides +colliding +collie +collied +collier +collieries +colliers +colliery +collies +collieshangie +collieshangies +colligate +colligated +colligates +colligating +colligation +colligations +colligative +collimate +collimated +collimates +collimating +collimation +collimations +collimator +collimators +collinear +collinearities +collinearity +collins +collinses collision +collisional +collisionally +collisions +collocate +collocated +collocates +collocating +collocation +collocational +collocations +collodion +collodions +collogue +collogued +collogues +colloguing +colloid +colloidal +colloidally +colloids +collop +collops +colloquia +colloquial +colloquialism +colloquialisms +colloquialities +colloquiality +colloquially +colloquials +colloquies +colloquist +colloquists +colloquium +colloquiums +colloquy +collotype +collotypes +collude +colluded +colluder +colluders +colludes +colluding +collusion +collusions +collusive +collusively +colluvia +colluvial +colluvium +colluviums +colly +collying +collyria +collyrium +collyriums +collywobbles +colobi +coloboma +colobomata +colobus +colocate +colocated +colocates +colocating +colocynth +colocynths +colog +cologarithm +cologarithms +cologne +cologned +colognes +cologs +colon +colone +colonel +colonelcies +colonelcy +colonels +colones +coloni +colonial +colonialism +colonialisms +colonialist +colonialistic +colonialists +colonialize +colonialized +colonializes +colonializing +colonially +colonialness +colonialnesses +colonials +colonic +colonics +colonies +colonisation +colonisations +colonise +colonised +colonises +colonising +colonist +colonists +colonization +colonizationist +colonizationists +colonizations +colonize +colonized +colonizer +colonizers +colonizes +colonizing +colonnade +colonnaded +colonnades +colons +colonus +colony +colophon +colophonies +colophons +colophony color +colorable +colorably +colorado +colorant +colorants +coloration +colorations +coloratura +coloraturas +colorblind +colorblindness +colorblindnesses +colorbred +colorectal +colored +coloreds +colorer +colorers +colorfast +colorfastness +colorfastnesses +colorful +colorfully +colorfulness +colorfulnesses +colorific +colorimeter +colorimeters +colorimetric +colorimetrically +colorimetries +colorimetry +coloring +colorings +colorism +colorisms +colorist +coloristic +coloristically +colorists +colorization +colorizations +colorize +colorized +colorizes +colorizing +colorless +colorlessly +colorlessness +colorlessnesses +colorman +colormen +colorpoint +colorpoints +colors +colossal +colossally +colosseum +colosseums +colossi +colossus +colossuses +colostomies +colostomy +colostral +colostrum +colostrums +colotomies +colotomy colour +coloured +colourer +colourers +colouring +colours +colpitis +colpitises +colportage +colportages +colporteur +colporteurs +cols +colt +colter +colters +coltish +coltishly +coltishness +coltishnesses +colts +coltsfoot +coltsfoots +colubrid +colubrids +colubrine +colugo +colugos +columbaria +columbarium +columbic +columbine +columbines +columbite +columbites +columbium +columbiums +columel +columella +columellae +columellar +columels +column +columnal +columnar +columned +columniation +columniations +columnist +columnistic +columnists +columns +colure +colures +coly +colza +colzas +coma +comade +comae +comake +comaker +comakers +comakes +comaking +comal +comanage +comanaged +comanagement +comanagements +comanager +comanagers +comanages +comanaging +comas +comate +comates +comatic +comatik +comatiks +comatose +comatula +comatulae comb +combat +combatant +combatants +combated +combater +combaters +combating +combative +combatively +combativeness +combativenesses +combats +combatted +combatting +combe +combed +comber +combers +combes +combinable +combination +combinational +combinations +combinative +combinatorial +combinatorially +combinatorics +combinatory combine +combined +combiner +combiners +combines +combing +combings +combining +comblike +combo +combos +combs +combust +combusted +combustibilities +combustibility +combustible +combustibles +combustibly +combusting +combustion +combustions +combustive +combustor +combustors +combusts come +comeback +comebacks +comedian +comedians +comedic +comedically +comedienne +comediennes +comedies +comedo +comedones +comedos +comedown +comedowns comedy +comelier +comeliest +comelily +comeliness +comelinesses +comely +comember +comembers +comer +comers +comes +comestible +comestibles +comet +cometary +cometh +comether +comethers +cometic +comets +comeuppance +comeuppances +comfier +comfiest +comfit +comfits comfort comfortable +comfortableness +comfortablenesses +comfortably +comforted +comforter +comforters +comforting +comfortingly +comfortless +comforts +comfrey +comfreys +comfy +comic +comical +comicalities +comicality +comically +comics +coming +comingle +comingled +comingles +comingling +comings +comitia +comitial +comities +comity +comix +comma command +commandable +commandant +commandants +commanded +commandeer +commandeered +commandeering +commandeers +commander +commanderies +commanders +commandership +commanderships +commandery +commanding +commandingly +commandment +commandments +commando +commandoes +commandos +commands +commas +commata +commemorate +commemorated +commemorates +commemorating +commemoration +commemorations +commemorative +commemoratively +commemoratives +commemorator +commemorators +commence +commenced +commencement +commencements +commencer +commencers +commences +commencing +commend +commendable +commendably +commendation +commendations +commendatory +commended +commender +commenders +commending +commends +commensal +commensalism +commensalisms +commensally +commensals +commensurabilities +commensurability +commensurable +commensurably +commensurate +commensurately +commensuration +commensurations comment +commentaries +commentary +commentate +commentated +commentates +commentating +commentator +commentators +commented +commenting +comments +commerce +commerced +commerces commercial +commercialise +commercialised +commercialises +commercialising +commercialism +commercialisms +commercialist +commercialistic +commercialists +commercialities +commerciality +commercialization +commercializations +commercialize +commercialized +commercializes +commercializing +commercially +commercials +commercing +commie +commies +commination +comminations +comminatory +commingle +commingled +commingles +commingling +comminute +comminuted +comminutes +comminuting +comminution +comminutions +commiserate +commiserated +commiserates +commiserating +commiseratingly +commiseration +commiserations +commiserative +commissar +commissarial +commissariat +commissariats +commissaries +commissars +commissary +commission +commissionaire +commissionaires +commissioned +commissioner +commissioners +commissionership +commissionerships +commissioning +commissions +commissural +commissure +commissures commit commitment +commitments +commits +committable +committal +committals +committed committee +committeeman +committeemen +committees +committeewoman +committeewomen +committing +commix +commixed +commixes +commixing +commixt +commixture +commixtures +commode +commodes +commodification +commodifications +commodified +commodifies +commodify +commodifying +commodious +commodiously +commodiousness +commodiousnesses +commodities +commodity +commodore +commodores common +commonage +commonages +commonalities +commonality +commonalties +commonalty +commoner +commoners +commonest +commonly +commonness +commonnesses +commonplace +commonplaceness +commonplacenesses +commonplaces +commons +commonsense +commonsensible +commonsensical +commonsensically +commonweal +commonweals +commonwealth +commonwealths +commotion +commotions +commove +commoved +commoves +commoving +communal +communalism +communalisms +communalist +communalists +communalities +communality +communalize +communalized +communalizes +communalizing +communally +communard +communards +commune +communed +communes +communicabilities +communicability +communicable +communicableness +communicablenesses +communicably +communicant +communicants communicate +communicated +communicatee +communicatees +communicates +communicating communication +communicational +communications +communicative +communicatively +communicativeness +communicativenesses +communicator +communicators +communicatory +communing +communion +communions +communique +communiques +communise +communised +communises +communising communism +communisms communist +communistic +communistically +communists +communitarian +communitarianism +communitarianisms +communitarians +communities +community +communization +communizations +communize +communized +communizes +communizing +commutable +commutate +commutated +commutates +commutating +commutation +commutations +commutative +commutativities +commutativity +commutator +commutators +commute +commuted +commuter +commuters +commutes +commuting +commy +comonomer +comonomers +comose +comous +comp +compact +compacted +compacter +compacters +compactest +compactible +compacting +compaction +compactions +compactly +compactness +compactnesses +compactor +compactors +compacts +compadre +compadres +companied +companies companion +companionabilities +companionability +companionable +companionableness +companionablenesses +companionably +companionate +companioned +companioning +companions +companionship +companionships +companionway +companionways company +companying +comparabilities +comparability +comparable +comparableness +comparablenesses +comparably +comparatist +comparatists +comparative +comparatively +comparativeness +comparativenesses +comparatives +comparativist +comparativists +comparator +comparators compare +compared +comparer +comparers +compares +comparing +comparison +comparisons +compart +comparted +comparting +compartment +compartmental +compartmentalise +compartmentalised +compartmentalises +compartmentalising +compartmentalization +compartmentalizations +compartmentalize +compartmentalized +compartmentalizes +compartmentalizing +compartmentation +compartmentations +compartmented +compartmenting +compartments +comparts compass +compassable +compassed +compasses +compassing +compassion +compassionate +compassionated +compassionately +compassionateness +compassionatenesses +compassionates +compassionating +compassionless +compassions +compatibilities +compatibility +compatible +compatibleness +compatiblenesses +compatibles +compatibly +compatriot +compatriotic +compatriots +comped +compeer +compeered +compeering +compeers +compel +compellable +compellation +compellations +compelled +compelling +compellingly +compels +compend +compendia +compendious +compendiously +compendiousness +compendiousnesses +compendium +compendiums +compends +compensabilities +compensability +compensable compensate +compensated +compensates +compensating +compensation +compensational +compensations +compensative +compensator +compensators +compensatory +compere +compered +comperes +compering compete +competed competence +competences +competencies +competency +competent +competently +competes +competing competition +competitions +competitive +competitively +competitiveness +competitivenesses +competitor +competitors +compilation +compilations +compile +compiled +compiler +compilers +compiles +compiling +comping +complacence +complacences +complacencies +complacency +complacent +complacently +complain +complainant +complainants +complained +complainer +complainers +complaining +complainingly +complains +complaint +complaints +complaisance +complaisances +complaisant +complaisantly +compleat +complect +complected +complecting +complects +complement +complemental +complementaries +complementarily +complementariness +complementarinesses +complementarities +complementarity +complementary +complementation +complementations +complemented +complementing +complementizer +complementizers +complements complete +completed +completely +completeness +completenesses +completer +completes +completest +completing +completion +completions +completist +completists +completive complex +complexation +complexations +complexed +complexer +complexes +complexest +complexified +complexifies +complexify +complexifying +complexing +complexion +complexional +complexioned +complexions +complexities +complexity +complexly +complexness +complexnesses +compliance +compliances +compliancies +compliancy +compliant +compliantly +complicacies +complicacy +complicate +complicated +complicatedly +complicatedness +complicatednesses +complicates +complicating +complication +complications +complice +complices +complicit +complicities +complicitous +complicity +complied +complier +compliers +complies +compliment +complimentarily +complimentary +complimented +complimenting +compliments +complin +compline +complines +complins +complot +complots +complotted +complotting +comply +complying +compo +compone component +componential +components +compony +comport +comported +comporting +comportment +comportments +comports +compos +compose +composed +composedly +composedness +composednesses +composer +composers +composes +composing +composite +composited +compositely +composites +compositing composition +compositional +compositionally +compositions +compositor +compositors +compost +composted +composting +composts +composure +composures +compote +compotes +compound +compoundable +compounded +compounder +compounders +compounding +compounds +comprador +compradore +compradores +compradors +comprehend +comprehended +comprehendible +comprehending +comprehends +comprehensibilities +comprehensibility +comprehensible +comprehensibleness +comprehensiblenesses +comprehensibly comprehension +comprehensions +comprehensive +comprehensively +comprehensiveness +comprehensivenesses +compress +compressed +compressedly +compresses +compressibilities +compressibility +compressible +compressing +compression +compressional +compressions +compressive +compressively +compressor +compressors +comprise +comprised +comprises +comprising +comprize +comprized +comprizes +comprizing compromise +compromised +compromiser +compromisers +compromises +compromising +comps +compt +compted +compting +comptroller +comptrollers +comptrollership +comptrollerships +compts +compulsion +compulsions +compulsive +compulsively +compulsiveness +compulsivenesses +compulsivities +compulsivity +compulsorily compulsory +compunction +compunctions +compunctious +compurgation +compurgations +compurgator +compurgators +computabilities +computability +computable +computation +computational +computationally +computations +compute +computed computer +computerdom +computerdoms +computerese +computereses +computerise +computerised +computerises +computerising +computerist +computerists +computerizable +computerization +computerizations +computerize +computerized +computerizes +computerizing +computerless +computerlike +computernik +computerniks +computerphobe +computerphobes +computerphobia +computerphobias +computerphobic +computers +computes +computing +comrade +comradeliness +comradelinesses +comradely +comraderies +comradery +comrades +comradeship +comradeships +comsymp +comsymps +comte +comtes +con +conation +conations +conative +conatus +concanavalin +concanavalins +concatenate +concatenated +concatenates +concatenating +concatenation +concatenations +concave +concaved +concaves +concaving +concavities +concavity +conceal +concealable +concealed +concealer +concealers +concealing +concealingly +concealment +concealments +conceals +concede +conceded +concededly +conceder +conceders +concedes +conceding +conceit +conceited +conceitedly +conceitedness +conceitednesses +conceiting +conceits +conceivabilities +conceivability +conceivable +conceivableness +conceivablenesses +conceivably +conceive +conceived +conceiver +conceivers +conceives +conceiving +concelebrant +concelebrants +concelebrate +concelebrated +concelebrates +concelebrating +concelebration +concelebrations +concent +concenter +concentered +concentering +concenters concentrate +concentrated +concentratedly +concentrates +concentrating +concentration +concentrations +concentrative +concentrator +concentrators +concentric +concentrically +concentricities +concentricity +concents concept +conceptacle +conceptacles +conception +conceptional +conceptions +conceptive +concepts +conceptual +conceptualise +conceptualised +conceptualises +conceptualising +conceptualism +conceptualisms +conceptualist +conceptualistic +conceptualistically +conceptualists +conceptualities +conceptuality +conceptualization +conceptualizations +conceptualize +conceptualized +conceptualizer +conceptualizers +conceptualizes +conceptualizing +conceptually +conceptus +conceptuses concern +concerned +concerning +concernment +concernments +concerns concert +concerted +concertedly +concertedness +concertednesses +concertgoer +concertgoers +concertgoing +concertgoings +concerti +concertina +concertinas +concerting +concertino +concertinos +concertize +concertized +concertizes +concertizing +concertmaster +concertmasters +concertmeister +concertmeisters +concerto +concertos +concerts +concession +concessionaire +concessionaires +concessional +concessionary +concessioner +concessioners +concessions +concessive +concessively +conch +concha +conchae +conchal +conches +conchie +conchies +conchoid +conchoidal +conchoidally +conchoids +conchologies +conchologist +conchologists +conchology +conchs +conchy +concierge +concierges +conciliar +conciliarly +conciliate +conciliated +conciliates +conciliating +conciliation +conciliations +conciliative +conciliator +conciliators +conciliatory +concinnities +concinnity +concise +concisely +conciseness +concisenesses +conciser +concisest +concision +concisions +conclave +conclaves conclude +concluded +concluder +concluders +concludes +concluding conclusion +conclusionary +conclusions +conclusive +conclusively +conclusiveness +conclusivenesses +conclusory +concoct +concocted +concocter +concocters +concocting +concoction +concoctions +concoctive +concocts +concomitance +concomitances +concomitant +concomitantly +concomitants +concord +concordance +concordances +concordant +concordantly +concordat +concordats +concords +concourse +concourses +concrescence +concrescences +concrescent concrete +concreted +concretely +concreteness +concretenesses +concretes +concreting +concretion +concretionary +concretions +concretism +concretisms +concretist +concretists +concretization +concretizations +concretize +concretized +concretizes +concretizing +concubinage +concubinages +concubine +concubines +concupiscence +concupiscences +concupiscent +concupiscible +concur +concurred +concurrence +concurrences +concurrencies +concurrency +concurrent +concurrently +concurrents +concurring +concurs +concuss +concussed +concusses +concussing +concussion +concussions +concussive condemn +condemnable +condemnation +condemnations +condemnatory +condemned +condemner +condemners +condemning +condemnor +condemnors +condemns +condensable +condensate +condensates +condensation +condensational +condensations +condense +condensed +condenser +condensers +condenses +condensible +condensing +condescend +condescended +condescendence +condescendences +condescending +condescendingly +condescends +condescension +condescensions +condign +condignly +condiment +condimental +condiments condition +conditionable +conditional +conditionalities +conditionality +conditionally +conditionals +conditioned +conditioner +conditioners +conditioning +conditions +condo +condoes +condolatory +condole +condoled +condolence +condolences +condoler +condolers +condoles +condoling +condom +condominium +condominiums +condoms +condonable +condonation +condonations +condone +condoned +condoner +condoners +condones +condoning +condor +condores +condors +condos +condottiere +condottieri +conduce +conduced +conducer +conducers +conduces +conducing +conducive +conduciveness +conducivenesses conduct +conductance +conductances +conducted +conductibilities +conductibility +conductible +conductimetric +conducting +conduction +conductions +conductive +conductivities +conductivity +conductometric conductor +conductorial +conductors +conductress +conductresses +conducts +conduit +conduits +conduplicate +condylar +condyle +condyles +condyloid +condyloma +condylomas +condylomata +condylomatous +cone +coned +coneflower +coneflowers +conelrad +conelrads +conenose +conenoses +conepate +conepates +conepatl +conepatls +cones +coney +coneys +confab +confabbed +confabbing +confabs +confabulate +confabulated +confabulates +confabulating +confabulation +confabulations +confabulator +confabulators +confabulatory +confect +confected +confecting +confection +confectionaries +confectionary +confectioner +confectioneries +confectioners +confectionery +confections +confects +confederacies +confederacy +confederal +confederate +confederated +confederates +confederating +confederation +confederations +confederative +confer +conferee +conferees conference +conferences +conferencing +conferencings +conferential +conferment +conferments +conferrable +conferral +conferrals +conferred +conferrence +conferrences +conferrer +conferrers +conferring +confers +conferva +confervae +confervas +confess +confessable +confessed +confessedly +confesses +confessing +confession +confessional +confessionalism +confessionalisms +confessionalist +confessionalists +confessionally +confessionals +confessions +confessor +confessors +confetti +confetto +confidant +confidante +confidantes +confidants +confide +confided +confidence +confidences confident confidential +confidentialities +confidentiality +confidentially +confidently +confider +confiders +confides +confiding +confidingly +confidingness +confidingnesses +configuration +configurational +configurationally +configurations +configurative +configure +configured +configures +configuring +confine +confined +confinement +confinements +confiner +confiners +confines +confining confirm +confirmabilities +confirmability +confirmable +confirmand +confirmands +confirmation +confirmational +confirmations +confirmatory +confirmed +confirmedly +confirmedness +confirmednesses +confirming +confirms +confiscable +confiscatable +confiscate +confiscated +confiscates +confiscating +confiscation +confiscations +confiscator +confiscators +confiscatory +confit +confiteor +confiteors +confits +confiture +confitures +conflagrant +conflagration +conflagrations +conflate +conflated +conflates +conflating +conflation +conflations conflict +conflicted +conflictful +conflicting +conflictingly +confliction +conflictions +conflictive +conflicts +conflictual +confluence +confluences +confluent +confluents +conflux +confluxes +confocal +confocally +conform +conformable +conformably +conformal +conformance +conformances +conformation +conformational +conformations +conformed +conformer +conformers +conforming +conformism +conformisms +conformist +conformists +conformities +conformity +conforms +confound +confounded +confoundedly +confounder +confounders +confounding +confoundingly +confounds +confraternities +confraternity +confrere +confreres +confront +confrontal +confrontals +confrontation +confrontational +confrontationist +confrontationists +confrontations +confronted +confronter +confronters +confronting +confronts confuse +confused +confusedly +confusedness +confusednesses +confuses +confusing +confusingly +confusion +confusional +confusions +confutation +confutations +confutative +confute +confuted +confuter +confuters +confutes +confuting +conga +congaed +congaing +congas +conge +congeal +congealed +congealing +congealment +congealments +congeals +congee +congeed +congeeing +congees +congelation +congelations +congener +congeneric +congenerous +congeners +congenial +congenialities +congeniality +congenially +congenital +congenitally +conger +congeries +congers +conges +congest +congested +congesting +congestion +congestions +congestive +congests +congii +congius +conglobate +conglobated +conglobates +conglobating +conglobation +conglobations +conglobe +conglobed +conglobes +conglobing +conglomerate +conglomerated +conglomerates +conglomerateur +conglomerateurs +conglomeratic +conglomerating +conglomeration +conglomerations +conglomerative +conglomerator +conglomerators +conglutinate +conglutinated +conglutinates +conglutinating +conglutination +conglutinations +congo +congoes +congos +congou +congous +congrats congratulate +congratulated +congratulates +congratulating congratulation +congratulations +congratulator +congratulators +congratulatory +congregant +congregants +congregate +congregated +congregates +congregating +congregation +congregational +congregationalism +congregationalisms +congregationalist +congregationalists +congregations +congregator +congregators +congress +congressed +congresses +congressing +congressional +congressionally +congressman +congressmen +congresspeople +congressperson +congresspersons +congresswoman +congresswomen +congruence +congruences +congruencies +congruency +congruent +congruently +congruities +congruity +congruous +congruously +congruousness +congruousnesses +coni +conic +conical +conically +conicities +conicity +conics +conidia +conidial +conidian +conidiophore +conidiophores +conidium +conies +conifer +coniferous +conifers +coniine +coniines +conin +conine +conines +coning +conins +conioses +coniosis +conium +coniums +conjectural +conjecturally +conjecture +conjectured +conjecturer +conjecturers +conjectures +conjecturing +conjoin +conjoined +conjoining +conjoins +conjoint +conjointly +conjugal +conjugalities +conjugality +conjugally +conjugant +conjugants +conjugate +conjugated +conjugately +conjugateness +conjugatenesses +conjugates +conjugating +conjugation +conjugational +conjugationally +conjugations +conjunct +conjunction +conjunctional +conjunctionally +conjunctions +conjunctiva +conjunctivae +conjunctival +conjunctivas +conjunctive +conjunctively +conjunctives +conjunctivites +conjunctivitides +conjunctivitis +conjunctivitises +conjuncts +conjuncture +conjunctures +conjuration +conjurations +conjure +conjured +conjurer +conjurers +conjures +conjuring +conjuror +conjurors +conk +conked +conker +conkers +conking +conks +conky +conn +connate +connately +connatural +connaturalities +connaturality +connaturally connect +connectable +connected +connectedly +connectedness +connectednesses +connecter +connecters +connectible +connecting connection +connectional +connections +connective +connectively +connectives +connectivities +connectivity +connector +connectors +connects +conned +conner +conners +connexion +connexions +conning +conniption +conniptions +connivance +connivances +connive +connived +connivent +conniver +connivers +connives +conniving +connoisseur +connoisseurs +connoisseurship +connoisseurships +connotation +connotational +connotations +connotative +connotatively +connote +connoted +connotes +connoting +conns +connubial +connubialism +connubialisms +connubialities +connubiality +connubially +conodont +conodonts +conoid +conoidal +conoids +conominee +conominees +conquer +conquered +conquering +conqueror +conquerors +conquers +conquest +conquests +conquian +conquians +conquistador +conquistadores +conquistadors +cons +consanguine +consanguineous +consanguineously +consanguinities +consanguinity conscience +conscienceless +consciences +conscientious +conscientiously +conscientiousness +conscientiousnesses +conscionable +conscious +consciouses +consciously +consciousness +consciousnesses +conscribe +conscribed +conscribes +conscribing +conscript +conscripted +conscripting +conscription +conscriptions +conscripts +consecrate +consecrated +consecrates +consecrating +consecration +consecrations +consecrative +consecrator +consecrators +consecratory +consecution +consecutions +consecutive +consecutively +consecutiveness +consecutivenesses +consensual +consensually consensus +consensuses +consent +consentaneous +consentaneously +consented +consenter +consenters +consenting +consentingly +consents consequence +consequences +consequent +consequential +consequentialities +consequentiality +consequentially +consequentialness +consequentialnesses +consequently +consequents +conservancies +conservancy conservation +conservational +conservationist +conservationists +conservations +conservatism +conservatisms conservative +conservatively +conservativeness +conservativenesses +conservatives +conservatize +conservatized +conservatizes +conservatizing +conservatoire +conservatoires +conservator +conservatorial +conservatories +conservators +conservatorship +conservatorships +conservatory +conserve +conserved +conserver +conservers +conserves +conserving consider +considerable +considerables +considerably considerate +considerately +considerateness +consideratenesses consideration +considerations +considered +considering +considers +consigliere +consiglieri +consign +consignable +consignation +consignations +consigned +consignee +consignees +consigning +consignment +consignments +consignor +consignors +consigns consist +consisted +consistence +consistences +consistencies +consistency consistent +consistently +consisting +consistorial +consistories +consistory +consists +consociate +consociated +consociates +consociating +consociation +consociational +consociations +consol +consolation +consolations +consolatory +console +consoled +consoler +consolers +consoles +consolidate +consolidated +consolidates +consolidating +consolidation +consolidations +consolidator +consolidators +consoling +consolingly +consols +consomme +consommes +consonance +consonances +consonancies +consonancy +consonant +consonantal +consonantly +consonants +consort +consorted +consortia +consorting +consortium +consortiums +consorts +conspecific +conspecifics +conspectus +conspectuses +conspicuities +conspicuity +conspicuous +conspicuously +conspicuousness +conspicuousnesses +conspiracies +conspiracy +conspiration +conspirational +conspirations +conspirator +conspiratorial +conspiratorially +conspirators +conspire +conspired +conspires +conspiring +constable +constables +constabularies +constabulary +constancies +constancy constant +constantan +constantans +constantly +constants +constative +constatives +constellate +constellated +constellates +constellating +constellation +constellations +constellatory +consternate +consternated +consternates +consternating +consternation +consternations +constipate +constipated +constipates +constipating +constipation +constipations +constituencies +constituency +constituent +constituently +constituents +constitute +constituted +constitutes +constituting constitution +constitutional +constitutionalism +constitutionalisms +constitutionalist +constitutionalists +constitutionalities +constitutionality +constitutionalization +constitutionalizations +constitutionalize +constitutionalized +constitutionalizes +constitutionalizing +constitutionally +constitutionals +constitutionless +constitutions +constitutive +constitutively +constrain +constrained +constrainedly +constraining +constrains +constraint +constraints +constrict +constricted +constricting +constriction +constrictions +constrictive +constrictor +constrictors +constricts +constringe +constringed +constringent +constringes +constringing +construable construct +constructed +constructible +constructing construction +constructional +constructionally +constructionist +constructionists +constructions +constructive +constructively +constructiveness +constructivenesses +constructivism +constructivisms +constructivist +constructivists +constructor +constructors +constructs +construe +construed +construes +construing +consubstantial +consubstantiation +consubstantiations +consuetude +consuetudes +consuetudinary +consul +consular +consulate +consulates +consuls +consulship +consulships consult +consultancies +consultancy consultant +consultants +consultantship +consultantships +consultation +consultations +consultative +consulted +consulter +consulters +consulting +consultive +consultor +consultors +consults +consumable +consumables consume +consumed +consumedly +consumer +consumerism +consumerisms +consumerist +consumeristic +consumerists +consumers +consumership +consumerships +consumes +consuming +consummate +consummated +consummately +consummates +consummating +consummation +consummations +consummative +consummator +consummators +consummatory +consumption +consumptions +consumptive +consumptively +consumptives +contact +contacted +contacting +contacts +contagia +contagion +contagions +contagious +contagiously +contagiousness +contagiousnesses +contagium contain +containable +contained container +containerboard +containerboards +containerisation +containerisations +containerise +containerised +containerises +containerising +containerization +containerizations +containerize +containerized +containerizes +containerizing +containerless +containerport +containerports +containers +containership +containerships +containing +containment +containments +contains +contaminant +contaminants +contaminate +contaminated +contaminates +contaminating +contamination +contaminations +contaminative +contaminator +contaminators +conte +contemn +contemned +contemner +contemners +contemning +contemnor +contemnors +contemns +contemplate +contemplated +contemplates +contemplating +contemplation +contemplations +contemplative +contemplatively +contemplativeness +contemplativenesses +contemplatives +contemplator +contemplators +contemporaneities +contemporaneity +contemporaneous +contemporaneously +contemporaneousness +contemporaneousnesses +contemporaries +contemporarily contemporary +contemporize +contemporized +contemporizes +contemporizing +contempt +contemptibilities +contemptibility +contemptible +contemptibleness +contemptiblenesses +contemptibly +contempts +contemptuous +contemptuously +contemptuousness +contemptuousnesses +contend +contended +contender +contenders +contending +contends content +contented +contentedly +contentedness +contentednesses +contenting +contention +contentions +contentious +contentiously +contentiousness +contentiousnesses +contentment +contentments +contents +conterminous +conterminously +contes +contest +contestable +contestant +contestants +contestation +contestations +contested +contester +contesters +contesting +contests +context +contextless +contexts +contextual +contextualize +contextualized +contextualizes +contextualizing +contextually +contexture +contextures +contiguities +contiguity +contiguous +contiguously +contiguousness +contiguousnesses +continence +continences continent +continental +continentally +continentals +continently +continents +contingence +contingences +contingencies +contingency +contingent +contingently +contingents +continua +continual +continually +continuance +continuances +continuant +continuants +continuate +continuation +continuations +continuative +continuator +continuators continue +continued +continuer +continuers +continues +continuing +continuingly +continuities +continuity +continuo +continuos +continuous +continuously +continuousness +continuousnesses +continuum +continuums +conto +contort +contorted +contorting +contortion +contortionist +contortionistic +contortionists +contortions +contortive +contorts +contos +contour +contoured +contouring +contours +contra +contraband +contrabandist +contrabandists +contrabands +contrabass +contrabasses +contrabassist +contrabassists +contrabassoon +contrabassoons +contraception +contraceptions +contraceptive +contraceptives +contract +contracted +contractibilities +contractibility +contractible +contractile +contractilities +contractility +contracting +contraction +contractional +contractionary +contractions +contractive +contractor +contractors +contracts +contractual +contractually +contracture +contractures contradict +contradictable +contradicted +contradicting +contradiction +contradictions +contradictious +contradictor +contradictories +contradictorily +contradictoriness +contradictorinesses +contradictors contradictory +contradicts +contradistinction +contradistinctions +contradistinctive +contradistinctively +contradistinguish +contradistinguished +contradistinguishes +contradistinguishing +contrail +contrails +contraindicate +contraindicated +contraindicates +contraindicating +contraindication +contraindications +contralateral +contralto +contraltos +contraoctave +contraoctaves +contraposition +contrapositions +contrapositive +contrapositives +contraption +contraptions +contrapuntal +contrapuntally +contrapuntist +contrapuntists +contrarian +contrarians +contraries +contrarieties +contrariety +contrarily +contrariness +contrarinesses +contrarious +contrariwise contrary +contras +contrast +contrastable +contrasted +contrasting +contrastive +contrastively +contrasts +contrasty +contravene +contravened +contravener +contraveners +contravenes +contravening +contravention +contraventions +contredanse +contredanses +contretemps contribute +contributed +contributes +contributing contribution +contributions +contributive +contributively +contributor +contributors +contributory +contrite +contritely +contriteness +contritenesses +contrition +contritions +contrivance +contrivances +contrive +contrived +contriver +contrivers +contrives +contriving control +controllabilities +controllability +controllable +controlled +controller +controllers +controllership +controllerships +controlling +controlment +controlments +controls controversial +controversialism +controversialisms +controversialist +controversialists +controversially +controversies +controversy +controvert +controverted +controverter +controverters +controvertible +controverting +controverts +contumacies +contumacious +contumaciously +contumacy +contumelies +contumelious +contumeliously +contumely +contuse +contused +contuses +contusing +contusion +contusions +conundrum +conundrums +conurbation +conurbations +conus +convalesce +convalesced +convalescence +convalescences +convalescent +convalescents +convalesces +convalescing +convect +convected +convecting +convection +convectional +convections +convective +convector +convectors +convects +convene +convened +convener +conveners +convenes convenience +conveniences +conveniencies +conveniency convenient +conveniently +convening +convenor +convenors +convent +convented +conventicle +conventicler +conventiclers +conventicles +conventing +convention conventional +conventionalism +conventionalisms +conventionalist +conventionalists +conventionalities +conventionality +conventionalization +conventionalizations +conventionalize +conventionalized +conventionalizes +conventionalizing +conventionally +conventioneer +conventioneers +conventions +convents +conventual +conventually +conventuals +converge +converged +convergence +convergences +convergencies +convergency +convergent +converges +converging +conversable +conversance +conversances +conversancies +conversancy +conversant conversation +conversational +conversationalist +conversationalists +conversationally +conversations +conversazione +conversaziones +conversazioni +converse +conversed +conversely +converser +conversers +converses +conversing +conversion +conversional +conversions +convert +convertaplane +convertaplanes +converted +converter +converters +convertibilities +convertibility +convertible +convertibleness +convertiblenesses +convertibles +convertibly +converting +convertiplane +convertiplanes +convertor +convertors +converts +convex +convexes +convexities +convexity +convexly convey +conveyance +conveyancer +conveyancers +conveyances +conveyancing +conveyancings +conveyed +conveyer +conveyers +conveying +conveyor +conveyorise +conveyorised +conveyorises +conveyorising +conveyorization +conveyorizations +conveyorize +conveyorized +conveyorizes +conveyorizing +conveyors +conveys +convict +convicted +convicting +conviction +convictions +convicts convince +convinced +convincer +convincers +convinces +convincing +convincingly +convincingness +convincingnesses +convivial +convivialities +conviviality +convivially +convocation +convocational +convocations +convoke +convoked +convoker +convokers +convokes +convoking +convolute +convoluted +convolutes +convoluting +convolution +convolutions +convolve +convolved +convolves +convolving +convolvuli +convolvulus +convolvuluses +convoy +convoyed +convoying +convoys +convulsant +convulsants +convulse +convulsed +convulses +convulsing +convulsion +convulsionary +convulsions +convulsive +convulsively +convulsiveness +convulsivenesses +cony +coo +cooch +cooches +coocoo +cooed +cooee +cooeed +cooeeing +cooees +cooer +cooers +cooey +cooeyed +cooeying +cooeys +coof +coofs +cooing +cooingly cook +cookable +cookbook +cookbooks +cooked cooker +cookeries +cookers +cookery +cookey +cookeys +cookhouse +cookhouses cookie +cookies +cooking +cookings +cookless +cookout +cookouts +cooks +cookshack +cookshacks +cookshop +cookshops +cookstove +cookstoves +cooktop +cooktops +cookware +cookwares +cooky cool +coolant +coolants +cooldown +cooldowns +cooled +cooler +coolers +coolest +coolheaded +coolie +coolies +cooling +coolish +coolly +coolness +coolnesses +cools +coolth +coolths +cooly +coomb +coombe +coombes +coombs +coon +cooncan +cooncans +coonhound +coonhounds +coons +coonskin +coonskins +coontie +coonties +coop +cooped +cooper +cooperage +cooperages +cooperate +cooperated +cooperates +cooperating +cooperation +cooperationist +cooperationists +cooperations +cooperative +cooperatively +cooperativeness +cooperativenesses +cooperatives +cooperator +cooperators +coopered +cooperies +coopering +coopers +coopery +cooping +coops +coopt +coopted +coopting +cooption +cooptions +coopts +coordinate +coordinated +coordinately +coordinateness +coordinatenesses +coordinates +coordinating +coordination +coordinations +coordinative +coordinator +coordinators +coos +coot +cooter +cooters +cootie +cooties +coots +cop +copacetic +copaiba +copaibas +copal +copalm +copalms +copals +coparcenaries +coparcenary +coparcener +coparceners +coparent +coparents +copartner +copartnered +copartnering +copartners +copartnership +copartnerships +copasetic +copastor +copastors +copatron +copatrons +copayment +copayments +cope +copeck +copecks +coped +copemate +copemates +copen +copens +copepod +copepods +coper +copers +copes +copesetic +copestone +copestones +copied +copier +copiers +copies +copihue +copihues +copilot +copilots +coping +copings +copingstone +copingstones +copious +copiously +copiousness +copiousnesses +coplanar +coplanarities +coplanarity +coplot +coplots +coplotted +coplotting +copolymer +copolymeric +copolymerization +copolymerizations +copolymerize +copolymerized +copolymerizes +copolymerizing +copolymers +copped +copper +copperah +copperahs +copperas +copperases +coppered +copperhead +copperheads +coppering +copperplate +copperplates +coppers +coppersmith +coppersmiths +coppery +coppice +coppiced +coppices +coppicing +copping +coppra +coppras +copra +coprah +coprahs +copras +copremia +copremias +copremic +copresent +copresented +copresenting +copresents +copresident +copresidents +coprince +coprinces +coprincipal +coprincipals +coprisoner +coprisoners +coprocessing +coprocessings +coprocessor +coprocessors +coproduce +coproduced +coproducer +coproducers +coproduces +coproducing +coproduct +coproduction +coproductions +coproducts +coprolite +coprolites +coprolitic +copromoter +copromoters +coprophagies +coprophagous +coprophagy +coprophilia +coprophiliac +coprophiliacs +coprophilias +coprophilous +coproprietor +coproprietors +coproprietorship +coproprietorships +coprosperities +coprosperity +cops +copse +copses +copter +copters +copublish +copublished +copublisher +copublishers +copublishes +copublishing +copula +copulae +copular +copulas +copulate +copulated +copulates +copulating +copulation +copulations +copulative +copulatives +copulatory +copurified +copurifies +copurify +copurifying copy +copybook +copybooks +copyboy +copyboys +copycat +copycats +copycatted +copycatting +copydesk +copydesks +copyedit +copyedited +copyediting +copyedits +copyhold +copyholder +copyholders +copyholds +copying +copyist +copyists +copyread +copyreader +copyreaders +copyreading +copyreads +copyright +copyrightable +copyrighted +copyrighting +copyrights +copywriter +copywriters +coquet +coquetries +coquetry +coquets +coquette +coquetted +coquettes +coquetting +coquettish +coquettishly +coquettishness +coquettishnesses +coquille +coquilles +coquina +coquinas +coquito +coquitos +cor +coracle +coracles +coracoid +coracoids +coral +coralbells +coralberries +coralberry +coralline +corallines +coralloid +corals +coranto +corantoes +corantos +corban +corbans +corbeil +corbeille +corbeilles +corbeils +corbel +corbeled +corbeling +corbelings +corbelled +corbelling +corbels +corbicula +corbiculae +corbie +corbies +corbina +corbinas +corby +cord +cordage +cordages +cordate +cordately +corded +cordelle +cordelled +cordelles +cordelling +corder +corders +cordgrass +cordgrasses +cordial +cordialities +cordiality +cordially +cordialness +cordialnesses +cordials +cordierite +cordierites +cordiform +cordillera +cordilleran +cordilleras +cording +cordings +cordite +cordites +cordless +cordlike +cordoba +cordobas +cordon +cordoned +cordoning +cordons +cordovan +cordovans +cords +corduroy +corduroyed +corduroying +corduroys +cordwain +cordwainer +cordwaineries +cordwainers +cordwainery +cordwains +cordwood +cordwoods +core +corecipient +corecipients +cored +coredeem +coredeemed +coredeeming +coredeems +coreign +coreigns +corelate +corelated +corelates +corelating +coreless +coreligionist +coreligionists +coremia +coremium +coreopsis +corepressor +corepressors +corequisite +corequisites +corer +corers +cores +coresearcher +coresearchers +coresident +coresidential +coresidents +corespondent +corespondents +corf +corgi +corgis +coria +coriaceous +coriander +corianders +coring +corium +cork +corkage +corkages +corkboard +corkboards +corked +corker +corkers +corkier +corkiest +corkiness +corkinesses +corking +corklike +corks +corkscrew +corkscrewed +corkscrewing +corkscrews +corkwood +corkwoods +corky +corm +cormel +cormels +cormlike +cormoid +cormorant +cormorants +cormous +corms corn +cornball +cornballs +cornbread +cornbreads +corncake +corncakes +corncob +corncobs +corncrake +corncrakes +corncrib +corncribs +cornea +corneal +corneas +corned +cornel +cornelian +cornelians +cornels +corneous corner +cornerback +cornerbacks +cornered +cornering +cornerman +cornermen +corners +cornerstone +cornerstones +cornerways +cornerwise +cornet +cornetcies +cornetcy +cornetist +cornetists +cornets +cornettist +cornettists +cornfed +cornfield +cornfields +cornflakes +cornflower +cornflowers +cornhusk +cornhusker +cornhuskers +cornhusking +cornhuskings +cornhusks +cornice +corniced +cornices +corniche +corniches +cornicing +cornicle +cornicles +cornier +corniest +cornification +cornifications +cornily +corniness +corninesses +corning +cornmeal +cornmeals +cornpone +cornpones +cornrow +cornrowed +cornrowing +cornrows +corns +cornstalk +cornstalks +cornstarch +cornstarches +cornu +cornua +cornual +cornucopia +cornucopian +cornucopias +cornus +cornuses +cornute +cornuted +cornuto +cornutos +corny +corodies +corody +corolla +corollaries +corollary +corollas +corollate +coromandel +coromandels +corona +coronach +coronachs +coronae +coronagraph +coronagraphs +coronal +coronals +coronaries +coronary +coronas +coronate +coronated +coronates +coronating +coronation +coronations +coronel +coronels +coroner +coroners +coronet +coronets +coronograph +coronographs +coronoid +corotate +corotated +corotates +corotating +corotation +corotations +corpora +corporal +corporalities +corporality +corporally +corporals +corporate +corporately corporation +corporations +corporatism +corporatisms +corporatist +corporative +corporativism +corporativisms +corporator +corporators +corporeal +corporealities +corporeality +corporeally +corporealness +corporealnesses +corporeities +corporeity +corposant +corposants +corps +corpse +corpses +corpsman +corpsmen +corpulence +corpulences +corpulencies +corpulency +corpulent +corpulently +corpus +corpuscle +corpuscles +corpuscular +corrade +corraded +corrades +corrading +corral +corralled +corralling +corrals +corrasion +corrasions +corrasive correct +correctable +corrected +correcter +correctest +correcting correction +correctional +corrections +correctitude +correctitudes +corrective +correctively +correctives +correctly +correctness +correctnesses +corrector +correctors +corrects +correlatable +correlate +correlated +correlates +correlating +correlation +correlational +correlations +correlative +correlatively +correlatives +correlator +correlators correspond +corresponded +correspondence +correspondences +correspondencies +correspondency +correspondent +correspondents +corresponding +correspondingly +corresponds +corresponsive +corrida +corridas +corridor +corridors +corrie +corries +corrigenda +corrigendum +corrigibilities +corrigibility +corrigible +corrival +corrivals +corroborant +corroborate +corroborated +corroborates +corroborating +corroboration +corroborations +corroborative +corroborator +corroborators +corroboratory +corroboree +corroborees +corrode +corroded +corrodes +corrodible +corrodies +corroding +corrody +corrosion +corrosions +corrosive +corrosively +corrosiveness +corrosivenesses +corrosives +corrugate +corrugated +corrugates +corrugating +corrugation +corrugations corrupt +corrupted +corrupter +corrupters +corruptest +corruptibilities +corruptibility +corruptible +corruptibly +corrupting +corruption +corruptionist +corruptionists +corruptions +corruptive +corruptively +corruptly +corruptness +corruptnesses +corruptor +corruptors +corrupts +corsac +corsacs +corsage +corsages +corsair +corsairs +corse +corselet +corselets +corselette +corselettes +corses +corset +corseted +corsetiere +corsetieres +corseting +corsetries +corsetry +corsets +corslet +corslets +cortege +corteges +cortex +cortexes +cortical +cortically +cortices +corticoid +corticoids +corticosteroid +corticosteroids +corticosterone +corticosterones +corticotrophin +corticotrophins +corticotropin +corticotropins +cortin +cortins +cortisol +cortisols +cortisone +cortisones +coruler +corulers +corundum +corundums +coruscant +coruscate +coruscated +coruscates +coruscating +coruscation +coruscations +corvee +corvees +corves +corvet +corvets +corvette +corvettes +corvina +corvinas +corvine +cory +corybant +corybantes +corybantic +corybants +corydalis +corydalises +corymb +corymbed +corymbose +corymbosely +corymbs +corynebacteria +corynebacterial +corynebacterium +coryneform +coryphaei +coryphaeus +coryphee +coryphees +coryza +coryzal +coryzas +cos +coscript +coscripted +coscripting +coscripts +cosec +cosecant +cosecants +cosecs +coses +coset +cosets +cosey +coseys +cosh +coshed +cosher +coshered +coshering +coshers +coshes +coshing +cosie +cosied +cosier +cosies +cosiest +cosign +cosignatories +cosignatory +cosigned +cosigner +cosigners +cosigning +cosigns +cosily +cosine +cosines +cosiness +cosinesses +cosmetic +cosmetically +cosmetician +cosmeticians +cosmeticize +cosmeticized +cosmeticizes +cosmeticizing +cosmetics +cosmetologies +cosmetologist +cosmetologists +cosmetology +cosmic +cosmical +cosmically +cosmism +cosmisms +cosmist +cosmists +cosmochemical +cosmochemist +cosmochemistries +cosmochemistry +cosmochemists +cosmogenic +cosmogonic +cosmogonical +cosmogonies +cosmogonist +cosmogonists +cosmogony +cosmographer +cosmographers +cosmographic +cosmographical +cosmographies +cosmography +cosmological +cosmologically +cosmologies +cosmologist +cosmologists +cosmology +cosmonaut +cosmonauts +cosmopolis +cosmopolises +cosmopolitan +cosmopolitanism +cosmopolitanisms +cosmopolitans +cosmopolite +cosmopolites +cosmopolitism +cosmopolitisms +cosmos +cosmoses +cosponsor +cosponsored +cosponsoring +cosponsors +cosponsorship +cosponsorships +coss +cossack +cossacks +cosset +cosseted +cosseting +cossets cost +costa +costae +costal +costar +costard +costards +costarred +costarring +costars +costate +costed +coster +costermonger +costermongers +costers +costing +costive +costively +costiveness +costivenesses +costless +costlessly +costlier +costliest +costliness +costlinesses +costly +costmaries +costmary +costrel +costrels +costs +costume +costumed +costumer +costumeries +costumers +costumery +costumes +costumey +costumier +costumiers +costuming +cosurfactant +cosurfactants cosy +cosying +cot +cotan +cotangent +cotangents +cotans +cote +coteau +coteaux +coted +cotenant +cotenants +coterie +coteries +coterminous +coterminously +cotes +cothurn +cothurni +cothurns +cothurnus +cotidal +cotillion +cotillions +cotillon +cotillons +coting +cotoneaster +cotoneasters +cotquean +cotqueans +cotransduce +cotransduced +cotransduces +cotransducing +cotransduction +cotransductions +cotransfer +cotransferred +cotransferring +cotransfers +cotransport +cotransported +cotransporting +cotransports +cotrustee +cotrustees +cots +cotta +cottae cottage +cottager +cottagers +cottages +cottagey +cottar +cottars +cottas +cotter +cottered +cotterless +cotters +cottier +cottiers cotton +cottoned +cottoning +cottonmouth +cottonmouths +cottons +cottonseed +cottonseeds +cottontail +cottontails +cottonweed +cottonweeds +cottonwood +cottonwoods +cottony +cotyledon +cotyledonary +cotyledons +cotyloid +cotylosaur +cotylosaurs +cotype +cotypes +couch +couchant +couched +coucher +couchers +couches +couching +couchings +coude +cougar +cougars cough +coughed +cougher +coughers +coughing +coughs could +couldest +couldst +coulee +coulees +coulis +coulises +coulisse +coulisses +couloir +couloirs +coulomb +coulombic +coulombs +coulometer +coulometers +coulometric +coulometrically +coulometries +coulometry +coulter +coulters +coumaric +coumarin +coumarins +coumarou +coumarous +council +councillor +councillors +councillorship +councillorships +councilman +councilmanic +councilmen +councilor +councilors +councils +councilwoman +councilwomen +counsel +counseled +counselee +counselees +counseling +counselings +counselled +counselling +counsellings +counsellor +counsellors +counselor +counselors +counselorship +counselorships +counsels count +countabilities +countability +countable +countably +countdown +countdowns +counted +countenance +countenanced +countenancer +countenancers +countenances +countenancing counter +counteraccusation +counteraccusations +counteract +counteracted +counteracting +counteraction +counteractions +counteractive +counteracts +counteradaptation +counteradaptations +counteradvertising +counteradvertisings +counteragent +counteragents +counteraggression +counteraggressions +counterargue +counterargued +counterargues +counterarguing +counterargument +counterarguments +counterassault +counterassaults +counterattack +counterattacked +counterattacker +counterattackers +counterattacking +counterattacks +counterbade +counterbalance +counterbalanced +counterbalances +counterbalancing +counterbid +counterbidden +counterbidding +counterbids +counterblast +counterblasts +counterblockade +counterblockaded +counterblockades +counterblockading +counterblow +counterblows +countercampaign +countercampaigns +counterchange +counterchanged +counterchanges +counterchanging +countercharge +countercharged +countercharges +countercharging +countercheck +counterchecked +counterchecking +counterchecks +counterclaim +counterclaimed +counterclaiming +counterclaims +counterclockwise +countercommercial +countercomplaint +countercomplaints +counterconditioning +counterconditionings +counterconspiracies +counterconspiracy +counterconvention +counterconventions +countercountermeasure +countercountermeasures +countercoup +countercoups +countercries +countercriticism +countercriticisms +countercry +countercultural +counterculturalism +counterculturalisms +counterculture +countercultures +counterculturist +counterculturists +countercurrent +countercurrently +countercurrents +countercyclical +countercyclically +counterdemand +counterdemands +counterdemonstrate +counterdemonstrated +counterdemonstrates +counterdemonstrating +counterdemonstration +counterdemonstrations +counterdemonstrator +counterdemonstrators +counterdeployment +counterdeployments +countered +countereducational +countereffort +counterefforts +counterespionage +counterespionages +counterevidence +counterevidences +counterexample +counterexamples +counterfactual +counterfeit +counterfeited +counterfeiter +counterfeiters +counterfeiting +counterfeits +counterfire +counterfired +counterfires +counterfiring +counterflow +counterflows +counterfoil +counterfoils +counterforce +counterforces +countergovernment +countergovernments +counterguerilla +counterguerillas +counterguerrilla +counterguerrillas +counterhypotheses +counterhypothesis +counterimage +counterimages +counterincentive +counterincentives +counterinflation +counterinflationary +counterinfluence +counterinfluenced +counterinfluences +counterinfluencing +countering +counterinstance +counterinstances +counterinstitution +counterinstitutions +counterinsurgencies +counterinsurgency +counterinsurgent +counterinsurgents +counterintelligence +counterintelligences +counterinterpretation +counterinterpretations +counterintuitive +counterintuitively +counterion +counterions +counterirritant +counterirritants +counterman +countermand +countermanded +countermanding +countermands +countermarch +countermarched +countermarches +countermarching +countermeasure +countermeasures +countermelodies +countermelody +countermemo +countermemos +countermen +countermine +countermined +countermines +countermining +countermobilization +countermobilizations +countermove +countermoved +countermovement +countermovements +countermoves +countermoving +countermyth +countermyths +counteroffensive +counteroffensives +counteroffer +counteroffers +counterorder +counterordered +counterordering +counterorders +counterpane +counterpanes +counterpart +counterparts +counterpetition +counterpetitioned +counterpetitioning +counterpetitions +counterpicket +counterpicketed +counterpicketing +counterpickets +counterplan +counterplans +counterplay +counterplayer +counterplayers +counterplays +counterplea +counterpleas +counterplot +counterplots +counterplotted +counterplotting +counterploy +counterploys +counterpoint +counterpointed +counterpointing +counterpoints +counterpoise +counterpoised +counterpoises +counterpoising +counterpose +counterposed +counterposes +counterposing +counterpower +counterpowers +counterpressure +counterpressures +counterproductive +counterprogramming +counterprogrammings +counterproject +counterprojects +counterpropaganda +counterpropagandas +counterproposal +counterproposals +counterprotest +counterprotests +counterpunch +counterpunched +counterpuncher +counterpunchers +counterpunches +counterpunching +counterquestion +counterquestioned +counterquestioning +counterquestions +counterraid +counterraided +counterraiding +counterraids +counterrallied +counterrallies +counterrally +counterrallying +counterreaction +counterreactions +counterreform +counterreformation +counterreformations +counterreformer +counterreformers +counterreforms +counterresponse +counterresponses +counterretaliation +counterretaliations +counterrevolution +counterrevolutionaries +counterrevolutionary +counterrevolutions +counters +counterscientific +countershading +countershadings +countershot +countershots +countersign +countersignature +countersignatures +countersigned +countersigning +countersigns +countersink +countersinking +countersinks +countersniper +countersnipers +counterspell +counterspells +counterspies +counterspy +counterstain +counterstained +counterstaining +counterstains +counterstate +counterstated +counterstatement +counterstatements +counterstates +counterstating +counterstep +counterstepped +counterstepping +countersteps +counterstrategies +counterstrategist +counterstrategists +counterstrategy +counterstream +counterstreams +counterstrike +counterstrikes +counterstroke +counterstrokes +counterstyle +counterstyles +countersue +countersued +countersues +countersuggestion +countersuggestions +countersuing +countersuit +countersuits +countersunk +countersurveillance +countersurveillances +countertactics +countertendencies +countertendency +countertenor +countertenors +counterterror +counterterrorism +counterterrorisms +counterterrorist +counterterrorists +counterterrors +counterthreat +counterthreats +counterthrust +counterthrusts +countertop +countertops +countertrade +countertrades +countertradition +countertraditions +countertransference +countertransferences +countertrend +countertrends +countervail +countervailed +countervailing +countervails +counterview +counterviews +counterviolence +counterviolences +counterweight +counterweighted +counterweighting +counterweights +counterworld +counterworlds +countess +countesses +countian +countians +counties +counting +countinghouse +countinghouses +countless +countlessly +countries +countrified country +countryfied +countryish +countryman +countrymen +countryseat +countryseats countryside +countrysides +countrywide +countrywoman +countrywomen +counts +county +coup +coupe +couped +coupes +couping couple +coupled +couplement +couplements +coupler +couplers +couples +couplet +couplets +coupling +couplings +coupon +couponing +couponings +coupons +coups courage +courageous +courageously +courageousness +courageousnesses +courages +courant +courante +courantes +couranto +courantoes +courantos +courants +courgette +courgettes +courier +couriers +courlan +courlans course +coursed +courser +coursers +courses +courseware +coursewares +coursing +coursings court +courted +courteous +courteously +courteousness +courteousnesses +courter +courters +courtesan +courtesans +courtesied +courtesies +courtesy +courtesying +courthouse +courthouses +courtier +courtiers +courting +courtlier +courtliest +courtliness +courtlinesses +courtly +courtroom +courtrooms +courts +courtship +courtships +courtside +courtsides courtyard +courtyards +couscous +couscouses cousin +cousinage +cousinages +cousinhood +cousinhoods +cousinly +cousinries +cousinry +cousins +cousinship +cousinships +couteau +couteaux +couter +couters +couth +couther +couthest +couthie +couthier +couthiest +couths +couture +coutures +couturier +couturiere +couturieres +couturiers +couvade +couvades +covalence +covalences +covalencies +covalency +covalent +covalently +covariance +covariances +covariant +covariation +covariations +cove +coved +covelline +covellines +covellite +covellites +coven +covenant +covenantal +covenanted +covenantee +covenantees +covenanter +covenanters +covenanting +covenantor +covenantors +covenants +covens cover +coverable +coverage +coverages +coverall +coveralled +coveralls +covered +coverer +coverers +covering +coverings +coverless +coverlet +coverlets +coverlid +coverlids +covers +coverslip +coverslips +covert +covertly +covertness +covertnesses +coverts +coverture +covertures +coverup +coverups +coves +covet +covetable +coveted +coveter +coveters +coveting +covetingly +covetous +covetously +covetousness +covetousnesses +covets +covey +coveys +covin +coving +covings +covins cow +cowage +cowages +coward +cowardice +cowardices +cowardliness +cowardlinesses +cowardly +cowards +cowbane +cowbanes +cowbell +cowbells +cowberries +cowberry +cowbind +cowbinds +cowbird +cowbirds +cowboy +cowboys +cowcatcher +cowcatchers +cowed +cowedly +cower +cowered +cowering +cowers +cowfish +cowfishes +cowflap +cowflaps +cowflop +cowflops +cowgirl +cowgirls +cowhage +cowhages +cowhand +cowhands +cowherb +cowherbs +cowherd +cowherds +cowhide +cowhided +cowhides +cowhiding +cowier +cowiest +cowing +cowinner +cowinners +cowl +cowled +cowlick +cowlicks +cowling +cowlings +cowls +cowlstaff +cowlstaffs +cowlstaves +cowman +cowmen +coworker +coworkers +cowpat +cowpats +cowpea +cowpeas +cowpie +cowpies +cowplop +cowplops +cowpoke +cowpokes +cowpox +cowpoxes +cowpuncher +cowpunchers +cowrie +cowries +cowrite +cowrites +cowriting +cowritten +cowrote +cowry +cows +cowshed +cowsheds +cowskin +cowskins +cowslip +cowslips +cowy +cox +coxa +coxae +coxal +coxalgia +coxalgias +coxalgic +coxalgies +coxalgy +coxcomb +coxcombical +coxcombries +coxcombry +coxcombs +coxed +coxes +coxing +coxitides +coxitis +coxswain +coxswained +coxswaining +coxswains +coy +coydog +coydogs +coyed +coyer +coyest +coying +coyish +coyly +coyness +coynesses +coyote +coyotes +coyotillo +coyotillos +coypou +coypous +coypu +coypus +coys +coz +cozen +cozenage +cozenages +cozened +cozener +cozeners +cozening +cozens +cozes +cozey +cozeys +cozie +cozied +cozier +cozies +coziest +cozily +coziness +cozinesses cozy +cozying +cozzes +craal +craaled +craaling +craals +crab +crabbed +crabbedness +crabbednesses +crabber +crabbers +crabbier +crabbiest +crabbily +crabbing +crabby +crabgrass +crabgrasses +crabmeat +crabmeats +crabs +crabstick +crabsticks +crabwise +crack +crackajack +crackajacks +crackback +crackbacks +crackbrain +crackbrained +crackbrains +crackdown +crackdowns +cracked +cracker +crackerjack +crackerjacks +crackers +cracking +crackings +crackle +crackled +crackles +crackleware +cracklewares +cracklier +crackliest +crackling +cracklings +crackly +cracknel +cracknels +crackpot +crackpots +cracks +cracksman +cracksmen +crackup +crackups +cracky +cradle +cradled +cradler +cradlers +cradles +cradlesong +cradlesongs +cradling +craft +crafted +craftier +craftiest +craftily +craftiness +craftinesses +crafting +crafts +craftsman +craftsmanlike +craftsmanly +craftsmanship +craftsmanships +craftsmen +craftspeople +craftsperson +craftspersons +craftswoman +craftswomen +crafty +crag +cragged +craggier +craggiest +craggily +cragginess +cragginesses +craggy +crags +cragsman +cragsmen +crake +crakes +cram +crambe +crambes +crambo +cramboes +crambos +crammed +crammer +crammers +cramming +cramoisie +cramoisies +cramoisy +cramp +cramped +cramping +crampit +crampits +crampon +crampons +crampoon +crampoons +cramps +crams +cranberries +cranberry +cranch +cranched +cranches +cranching +crane +craned +cranes +cranesbill +cranesbills +crania +cranial +cranially +craniate +craniates +craning +craniocerebral +craniofacial +craniologies +craniology +craniometries +craniometry +craniosacral +craniotomies +craniotomy +cranium +craniums +crank +crankcase +crankcases +cranked +cranker +crankest +crankier +crankiest +crankily +crankiness +crankinesses +cranking +crankish +crankle +crankled +crankles +crankling +crankly +crankous +crankpin +crankpins +cranks +crankshaft +crankshafts +cranky +crannied +crannies +crannog +crannoge +crannoges +crannogs +cranny +cranreuch +cranreuchs +crap +crape +craped +crapes +craping +crapped +crapper +crappers +crappie +crappier +crappies +crappiest +crapping +crappy +craps +crapshoot +crapshooter +crapshooters +crapshoots +crapulous +crases crash +crashed +crasher +crashers +crashes +crashing +crashingly +crashworthiness +crashworthinesses +crashworthy +crasis +crass +crasser +crassest +crassitude +crassitudes +crassly +crassness +crassnesses +cratch +cratches +crate +crated +crater +cratered +cratering +craterlet +craterlets +craterlike +craters +crates +crating +craton +cratonic +cratons +craunch +craunched +craunches +craunching +cravat +cravats +crave +craved +craven +cravened +cravening +cravenly +cravenness +cravennesses +cravens +craver +cravers +craves +craving +cravings +craw +crawdad +crawdads +crawfish +crawfished +crawfishes +crawfishing +crawl +crawled +crawler +crawlers +crawlier +crawliest +crawling +crawls +crawlspace +crawlspaces +crawlway +crawlways +crawly +craws +crayfish +crayfishes crayon +crayoned +crayoning +crayonist +crayonists +crayons +craze +crazed +crazes +crazier +crazies +craziest +crazily +craziness +crazinesses +crazing crazy +crazyweed +crazyweeds +creak +creaked +creakier +creakiest +creakily +creakiness +creakinesses +creaking +creaks +creaky cream +creamcups +creamed +creamer +creameries +creamers +creamery +creamier +creamiest +creamily +creaminess +creaminesses +creaming +creampuff +creampuffs +creams +creamware +creamwares +creamy +crease +creased +creaseless +creaser +creasers +creases +creasier +creasiest +creasing +creasy create +created +creates +creatin +creatine +creatines +creating +creatinine +creatinines +creatins +creation +creationism +creationisms +creationist +creationists +creations +creative +creatively +creativeness +creativenesses +creativities +creativity +creator +creators +creatural creature +creaturehood +creaturehoods +creatureliness +creaturelinesses +creaturely +creatures +creche +creches +credal +credence +credences +credenda +credendum +credent +credential +credentialed +credentialing +credentialism +credentialisms +credentialled +credentialling +credentials +credenza +credenzas +credibilities +credibility +credible +credibly credit +creditabilities +creditability +creditable +creditableness +creditablenesses +creditably +credited +crediting +creditor +creditors +credits +creditworthiness +creditworthinesses +creditworthy +credo +credos +credulities +credulity +credulous +credulously +credulousness +credulousnesses +creed +creedal +creeds +creek +creeks +creel +creeled +creeling +creels +creep +creepage +creepages +creeper +creepers +creepie +creepier +creepies +creepiest +creepily +creepiness +creepinesses +creeping +creeps +creepy +creese +creeses +creesh +creeshed +creeshes +creeshing +cremains +cremate +cremated +cremates +cremating +cremation +cremations +cremator +crematoria +crematories +crematorium +crematoriums +cremators +crematory +creme +cremes +crenate +crenated +crenation +crenations +crenel +crenelated +crenelation +crenelations +creneled +creneling +crenellated +crenellation +crenellations +crenelle +crenelled +crenelles +crenelling +crenels +crenulate +crenulated +crenulation +crenulations +creodont +creodonts +creole +creoles +creolise +creolised +creolises +creolising +creolization +creolizations +creolize +creolized +creolizes +creolizing +creosol +creosols +creosote +creosoted +creosotes +creosoting +crepe +creped +crepes +crepey +crepier +crepiest +creping +crepitant +crepitate +crepitated +crepitates +crepitating +crepitation +crepitations +crepon +crepons +crept +crepuscle +crepuscles +crepuscular +crepuscule +crepuscules +crepy +crescendi +crescendo +crescendoed +crescendoes +crescendoing +crescendos +crescent +crescentic +crescents +crescive +crescively +cresol +cresols +cress +cresses +cresset +cressets +crest +crestal +crested +crestfallen +crestfallenly +crestfallenness +crestfallennesses +cresting +crestings +crestless +crests +cresyl +cresylic +cresyls +cretic +cretics +cretin +cretinism +cretinisms +cretinous +cretins +cretonne +cretonnes +crevalle +crevalles +crevasse +crevassed +crevasses +crevassing +crevice +creviced +crevices crew +crewed +crewel +crewels +crewelwork +crewelworks +crewing +crewless +crewman +crewmate +crewmates +crewmen +crewneck +crewnecks +crews +crib +cribbage +cribbages +cribbed +cribber +cribbers +cribbing +cribbings +cribbled +cribriform +cribrous +cribs +cribwork +cribworks +cricetid +cricetids +crick +cricked +cricket +cricketed +cricketer +cricketers +cricketing +crickets +crickey +cricking +cricks +cricoid +cricoids +cried +crier +criers +cries +crikey crime +crimeless +crimes criminal +criminalistics +criminalities +criminality +criminalization +criminalizations +criminalize +criminalized +criminalizes +criminalizing +criminally +criminals +criminate +criminated +criminates +criminating +crimination +criminations +criminological +criminologically +criminologies +criminologist +criminologists +criminology +criminous +crimmer +crimmers +crimp +crimped +crimper +crimpers +crimpier +crimpiest +crimping +crimple +crimpled +crimples +crimpling +crimps +crimpy +crimson +crimsoned +crimsoning +crimsons +cringe +cringed +cringer +cringers +cringes +cringing +cringle +cringles +crinite +crinites +crinkle +crinkled +crinkles +crinklier +crinkliest +crinkling +crinkly +crinoid +crinoids +crinoline +crinolined +crinolines +crinum +crinums +criollo +criollos +cripe +cripes +cripple +crippled +crippler +cripplers +cripples +crippling +cripplingly +cris +crises +crisic +crisis +crisp +crispate +crispbread +crispbreads +crisped +crispen +crispened +crispening +crispens +crisper +crispers +crispest +crispier +crispiest +crispily +crispiness +crispinesses +crisping +crisply +crispness +crispnesses +crisps +crispy +crissa +crissal +crisscross +crisscrossed +crisscrosses +crisscrossing +crissum +crista +cristae +cristate criteria criterion +criterions +criterium +criteriums +critic +critical +criticalities +criticality +critically +criticalness +criticalnesses +criticaster +criticasters +criticise +criticised +criticises +criticising +criticism +criticisms +criticizable +criticize +criticized +criticizer +criticizers +criticizes +criticizing +critics +critique +critiqued +critiques +critiquing +critter +critters +crittur +critturs +croak +croaked +croaker +croakers +croakier +croakiest +croakily +croaking +croaks +croaky +croc +crocein +croceine +croceines +croceins +crochet +crocheted +crocheter +crocheters +crocheting +crochets +croci +crocidolite +crocidolites +crocine +crock +crocked +crockeries +crockery +crocket +crocketed +crockets +crocking +crocks +crocodile +crocodiles +crocodilian +crocodilians +crocoite +crocoites +crocs +crocus +crocuses +croft +crofter +crofters +crofts +croissant +croissants +crojik +crojiks +cromlech +cromlechs +crone +crones +cronies +crony +cronyism +cronyisms +crook +crookback +crookbacked +crookbacks +crooked +crookeder +crookedest +crookedly +crookedness +crookednesses +crookeries +crookery +crooking +crookneck +crooknecks +crooks +croon +crooned +crooner +crooners +crooning +croons crop +cropland +croplands +cropless +cropped +cropper +croppers +croppie +croppies +cropping +crops +croquet +croqueted +croqueting +croquets +croquette +croquettes +croquignole +croquignoles +croquis +crore +crores +crosier +crosiers cross +crossabilities +crossability +crossable +crossarm +crossarms +crossbanded +crossbanding +crossbandings +crossbar +crossbarred +crossbarring +crossbars +crossbeam +crossbeams +crossbearer +crossbearers +crossbill +crossbills +crossbones +crossbow +crossbowman +crossbowmen +crossbows +crossbred +crossbreds +crossbreed +crossbreeding +crossbreeds +crosscourt +crosscurrent +crosscurrents +crosscut +crosscuts +crosscutting +crosscuttings +crosse +crossed +crosser +crossers +crosses +crossest +crossfire +crossfires +crosshair +crosshairs +crosshatch +crosshatched +crosshatches +crosshatching +crosshead +crossheads crossing +crossings +crosslet +crosslets +crosslinguistic +crosslinguistically +crossly +crossness +crossnesses +crossopterygian +crossopterygians +crossover +crossovers +crosspatch +crosspatches +crosspiece +crosspieces +crossroad crossroads +crossruff +crossruffed +crossruffing +crossruffs +crosstalk +crosstalks +crosstie +crossties +crosstown +crosstrees +crosswalk +crosswalks +crossway +crossways +crosswind +crosswinds +crosswise +crossword +crosswords +crotch +crotched +crotches +crotchet +crotchetiness +crotchetinesses +crotchets +crotchety +croton +crotons +crouch +crouched +crouches +crouching +croup +croupe +croupes +croupier +croupiers +croupiest +croupily +croupous +croups +croupy +crouse +crousely +croustade +croustades +crouton +croutons +crow +crowbar +crowbarred +crowbarring +crowbars +crowberries +crowberry crowd +crowded +crowdedness +crowdednesses +crowder +crowders +crowdie +crowdies +crowding +crowds +crowdy +crowed +crower +crowers +crowfeet +crowfoot +crowfoots +crowing +crowkeeper +crowkeepers +crown +crowned +crowner +crowners +crownet +crownets +crowning +crownless +crowns +crows +crowstep +crowstepped +crowsteps +croze +crozer +crozers +crozes +crozier +croziers +cruces +crucial +crucially +crucian +crucians +cruciate +crucible +crucibles +crucifer +cruciferous +crucifers +crucified +crucifies +crucifix +crucifixes +crucifixion +crucifixions +cruciform +cruciforms +crucify +crucifying +cruck +crucks +crud +crudded +cruddier +cruddiest +crudding +cruddy +crude +crudely +crudeness +crudenesses +cruder +crudes +crudest +crudites +crudities +crudity +cruds cruel +crueler +cruelest +crueller +cruellest +cruelly +cruelness +cruelnesses +cruelties +cruelty +cruet +cruets +cruise +cruised +cruiser +cruisers +cruiserweight +cruiserweights +cruises +cruising +cruisings +cruller +crullers +crumb +crumbed +crumber +crumbers +crumbier +crumbiest +crumbing +crumble +crumbled +crumbles +crumblier +crumbliest +crumbliness +crumblinesses +crumbling +crumblings +crumbly +crumbs +crumbum +crumbums +crumby +crumhorn +crumhorns +crummie +crummier +crummies +crummiest +crumminess +crumminesses +crummy +crump +crumped +crumpet +crumpets +crumping +crumple +crumpled +crumples +crumplier +crumpliest +crumpling +crumply +crumps +crunch +crunchable +crunched +cruncher +crunchers +crunches +crunchier +crunchiest +crunchily +crunchiness +crunchinesses +crunching +crunchy +crunodal +crunode +crunodes +cruor +cruors +crupper +cruppers +crura +crural +crus +crusade +crusaded +crusader +crusaders +crusades +crusading +crusado +crusadoes +crusados +cruse +cruses +cruset +crusets +crush +crushable +crushed +crusher +crushers +crushes +crushing +crushingly +crushproof +crusily +crust +crustacea +crustacean +crustaceans +crustaceous +crustal +crusted +crustier +crustiest +crustily +crustiness +crustinesses +crusting +crustless +crustose +crusts +crusty +crutch +crutched +crutches +crutching +crux +cruxes +cruzado +cruzadoes +cruzados +cruzeiro +cruzeiros +crwth +crwths cry +crybabies +crybaby +crying +cryingly +cryobiological +cryobiologies +cryobiologist +cryobiologists +cryobiology +cryogen +cryogenic +cryogenically +cryogenics +cryogenies +cryogens +cryogeny +cryolite +cryolites +cryonic +cryonics +cryophilic +cryopreservation +cryopreservations +cryopreserve +cryopreserved +cryopreserves +cryopreserving +cryoprobe +cryoprobes +cryoprotectant +cryoprotectants +cryoprotective +cryoscope +cryoscopes +cryoscopic +cryoscopies +cryoscopy +cryostat +cryostatic +cryostats +cryosurgeon +cryosurgeons +cryosurgeries +cryosurgery +cryosurgical +cryotherapies +cryotherapy +cryotron +cryotrons +crypt +cryptal +cryptanalyses +cryptanalysis +cryptanalyst +cryptanalysts +cryptanalytic +cryptanalytical +cryptarithm +cryptarithms +cryptic +cryptically +crypto +cryptococcal +cryptococci +cryptococcoses +cryptococcosis +cryptococcus +cryptocrystalline +cryptogam +cryptogamic +cryptogamous +cryptogams +cryptogenic +cryptogram +cryptograms +cryptograph +cryptographer +cryptographers +cryptographic +cryptographically +cryptographies +cryptographs +cryptography +cryptologic +cryptological +cryptologies +cryptologist +cryptologists +cryptology +cryptomeria +cryptomerias +cryptonym +cryptonyms +cryptorchid +cryptorchidism +cryptorchidisms +cryptorchids +cryptorchism +cryptorchisms +cryptos +cryptozoologies +cryptozoologist +cryptozoologists +cryptozoology +crypts +crystal +crystalize +crystalized +crystalizes +crystalizing +crystalline +crystallinities +crystallinity +crystallise +crystallised +crystallises +crystallising +crystallite +crystallites +crystallizable +crystallization +crystallizations +crystallize +crystallized +crystallizer +crystallizers +crystallizes +crystallizing +crystallographer +crystallographers +crystallographic +crystallographically +crystallographies +crystallography +crystalloid +crystalloidal +crystalloids +crystals +ctenidia +ctenidium +ctenoid +ctenophoran +ctenophorans +ctenophore +ctenophores +cuadrilla +cuadrillas +cub +cubage +cubages +cubature +cubatures +cubbies +cubbish +cubby +cubbyhole +cubbyholes cube +cubeb +cubebs +cubed +cuber +cubers +cubes cubic +cubical +cubically +cubicities +cubicity +cubicle +cubicles +cubicly +cubics +cubicula +cubiculum +cubiform +cubing +cubism +cubisms +cubist +cubistic +cubists +cubit +cubital +cubits +cuboid +cuboidal +cuboids +cubs +cuckold +cuckolded +cuckolding +cuckoldries +cuckoldry +cuckolds +cuckoo +cuckooed +cuckooflower +cuckooflowers +cuckooing +cuckoopint +cuckoopints +cuckoos +cucullate +cucumber +cucumbers +cucurbit +cucurbits +cud +cudbear +cudbears +cuddie +cuddies +cuddle +cuddled +cuddler +cuddlers +cuddles +cuddlesome +cuddlier +cuddliest +cuddling +cuddly +cuddy +cudgel +cudgeled +cudgeler +cudgelers +cudgeling +cudgelled +cudgelling +cudgels +cuds +cudweed +cudweeds +cue +cued +cueing +cues +cuesta +cuestas +cuff +cuffed +cuffing +cuffless +cuffs +cuif +cuifs +cuing +cuirass +cuirassed +cuirasses +cuirassier +cuirassiers +cuirassing +cuish +cuishes cuisine +cuisines +cuisse +cuisses +cuittle +cuittled +cuittles +cuittling +cuke +cukes +culch +culches +culet +culets +culex +culices +culicid +culicids +culicine +culicines +culinarian +culinarians +culinarily +culinary +cull +cullay +cullays +culled +cullender +cullenders +culler +cullers +cullet +cullets +cullied +cullies +culling +cullion +cullions +cullis +cullises +culls +cully +cullying +culm +culmed +culminant +culminate +culminated +culminates +culminating +culmination +culminations +culming +culms +culotte +culottes +culpa +culpabilities +culpability +culpable +culpableness +culpablenesses +culpably +culpae +culprit +culprits +cult +cultch +cultches +culti +cultic +cultigen +cultigens +cultish +cultishly +cultishness +cultishnesses +cultism +cultisms +cultist +cultists +cultivabilities +cultivability +cultivable +cultivar +cultivars +cultivatable +cultivate +cultivated +cultivates +cultivating +cultivation +cultivations +cultivator +cultivators +cultlike +cultrate +cults +cultural +culturally +culturati culture +cultured +cultures +culturing +cultus +cultuses +culver +culverin +culverins +culvers +culvert +culverts +cum +cumarin +cumarins +cumber +cumberbund +cumberbunds +cumbered +cumberer +cumberers +cumbering +cumbers +cumbersome +cumbersomely +cumbersomeness +cumbersomenesses +cumbrous +cumbrously +cumbrousness +cumbrousnesses +cumin +cumins +cummer +cummerbund +cummerbunds +cummers +cummin +cummins +cumquat +cumquats +cumshaw +cumshaws +cumulate +cumulated +cumulates +cumulating +cumulation +cumulations +cumulative +cumulatively +cumulativeness +cumulativenesses +cumuli +cumuliform +cumulonimbi +cumulonimbus +cumulonimbuses +cumulous +cumulus +cunctation +cunctations +cunctative +cundum +cundums +cuneal +cuneate +cuneated +cuneatic +cuneiform +cuneiforms +cuniform +cuniforms +cunner +cunners +cunnilinctus +cunnilinctuses +cunnilingus +cunnilinguses +cunning +cunninger +cunningest +cunningly +cunningness +cunningnesses +cunnings +cunt +cunts cup +cupbearer +cupbearers cupboard +cupboards +cupcake +cupcakes +cupel +cupeled +cupeler +cupelers +cupeling +cupellation +cupellations +cupelled +cupeller +cupellers +cupelling +cupels +cupful +cupfuls +cupid +cupidities +cupidity +cupids +cuplike +cupola +cupolaed +cupolaing +cupolas +cuppa +cuppas +cupped +cupper +cuppers +cuppier +cuppiest +cupping +cuppings +cuppy +cupreous +cupric +cupriferous +cuprite +cuprites +cupronickel +cupronickels +cuprous +cuprum +cuprums +cups +cupsful +cupula +cupulae +cupular +cupulate +cupule +cupules +cur +curabilities +curability +curable +curableness +curablenesses +curably +curacao +curacaos +curacies +curacoa +curacoas +curacy +curagh +curaghs +curara +curaras +curare +curares +curari +curarine +curarines +curaris +curarization +curarizations +curarize +curarized +curarizes +curarizing +curassow +curassows +curate +curated +curates +curating +curative +curatively +curatives +curator +curatorial +curators +curatorship +curatorships +curb +curbable +curbed +curber +curbers +curbing +curbings +curbs +curbside +curbsides +curbstone +curbstones +curch +curches +curculio +curculios +curcuma +curcumas +curd +curded +curdier +curdiest +curding +curdle +curdled +curdler +curdlers +curdles +curdling +curds +curdy cure +cured +cureless +curer +curers +cures +curet +curets +curettage +curettages +curette +curetted +curettement +curettements +curettes +curetting +curf +curfew +curfews +curfs +curia +curiae +curial +curie +curies +curing +curio +curios +curiosa +curiosities +curiosity curious +curiouser +curiousest +curiously +curiousness +curiousnesses +curite +curites +curium +curiums +curl +curled +curler +curlers +curlew +curlews +curlicue +curlicued +curlicues +curlicuing +curlier +curliest +curlily +curliness +curlinesses +curling +curlings +curlpaper +curlpapers +curls +curly +curlycue +curlycues +curmudgeon +curmudgeonliness +curmudgeonlinesses +curmudgeonly +curmudgeons +curn +curns +curr +currach +currachs +curragh +curraghs +curran +currans +currant +currants +curred +currencies currency +current +currently +currentness +currentnesses +currents +curricle +curricles +curricula +curricular curriculum +curriculums +currie +curried +currier +currieries +curriers +curriery +curries +curring +currish +currishly +currs +curry +currycomb +currycombed +currycombing +currycombs +currying +curs +curse +cursed +curseder +cursedest +cursedly +cursedness +cursednesses +curser +cursers +curses +cursing +cursive +cursively +cursiveness +cursivenesses +cursives +cursor +cursorial +cursorily +cursoriness +cursorinesses +cursors +cursory +curst +curt +curtail +curtailed +curtailer +curtailers +curtailing +curtailment +curtailments +curtails curtain +curtained +curtaining +curtainless +curtains +curtal +curtalax +curtalaxes +curtals +curtate +curter +curtesies +curtest +curtesy +curtilage +curtilages +curtly +curtness +curtnesses +curtsey +curtseyed +curtseying +curtseys +curtsied +curtsies +curtsy +curtsying +curule +curvaceous +curvacious +curvature +curvatures +curve +curveball +curveballed +curveballing +curveballs +curved +curvedly +curves +curvet +curveted +curveting +curvets +curvetted +curvetting +curvey +curvier +curviest +curvilinear +curvilinearities +curvilinearity +curving +curvy +cuscus +cuscuses +cusec +cusecs +cushat +cushats +cushaw +cushaws +cushier +cushiest +cushily cushion +cushioned +cushioning +cushionless +cushions +cushiony +cushy +cusk +cusks +cusp +cuspate +cuspated +cusped +cuspid +cuspidal +cuspidate +cuspidation +cuspidations +cuspides +cuspidor +cuspidors +cuspids +cuspis +cusps +cuss +cussed +cussedly +cussedness +cussednesses +cusser +cussers +cusses +cussing +cusso +cussos +cussword +cusswords +custard +custards +custardy +custodes +custodial +custodian +custodians +custodianship +custodianships +custodies +custody custom +customarily +customariness +customarinesses +customary customer +customers +customhouse +customhouses +customise +customised +customises +customising +customization +customizations +customize +customized +customizer +customizers +customizes +customizing customs +customshouse +customshouses +custos +custumal +custumals cut +cutabilities +cutability +cutaneous +cutaneously +cutaway +cutaways +cutback +cutbacks +cutbank +cutbanks +cutch +cutcheries +cutchery +cutches +cutdown +cutdowns +cute +cutely +cuteness +cutenesses +cuter +cutes +cutesie +cutesier +cutesiest +cutest +cutesy +cutey +cuteys +cutgrass +cutgrasses +cuticle +cuticles +cuticula +cuticulae +cuticular +cutie +cuties +cutin +cutinise +cutinised +cutinises +cutinising +cutinize +cutinized +cutinizes +cutinizing +cutins +cutis +cutises +cutlas +cutlases +cutlass +cutlasses +cutler +cutleries +cutlers +cutlery +cutlet +cutlets +cutline +cutlines +cutoff +cutoffs +cutout +cutouts +cutover +cutovers +cutpurse +cutpurses +cuts +cuttable +cuttage +cuttages +cutter +cutters +cutthroat +cutthroats +cutties +cutting +cuttingly +cuttings +cuttle +cuttlebone +cuttlebones +cuttled +cuttlefish +cuttlefishes +cuttles +cuttling +cutty +cutup +cutups +cutwater +cutwaters +cutwork +cutworks +cutworm +cutworms +cuvette +cuvettes +cwm +cwms +cyan +cyanamid +cyanamide +cyanamides +cyanamids +cyanate +cyanates +cyanic +cyanid +cyanide +cyanided +cyanides +cyaniding +cyanids +cyanin +cyanine +cyanines +cyanins +cyanite +cyanites +cyanitic +cyano +cyanoacrylate +cyanoacrylates +cyanobacteria +cyanobacterium +cyanocobalamin +cyanocobalamine +cyanocobalamines +cyanocobalamins +cyanoethylate +cyanoethylated +cyanoethylates +cyanoethylating +cyanoethylation +cyanoethylations +cyanogen +cyanogeneses +cyanogenesis +cyanogenetic +cyanogenic +cyanogens +cyanohydrin +cyanohydrins +cyanosed +cyanoses +cyanosis +cyanotic +cyans +cybernated +cybernation +cybernations +cybernetic +cybernetical +cybernetically +cybernetician +cyberneticians +cyberneticist +cyberneticists +cybernetics +cyberpunk +cyberpunks +cyberspace +cyberspaces +cyborg +cyborgs +cycad +cycadeoid +cycadeoids +cycadophyte +cycadophytes +cycads +cycas +cycases +cycasin +cycasins +cyclamate +cyclamates +cyclamen +cyclamens +cyclase +cyclases +cyclazocine +cyclazocines cycle +cyclecar +cyclecars +cycled +cycler +cycleries +cyclers +cyclery +cycles +cyclic +cyclical +cyclicalities +cyclicality +cyclically +cyclicals +cyclicities +cyclicity +cyclicly +cycling +cyclings cyclist +cyclists +cyclitol +cyclitols +cyclization +cyclizations +cyclize +cyclized +cyclizes +cyclizing +cyclo +cycloaddition +cycloadditions +cycloaliphatic +cyclodextrin +cyclodextrins +cyclodiene +cyclodienes +cyclogeneses +cyclogenesis +cyclohexane +cyclohexanes +cyclohexanone +cyclohexanones +cycloheximide +cycloheximides +cyclohexylamine +cyclohexylamines +cycloid +cycloidal +cycloids +cyclometer +cyclometers +cyclonal +cyclone +cyclones +cyclonic +cyclonically +cycloolefin +cycloolefinic +cycloolefins +cyclopaedia +cyclopaedias +cycloparaffin +cycloparaffins +cyclopean +cyclopedia +cyclopedias +cyclopedic +cyclophosphamide +cyclophosphamides +cyclopropane +cyclopropanes +cyclops +cyclorama +cycloramas +cycloramic +cyclos +cycloserine +cycloserines +cycloses +cyclosis +cyclosporine +cyclosporines +cyclostome +cyclostomes +cyclostyle +cyclostyled +cyclostyles +cyclostyling +cyclothymia +cyclothymias +cyclothymic +cyclotomic +cyclotron +cyclotrons +cyder +cyders +cyeses +cyesis +cygnet +cygnets +cylices +cylinder +cylindered +cylindering +cylinders +cylindric +cylindrical +cylindrically +cylix +cyma +cymae +cymar +cymars +cymas +cymatia +cymatium +cymbal +cymbaler +cymbalers +cymbalist +cymbalists +cymbalom +cymbaloms +cymbals +cymbidia +cymbidium +cymbidiums +cymbling +cymblings +cyme +cymene +cymenes +cymes +cymlin +cymling +cymlings +cymlins +cymogene +cymogenes +cymoid +cymol +cymols +cymophane +cymophanes +cymose +cymosely +cymous +cynic +cynical +cynically +cynicism +cynicisms +cynics +cynosure +cynosures +cypher +cyphered +cyphering +cyphers +cypres +cypreses +cypress +cypresses +cyprian +cyprians +cyprinid +cyprinids +cypripedia +cypripedium +cypripediums +cyproheptadine +cyproheptadines +cyproterone +cyproterones +cyprus +cypruses +cypsela +cypselae +cyst +cysteamine +cysteamines +cystein +cysteine +cysteines +cysteins +cystic +cysticerci +cysticercoid +cysticercoids +cysticercoses +cysticercosis +cysticercus +cystine +cystines +cystinuria +cystinurias +cystitides +cystitis +cystocarp +cystocarps +cystoid +cystoids +cystolith +cystoliths +cystoscope +cystoscopes +cystoscopic +cystoscopies +cystoscopy +cysts +cytaster +cytasters +cytidine +cytidines +cytochalasin +cytochalasins +cytochemical +cytochemistries +cytochemistry +cytochrome +cytochromes +cytodifferentiation +cytodifferentiations +cytogenetic +cytogenetical +cytogenetically +cytogeneticist +cytogeneticists +cytogenetics +cytogenies +cytogeny +cytokine +cytokines +cytokineses +cytokinesis +cytokinetic +cytokinin +cytokinins +cytologic +cytological +cytologically +cytologies +cytologist +cytologists +cytology +cytolyses +cytolysin +cytolysins +cytolysis +cytolytic +cytomegalic +cytomegalovirus +cytomegaloviruses +cytomembrane +cytomembranes +cyton +cytons +cytopathic +cytopathogenic +cytopathogenicities +cytopathogenicity +cytophilic +cytophotometric +cytophotometries +cytophotometry +cytoplasm +cytoplasmic +cytoplasmically +cytoplasms +cytosine +cytosines +cytoskeletal +cytoskeleton +cytoskeletons +cytosol +cytosolic +cytosols +cytostatic +cytostatically +cytostatics +cytotaxonomic +cytotaxonomically +cytotaxonomies +cytotaxonomy +cytotechnologies +cytotechnologist +cytotechnologists +cytotechnology +cytotoxic +cytotoxicities +cytotoxicity +cytotoxin +cytotoxins +czar +czardas +czardases +czardom +czardoms +czarevitch +czarevitches +czarevna +czarevnas +czarina +czarinas +czarism +czarisms +czarist +czarists +czaritza +czaritzas +czars +dab +dabbed +dabber +dabbers +dabbing +dabble +dabbled +dabbler +dabblers +dabbles +dabbling +dabblings +dabchick +dabchicks +dabs +dabster +dabsters +dace +daces +dacha +dachas +dachshund +dachshunds +dacker +dackered +dackering +dackers +dacoit +dacoities +dacoits +dacoity +dactyl +dactyli +dactylic +dactylics +dactylologies +dactylology +dactyls +dactylus dad +dada +dadaism +dadaisms +dadaist +dadaistic +dadaists +dadas +daddies +daddle +daddled +daddles +daddling daddy +dado +dadoed +dadoes +dadoing +dados +dads +daedal +daemon +daemonic +daemons +daff +daffed +daffier +daffiest +daffily +daffing +daffodil +daffodils +daffs +daffy +daft +dafter +daftest +daftly +daftness +daftnesses +dag +dagga +daggas +dagger +daggered +daggering +daggerlike +daggers +daggle +daggled +daggles +daggling +daglock +daglocks +dago +dagoba +dagobas +dagoes +dagos +dags +daguerreotype +daguerreotyped +daguerreotypes +daguerreotypies +daguerreotyping +daguerreotypist +daguerreotypists +daguerreotypy +dagwood +dagwoods +dah +dahabeah +dahabeahs +dahabiah +dahabiahs +dahabieh +dahabiehs +dahabiya +dahabiyas +dahl +dahlia +dahlias +dahls +dahoon +dahoons +dahs +daiker +daikered +daikering +daikers +daikon +daikons +dailies +dailiness +dailinesses daily +daimen +daimio +daimios +daimon +daimones +daimonic +daimons +daimyo +daimyos +daintier +dainties +daintiest +daintily +daintiness +daintinesses +dainty +daiquiri +daiquiris +dairies +dairy +dairying +dairyings +dairymaid +dairymaids +dairyman +dairymen +dais +daises +daishiki +daishikis +daisied +daisies +daisy +dak +dakerhen +dakerhens +dakoit +dakoities +dakoits +dakoity +daks +dal +dalapon +dalapons +dalasi +dalasis +dale +daledh +daledhs +dales +dalesman +dalesmen +daleth +daleths +dalles +dalliance +dalliances +dallied +dallier +dalliers +dallies +dally +dallying +dalmatian +dalmatians +dalmatic +dalmatics +dals +dalton +daltonic +daltons dam damage +damageabilities +damageability +damaged +damager +damagers +damages +damaging +damagingly +daman +damans +damar +damars +damascene +damascened +damascenes +damascening +damask +damasked +damasking +damasks +dame +dames +damewort +dameworts +dammar +dammars +dammed +dammer +dammers +damming +damn +damnable +damnableness +damnablenesses +damnably +damnation +damnations +damnatory +damndest +damndests +damned +damneder +damnedest +damnedests +damner +damners +damnified +damnifies +damnify +damnifying +damning +damningly +damns +damosel +damosels +damozel +damozels damp +damped +dampen +dampened +dampener +dampeners +dampening +dampens +damper +dampers +dampest +damping +dampings +dampish +damply +dampness +dampnesses +damps +dams +damsel +damselfish +damselfishes +damselflies +damselfly +damsels +damson +damsons dance +danceable +danced +dancer +dancers +dances +dancing +dandelion +dandelions +dander +dandered +dandering +danders +dandiacal +dandier +dandies +dandiest +dandification +dandifications +dandified +dandifies +dandify +dandifying +dandily +dandle +dandled +dandler +dandlers +dandles +dandling +dandriff +dandriffs +dandruff +dandruffs +dandruffy +dandy +dandyish +dandyishly +dandyism +dandyisms +danegeld +danegelds +daneweed +daneweeds +danewort +daneworts +dang +danged danger +dangered +dangering dangerous +dangerously +dangerousness +dangerousnesses +dangers +danging +dangle +dangled +dangler +danglers +dangles +dangling +dangs +danio +danios +danish +dank +danker +dankest +dankly +dankness +danknesses +danseur +danseurs +danseuse +danseuses +dap +daphne +daphnes +daphnia +daphnias +dapped +dapper +dapperer +dapperest +dapperly +dapperness +dappernesses +dapping +dapple +dappled +dapples +dappling +daps +dapsone +dapsones +darb +darbies +darbs dare +dared +daredevil +daredevilries +daredevilry +daredevils +daredeviltries +daredeviltry +dareful +darer +darers +dares +daresay +daric +darics +daring +daringly +daringness +daringnesses +darings +dariole +darioles dark +darked +darken +darkened +darkener +darkeners +darkening +darkens +darker +darkest +darkey +darkeys +darkie +darkies +darking +darkish +darkle +darkled +darkles +darklier +darkliest +darkling +darkly darkness +darknesses +darkroom +darkrooms +darks +darksome +darky +darling +darlingly +darlingness +darlingnesses +darlings +darn +darndest +darndests +darned +darneder +darnedest +darnel +darnels +darner +darners +darning +darnings +darns +darshan +darshans +dart +dartboard +dartboards +darted +darter +darters +darting +dartle +dartled +dartles +dartling +darts dash +dashboard +dashboards +dashed +dasheen +dasheens +dasher +dashers +dashes +dashi +dashier +dashiest +dashiki +dashikis +dashing +dashingly +dashis +dashpot +dashpots +dashy +dassie +dassies +dastard +dastardliness +dastardlinesses +dastardly +dastards +dasyure +dasyures data +databank +databanks database +databases +datable +dataries +datary +datcha +datchas date +dateable +dated +datedly +datedness +datednesses +dateless +dateline +datelined +datelines +datelining +dater +daters +dates +dating +datival +dative +datively +datives +dato +datos +datto +dattos +datum +datums +datura +daturas +daturic +daub +daube +daubed +dauber +dauberies +daubers +daubery +daubes +daubier +daubiest +daubing +daubries +daubry +daubs +dauby daughter +daughterless +daughters +daunder +daundered +daundering +daunders +daunomycin +daunomycins +daunorubicin +daunorubicins +daunt +daunted +daunter +daunters +daunting +dauntingly +dauntless +dauntlessly +dauntlessness +dauntlessnesses +daunts +dauphin +dauphine +dauphines +dauphins +daut +dauted +dautie +dauties +dauting +dauts +daven +davened +davening +davenport +davenports +davens +davies +davit +davits +davy +daw +dawdle +dawdled +dawdler +dawdlers +dawdles +dawdling +dawed +dawen +dawing +dawk +dawks dawn +dawned +dawning +dawnlike +dawns +daws +dawsonite +dawsonites +dawt +dawted +dawtie +dawties +dawting +dawts day +daybed +daybeds +daybook +daybooks +daybreak +daybreaks +daydream +daydreamed +daydreamer +daydreamers +daydreaming +daydreamlike +daydreams +daydreamt +dayflies +dayflower +dayflowers +dayfly +dayglow +dayglows +daylight +daylighted +daylighting +daylightings +daylights +daylilies +daylily +daylit +daylong +daymare +daymares +dayroom +dayrooms +days +dayside +daysides +daysman +daysmen +daystar +daystars +daytime +daytimes +daywork +dayworks +daze +dazed +dazedly +dazedness +dazednesses +dazes +dazing +dazzle +dazzled +dazzler +dazzlers +dazzles +dazzling +dazzlingly +de +deacidification +deacidifications +deacidified +deacidifies +deacidify +deacidifying +deacon +deaconed +deaconess +deaconesses +deaconing +deaconries +deaconry +deacons +deactivate +deactivated +deactivates +deactivating +deactivation +deactivations +deactivator +deactivators dead +deadbeat +deadbeats +deadbolt +deadbolts +deaden +deadened +deadener +deadeners +deadening +deadeningly +deadenings +deadens +deader +deadest +deadeye +deadeyes +deadfall +deadfalls +deadhead +deadheaded +deadheading +deadheads +deadlier +deadliest +deadlift +deadlifted +deadlifting +deadlifts +deadlight +deadlights deadline +deadlines +deadliness +deadlinesses +deadlock +deadlocked +deadlocking +deadlocks +deadly +deadness +deadnesses +deadpan +deadpanned +deadpanner +deadpanners +deadpanning +deadpans +deads +deadweight +deadweights +deadwood +deadwoods +deaerate +deaerated +deaerates +deaerating +deaeration +deaerations +deaerator +deaerators deaf +deafen +deafened +deafening +deafeningly +deafens +deafer +deafest +deafish +deafly +deafness +deafnesses +deair +deaired +deairing +deairs deal +dealate +dealated +dealates +dealation +dealations +dealer +dealers +dealership +dealerships +dealfish +dealfishes +dealing +dealings +deals +dealt +deaminase +deaminases +deaminate +deaminated +deaminates +deaminating +deamination +deaminations +dean +deaned +deaneries +deanery +deaning +deans +deanship +deanships dear +dearer +dearest +dearie +dearies +dearly +dearness +dearnesses +dears +dearth +dearths +deary +deash +deashed +deashes +deashing +deasil death +deathbed +deathbeds +deathblow +deathblows +deathcup +deathcups +deathful +deathless +deathlessly +deathlessness +deathlessnesses +deathly +deaths +deathsman +deathsmen +deathtrap +deathtraps +deathwatch +deathwatches +deathy +deave +deaved +deaves +deaving +deb +debacle +debacles +debar +debark +debarkation +debarkations +debarked +debarking +debarks +debarment +debarments +debarred +debarring +debars +debase +debased +debasement +debasements +debaser +debasers +debases +debasing +debatable debate +debated +debatement +debatements +debater +debaters +debates +debating +debauch +debauched +debauchee +debauchees +debaucher +debaucheries +debauchers +debauchery +debauches +debauching +debeak +debeaked +debeaking +debeaks +debenture +debentures +debilitate +debilitated +debilitates +debilitating +debilitation +debilitations +debilities +debility +debit +debited +debiting +debits +debonair +debonairly +debonairness +debonairnesses +debone +deboned +deboner +deboners +debones +deboning +debouch +debouche +debouched +debouches +debouching +debouchment +debouchments +debride +debrided +debridement +debridements +debrides +debriding +debrief +debriefed +debriefing +debriefings +debriefs +debris +debruise +debruised +debruises +debruising +debs debt +debtless +debtor +debtors +debts +debug +debugged +debugger +debuggers +debugging +debugs +debunk +debunked +debunker +debunkers +debunking +debunks +debut +debutant +debutante +debutantes +debutants +debuted +debuting +debuts +debye +debyes +decadal decade +decadence +decadences +decadencies +decadency +decadent +decadently +decadents +decades +decaf +decaffeinate +decaffeinated +decaffeinates +decaffeinating +decaffeination +decaffeinations +decafs +decagon +decagons +decagram +decagrams +decahedra +decahedron +decahedrons +decal +decalcification +decalcifications +decalcified +decalcifies +decalcify +decalcifying +decalcomania +decalcomanias +decaliter +decaliters +decalog +decalogs +decalogue +decalogues +decals +decameter +decameters +decamethonium +decamethoniums +decametric +decamp +decamped +decamping +decampment +decampments +decamps +decanal +decane +decanes +decant +decantation +decantations +decanted +decanter +decanters +decanting +decants +decapitate +decapitated +decapitates +decapitating +decapitation +decapitations +decapitator +decapitators +decapod +decapodan +decapodans +decapodous +decapods +decarbonate +decarbonated +decarbonates +decarbonating +decarbonation +decarbonations +decarbonize +decarbonized +decarbonizer +decarbonizers +decarbonizes +decarbonizing +decarboxylase +decarboxylases +decarboxylate +decarboxylated +decarboxylates +decarboxylating +decarboxylation +decarboxylations +decarburization +decarburizations +decarburize +decarburized +decarburizes +decarburizing +decare +decares +decasualization +decasualizations +decasyllabic +decasyllabics +decasyllable +decasyllables +decathlete +decathletes +decathlon +decathlons +decay +decayed +decayer +decayers +decaying +decays +decease +deceased +deceases +deceasing +decedent +decedents +deceit +deceitful +deceitfully +deceitfulness +deceitfulnesses +deceits +deceivable +deceive +deceived +deceiver +deceivers +deceives +deceiving +deceivingly +decelerate +decelerated +decelerates +decelerating +deceleration +decelerations +decelerator +decelerators +decemvir +decemviral +decemvirate +decemvirates +decemviri +decemvirs +decenaries +decenary +decencies +decency +decennia +decennial +decennially +decennials +decennium +decenniums +decent +decenter +decentered +decentering +decenters +decentest +decently +decentralization +decentralizations +decentralize +decentralized +decentralizes +decentralizing +decentre +decentred +decentres +decentring +deception +deceptional +deceptions +deceptive +deceptively +deceptiveness +deceptivenesses +decerebrate +decerebrated +decerebrates +decerebrating +decerebration +decerebrations +decern +decerned +decerning +decerns +decertification +decertifications +decertified +decertifies +decertify +decertifying +dechlorinate +dechlorinated +dechlorinates +dechlorinating +dechlorination +dechlorinations +deciare +deciares +decibel +decibels +decidabilities +decidability +decidable decide +decided +decidedly +decidedness +decidednesses +decider +deciders +decides +deciding +decidua +deciduae +decidual +deciduas +deciduate +deciduous +deciduousness +deciduousnesses +decigram +decigrams +decile +deciles +deciliter +deciliters +decillion +decillions +decimal +decimalization +decimalizations +decimalize +decimalized +decimalizes +decimalizing +decimally +decimals +decimate +decimated +decimates +decimating +decimation +decimations +decimeter +decimeters +decipher +decipherable +deciphered +decipherer +decipherers +deciphering +decipherment +decipherments +deciphers decision +decisional +decisioned +decisioning +decisions +decisive +decisively +decisiveness +decisivenesses +deck +decked +deckel +deckels +decker +deckers +deckhand +deckhands +deckhouse +deckhouses +decking +deckings +deckle +deckles +decks +declaim +declaimed +declaimer +declaimers +declaiming +declaims +declamation +declamations +declamatory +declarable +declarant +declarants +declaration +declarations +declarative +declaratively +declaratory declare +declared +declarer +declarers +declares +declaring +declass +declasse +declassed +declasses +declassification +declassifications +declassified +declassifies +declassify +declassifying +declassing +declaw +declawed +declawing +declaws +declension +declensional +declensions +declinable +declination +declinational +declinations decline +declined +decliner +decliners +declines +declining +declivities +declivitous +declivity +deco +decoct +decocted +decocting +decoction +decoctions +decocts +decode +decoded +decoder +decoders +decodes +decoding +decollate +decollated +decollates +decollating +decollation +decollations +decolletage +decolletages +decollete +decolletes +decolonization +decolonizations +decolonize +decolonized +decolonizes +decolonizing +decolor +decolored +decoloring +decolorization +decolorizations +decolorize +decolorized +decolorizer +decolorizers +decolorizes +decolorizing +decolors +decolour +decoloured +decolouring +decolours +decommission +decommissioned +decommissioning +decommissions +decompensate +decompensated +decompensates +decompensating +decompensation +decompensations +decomposabilities +decomposability +decomposable +decompose +decomposed +decomposer +decomposers +decomposes +decomposing +decomposition +decompositions +decompound +decompress +decompressed +decompresses +decompressing +decompression +decompressions +deconcentrate +deconcentrated +deconcentrates +deconcentrating +deconcentration +deconcentrations +decondition +deconditioned +deconditioning +deconditions +decongest +decongestant +decongestants +decongested +decongesting +decongestion +decongestions +decongestive +decongests +deconsecrate +deconsecrated +deconsecrates +deconsecrating +deconsecration +deconsecrations +deconstruct +deconstructed +deconstructing +deconstruction +deconstructionist +deconstructionists +deconstructions +deconstructive +deconstructor +deconstructors +deconstructs +decontaminate +decontaminated +decontaminates +decontaminating +decontamination +decontaminations +decontaminator +decontaminators +decontrol +decontrolled +decontrolling +decontrols +decor decorate +decorated +decorates +decorating decoration +decorations +decorative +decoratively +decorativeness +decorativenesses +decorator +decorators +decorous +decorously +decorousness +decorousnesses +decors +decorticate +decorticated +decorticates +decorticating +decortication +decortications +decorticator +decorticators +decorum +decorums +decos +decoupage +decoupaged +decoupages +decoupaging +decouple +decoupled +decouples +decoupling +decoy +decoyed +decoyer +decoyers +decoying +decoys decrease +decreased +decreases +decreasing +decreasingly +decree +decreed +decreeing +decreer +decreers +decrees +decrement +decremental +decremented +decrementing +decrements +decrepit +decrepitate +decrepitated +decrepitates +decrepitating +decrepitation +decrepitations +decrepitly +decrepitude +decrepitudes +decrescendo +decrescendos +decrescent +decretal +decretals +decretive +decretory +decrial +decrials +decried +decrier +decriers +decries +decriminalization +decriminalizations +decriminalize +decriminalized +decriminalizes +decriminalizing +decrown +decrowned +decrowning +decrowns +decry +decrying +decrypt +decrypted +decrypting +decryption +decryptions +decrypts +decuman +decumbent +decuple +decupled +decuples +decupling +decuries +decurion +decurions +decurrent +decurve +decurved +decurves +decurving +decury +decussate +decussated +decussates +decussating +decussation +decussations +dedal +dedans dedicate +dedicated +dedicatedly +dedicatee +dedicatees +dedicates +dedicating +dedication +dedications +dedicator +dedicators +dedicatory +dedifferentiate +dedifferentiated +dedifferentiates +dedifferentiating +dedifferentiation +dedifferentiations +deduce +deduced +deduces +deducible +deducing +deduct +deducted +deductibilities +deductibility +deductible +deductibles +deducting +deduction +deductions +deductive +deductively +deducts +dee deed +deeded +deedier +deediest +deeding +deedless +deeds +deedy +deejay +deejays +deem +deemed +deeming +deems +deemster +deemsters deep +deepen +deepened +deepener +deepeners +deepening +deepens +deeper +deepest +deeply +deepness +deepnesses +deeps +deepwater deer +deerberries +deerberry +deerflies +deerfly +deerhound +deerhounds +deerlike +deers +deerskin +deerskins +deerstalker +deerstalkers +deerweed +deerweeds +deeryard +deeryards +dees +deescalate +deescalated +deescalates +deescalating +deescalation +deescalations +deet +deets +deewan +deewans +deface +defaced +defacement +defacements +defacer +defacers +defaces +defacing +defalcate +defalcated +defalcates +defalcating +defalcation +defalcations +defalcator +defalcators +defamation +defamations +defamatory +defame +defamed +defamer +defamers +defames +defaming +defang +defanged +defanging +defangs +defat +defats +defatted +defatting +default +defaulted +defaulter +defaulters +defaulting +defaults +defeasance +defeasances +defeasibilities +defeasibility +defeasible defeat +defeated +defeater +defeaters +defeating +defeatism +defeatisms +defeatist +defeatists +defeats +defeature +defeatures +defecate +defecated +defecates +defecating +defecation +defecations +defect +defected +defecting +defection +defections +defective +defectively +defectiveness +defectivenesses +defectives +defector +defectors +defects +defeminization +defeminizations +defeminize +defeminized +defeminizes +defeminizing defence +defenceman +defencemen +defences defend +defendable +defendant +defendants +defended +defender +defenders +defending +defends +defenestrate +defenestrated +defenestrates +defenestrating +defenestration +defenestrations defense +defensed +defenseless +defenselessly +defenselessness +defenselessnesses +defenseman +defensemen +defenses +defensibilities +defensibility +defensible +defensibly +defensing +defensive +defensively +defensiveness +defensivenesses +defensives +defer +deference +deferences +deferent +deferential +deferentially +deferents +deferment +deferments +deferrable +deferrables +deferral +deferrals +deferred +deferrer +deferrers +deferring +defers +defervescence +defervescences +defi +defiance +defiances +defiant +defiantly +defibrillate +defibrillated +defibrillates +defibrillating +defibrillation +defibrillations +defibrillator +defibrillators +defibrinate +defibrinated +defibrinates +defibrinating +defibrination +defibrinations +deficiencies +deficiency +deficient +deficiently +deficients +deficit +deficits +defied +defier +defiers +defies +defilade +defiladed +defilades +defilading +defile +defiled +defilement +defilements +defiler +defilers +defiles +defiling +definable +definably +define +defined +definement +definements +definer +definers +defines +definienda +definiendum +definiens +definientia +defining +definite +definitely +definiteness +definitenesses +definition +definitional +definitions +definitive +definitively +definitiveness +definitivenesses +definitives +definitize +definitized +definitizes +definitizing +definitude +definitudes +defis +deflagrate +deflagrated +deflagrates +deflagrating +deflagration +deflagrations +deflate +deflated +deflater +deflaters +deflates +deflating +deflation +deflationary +deflations +deflator +deflators +deflea +defleaed +defleaing +defleas +deflect +deflectable +deflected +deflecting +deflection +deflections +deflective +deflector +deflectors +deflects +deflexed +defloration +deflorations +deflower +deflowered +deflowerer +deflowerers +deflowering +deflowers +defoam +defoamed +defoamer +defoamers +defoaming +defoams +defocus +defocused +defocuses +defocusing +defocussed +defocusses +defocussing +defog +defogged +defogger +defoggers +defogging +defogs +defoliant +defoliants +defoliate +defoliated +defoliates +defoliating +defoliation +defoliations +defoliator +defoliators +deforce +deforced +deforcement +deforcements +deforces +deforcing +deforest +deforestation +deforestations +deforested +deforesting +deforests +deform +deformable +deformalize +deformalized +deformalizes +deformalizing +deformation +deformational +deformations +deformative +deformed +deformer +deformers +deforming +deformities +deformity +deforms +defraud +defrauded +defrauder +defrauders +defrauding +defrauds +defray +defrayable +defrayal +defrayals +defrayed +defrayer +defrayers +defraying +defrays +defrock +defrocked +defrocking +defrocks +defrost +defrosted +defroster +defrosters +defrosting +defrosts +deft +defter +deftest +deftly +deftness +deftnesses +defunct +defund +defunded +defunding +defunds +defuse +defused +defuses +defusing +defuze +defuzed +defuzes +defuzing +defy +defying +degage +degame +degames +degami +degamis +degas +degases +degassed +degasser +degassers +degasses +degassing +degauss +degaussed +degausser +degaussers +degausses +degaussing +degeneracies +degeneracy +degenerate +degenerated +degenerately +degenerateness +degeneratenesses +degenerates +degenerating +degeneration +degenerations +degenerative +degerm +degermed +degerming +degerms +deglaciated +deglaciation +deglaciations +deglamorization +deglamorizations +deglamorize +deglamorized +deglamorizes +deglamorizing +deglaze +deglazed +deglazes +deglazing +deglutition +deglutitions +degradable +degradation +degradations +degradative +degrade +degraded +degradedly +degrader +degraders +degrades +degrading +degradingly +degranulation +degranulations +degrease +degreased +degreaser +degreasers +degreases +degreasing degree +degreed +degrees +degressive +degressively +degringolade +degringolades +degum +degummed +degumming +degums +degust +degustation +degustations +degusted +degusting +degusts +dehisce +dehisced +dehiscence +dehiscences +dehiscent +dehisces +dehiscing +dehorn +dehorned +dehorner +dehorners +dehorning +dehorns +dehort +dehorted +dehorting +dehorts +dehumanization +dehumanizations +dehumanize +dehumanized +dehumanizes +dehumanizing +dehumidification +dehumidifications +dehumidified +dehumidifier +dehumidifiers +dehumidifies +dehumidify +dehumidifying +dehydrate +dehydrated +dehydrates +dehydrating +dehydration +dehydrations +dehydrator +dehydrators +dehydrochlorinase +dehydrochlorinases +dehydrochlorinate +dehydrochlorinated +dehydrochlorinates +dehydrochlorinating +dehydrochlorination +dehydrochlorinations +dehydrogenase +dehydrogenases +dehydrogenate +dehydrogenated +dehydrogenates +dehydrogenating +dehydrogenation +dehydrogenations +deice +deiced +deicer +deicers +deices +deicidal +deicide +deicides +deicing +deictic +deific +deifical +deification +deifications +deified +deifier +deifiers +deifies +deiform +deify +deifying +deign +deigned +deigning +deigns +deil +deils +deindustrialization +deindustrializations +deindustrialize +deindustrialized +deindustrializes +deindustrializing +deinonychus +deinonychuses +deinstitutionalization +deinstitutionalizations +deinstitutionalize +deinstitutionalized +deinstitutionalizes +deinstitutionalizing +deionization +deionizations +deionize +deionized +deionizer +deionizers +deionizes +deionizing +deism +deisms +deist +deistic +deistical +deistically +deists +deities +deity +deixis +deixises +deject +dejecta +dejected +dejectedly +dejectedness +dejectednesses +dejecting +dejection +dejections +dejects +dejeuner +dejeuners +dekagram +dekagrams +dekaliter +dekaliters +dekameter +dekameters +dekametric +dekare +dekares +deke +deked +dekes +deking +dekko +dekkos +del +delaine +delaines +delaminate +delaminated +delaminates +delaminating +delamination +delaminations +delate +delated +delates +delating +delation +delations +delator +delators delay +delayed +delayer +delayers +delaying +delays +dele +delead +deleaded +deleading +deleads +deleave +deleaved +deleaves +deleaving +delectabilities +delectability +delectable +delectables +delectably +delectation +delectations +deled +delegable +delegacies +delegacy +delegate +delegated +delegatee +delegatees +delegates +delegating +delegation +delegations +delegator +delegators +delegitimation +delegitimations +deleing +deles delete +deleted +deleterious +deleteriously +deleteriousness +deleteriousnesses +deletes +deleting +deletion +deletions +delf +delfs +delft +delfts +delftware +delftwares +deli +deliberate +deliberated deliberately +deliberateness +deliberatenesses +deliberates +deliberating +deliberation +deliberations +deliberative +deliberatively +deliberativeness +deliberativenesses +delicacies +delicacy +delicate +delicately +delicates +delicatessen +delicatessens delicious +deliciously +deliciousness +deliciousnesses +delict +delicts delight delighted +delightedly +delightedness +delightednesses +delighter +delighters +delightful +delightfully +delightfulness +delightfulnesses +delighting +delights +delightsome +delime +delimed +delimes +deliming +delimit +delimitation +delimitations +delimited +delimiter +delimiters +delimiting +delimits +delineate +delineated +delineates +delineating +delineation +delineations +delineative +delineator +delineators +delinquencies +delinquency +delinquent +delinquently +delinquents +deliquesce +deliquesced +deliquescence +deliquescences +deliquescent +deliquesces +deliquescing +deliria +delirious +deliriously +deliriousness +deliriousnesses +delirium +deliriums +delis +delist +delisted +delisting +delists deliver +deliverabilities +deliverability +deliverable +deliverance +deliverances +delivered +deliverer +deliverers +deliveries +delivering +delivers +delivery +deliveryman +deliverymen +dell +dellies +dells +delly +delocalization +delocalizations +delocalize +delocalized +delocalizes +delocalizing +delouse +deloused +delouser +delousers +delouses +delousing +delphic +delphically +delphinium +delphiniums +dels +delta +deltaic +deltas +deltic +deltoid +deltoidei +deltoideus +deltoids +delude +deluded +deluder +deluders +deludes +deluding +deluge +deluged +deluges +deluging +delusion +delusional +delusionary +delusions +delusive +delusively +delusiveness +delusivenesses +delusory +deluster +delustered +delustering +delusters +deluxe +delve +delved +delver +delvers +delves +delving +demagnetization +demagnetizations +demagnetize +demagnetized +demagnetizer +demagnetizers +demagnetizes +demagnetizing +demagog +demagoged +demagogic +demagogically +demagogies +demagoging +demagogs +demagogue +demagogued +demagogueries +demagoguery +demagogues +demagoguing +demagogy demand +demandable +demandant +demandants +demanded +demander +demanders +demanding +demandingly +demandingness +demandingnesses +demands +demantoid +demantoids +demarcate +demarcated +demarcates +demarcating +demarcation +demarcations +demarche +demarches +demark +demarked +demarking +demarks +demast +demasted +demasting +demasts +dematerialization +dematerializations +dematerialize +dematerialized +dematerializes +dematerializing +deme +demean +demeaned +demeaning +demeanor +demeanors +demeanour +demeanours +demeans +dement +demented +dementedly +dementedness +dementednesses +dementia +demential +dementias +dementing +dements +demerara +demeraras +demerge +demerged +demerger +demergered +demergering +demergers +demerges +demerging +demerit +demerited +demeriting +demerits +demersal +demes +demesne +demesnes +demeton +demetons +demies +demigod +demigoddess +demigoddesses +demigods +demijohn +demijohns +demilitarization +demilitarizations +demilitarize +demilitarized +demilitarizes +demilitarizing +demilune +demilunes +demimondaine +demimondaines +demimonde +demimondes +demineralization +demineralizations +demineralize +demineralized +demineralizer +demineralizers +demineralizes +demineralizing +demirep +demireps +demise +demised +demisemiquaver +demisemiquavers +demises +demising +demission +demissions +demit +demitasse +demitasses +demits +demitted +demitting +demiurge +demiurges +demiurgic +demiurgical +demivolt +demivolts +demiworld +demiworlds +demo +demob +demobbed +demobbing +demobilization +demobilizations +demobilize +demobilized +demobilizes +demobilizing +demobs +democracies +democracy +democrat +democratic +democratically +democratization +democratizations +democratize +democratized +democratizer +democratizers +democratizes +democratizing +democrats +demode +demoded +demodulate +demodulated +demodulates +demodulating +demodulation +demodulations +demodulator +demodulators +demographer +demographers +demographic +demographical +demographically +demographics +demographies +demography +demoiselle +demoiselles +demolish +demolished +demolisher +demolishers +demolishes +demolishing +demolishment +demolishments +demolition +demolitionist +demolitionists +demolitions +demon +demoness +demonesses +demonetization +demonetizations +demonetize +demonetized +demonetizes +demonetizing +demoniac +demoniacal +demoniacally +demoniacs +demonian +demonic +demonical +demonically +demonise +demonised +demonises +demonising +demonism +demonisms +demonist +demonists +demonization +demonizations +demonize +demonized +demonizes +demonizing +demonological +demonologies +demonologist +demonologists +demonology +demons +demonstrabilities +demonstrability +demonstrable +demonstrably +demonstrate +demonstrated +demonstrates +demonstrating +demonstration +demonstrational +demonstrations +demonstrative +demonstratively +demonstrativeness +demonstrativenesses +demonstratives +demonstrator +demonstrators +demoralization +demoralizations +demoralize +demoralized +demoralizer +demoralizers +demoralizes +demoralizing +demoralizingly +demos +demoses +demote +demoted +demotes +demotic +demotics +demoting +demotion +demotions +demotist +demotists +demount +demountable +demounted +demounting +demounts +dempster +dempsters +demulcent +demulcents +demultiplexer +demultiplexers +demur +demure +demurely +demureness +demurenesses +demurer +demurest +demurrage +demurrages +demurral +demurrals +demurred +demurrer +demurrers +demurring +demurs +demy +demyelinating +demyelination +demyelinations +demystification +demystifications +demystified +demystifies +demystify +demystifying +demythologization +demythologizations +demythologize +demythologized +demythologizer +demythologizers +demythologizes +demythologizing +den +denarii +denarius +denary +denationalization +denationalizations +denationalize +denationalized +denationalizes +denationalizing +denaturalization +denaturalizations +denaturalize +denaturalized +denaturalizes +denaturalizing +denaturant +denaturants +denaturation +denaturations +denature +denatured +denatures +denaturing +denazification +denazifications +denazified +denazifies +denazify +denazifying +dendriform +dendrite +dendrites +dendritic +dendrochronological +dendrochronologically +dendrochronologies +dendrochronologist +dendrochronologists +dendrochronology +dendrogram +dendrograms +dendroid +dendrologic +dendrological +dendrologies +dendrologist +dendrologists +dendrology +dendron +dendrons +dene +denegation +denegations +denervate +denervated +denervates +denervating +denervation +denervations +denes +dengue +dengues +deniabilities +deniability +deniable +deniably +denial +denials +denied +denier +deniers +denies +denigrate +denigrated +denigrates +denigrating +denigration +denigrations +denigrative +denigrator +denigrators +denigratory +denim +denims +denitrification +denitrifications +denitrified +denitrifier +denitrifiers +denitrifies +denitrify +denitrifying +denizen +denizened +denizening +denizens +denned +denning +denominal +denominate +denominated +denominates +denominating +denomination +denominational +denominationalism +denominationalisms +denominations +denominative +denominatives +denominator +denominators +denotation +denotations +denotative +denote +denoted +denotement +denotements +denotes +denoting +denotive +denouement +denouements +denounce +denounced +denouncement +denouncements +denouncer +denouncers +denounces +denouncing +dens +dense +densely +denseness +densenesses +denser +densest +densification +densifications +densified +densifies +densify +densifying +densities +densitometer +densitometers +densitometric +densitometries +densitometry +density +dent +dental +dentalia +dentalium +dentally +dentals +dentate +dentated +dented +denticle +denticles +denticulate +denticulated +denticulation +denticulations +dentiform +dentifrice +dentifrices +dentil +dentiled +dentils +dentin +dentinal +dentine +dentines +denting +dentins dentist +dentistries +dentistry +dentists +dentition +dentitions +dentoid +dents +dentulous +dentural +denture +dentures +denturist +denturists +denuclearization +denuclearizations +denuclearize +denuclearized +denuclearizes +denuclearizing +denudate +denudated +denudates +denudating +denudation +denudations +denude +denuded +denudement +denudements +denuder +denuders +denudes +denuding +denumerabilities +denumerability +denumerable +denumerably +denunciation +denunciations +denunciative +denunciatory +deny +denying +denyingly +deodand +deodands +deodar +deodara +deodaras +deodars +deodorant +deodorants +deodorization +deodorizations +deodorize +deodorized +deodorizer +deodorizers +deodorizes +deodorizing +deontic +deontological +deontologies +deontologist +deontologists +deontology +deorbit +deorbited +deorbiting +deorbits +deoxidation +deoxidations +deoxidize +deoxidized +deoxidizer +deoxidizers +deoxidizes +deoxidizing +deoxy +deoxygenate +deoxygenated +deoxygenates +deoxygenating +deoxygenation +deoxygenations +deoxyribonuclease +deoxyribonucleases +deoxyribonucleotide +deoxyribonucleotides +deoxyribose +deoxyriboses +depaint +depainted +depainting +depaints +depart +departed +departee +departees +departing department +departmental +departmentalization +departmentalizations +departmentalize +departmentalized +departmentalizes +departmentalizing +departmentally +departments +departs departure +departures +depauperate depend +dependabilities +dependability +dependable +dependableness +dependablenesses +dependably +dependance +dependances +dependant +dependants +depended +dependence +dependences +dependencies +dependency +dependent +dependently +dependents +depending +depends +deperm +depermed +deperming +deperms +depersonalization +depersonalizations +depersonalize +depersonalized +depersonalizes +depersonalizing +dephosphorylate +dephosphorylated +dephosphorylates +dephosphorylating +dephosphorylation +dephosphorylations +depict +depicted +depicter +depicters +depicting +depiction +depictions +depictor +depictors +depicts +depigmentation +depigmentations +depilate +depilated +depilates +depilating +depilation +depilations +depilatories +depilatory +deplane +deplaned +deplanes +deplaning +depletable +deplete +depleted +depletes +depleting +depletion +depletions +depletive +deplorable +deplorableness +deplorablenesses +deplorably +deplore +deplored +deplorer +deplorers +deplores +deploring +deploringly +deploy +deployable +deployed +deploying +deployment +deployments +deploys +deplume +deplumed +deplumes +depluming +depolarization +depolarizations +depolarize +depolarized +depolarizer +depolarizers +depolarizes +depolarizing +depolish +depolished +depolishes +depolishing +depoliticization +depoliticizations +depoliticize +depoliticized +depoliticizes +depoliticizing +depolymerization +depolymerizations +depolymerize +depolymerized +depolymerizes +depolymerizing +depone +deponed +deponent +deponents +depones +deponing +depopulate +depopulated +depopulates +depopulating +depopulation +depopulations +deport +deportable +deportation +deportations +deported +deportee +deportees +deporting +deportment +deportments +deports +deposal +deposals +depose +deposed +deposer +deposers +deposes +deposing deposit -dept +depositaries +depositary +deposited +depositing +deposition +depositional +depositions +depositor +depositories +depositors +depository +deposits +depot +depots +depravation +depravations +deprave +depraved +depravedly +depravedness +depravednesses +depravement +depravements +depraver +depravers +depraves +depraving +depravities +depravity +deprecate +deprecated +deprecates +deprecating +deprecatingly +deprecation +deprecations +deprecatorily +deprecatory +depreciable +depreciate +depreciated +depreciates +depreciating +depreciatingly +depreciation +depreciations +depreciative +depreciator +depreciators +depreciatory +depredate +depredated +depredates +depredating +depredation +depredations +depredator +depredators +depredatory +depress +depressant +depressants +depressed +depresses +depressible +depressing +depressingly +depression +depressions +depressive +depressively +depressives +depressor +depressors +depressurization +depressurizations +depressurize +depressurized +depressurizes +depressurizing +deprival +deprivals +deprivation +deprivations +deprive +deprived +depriver +deprivers +deprives +depriving +deprogram +deprogramed +deprograming +deprogrammed +deprogrammer +deprogrammers +deprogramming +deprograms +depside +depsides depth +depthless +depths +depurate +depurated +depurates +depurating +deputation +deputations +depute +deputed +deputes +deputies +deputing +deputization +deputizations +deputize +deputized +deputizes +deputizing +deputy +deracinate +deracinated +deracinates +deracinating +deracination +deracinations +deraign +deraigned +deraigning +deraigns +derail +derailed +derailing +derailleur +derailleurs +derailment +derailments +derails +derange +deranged +derangement +derangements +deranges +deranging +derat +derate +derated +derates +derating +derats +deratted +deratting +deray +derays +derbies +derby +dere +derealization +derealizations +deregulate +deregulated +deregulates +deregulating +deregulation +deregulations +derelict +dereliction +derelictions +derelicts +derepress +derepressed +derepresses +derepressing +derepression +derepressions +deride +derided +derider +deriders +derides +deriding +deridingly +deringer +deringers +derision +derisions +derisive +derisively +derisiveness +derisivenesses +derisory +derivable +derivate +derivates +derivation +derivational +derivations +derivative +derivatively +derivativeness +derivativenesses +derivatives +derivatization +derivatizations +derivatize +derivatized +derivatizes +derivatizing +derive +derived +deriver +derivers +derives +deriving +derm +derma +dermabrasion +dermabrasions +dermal +dermas +dermatites +dermatitides +dermatitis +dermatitises +dermatogen +dermatogens +dermatoglyphic +dermatoglyphics +dermatologic +dermatological +dermatologies +dermatologist +dermatologists +dermatology +dermatomal +dermatome +dermatomes +dermatophyte +dermatophytes +dermatoses +dermatosis +dermestid +dermestids +dermic +dermis +dermises +dermoid +dermoids +derms +dernier +derogate +derogated +derogates +derogating +derogation +derogations +derogative +derogatively +derogatorily +derogatory +derrick +derricks +derriere +derrieres +derries +derringer +derringers +derris +derrises +derry +dervish +dervishes +desacralization +desacralizations +desacralize +desacralized +desacralizes +desacralizing +desalinate +desalinated +desalinates +desalinating +desalination +desalinations +desalinator +desalinators +desalinization +desalinizations +desalinize +desalinized +desalinizes +desalinizing +desalt +desalted +desalter +desalters +desalting +desalts +desand +desanded +desanding +desands +descant +descanted +descanting +descants +descend +descendant +descendants +descended +descendent +descendents +descender +descenders +descendible +descending +descends +descension +descensions +descent +descents +describable describe +described +describer +describers +describes +describing +descried +descrier +descriers +descries description +descriptions +descriptive +descriptively +descriptiveness +descriptivenesses +descriptor +descriptors +descry +descrying +desecrate +desecrated +desecrater +desecraters +desecrates +desecrating +desecration +desecrations +desecrator +desecrators +desegregate +desegregated +desegregates +desegregating +desegregation +desegregations +deselect +deselected +deselecting +deselects +desensitization +desensitizations +desensitize +desensitized +desensitizer +desensitizers +desensitizes +desensitizing desert +deserted +deserter +deserters +desertic +desertification +desertifications +deserting +desertion +desertions +deserts deserve +deserved +deservedly +deservedness +deservednesses +deserver +deservers +deserves +deserving +deservings +desex +desexed +desexes +desexing +desexualization +desexualizations +desexualize +desexualized +desexualizes +desexualizing +deshabille +deshabilles +desiccant +desiccants +desiccate +desiccated +desiccates +desiccating +desiccation +desiccations +desiccative +desiccator +desiccators +desiderata +desiderate +desiderated +desiderates +desiderating +desideration +desiderations +desiderative +desideratum design +designate +designated +designates +designating +designation +designations +designative +designator +designators +designatory +designed +designedly +designee +designees +designer +designers +designing +designment +designments +designs +desilver +desilvered +desilvering +desilvers +desinent +desipramine +desipramines +desirabilities +desirability +desirable +desirableness +desirablenesses +desirables +desirably desire +desired +desirer +desirers +desires +desiring +desirous +desirously +desirousness +desirousnesses +desist +desistance +desistances +desisted +desisting +desists desk +deskbound +deskman +deskmen +desks +desktop +desktops +desman +desmans +desmid +desmids +desmoid +desmoids +desmosomal +desmosome +desmosomes +desolate +desolated +desolately +desolateness +desolatenesses +desolater +desolaters +desolates +desolating +desolatingly +desolation +desolations +desolator +desolators +desorb +desorbed +desorbing +desorbs +desorption +desorptions +desoxy +despair +despaired +despairer +despairers +despairing +despairingly +despairs +despatch +despatched +despatches +despatching +desperado +desperadoes +desperados desperate +desperately +desperateness +desperatenesses +desperation +desperations +despicable +despicableness +despicablenesses +despicably +despiritualize +despiritualized +despiritualizes +despiritualizing +despise +despised +despisement +despisements +despiser +despisers +despises +despising +despite +despited +despiteful +despitefully +despitefulness +despitefulnesses +despiteous +despiteously +despites +despiting +despoil +despoiled +despoiler +despoilers +despoiling +despoilment +despoilments +despoils +despoliation +despoliations +despond +desponded +despondence +despondences +despondencies +despondency +despondent +despondently +desponding +desponds +despot +despotic +despotically +despotism +despotisms +despots +desquamate +desquamated +desquamates +desquamating +desquamation +desquamations dessert +desserts +dessertspoon +dessertspoonful +dessertspoonfuls +dessertspoons +dessertspoonsful +destabilization +destabilizations +destabilize +destabilized +destabilizes +destabilizing +destain +destained +destaining +destains destination +destinations +destine +destined +destines +destinies +destining +destiny +destitute +destituteness +destitutenesses +destitution +destitutions +destrier +destriers destroy +destroyed +destroyer +destroyers +destroying +destroys +destruct +destructed +destructibilities +destructibility +destructible +destructing +destruction +destructionist +destructionists +destructions +destructive +destructively +destructiveness +destructivenesses +destructivities +destructivity +destructs +desuetude +desuetudes +desugar +desugared +desugaring +desugars +desulfur +desulfured +desulfuring +desulfurization +desulfurizations +desulfurize +desulfurized +desulfurizes +desulfurizing +desulfurs +desultorily +desultoriness +desultorinesses +desultory +detach +detachabilities +detachability +detachable +detachably +detached +detachedly +detachedness +detachednesses +detacher +detachers +detaches +detaching +detachment +detachments +detail +detailed +detailedly +detailedness +detailednesses +detailer +detailers +detailing +details +detain +detained +detainee +detainees +detainer +detainers +detaining +detainment +detainments +detains +detassel +detasseled +detasseling +detasselled +detasselling +detassels +detect +detectabilities +detectability +detectable +detected +detecter +detecters +detecting +detection +detections detective +detectivelike +detectives +detector +detectors +detects +detent +detente +detentes +detention +detentions +detents +deter +deterge +deterged +detergencies +detergency +detergent +detergents +deterger +detergers +deterges +deterging +deteriorate +deteriorated +deteriorates +deteriorating +deterioration +deteriorations +deteriorative +determent +determents +determinable +determinableness +determinablenesses +determinably +determinacies +determinacy +determinant +determinantal +determinants +determinate +determinately +determinateness +determinatenesses +determination +determinations +determinative +determinatives +determinator +determinators determine +determined +determinedly +determinedness +determinednesses +determiner +determiners +determines +determining +determinism +determinisms +determinist +deterministic +deterministically +determinists +deterrabilities +deterrability +deterrable +deterred +deterrence +deterrences +deterrent +deterrently +deterrents +deterrer +deterrers +deterring +deters +detersive +detersives +detest +detestable +detestableness +detestablenesses +detestably +detestation +detestations +detested +detester +detesters +detesting +detests +dethrone +dethroned +dethronement +dethronements +dethroner +dethroners +dethrones +dethroning +detick +deticked +deticker +detickers +deticking +deticks +detinue +detinues +detonabilities +detonability +detonable +detonatable +detonate +detonated +detonates +detonating +detonation +detonations +detonative +detonator +detonators +detour +detoured +detouring +detours +detox +detoxed +detoxes +detoxicant +detoxicants +detoxicate +detoxicated +detoxicates +detoxicating +detoxication +detoxications +detoxification +detoxifications +detoxified +detoxifies +detoxify +detoxifying +detoxing +detract +detracted +detracting +detraction +detractions +detractive +detractively +detractor +detractors +detracts +detrain +detrained +detraining +detrainment +detrainments +detrains +detribalization +detribalizations +detribalize +detribalized +detribalizes +detribalizing +detriment +detrimental +detrimentally +detrimentals +detriments +detrital +detrition +detritions +detritus +detrude +detruded +detrudes +detruding +detumescence +detumescences +detumescent +deuce +deuced +deucedly +deuces +deucing +deuteragonist +deuteragonists +deuteranomalies +deuteranomalous +deuteranomaly +deuteranope +deuteranopes +deuteranopia +deuteranopias +deuteranopic +deuterate +deuterated +deuterates +deuterating +deuteration +deuterations +deuteric +deuterium +deuteriums +deuterocanonical +deuteron +deuterons +deuterostome +deuterostomes +deutoplasm +deutoplasms +deutzia +deutzias +dev +deva +devaluate +devaluated +devaluates +devaluating +devaluation +devaluations +devalue +devalued +devalues +devaluing +devas +devastate +devastated +devastates +devastating +devastatingly +devastation +devastations +devastative +devastator +devastators +devein +deveined +deveining +deveins +devel +develed +develing develop +developable +develope +developed +developer +developers +developes +developing development +developmental +developmentally +developments +develops +devels +deverbal +deverbative +deverbatives +devest +devested +devesting +devests +deviance +deviances +deviancies +deviancy +deviant +deviants +deviate +deviated +deviates +deviating +deviation +deviationism +deviationisms +deviationist +deviationists +deviations +deviator +deviators +deviatory +device +devices +devil +deviled +devilfish +devilfishes +deviling +devilish +devilishly +devilishness +devilishnesses +devilkin +devilkins +devilled +devilling +devilment +devilments +devilries +devilry +devils +deviltries +deviltry +devilwood +devilwoods +devious +deviously +deviousness +deviousnesses +devisable +devisal +devisals +devise +devised +devisee +devisees +deviser +devisers +devises +devising +devisor +devisors +devitalize +devitalized +devitalizes +devitalizing +devitrification +devitrifications +devitrified +devitrifies +devitrify +devitrifying +devocalize +devocalized +devocalizes +devocalizing +devoice +devoiced +devoices +devoicing +devoid +devoir +devoirs +devolution +devolutionary +devolutionist +devolutionists +devolutions +devolve +devolved +devolves +devolving +devon +devons devote +devoted +devotedly +devotedness +devotednesses +devotee +devotees +devotement +devotements +devotes +devoting devotion +devotional +devotionally +devotionals +devotions +devour +devoured +devourer +devourers +devouring +devours +devout +devouter +devoutest +devoutly +devoutness +devoutnesses +devs +dew +dewan +dewans +dewar +dewars +dewater +dewatered +dewaterer +dewaterers +dewatering +dewaters +dewax +dewaxed +dewaxes +dewaxing +dewberries +dewberry +dewclaw +dewclaws +dewdrop +dewdrops +dewed +dewfall +dewfalls +dewier +dewiest +dewily +dewiness +dewinesses +dewing +dewlap +dewlapped +dewlaps +dewless +dewool +dewooled +dewooling +dewools +deworm +dewormed +dewormer +dewormers +deworming +deworms +dews +dewy +dex +dexamethasone +dexamethasones +dexes +dexie +dexies +dexter +dexterities +dexterity +dexterous +dexterously +dexterousness +dexterousnesses +dextral +dextran +dextranase +dextranases +dextrans +dextrin +dextrine +dextrines +dextrins +dextro +dextroamphetamine +dextroamphetamines +dextrorotary +dextrorotatory +dextrose +dextroses +dextrous +dexy +dey +deys +dezinc +dezinced +dezincing +dezincked +dezincking +dezincs +dhak +dhaks +dhal +dhals +dharma +dharmas +dharmic +dharna +dharnas +dhobi +dhobis +dhole +dholes +dhoolies +dhooly +dhoora +dhooras +dhooti +dhootie +dhooties +dhootis +dhoti +dhotis +dhourra +dhourras +dhow +dhows +dhurna +dhurnas +dhurrie +dhurries +dhuti +dhutis +diabase +diabases +diabasic +diabetes +diabetic +diabetics +diabetogenic +diabetologist +diabetologists +diablerie +diableries +diablery +diabolic +diabolical +diabolically +diabolicalness +diabolicalnesses +diabolism +diabolisms +diabolist +diabolists +diabolize +diabolized +diabolizes +diabolizing +diabolo +diabolos +diacetyl +diacetyls +diachronic +diachronically +diachronies +diachrony +diacid +diacidic +diacids +diaconal +diaconate +diaconates +diacritic +diacritical +diacritics +diadelphous +diadem +diademed +diademing +diadems +diadromous +diaereses +diaeresis +diaeretic +diageneses +diagenesis +diagenetic +diagenetically +diageotropic +diagnosable +diagnose +diagnoseable +diagnosed +diagnoses +diagnosing +diagnosis +diagnostic +diagnostical +diagnostically +diagnostician +diagnosticians +diagnostics +diagonal +diagonalizable +diagonalization +diagonalizations +diagonalize +diagonalized +diagonalizes +diagonalizing +diagonally +diagonals diagram +diagramed +diagraming +diagrammable +diagrammatic +diagrammatical +diagrammatically +diagrammed +diagramming +diagrams +diagraph +diagraphs +diakineses +diakinesis dial +dialect +dialectal +dialectally +dialectic +dialectical +dialectically +dialectician +dialecticians +dialectics +dialectological +dialectologically +dialectologies +dialectologist +dialectologists +dialectology +dialects +dialed +dialer +dialers +dialing +dialings +dialist +dialists +diallage +diallages +dialled +diallel +dialler +diallers +dialling +diallings +diallist +diallists dialog +dialoged +dialoger +dialogers +dialogic +dialogical +dialogically +dialoging +dialogist +dialogistic +dialogists +dialogs dialogue +dialogued +dialogues +dialoguing +dials +dialysate +dialysates +dialyse +dialysed +dialyser +dialysers +dialyses +dialysing +dialysis +dialytic +dialyzable +dialyzate +dialyzates +dialyze +dialyzed +dialyzer +dialyzers +dialyzes +dialyzing +diamagnetic +diamagnetism +diamagnetisms +diamante +diamantes +diameter +diameters +diametral +diametric +diametrical +diametrically +diamide +diamides +diamin +diamine +diamines +diamins diamond +diamondback +diamondbacks +diamonded +diamondiferous +diamonding +diamonds +dianthus +dianthuses +diapason +diapasons +diapause +diapaused +diapauses +diapausing +diapedeses +diapedesis +diaper +diapered +diapering +diapers +diaphaneities +diaphaneity +diaphanous +diaphanously +diaphanousness +diaphanousnesses +diaphone +diaphones +diaphonies +diaphony +diaphorase +diaphorases +diaphoreses +diaphoresis +diaphoretic +diaphoretics +diaphragm +diaphragmatic +diaphragmatically +diaphragms +diaphyseal +diaphyses +diaphysial +diaphysis +diapir +diapiric +diapirs +diapositive +diapositives +diapsid +diarchic +diarchies +diarchy +diaries +diarist +diarists +diarrhea +diarrheal +diarrheas +diarrheic +diarrhetic +diarrhoea +diarrhoeas +diarthroses +diarthrosis diary +diaspora +diasporas +diaspore +diaspores +diastase +diastases +diastatic +diastem +diastema +diastemata +diastems +diaster +diastereoisomer +diastereoisomeric +diastereoisomerism +diastereoisomerisms +diastereoisomers +diastereomer +diastereomeric +diastereomers +diasters +diastole +diastoles +diastolic +diastral +diastrophic +diastrophically +diastrophism +diastrophisms +diatessaron +diatessarons +diathermanous +diathermic +diathermies +diathermy +diatheses +diathesis +diathetic +diatom +diatomaceous +diatomic +diatomite +diatomites +diatoms +diatonic +diatonically +diatribe +diatribes +diatron +diatrons +diazepam +diazepams +diazin +diazine +diazines +diazinon +diazinons +diazins +diazo +diazole +diazoles +diazonium +diazoniums +diazotization +diazotizations +diazotize +diazotized +diazotizes +diazotizing +dib +dibasic +dibbed +dibber +dibbers +dibbing +dibble +dibbled +dibbler +dibblers +dibbles +dibbling +dibbuk +dibbukim +dibbuks +dibenzofuran +dibenzofurans +dibs +dicarboxylic +dicast +dicastic +dicasts +dice +diced +dicentra +dicentras +dicentric +dicentrics +dicer +dicers +dices +dicey +dichasia +dichasium +dichlorobenzene +dichlorobenzenes +dichlorodifluoromethane +dichlorodifluoromethanes +dichloroethane +dichloroethanes +dichlorvos +dichlorvoses +dichogamies +dichogamous +dichogamy +dichondra +dichondras +dichotic +dichotically +dichotomies +dichotomist +dichotomists +dichotomization +dichotomizations +dichotomize +dichotomized +dichotomizes +dichotomizing +dichotomous +dichotomously +dichotomousness +dichotomousnesses +dichotomy +dichroic +dichroism +dichroisms +dichromat +dichromate +dichromates +dichromatic +dichromatism +dichromatisms +dichromats +dichroscope +dichroscopes +dicier +diciest +dicing +dick +dickcissel +dickcissels +dicked +dickens +dickenses +dicker +dickered +dickering +dickers +dickey +dickeys +dickie +dickier +dickies +dickiest +dicking +dicks +dicky +diclinies +diclinous +dicliny +dicot +dicots +dicotyl +dicotyledon +dicotyledonous +dicotyledons +dicotyls +dicoumarin +dicoumarins +dicoumarol +dicoumarols +dicrotal +dicrotic +dicrotism +dicrotisms +dicta +dictate +dictated +dictates +dictating dictation +dictations +dictator +dictatorial +dictatorially +dictatorialness +dictatorialnesses +dictators +dictatorship +dictatorships +dictier +dictiest +diction +dictional +dictionally +dictionaries dictionary +dictions +dictum +dictums +dicty +dictyosome +dictyosomes +dictyostele +dictyosteles +dicumarol +dicumarols +dicyclic +dicyclies +dicycly +dicynodont +dicynodonts +did +didact +didactic +didactical +didactically +didacticism +didacticisms +didactics +didacts +didactyl +didapper +didappers +diddle +diddled +diddler +diddlers +diddles +diddley +diddleys +diddlies +diddling +diddly +diddlysquat +didgeridoo +didgeridoos +didie +didies +didjeridoo +didjeridoos +dido +didoes +didos +didst +didy +didymium +didymiums +didymous +didynamies +didynamy die +dieback +diebacks +diecious +died +dieffenbachia +dieffenbachias +diehard +diehards +dieing +diel +dieldrin +dieldrins +dielectric +dielectrics +diemaker +diemakers +diencephala +diencephalic +diencephalon +diencephalons +diene +dienes +diereses +dieresis +dieretic +dies +diesel +dieseled +dieseling +dieselings +dieselization +dieselizations +dieselize +dieselized +dieselizes +dieselizing +diesels +dieses +diesis +diester +diesters +diestock +diestocks +diestrous +diestrum +diestrums +diestrus +diestruses diet +dietaries +dietarily +dietary +dieted +dieter +dieters +dietetic +dietetically +dietetics +diether +diethers +diethylcarbamazine +diethylcarbamazines +diethylstilbestrol +diethylstilbestrols +dietician +dieticians +dieting +dietitian +dietitians +diets differ +differed difference +differenced +differences +differencing different +differentia +differentiabilities +differentiability +differentiable +differentiae +differential +differentially +differentials +differentiate +differentiated +differentiates +differentiating +differentiation +differentiations +differently +differentness +differentnesses +differing +differs +difficile difficult +difficulties +difficultly difficulty +diffidence +diffidences +diffident +diffidently +diffract +diffracted +diffracting +diffraction +diffractions +diffractometer +diffractometers +diffractometric +diffractometries +diffractometry +diffracts +diffuse +diffused +diffusely +diffuseness +diffusenesses +diffuser +diffusers +diffuses +diffusible +diffusing +diffusion +diffusional +diffusionism +diffusionisms +diffusionist +diffusionists +diffusions +diffusive +diffusively +diffusiveness +diffusivenesses +diffusivities +diffusivity +diffusor +diffusors +difunctional dig +digamies +digamist +digamists +digamma +digammas +digamous +digamy +digastric +digenetic digest +digested +digester +digesters +digestibilities +digestibility +digestible +digesting +digestion +digestions +digestive +digestively +digestives +digestor +digestors +digests +digged +digger +diggers +digging +diggings +dight +dighted +dighting +dights +digit digital +digitalin +digitalins +digitalis +digitalises +digitalization +digitalizations +digitalize +digitalized +digitalizes +digitalizing +digitally +digitals +digitate +digitately +digitigrade +digitization +digitizations +digitize +digitized +digitizer +digitizers +digitizes +digitizing +digitonin +digitonins +digitoxigenin +digitoxigenins +digitoxin +digitoxins +digits +diglot +diglots +diglyceride +diglycerides +dignified +dignifies +dignify +dignifying +dignitaries +dignitary +dignities dignity +digoxin +digoxins +digraph +digraphic +digraphically +digraphs +digress +digressed +digresses +digressing +digression +digressional +digressionary +digressions +digressive +digressively +digressiveness +digressivenesses +digs +dihedral +dihedrals +dihedron +dihedrons +dihybrid +dihybrids +dihydric +dihydroergotamine +dihydroergotamines +dihydroxyacetone +dihydroxyacetones +dikdik +dikdiks +dike +diked +diker +dikers +dikes +dikey +diking +diktat +diktats +dilapidate +dilapidated +dilapidates +dilapidating +dilapidation +dilapidations +dilatabilities +dilatability +dilatable +dilatancies +dilatancy +dilatant +dilatants +dilatate +dilatation +dilatational +dilatations +dilate +dilated +dilater +dilaters +dilates +dilating +dilation +dilations +dilative +dilatometer +dilatometers +dilatometric +dilatometries +dilatometry +dilator +dilatorily +dilatoriness +dilatorinesses +dilators +dilatory +dildo +dildoe +dildoes +dildos dilemma +dilemmas +dilemmatic +dilemmic +dilettante +dilettantes +dilettanti +dilettantish +dilettantism +dilettantisms +diligence +diligences +diligent +diligently +dill +dilled +dillies +dills +dilly +dillydallied +dillydallies +dillydally +dillydallying +diluent +diluents +dilute +diluted +diluteness +dilutenesses +diluter +diluters +dilutes +diluting +dilution +dilutions +dilutive +dilutor +dilutors +diluvia +diluvial +diluvian +diluvion +diluvions +diluvium +diluviums +dim +dime +dimenhydrinate +dimenhydrinates dimension +dimensional +dimensionalities +dimensionality +dimensionally +dimensioned +dimensioning +dimensionless +dimensions +dimer +dimercaprol +dimercaprols +dimeric +dimerism +dimerisms +dimerization +dimerizations +dimerize +dimerized +dimerizes +dimerizing +dimerous +dimers +dimes +dimeter +dimeters +dimethoate +dimethoates +dimethyl +dimethylhydrazine +dimethylhydrazines +dimethylnitrosamine +dimethylnitrosamines +dimethyls +dimethyltryptamine +dimethyltryptamines +dimetric +diminish +diminishable +diminished +diminishes +diminishing +diminishment +diminishments +diminuendo +diminuendos +diminution +diminutions +diminutive +diminutively +diminutiveness +diminutivenesses +diminutives +dimities +dimity +dimly +dimmable +dimmed +dimmer +dimmers +dimmest +dimming +dimness +dimnesses +dimorph +dimorphic +dimorphism +dimorphisms +dimorphous +dimorphs +dimout +dimouts +dimple +dimpled +dimples +dimplier +dimpliest +dimpling +dimply +dims +dimwit +dimwits +dimwitted +din +dinar +dinars +dindle +dindled +dindles +dindling +dine +dined +diner +dineric +dinero +dineros +diners +dines +dinette +dinettes +ding +dingbat +dingbats +dingdong +dingdonged +dingdonging +dingdongs +dinge +dinged +dinger +dingers +dinges +dingey +dingeys +dinghies +dinghy +dingier +dingies +dingiest +dingily +dinginess +dinginesses +dinging +dingle +dingleberries +dingleberry +dingles +dingo +dingoes +dings +dingus +dinguses +dingy +dining +dinitro +dinitrobenzene +dinitrobenzenes +dinitrophenol +dinitrophenols +dink +dinked +dinkey +dinkeys +dinkier +dinkies +dinkiest +dinking +dinkly +dinks +dinkum +dinkums +dinky +dinned dinner +dinnerless +dinners +dinnertime +dinnertimes +dinnerware +dinnerwares +dinning +dinoflagellate +dinoflagellates dinosaur +dinosaurian +dinosaurs +dins +dint +dinted +dinting +dints +dinucleotide +dinucleotides +diobol +diobolon +diobolons +diobols +diocesan +diocesans +diocese +dioceses +diode +diodes +dioecies +dioecious +dioecism +dioecisms +dioecy +dioicous +diol +diolefin +diolefins +diols +diopside +diopsides +diopsidic +dioptase +dioptases +diopter +diopters +dioptral +dioptre +dioptres +dioptric +diorama +dioramas +dioramic +diorite +diorites +dioritic +dioxan +dioxane +dioxanes +dioxans +dioxid dioxide +dioxides +dioxids +dioxin +dioxins dip +dipeptidase +dipeptidases +dipeptide +dipeptides +diphase +diphasic +diphenhydramine +diphenhydramines +diphenyl +diphenylamine +diphenylamines +diphenylhydantoin +diphenylhydantoins +diphenyls +diphosgene +diphosgenes +diphosphate +diphosphates +diphtheria +diphtherial +diphtherias +diphtheritic +diphtheroid +diphtheroids +diphthong +diphthongal +diphthongization +diphthongizations +diphthongize +diphthongized +diphthongizes +diphthongizing +diphthongs +diphyletic +diphyodont +diplegia +diplegias +diplex +diplexer +diplexers +diploblastic +diplococci +diplococcus +diplodocus +diplodocuses +diploe +diploes +diploic +diploid +diploidies +diploids +diploidy diploma +diplomacies +diplomacy +diplomaed +diplomaing +diplomas +diplomat +diplomata +diplomate +diplomates +diplomatic +diplomatically +diplomatist +diplomatists +diplomats +diplont +diplontic +diplonts +diplophase +diplophases +diplopia +diplopias +diplopic +diplopod +diplopods +diploses +diplosis +diplotene +diplotenes +dipnet +dipnets +dipnetted +dipnetting +dipnoan +dipnoans +dipodic +dipodies +dipody +dipolar +dipole +dipoles +dippable +dipped +dipper +dipperful +dipperfuls +dippers +dippier +dippiest +dipping +dippy +dips +dipsades +dipsas +dipso +dipsomania +dipsomaniac +dipsomaniacal +dipsomaniacs +dipsomanias +dipsos +dipstick +dipsticks +dipt +diptera +dipteral +dipteran +dipterans +dipterocarp +dipterocarps +dipteron +dipterous +diptyca +diptycas +diptych +diptychs +diquat +diquats +dirdum +dirdums +dire direct +directed +directedness +directednesses +directer +directest +directing direction +directional +directionalities +directionality +directionless +directionlessness +directionlessnesses +directions +directive +directives +directivities +directivity +directly +directness +directnesses director +directorate +directorates +directorial +directories +directors +directorship +directorships directory +directress +directresses +directrice +directrices +directrix +directrixes +directs +direful +direfully +direly +direness +direnesses +direr +direst +dirge +dirgeful +dirgelike +dirges +dirham +dirhams +dirigible +dirigibles +dirigisme +dirigismes +dirigiste +diriment +dirk +dirked +dirking +dirks +dirl +dirled +dirling +dirls +dirndl +dirndls dirt +dirtbag +dirtbags +dirtied +dirtier +dirties +dirtiest +dirtily +dirtiness +dirtinesses +dirts dirty +dirtying +dis +disabilities disability +disable disabled +disablement +disablements +disables +disabling +disabuse +disabused +disabuses +disabusing +disaccharidase +disaccharidases +disaccharide +disaccharides +disaccord +disaccorded +disaccording +disaccords +disaccustom +disaccustomed +disaccustoming +disaccustoms disadvantage +disadvantaged +disadvantagedness +disadvantagednesses +disadvantageous +disadvantageously +disadvantageousness +disadvantageousnesses +disadvantages +disadvantaging +disaffect +disaffected +disaffecting +disaffection +disaffections +disaffects +disaffiliate +disaffiliated +disaffiliates +disaffiliating +disaffiliation +disaffiliations +disaffirm +disaffirmance +disaffirmances +disaffirmed +disaffirming +disaffirms +disaggregate +disaggregated +disaggregates +disaggregating +disaggregation +disaggregations +disaggregative disagree +disagreeable +disagreeableness +disagreeablenesses +disagreeably +disagreed +disagreeing disagreement +disagreements +disagrees +disallow +disallowance +disallowances +disallowed +disallowing +disallows +disambiguate +disambiguated +disambiguates +disambiguating +disambiguation +disambiguations +disannul +disannulled +disannulling +disannuls disappear +disappearance +disappearances +disappeared +disappearing +disappears disappoint disappointed +disappointedly +disappointing +disappointingly +disappointment +disappointments +disappoints +disapprobation +disapprobations +disapproval +disapprovals +disapprove +disapproved +disapprover +disapprovers +disapproves +disapproving +disapprovingly +disarm +disarmament +disarmaments +disarmed +disarmer +disarmers +disarming +disarmingly +disarms +disarrange +disarranged +disarrangement +disarrangements +disarranges +disarranging +disarray +disarrayed +disarraying +disarrays +disarticulate +disarticulated +disarticulates +disarticulating +disarticulation +disarticulations +disassemble +disassembled +disassembles +disassemblies +disassembling +disassembly +disassociate +disassociated +disassociates +disassociating +disassociation +disassociations disaster +disasters +disastrous +disastrously +disavow +disavowable +disavowal +disavowals +disavowed +disavowing +disavows +disband +disbanded +disbanding +disbandment +disbandments +disbands +disbar +disbarment +disbarments +disbarred +disbarring +disbars +disbelief +disbeliefs +disbelieve +disbelieved +disbeliever +disbelievers +disbelieves +disbelieving +disbenefit +disbenefits +disbosom +disbosomed +disbosoming +disbosoms +disbound +disbowel +disboweled +disboweling +disbowelled +disbowelling +disbowels +disbud +disbudded +disbudding +disbuds +disburden +disburdened +disburdening +disburdenment +disburdenments +disburdens +disburse +disbursed +disbursement +disbursements +disburser +disbursers +disburses +disbursing disc +discalced +discant +discanted +discanting +discants +discard +discardable +discarded +discarder +discarders +discarding +discards +discarnate +discase +discased +discases +discasing +disced +discept +discepted +discepting +discepts +discern +discernable +discerned +discerner +discerners +discernible +discernibly +discerning +discerningly +discernment +discernments +discerns +discharge +dischargeable +discharged +dischargee +dischargees +discharger +dischargers +discharges +discharging +disci +disciform +discing +disciple +discipled +disciples +discipleship +discipleships +disciplinable +disciplinal +disciplinarian +disciplinarians +disciplinarily +disciplinarities +disciplinarity +disciplinary +discipline +disciplined +discipliner +discipliners +disciplines +discipling +disciplining +disclaim +disclaimed +disclaimer +disclaimers +disclaiming +disclaims +disclamation +disclamations +disclike +disclimax +disclimaxes +disclose +disclosed +discloser +disclosers +discloses +disclosing +disclosure +disclosures +disco +discoed +discographer +discographers +discographic +discographical +discographies +discography +discoid +discoidal +discoids +discoing +discolor +discoloration +discolorations +discolored +discoloring +discolors +discombobulate +discombobulated +discombobulates +discombobulating +discombobulation +discombobulations +discomfit +discomfited +discomfiting +discomfits +discomfiture +discomfitures +discomfort +discomfortable +discomforted +discomforting +discomforts +discommend +discommended +discommending +discommends +discommode +discommoded +discommodes +discommoding +discompose +discomposed +discomposes +discomposing +discomposure +discomposures +disconcert +disconcerted +disconcerting +disconcertingly +disconcertment +disconcertments +disconcerts +disconfirm +disconfirmed +disconfirming +disconfirms +disconformities +disconformity +disconnect +disconnected +disconnectedly +disconnectedness +disconnectednesses +disconnecting +disconnection +disconnections +disconnects +disconsolate +disconsolately +disconsolateness +disconsolatenesses +disconsolation +disconsolations +discontent +discontented +discontentedly +discontentedness +discontentednesses +discontenting +discontentment +discontentments +discontents +discontinuance +discontinuances +discontinuation +discontinuations +discontinue +discontinued +discontinues +discontinuing +discontinuities +discontinuity +discontinuous +discontinuously +discophile +discophiles +discord +discordance +discordances +discordancies +discordancy +discordant +discordantly +discorded +discording +discords +discos +discotheque +discotheques discount +discountable +discounted +discountenance +discountenanced +discountenances +discountenancing +discounter +discounters +discounting +discounts discourage +discourageable +discouraged +discouragement +discouragements +discourager +discouragers +discourages +discouraging +discouragingly +discourse +discoursed +discourser +discoursers +discourses +discoursing +discourteous +discourteously +discourteousness +discourteousnesses +discourtesies +discourtesy discover +discoverable +discovered +discoverer +discoverers +discoveries +discovering +discovers discovery +discredit +discreditable +discreditably +discredited +discrediting +discredits +discreet +discreeter +discreetest +discreetly +discreetness +discreetnesses +discrepancies +discrepancy +discrepant +discrepantly +discrete +discretely +discreteness +discretenesses +discretion +discretionary +discretions +discriminabilities +discriminability +discriminable +discriminably +discriminant +discriminants +discriminate +discriminated +discriminates +discriminating +discriminatingly discrimination +discriminational +discriminations +discriminative +discriminator +discriminatorily +discriminators +discriminatory +discrown +discrowned +discrowning +discrowns +discs +discursive +discursively +discursiveness +discursivenesses +discus +discuses discuss +discussable +discussant +discussants +discussed +discusser +discussers +discusses +discussible +discussing discussion +discussions +disdain +disdained +disdainful +disdainfully +disdainfulness +disdainfulnesses +disdaining +disdains disease +diseased +diseases +diseasing +diseconomies +diseconomy +disembark +disembarkation +disembarkations +disembarked +disembarking +disembarks +disembarrass +disembarrassed +disembarrasses +disembarrassing +disembodied +disembodies +disembody +disembodying +disembogue +disembogued +disembogues +disemboguing +disembowel +disemboweled +disemboweling +disembowelled +disembowelling +disembowelment +disembowelments +disembowels +disenchant +disenchanted +disenchanter +disenchanters +disenchanting +disenchantingly +disenchantment +disenchantments +disenchants +disencumber +disencumbered +disencumbering +disencumbers +disendow +disendowed +disendower +disendowers +disendowing +disendowment +disendowments +disendows +disenfranchise +disenfranchised +disenfranchisement +disenfranchisements +disenfranchises +disenfranchising +disengage +disengaged +disengagement +disengagements +disengages +disengaging +disentail +disentailed +disentailing +disentails +disentangle +disentangled +disentanglement +disentanglements +disentangles +disentangling +disenthral +disenthrall +disenthralled +disenthralling +disenthralls +disenthrals +disentitle +disentitled +disentitles +disentitling +disequilibrate +disequilibrated +disequilibrates +disequilibrating +disequilibration +disequilibrations +disequilibria +disequilibrium +disequilibriums +disestablish +disestablished +disestablishes +disestablishing +disestablishment +disestablishmentarian +disestablishmentarians +disestablishments +disesteem +disesteemed +disesteeming +disesteems +diseuse +diseuses +disfavor +disfavored +disfavoring +disfavors +disfigure +disfigured +disfigurement +disfigurements +disfigures +disfiguring +disfranchise +disfranchised +disfranchisement +disfranchisements +disfranchises +disfranchising +disfrock +disfrocked +disfrocking +disfrocks +disfunction +disfunctional +disfunctions +disfurnish +disfurnished +disfurnishes +disfurnishing +disfurnishment +disfurnishments +disgorge +disgorged +disgorges +disgorging +disgrace +disgraced +disgraceful +disgracefully +disgracefulness +disgracefulnesses +disgracer +disgracers +disgraces +disgracing +disgruntle +disgruntled +disgruntlement +disgruntlements +disgruntles +disgruntling +disguise +disguised +disguisedly +disguisement +disguisements +disguiser +disguisers +disguises +disguising +disgust +disgusted +disgustedly +disgustful +disgustfully disgusting +disgustingly +disgusts dish +dishabille +dishabilles +disharmonies +disharmonious +disharmonize +disharmonized +disharmonizes +disharmonizing +disharmony +dishcloth +dishcloths +dishclout +dishclouts +dishearten +disheartened +disheartening +dishearteningly +disheartenment +disheartenments +disheartens +dished +dishelm +dishelmed +dishelming +dishelms +disherit +disherited +disheriting +disherits +dishes +dishevel +disheveled +disheveling +dishevelled +dishevelling +dishevels +dishful +dishfuls +dishier +dishiest +dishing +dishlike +dishonest +dishonesties +dishonestly +dishonesty +dishonor +dishonorable +dishonorableness +dishonorablenesses +dishonorably +dishonored +dishonorer +dishonorers +dishonoring +dishonors +dishpan +dishpans +dishrag +dishrags +dishtowel +dishtowels +dishware +dishwares +dishwasher +dishwashers +dishwater +dishwaters +dishy +disillusion +disillusioned +disillusioning +disillusionment +disillusionments +disillusions +disincentive +disincentives +disinclination +disinclinations +disincline +disinclined +disinclines +disinclining +disinfect +disinfectant +disinfectants +disinfected +disinfecting +disinfection +disinfections +disinfects +disinfest +disinfestant +disinfestants +disinfestation +disinfestations +disinfested +disinfesting +disinfests +disinflation +disinflationary +disinflations +disinformation +disinformations +disingenuous +disingenuously +disingenuousness +disingenuousnesses +disinherit +disinheritance +disinheritances +disinherited +disinheriting +disinherits +disinhibit +disinhibited +disinhibiting +disinhibition +disinhibitions +disinhibits +disintegrate +disintegrated +disintegrates +disintegrating +disintegration +disintegrations +disintegrative +disintegrator +disintegrators +disinter +disinterest +disinterested +disinterestedly +disinterestedness +disinterestednesses +disinteresting +disinterests +disintermediation +disintermediations +disinterment +disinterments +disinterred +disinterring +disinters +disintoxicate +disintoxicated +disintoxicates +disintoxicating +disintoxication +disintoxications +disinvest +disinvested +disinvesting +disinvestment +disinvestments +disinvests +disinvite +disinvited +disinvites +disinviting +disject +disjected +disjecting +disjects +disjoin +disjoined +disjoining +disjoins +disjoint +disjointed +disjointedly +disjointedness +disjointednesses +disjointing +disjoints +disjunct +disjunction +disjunctions +disjunctive +disjunctively +disjunctives +disjuncts +disjuncture +disjunctures disk +disked +diskette +diskettes +disking +disklike +disks +dislikable dislike +dislikeable +disliked +disliker +dislikers +dislikes +disliking +dislimn +dislimned +dislimning +dislimns +dislocate +dislocated +dislocates +dislocating +dislocation +dislocations +dislodge +dislodged +dislodgement +dislodgements +dislodges +dislodging +dislodgment +dislodgments +disloyal +disloyally +disloyalties +disloyalty +dismal +dismaler +dismalest +dismally +dismalness +dismalnesses +dismals +dismantle +dismantled +dismantlement +dismantlements +dismantles +dismantling +dismast +dismasted +dismasting +dismasts +dismay +dismayed +dismaying +dismayingly +dismays +disme +dismember +dismembered +dismembering +dismemberment +dismemberments +dismembers +dismes dismiss +dismissal +dismissals +dismissed +dismisses +dismissing +dismission +dismissions +dismissive +dismissively +dismount +dismounted +dismounting +dismounts +disobedience +disobediences +disobedient +disobediently +disobey +disobeyed +disobeyer +disobeyers +disobeying +disobeys +disoblige +disobliged +disobliges +disobliging +disomic +disorder +disordered +disorderedly +disorderedness +disorderednesses +disordering +disorderliness +disorderlinesses +disorderly +disorders +disorganization +disorganizations +disorganize +disorganized +disorganizes +disorganizing +disorient +disorientate +disorientated +disorientates +disorientating +disorientation +disorientations +disoriented +disorienting +disorients +disown +disowned +disowning +disownment +disownments +disowns +disparage +disparaged +disparagement +disparagements +disparager +disparagers +disparages +disparaging +disparagingly +disparate +disparately +disparateness +disparatenesses +disparities +disparity +dispart +disparted +disparting +disparts +dispassion +dispassionate +dispassionately +dispassionateness +dispassionatenesses +dispassions +dispatch +dispatched +dispatcher +dispatchers +dispatches +dispatching +dispel +dispelled +dispelling +dispels +dispend +dispended +dispending +dispends +dispensabilities +dispensability +dispensable +dispensaries +dispensary +dispensation +dispensational +dispensations +dispensatories +dispensatory +dispense +dispensed +dispenser +dispensers +dispenses +dispensing +dispeople +dispeopled +dispeoples +dispeopling +dispersal +dispersals +dispersant +dispersants +disperse +dispersed +dispersedly +disperser +dispersers +disperses +dispersible +dispersing +dispersion +dispersions +dispersive +dispersively +dispersiveness +dispersivenesses +dispersoid +dispersoids +dispirit +dispirited +dispiritedly +dispiritedness +dispiritednesses +dispiriting +dispirits +dispiteous +displace +displaceable +displaced +displacement +displacements +displaces +displacing +displant +displanted +displanting +displants +display +displayable +displayed +displaying +displays +displease +displeased +displeases +displeasing +displeasure +displeasures +displode +disploded +displodes +disploding +displosion +displosions +displume +displumed +displumes +displuming +disport +disported +disporting +disportment +disportments +disports +disposabilities +disposability +disposable +disposables +disposal +disposals +dispose +disposed +disposer +disposers +disposes +disposing +disposition +dispositional +dispositions +dispositive +dispossess +dispossessed +dispossesses +dispossessing +dispossession +dispossessions +dispossessor +dispossessors +disposure +disposures +dispraise +dispraised +dispraiser +dispraisers +dispraises +dispraising +dispraisingly +dispread +dispreading +dispreads +disprize +disprized +disprizes +disprizing +disproof +disproofs +disproportion +disproportional +disproportionate +disproportionated +disproportionately +disproportionates +disproportionating +disproportionation +disproportionations +disproportioned +disproportioning +disproportions +disprovable +disprove +disproved +disproven +disproves +disproving +disputable +disputably +disputant +disputants +disputation +disputations +disputatious +disputatiously +disputatiousness +disputatiousnesses +dispute +disputed +disputer +disputers +disputes +disputing +disqualification +disqualifications +disqualified +disqualifies +disqualify +disqualifying +disquantitied +disquantities +disquantity +disquantitying +disquiet +disquieted +disquieting +disquietingly +disquietly +disquiets +disquietude +disquietudes +disquisition +disquisitions +disrate +disrated +disrates +disrating +disregard +disregarded +disregardful +disregarding +disregards +disrelated +disrelation +disrelations +disrelish +disrelished +disrelishes +disrelishing +disremember +disremembered +disremembering +disremembers +disrepair +disrepairs +disreputabilities +disreputability +disreputable +disreputableness +disreputablenesses +disreputably +disrepute +disreputes +disrespect +disrespectabilities +disrespectability +disrespectable +disrespected +disrespectful +disrespectfully +disrespectfulness +disrespectfulnesses +disrespecting +disrespects +disrobe +disrobed +disrober +disrobers +disrobes +disrobing +disroot +disrooted +disrooting +disroots +disrupt +disrupted +disrupter +disrupters +disrupting +disruption +disruptions +disruptive +disruptively +disruptiveness +disruptivenesses +disrupts +diss +dissatisfaction +dissatisfactions +dissatisfactory +dissatisfied +dissatisfies +dissatisfy +dissatisfying +dissave +dissaved +dissaves +dissaving +disseat +disseated +disseating +disseats +dissect +dissected +dissecting +dissection +dissections +dissector +dissectors +dissects +dissed +disseise +disseised +disseises +disseisin +disseising +disseisins +disseisor +disseisors +disseize +disseized +disseizes +disseizin +disseizing +disseizins +dissemble +dissembled +dissembler +dissemblers +dissembles +dissembling +disseminate +disseminated +disseminates +disseminating +dissemination +disseminations +disseminator +disseminators +disseminule +disseminules +dissension +dissensions +dissensus +dissensuses +dissent +dissented +dissenter +dissenters +dissentient +dissentients +dissenting +dissention +dissentions +dissentious +dissents +dissepiment +dissepiments +dissert +dissertate +dissertated +dissertates +dissertating +dissertation +dissertational +dissertations +dissertator +dissertators +disserted +disserting +disserts +disserve +disserved +disserves +disservice +disserviceable +disservices +disserving +disses +dissever +disseverance +disseverances +dissevered +dissevering +disseverment +disseverments +dissevers +dissidence +dissidences +dissident +dissidents +dissimilar +dissimilarities +dissimilarity +dissimilarly +dissimilars +dissimilate +dissimilated +dissimilates +dissimilating +dissimilation +dissimilations +dissimilatory +dissimilitude +dissimilitudes +dissimulate +dissimulated +dissimulates +dissimulating +dissimulation +dissimulations +dissimulator +dissimulators +dissing +dissipate +dissipated +dissipatedly +dissipatedness +dissipatednesses +dissipater +dissipaters +dissipates +dissipating +dissipation +dissipations +dissipative +dissociabilities +dissociability +dissociable +dissocial +dissociate +dissociated +dissociates +dissociating +dissociation +dissociations +dissociative +dissoluble +dissolute +dissolutely +dissoluteness +dissolutenesses +dissolution +dissolutions +dissolvable +dissolve +dissolved +dissolvent +dissolvents +dissolver +dissolvers +dissolves +dissolving +dissonance +dissonances +dissonant +dissonantly +dissuade +dissuaded +dissuader +dissuaders +dissuades +dissuading +dissuasion +dissuasions +dissuasive +dissuasively +dissuasiveness +dissuasivenesses +dissyllable +dissyllables +dissymmetric +dissymmetries +dissymmetry +distaff +distaffs +distain +distained +distaining +distains +distal +distally distance +distanced +distances +distancing distant +distantly +distantness +distantnesses +distaste +distasted +distasteful +distastefully +distastefulness +distastefulnesses +distastes +distasting +distaves +distelfink +distelfinks +distemper +distemperate +distemperature +distemperatures +distempered +distempering +distempers +distend +distended +distending +distends +distensibilities +distensibility +distensible +distension +distensions +distent +distention +distentions +distich +distichous +distichs +distil +distill +distillate +distillates +distillation +distillations +distilled +distiller +distilleries +distillers +distillery +distilling +distills +distils +distinct +distincter +distinctest distinction +distinctions +distinctive +distinctively +distinctiveness +distinctivenesses +distinctly +distinctness +distinctnesses +distingue distinguish +distinguishabilities +distinguishability +distinguishable +distinguishably +distinguished +distinguishes +distinguishing +distome +distomes +distort +distorted +distorter +distorters +distorting +distortion +distortional +distortions +distorts +distract +distractable +distracted +distractedly +distractibilities +distractibility +distractible +distracting +distractingly +distraction +distractions +distractive +distracts +distrain +distrainable +distrained +distrainer +distrainers +distraining +distrainor +distrainors +distrains +distraint +distraints +distrait +distraite +distraught +distraughtly +distress +distressed +distresses +distressful +distressfully +distressfulness +distressfulnesses +distressing +distressingly +distributaries +distributary distribute +distributed +distributee +distributees +distributes +distributing +distribution +distributional +distributions +distributive +distributively +distributivities +distributivity +distributor +distributors +distributorship +distributorships district +districted +districting +districts +distrust +distrusted +distrustful +distrustfully +distrustfulness +distrustfulnesses +distrusting +distrusts disturb +disturbance +disturbances +disturbed +disturber +disturbers disturbing +disturbingly +disturbs +disubstituted +disulfid +disulfide +disulfides +disulfids +disulfiram +disulfirams +disulfoton +disulfotons +disunion +disunionist +disunionists +disunions +disunite +disunited +disunites +disunities +disuniting +disunity +disuse +disused +disuses +disusing +disutilities +disutility +disvalue +disvalued +disvalues +disvaluing +disyllabic +disyllable +disyllables +disyoke +disyoked +disyokes +disyoking +dit +dita +ditas +ditch +ditchdigger +ditchdiggers +ditched +ditcher +ditchers +ditches +ditching +dite +dites +ditheism +ditheisms +ditheist +ditheists +dither +dithered +ditherer +ditherers +dithering +dithers +dithery +dithiocarbamate +dithiocarbamates +dithiol +dithyramb +dithyrambic +dithyrambically +dithyrambs +ditransitive +ditransitives +dits +ditsier +ditsiest +ditsy +dittanies +dittany +ditties +ditto +dittoed +dittoing +dittos +ditty +ditz +ditzes +ditzier +ditziest +ditzy +diureses +diuresis +diuretic +diuretically +diuretics +diurnal +diurnally +diurnals +diuron +diurons +diva +divagate +divagated +divagates +divagating +divagation +divagations +divalent +divan +divans +divaricate +divaricated +divaricates +divaricating +divarication +divarications +divas dive +divebomb +divebombed +divebombing +divebombs +dived +diver +diverge +diverged +divergence +divergences +divergencies +divergency +divergent +divergently +diverges +diverging +divers diverse +diversely +diverseness +diversenesses +diversification +diversifications +diversified +diversifier +diversifiers +diversifies +diversify +diversifying +diversion +diversionary +diversionist +diversionists +diversions +diversities +diversity +divert +diverted +diverter +diverters +diverticula +diverticular +diverticulites +diverticulitides +diverticulitis +diverticulitises +diverticuloses +diverticulosis +diverticulosises +diverticulum +divertimenti +divertimento +divertimentos +diverting +divertissement +divertissements +diverts +dives +divest +divested +divesting +divestiture +divestitures +divestment +divestments +divests +dividable divide +divided +dividedly +dividedness +dividednesses +dividend +dividendless +dividends +divider +dividers +divides +dividing +dividual +divination +divinations +divinatory +divine +divined +divinely +diviner +diviners +divines +divinest +diving +divining +divinise +divinised +divinises +divinising +divinities +divinity +divinize +divinized +divinizes +divinizing +divisibilities +divisibility +divisible division +divisional +divisionism +divisionisms +divisionist +divisionists +divisions +divisive +divisively +divisiveness +divisivenesses +divisor +divisors divorce +divorced +divorcee +divorcees +divorcement +divorcements +divorcer +divorcers +divorces +divorcing +divot +divots +divulge +divulged +divulgence +divulgences +divulger +divulgers +divulges +divulging +divvied +divvies +divvy +divvying +diwan +diwans +dixit +dixits +dizen +dizened +dizening +dizens +dizygotic +dizygous +dizzied +dizzier +dizzies +dizziest +dizzily +dizziness +dizzinesses dizzy +dizzying +dizzyingly +djebel +djebels +djellaba +djellabah +djellabahs +djellabas +djin +djinn +djinni +djinns +djinny +djins do +doable +doat +doated +doating +doats +dobber +dobbers +dobbies +dobbin +dobbins +dobby +dobie +dobies +dobla +doblas +doblon +doblones +doblons +dobra +dobras +dobson +dobsonflies +dobsonfly +dobsons +doby +doc +docent +docents +docetic +docile +docilely +docilities +docility +dock +dockage +dockages +docked +docker +dockers +docket +docketed +docketing +dockets +dockhand +dockhands +docking +dockland +docklands +dockmaster +dockmasters +docks +dockside +docksides +dockworker +dockworkers +dockyard +dockyards +docs doctor +doctoral +doctorate +doctorates +doctored +doctoring +doctorless +doctors +doctorship +doctorships +doctrinaire +doctrinaires +doctrinairism +doctrinairisms +doctrinal +doctrinally +doctrine +doctrines +docudrama +docudramas document +documentable +documental +documentalist +documentalists +documentarian +documentarians +documentaries +documentarily +documentarist +documentarists +documentary +documentation +documentational +documentations +documented +documenter +documenters +documenting +documents +dodder +doddered +dodderer +dodderers +doddering +dodders +doddery +dodecagon +dodecagons +dodecahedra +dodecahedral +dodecahedron +dodecahedrons +dodecaphonic +dodecaphonically +dodecaphonies +dodecaphonist +dodecaphonists +dodecaphony +dodge +dodgeball +dodgeballs +dodged +dodgem +dodgems +dodger +dodgeries +dodgers +dodgery +dodges +dodgier +dodgiest +dodginess +dodginesses +dodging +dodgy +dodo +dodoes +dodoism +dodoisms +dodos +doe +doer +doers +does +doeskin +doeskins +doest +doeth +doff +doffed +doffer +doffers +doffing +doffs dog +dogbane +dogbanes +dogberries +dogberry +dogcart +dogcarts +dogcatcher +dogcatchers +dogdom +dogdoms +doge +dogear +dogeared +dogearing +dogears +dogedom +dogedoms +doges +dogeship +dogeships +dogey +dogeys +dogface +dogfaces +dogfight +dogfighting +dogfights +dogfish +dogfishes +dogfought +dogged +doggedly +doggedness +doggednesses +dogger +doggerel +doggerels +doggeries +doggers +doggery +doggie +doggier +doggies +doggiest +dogging +doggish +doggishly +doggishness +doggishnesses +doggo +doggone +doggoned +doggoneder +doggonedest +doggoner +doggones +doggonest +doggoning +doggrel +doggrels +doggy +doghouse +doghouses +dogie +dogies +dogleg +doglegged +doglegging +doglegs +doglike +dogma +dogmas +dogmata +dogmatic +dogmatical +dogmatically +dogmaticalness +dogmaticalnesses +dogmatics +dogmatism +dogmatisms +dogmatist +dogmatists +dogmatization +dogmatizations +dogmatize +dogmatized +dogmatizer +dogmatizers +dogmatizes +dogmatizing +dognap +dognaped +dognaper +dognapers +dognaping +dognapped +dognapper +dognappers +dognapping +dognaps +dogs +dogsbodies +dogsbody +dogsled +dogsledded +dogsledder +dogsledders +dogsledding +dogsleds +dogteeth +dogtooth +dogtrot +dogtrots +dogtrotted +dogtrotting +dogvane +dogvanes +dogwatch +dogwatches +dogwood +dogwoods +dogy +doiled +doilies +doily +doing +doings +doit +doited +doits +dojo +dojos +dol +dolce +dolci +doldrums +dole +doled +doleful +dolefuller +dolefullest +dolefully +dolefulness +dolefulnesses +dolerite +dolerites +doleritic +doles +dolesome +dolichocephalic +dolichocephalies +dolichocephaly +doling doll dollar +dollars +dolled +dollhouse +dollhouses +dollied +dollies +dolling +dollish +dollishly +dollishness +dollishnesses +dollop +dolloped +dolloping +dollops +dolls +dolly +dollying +dolma +dolmades +dolman +dolmans +dolmas +dolmen +dolmens +dolomite +dolomites +dolomitic +dolomitization +dolomitizations +dolomitize +dolomitized +dolomitizes +dolomitizing +dolor +doloroso +dolorous +dolorously +dolorousness +dolorousnesses +dolors +dolour +dolours +dolphin +dolphinfish +dolphinfishes +dolphins +dols +dolt +doltish +doltishly +doltishness +doltishnesses +dolts +dom +domain +domains +domal +dome +domed +domelike +domes +domesday +domesdays +domestic +domestically +domesticate +domesticated +domesticates +domesticating +domestication +domestications +domesticities +domesticity +domestics +domic +domical +domicil +domicile +domiciled +domiciles +domiciliary +domiciliate +domiciliated +domiciliates +domiciliating +domiciliation +domiciliations +domiciling +domicils +dominance +dominances +dominant +dominantly +dominants +dominate +dominated +dominates +dominating +domination +dominations +dominative +dominator +dominators +dominatrices +dominatrix +dominatrixes +domine +domineer +domineered +domineering +domineeringly +domineeringness +domineeringnesses +domineers +domines +doming +dominical +dominick +dominicker +dominickers +dominicks +dominie +dominies +dominion +dominions +dominique +dominiques +dominium +dominiums +domino +dominoes +dominos +doms +don +dona +donas donate +donated +donates +donating +donation +donations +donative +donatives +donator +donators +done +donee +donees +doneness +donenesses +dong +donga +dongas +dongola +dongolas +dongs +donjon +donjons +donkey +donkeys +donkeywork +donkeyworks +donna +donnas +donne +donned +donnee +donnees +donnerd +donnered +donnert +donnicker +donnickers +donniker +donnikers +donning +donnish +donnishly +donnishness +donnishnesses +donnybrook +donnybrooks +donor +donors +dons +donsie +donsy +donut +donuts +donzel +donzels +doodad +doodads +doodle +doodlebug +doodlebugs +doodled +doodler +doodlers +doodles +doodling +doofus +doofuses +doohickey +doohickeys +doohickies +doolee +doolees +doolie +doolies +dooly +doom +doomed +doomful +doomfully +doomily +dooming +dooms +doomsayer +doomsayers +doomsaying +doomsayings +doomsday +doomsdayer +doomsdayers +doomsdays +doomster +doomsters +doomy door +doorbell +doorbells +doorjamb +doorjambs +doorkeeper +doorkeepers +doorknob +doorknobs +doorless +doorman +doormat +doormats +doormen +doornail +doornails +doorplate +doorplates +doorpost +doorposts +doors +doorsill +doorsills +doorstep +doorsteps +doorstop +doorstops +doorway +doorways +dooryard +dooryards +doozer +doozers +doozie +doozies +doozy +dopa +dopamine +dopaminergic +dopamines +dopant +dopants +dopas +dope +doped +dopehead +dopeheads +doper +dopers +dopes +dopester +dopesters +dopey +dopier +dopiest +dopiness +dopinesses +doping +doppelganger +doppelgangers +dopy +dor +dorado +dorados +dorbug +dorbugs +dore +dorhawk +dorhawks +dories +dork +dorkier +dorkiest +dorks +dorky dorm +dormancies +dormancy +dormant +dormer +dormers +dormice +dormie +dormient +dormin +dormins +dormitories dormitory +dormouse +dorms +dormy +dorneck +dornecks +dornick +dornicks +dornock +dornocks +doronicum +doronicums +dorp +dorper +dorpers +dorps +dorr +dorrs +dors +dorsa +dorsad +dorsal +dorsally +dorsals +dorsel +dorsels +dorser +dorsers +dorsiventral +dorsiventralities +dorsiventrality +dorsiventrally +dorsolateral +dorsoventral +dorsoventralities +dorsoventrality +dorsoventrally +dorsum +dorty +dory +dos +dosage +dosages +dose +dosed +doser +dosers +doses +dosimeter +dosimeters +dosimetric +dosimetries +dosimetry +dosing +doss +dossal +dossals +dossed +dossel +dossels +dosser +dosseret +dosserets +dossers +dosses +dossier +dossiers +dossil +dossils +dossing +dost dot +dotage +dotages +dotal +dotard +dotardly +dotards +dotation +dotations +dote +doted +doter +doters +dotes +doth +dotier +dotiest +doting +dotingly +dots +dotted +dottel +dottels +dotter +dotterel +dotterels +dotters +dottier +dottiest +dottily +dottiness +dottinesses +dotting +dottle +dottles +dottrel +dottrels +dotty +doty double +doubled +doubleheader +doubleheaders +doubleness +doublenesses +doubler +doublers +doubles +doublespeak +doublespeaker +doublespeakers +doublespeaks +doublet +doublethink +doublethinks +doubleton +doubletons +doublets +doubling +doubloon +doubloons +doublure +doublures +doubly doubt +doubtable +doubted +doubter +doubters +doubtful +doubtfully +doubtfulness +doubtfulnesses +doubting +doubtingly +doubtless +doubtlessly +doubtlessness +doubtlessnesses +doubts +douce +doucely +douceur +douceurs +douche +douched +douches +douching +dough +doughboy +doughboys +doughface +doughfaces +doughier +doughiest +doughlike +doughnut +doughnutlike +doughnuts +doughs +dought +doughtier +doughtiest +doughtily +doughtiness +doughtinesses +doughty +doughy +doum +douma +doumas +doums +doupioni +doupionis +dour +doura +dourah +dourahs +douras +dourer +dourest +dourine +dourines +dourly +dourness +dournesses +douroucouli +douroucoulis +douse +doused +douser +dousers +douses +dousing +doux +douzeper +douzepers +dove +dovecot +dovecote +dovecotes +dovecots +dovekey +dovekeys +dovekie +dovekies +dovelike +doven +dovened +dovening +dovens +doves +dovetail +dovetailed +dovetailing +dovetails +dovish +dovishness +dovishnesses +dow +dowable +dowager +dowagers +dowdier +dowdies +dowdiest +dowdily +dowdiness +dowdinesses +dowdy +dowdyish +dowed +dowel +doweled +doweling +dowelled +dowelling +dowels +dower +dowered +doweries +dowering +dowers +dowery +dowie +dowing +dowitcher +dowitchers down +downbeat +downbeats +downburst +downbursts +downcast +downcasts +downcome +downcomes +downcourt +downdraft +downdrafts +downed +downer +downers +downfall +downfallen +downfalls +downfield +downgrade +downgraded +downgrades +downgrading +downhaul +downhauls +downhearted +downheartedly +downheartedness +downheartednesses +downhill +downhiller +downhillers +downhills +downier +downiest +downing +downland +downlands +downlink +downlinks download +downloadable +downloaded +downloading +downloads +downpipe +downpipes +downplay +downplayed +downplaying +downplays +downpour +downpours +downrange +downright +downrightly +downrightness +downrightnesses +downriver +downs +downscale +downscaled +downscales +downscaling +downshift +downshifted +downshifting +downshifts +downside +downsides +downsize +downsized +downsizes +downsizing +downslide +downslides +downslope +downspout +downspouts +downstage +downstages downstairs +downstate +downstater +downstaters +downstates +downstream +downstroke +downstrokes +downswing +downswings +downtick +downticks +downtime +downtimes downtown +downtowner +downtowners +downtowns +downtrend +downtrends +downtrod +downtrodden +downturn +downturns +downward +downwardly +downwardness +downwardnesses +downwards +downwash +downwashes +downwind +downy +dowries +dowry +dows +dowsabel +dowsabels +dowse +dowsed +dowser +dowsers +dowses +dowsing +doxie +doxies +doxologies +doxology +doxorubicin +doxorubicins +doxy +doxycycline +doxycyclines +doyen +doyenne +doyennes +doyens +doyley +doyleys +doylies +doyly +doze +dozed dozen -dr +dozened +dozening +dozens +dozenth +dozenths +dozer +dozers +dozes +dozier +doziest +dozily +doziness +dozinesses +dozing +dozy +drab +drabbed +drabber +drabbest +drabbet +drabbets +drabbing +drabble +drabbled +drabbles +drabbling +drably +drabness +drabnesses +drabs +dracaena +dracaenas +drachm +drachma +drachmae +drachmai +drachmas +drachms +draconian +draconic +draff +draffier +draffiest +draffish +draffs +draffy draft +draftable +drafted +draftee +draftees +drafter +drafters +draftier +draftiest +draftily +draftiness +draftinesses +drafting +draftings +drafts +draftsman +draftsmanship +draftsmanships +draftsmen +draftsperson +draftspersons +drafty drag +dragee +dragees +dragged +dragger +draggers +draggier +draggiest +dragging +draggingly +draggle +draggled +draggles +draggling +draggy +dragline +draglines +dragnet +dragnets +dragoman +dragomans +dragomen +dragon +dragonet +dragonets +dragonflies +dragonfly +dragonhead +dragonheads +dragonish +dragons +dragoon +dragooned +dragooning +dragoons +dragrope +dragropes +drags +dragster +dragsters +drail +drails +drain +drainage +drainages +drained +drainer +drainers +draining +drainpipe +drainpipes +drains +drake +drakes +dram +drama +dramas +dramatic +dramatically +dramatics +dramatisation +dramatisations +dramatise +dramatised +dramatises +dramatising +dramatist +dramatists +dramatizable +dramatization +dramatizations +dramatize +dramatized +dramatizes +dramatizing +dramaturg +dramaturge +dramaturges +dramaturgic +dramaturgical +dramaturgically +dramaturgies +dramaturgs +dramaturgy +dramedies +dramedy +drammed +dramming +drammock +drammocks +drams +dramshop +dramshops +drank +drapabilities +drapability +drapable +drape +drapeabilities +drapeability +drapeable +draped +draper +draperies +drapers +drapery +drapes +drapey +draping +drastic +drastically +drat +drats +dratted +dratting +draught +draughted +draughtier +draughtiest +draughting +draughts +draughtsman +draughtsmen +draughty +drave draw +drawable drawback +drawbacks +drawbar +drawbars +drawbore +drawbores +drawbridge +drawbridges +drawdown +drawdowns +drawee +drawees drawer +drawerful +drawerfuls +drawers +drawing +drawings +drawknife +drawknives +drawl +drawled +drawler +drawlers +drawlier +drawliest +drawling +drawlingly +drawls +drawly +drawn +drawnwork +drawnworks +drawplate +drawplates +draws +drawshave +drawshaves +drawstring +drawstrings +drawtube +drawtubes +dray +drayage +drayages +drayed +draying +drayman +draymen +drays +dread +dreaded +dreadful +dreadfully +dreadfulness +dreadfulnesses +dreadfuls +dreading +dreadlock +dreadlocks +dreadnought +dreadnoughts +dreads dream +dreamed +dreamer +dreamers +dreamful +dreamfully +dreamfulness +dreamfulnesses +dreamier +dreamiest +dreamily +dreaminess +dreaminesses +dreaming +dreamland +dreamlands +dreamless +dreamlessly +dreamlessness +dreamlessnesses +dreamlike +dreams +dreamt +dreamtime +dreamtimes +dreamworld +dreamworlds +dreamy +drear +drearier +drearies +dreariest +drearily +dreariness +drearinesses +drears +dreary +dreck +drecks +drecky +dredge +dredged +dredger +dredgers +dredges +dredging +dredgings +dree +dreed +dreeing +drees +dreg +dreggier +dreggiest +dreggish +dreggy +dregs +dreich +dreidel +dreidels +dreidl +dreidls +dreigh +drek +dreks +drench +drenched +drencher +drenchers +drenches +drenching dress +dressage +dressages +dressed +dresser +dressers +dresses +dressier +dressiest +dressily +dressiness +dressinesses +dressing +dressings +dressmaker +dressmakers +dressmaking +dressmakings +dressy +drest +drew +drib +dribbed +dribbing +dribble +dribbled +dribbler +dribblers +dribbles +dribblet +dribblets +dribbling +dribbly +driblet +driblets +dribs +dried +driegh +drier +driers +dries +driest +drift +driftage +driftages +drifted +drifter +drifters +driftier +driftiest +drifting +driftingly +driftpin +driftpins +drifts +driftwood +driftwoods +drifty drill +drillabilities +drillability +drillable +drilled +driller +drillers +drilling +drillings +drillmaster +drillmasters +drills +drily drink +drinkabilities +drinkability +drinkable +drinkables +drinker +drinkers +drinking +drinks +drip +dripless +dripped +dripper +drippers +drippier +drippiest +dripping +drippings +drippy +drips +dripstone +dripstones +dript +drivabilities +drivability +drivable drive +driveabilities +driveability +driveable +drivel +driveled +driveler +drivelers +driveline +drivelines +driveling +drivelled +drivelling +drivels +driven +drivenness +drivennesses +driver +driverless +drivers +drives +driveshaft +driveshafts +drivetrain +drivetrains +driveway +driveways +driving +drivings +drizzle +drizzled +drizzles +drizzlier +drizzliest +drizzling +drizzlingly +drizzly +drogue +drogues +droit +droits +droll +drolled +droller +drolleries +drollery +drollest +drolling +drollness +drollnesses +drolls +drolly +dromedaries +dromedary +dromon +dromond +dromonds +dromons +drone +droned +droner +droners +drones +drongo +drongos +droning +droningly +dronish +drool +drooled +drooling +drools +droop +drooped +droopier +droopiest +droopily +drooping +droopingly +droops +droopy drop +dropcloth +dropcloths +drophead +dropheads +dropkick +dropkicker +dropkickers +dropkicks +droplet +droplets +droplight +droplights +dropout +dropouts +droppable +dropped +dropper +dropperful +dropperfuls +droppers +droppersful +dropping +droppings +drops +dropshot +dropshots +dropsical +dropsied +dropsies +dropsy +dropt +dropwort +dropworts +drosera +droseras +droshkies +droshky +droskies +drosky +drosophila +drosophilas +dross +drosses +drossier +drossiest +drossy +drought +droughtier +droughtiest +droughtiness +droughtinesses +droughts +droughty +drouk +drouked +drouking +drouks +drouth +drouthier +drouthiest +drouths +drouthy +drove +droved +drover +drovers +droves +droving +drown +drownd +drownded +drownding +drownds +drowned +drowner +drowners +drowning +drowns +drowse +drowsed +drowses +drowsier +drowsiest +drowsily +drowsiness +drowsinesses +drowsing +drowsy +drub +drubbed +drubber +drubbers +drubbing +drubbings +drubs +drudge +drudged +drudger +drudgeries +drudgers +drudgery +drudges +drudging +drudgingly drug +drugged +drugget +druggets +druggie +druggier +druggies +druggiest +drugging +druggist +druggists +druggy +drugmaker +drugmakers +drugs +drugstore +drugstores +druid +druidess +druidesses +druidic +druidical +druidism +druidisms +druids drum +drumbeat +drumbeater +drumbeaters +drumbeating +drumbeatings +drumbeats +drumble +drumbled +drumbles +drumbling +drumfire +drumfires +drumfish +drumfishes +drumhead +drumheads +drumlier +drumliest +drumlike +drumlin +drumlins +drumly +drummed +drummer +drummers +drumming +drumroll +drumrolls +drums +drumstick +drumsticks drunk +drunkard +drunkards +drunken +drunkenly +drunkenness +drunkennesses +drunker +drunkest +drunks +drupaceous +drupe +drupelet +drupelets +drupes +druse +druses +druthers dry +dryable +dryad +dryades +dryadic +dryads +dryasdust +dryasdusts +dryer +dryers +dryest +drying +dryish +dryland +drylot +drylots +dryly +dryness +drynesses +dryopithecine +dryopithecines +drypoint +drypoints +drys +drysalter +drysalteries +drysalters +drysaltery +drystone +drywall +drywalls +duad +duads +dual +dualism +dualisms +dualist +dualistic +dualistically +dualists +dualities +duality +dualize +dualized +dualizes +dualizing +dually +duals +dub +dubbed +dubber +dubbers +dubbin +dubbing +dubbings +dubbins +dubieties +dubiety +dubious +dubiously +dubiousness +dubiousnesses +dubitable +dubitation +dubitations +dubonnet +dubonnets +dubs +ducal +ducally +ducat +ducats +duce +duces +duchess +duchesses +duchies +duchy +duci duck +duckbill +duckbills +duckboard +duckboards +ducked +ducker +duckers +duckie +duckier +duckies +duckiest +ducking +duckling +ducklings +duckpin +duckpins +ducks +ducktail +ducktails +duckwalk +duckwalked +duckwalking +duckwalks +duckweed +duckweeds +ducky +duct +ductal +ducted +ductile +ductilities +ductility +ducting +ductings +ductless +ducts +ductule +ductules +ductwork +ductworks +dud +duddie +duddy +dude +duded +dudeen +dudeens +dudes +dudgeon +dudgeons +duding +dudish +dudishly +duds due +duecento +duecentos +duel +dueled +dueler +duelers +dueling +duelist +duelists +duelled +dueller +duellers +duelli +duelling +duellist +duellists +duello +duellos +duels +duende +duendes +dueness +duenesses +duenna +duennas +duennaship +duennaships +dues +duet +duets +duetted +duetting +duettist +duettists +duff +duffel +duffels +duffer +duffers +duffle +duffles +duffs +dug +dugong +dugongs +dugout +dugouts +dugs +dui +duiker +duikers +duit +duits +duke +duked +dukedom +dukedoms +dukes +duking +dulcet +dulcetly +dulcets +dulciana +dulcianas +dulcified +dulcifies +dulcify +dulcifying +dulcimer +dulcimers +dulcimore +dulcimores +dulcinea +dulcineas +dulia +dulias dull +dullard +dullards +dulled +duller +dullest +dulling +dullish +dullishly +dullness +dullnesses +dulls +dullsville +dullsvilles +dully +dulness +dulnesses +dulse +dulses +duly +duma +dumas +dumb +dumbbell +dumbbells +dumbcane +dumbcanes +dumbed +dumber +dumbest +dumbfound +dumbfounded +dumbfounder +dumbfoundered +dumbfoundering +dumbfounders +dumbfounding +dumbfounds +dumbhead +dumbheads +dumbing +dumbly +dumbness +dumbnesses +dumbs +dumbstruck +dumbwaiter +dumbwaiters +dumdum +dumdums +dumfound +dumfounded +dumfounding +dumfounds +dumka +dumky +dummied +dummies +dummkopf +dummkopfs +dummy +dummying +dumortierite +dumortierites +dump +dumpcart +dumpcarts +dumped +dumper +dumpers +dumpier +dumpiest +dumpily +dumpiness +dumpinesses +dumping +dumpings +dumpish dumpling +dumplings +dumps +dumpy +dun +dunam +dunams +dunce +dunces +dunch +dunches +duncical +duncish +dunderhead +dunderheaded +dunderheads +dundrearies +dune +duneland +dunelands +dunelike +dunes +dung +dungaree +dungarees +dunged +dungeon +dungeoned +dungeoning +dungeons +dunghill +dunghills +dungier +dungiest +dunging +dungs +dungy +dunite +dunites +dunitic +dunk +dunked +dunker +dunkers +dunking +dunks +dunlin +dunlins +dunnage +dunnages +dunned +dunner +dunness +dunnesses +dunnest +dunning +dunnite +dunnites +duns +dunt +dunted +dunting +dunts +duo +duodecillion +duodecillions +duodecimal +duodecimals +duodecimo +duodecimos +duodena +duodenal +duodenum +duodenums +duolog +duologs +duologue +duologues +duomi +duomo +duomos +duopolies +duopolistic +duopoly +duopsonies +duopsony +duos +duotone +duotones +dup +dupable +dupe +duped +duper +duperies +dupers +dupery +dupes +duping +duple +duplex +duplexed +duplexer +duplexers +duplexes +duplexing +duplicate +duplicated +duplicates +duplicating +duplication +duplications +duplicative +duplicator +duplicators +duplicities +duplicitous +duplicitously +duplicity +dupped +dupping +dups +dura +durabilities +durability +durable +durableness +durablenesses +durables +durably +dural +duralumin +duralumins +duramen +duramens +durance +durances +duras +duration +durations +durative +duratives +durbar +durbars +dure +dured +dures +duress +duresses +durian +durians during +durion +durions +durmast +durmasts +durn +durndest +durned +durneder +durnedest +durning +durns +duro +duroc +durocs +durometer +durometers +duros +durr +durra +durras +durrie +durries +durrs +durst +durum +durums dusk +dusked +duskier +duskiest +duskily +duskiness +duskinesses +dusking +duskish +dusks +dusky dust dustbin +dustbins +dustcover +dustcovers +dusted +duster +dusters +dustheap +dustheaps +dustier +dustiest +dustily +dustiness +dustinesses +dusting +dustless +dustlike +dustman +dustmen +dustoff +dustoffs +dustpan +dustpans +dustrag +dustrags +dusts +dustup +dustups dusty +dutch +dutchman +dutchmen +duteous +dutiable +duties +dutiful +dutifully +dutifulness +dutifulnesses duty -dvd +duumvir +duumvirate +duumvirates +duumviri +duumvirs +duvet +duvetine +duvetines +duvets +duvetyn +duvetyne +duvetynes +duvetyns +duxelles +dwarf +dwarfed +dwarfer +dwarfest +dwarfing +dwarfish +dwarfishly +dwarfishness +dwarfishnesses +dwarfism +dwarfisms +dwarflike +dwarfness +dwarfnesses +dwarfs +dwarves +dweeb +dweebs +dwell +dwelled +dweller +dwellers +dwelling +dwellings +dwells +dwelt +dwindle +dwindled +dwindles +dwindling +dwine +dwined +dwines +dwining +dyable +dyad +dyadic +dyadically +dyadics +dyads +dyarchic +dyarchies +dyarchy +dybbuk +dybbukim +dybbuks +dye +dyeabilities +dyeability +dyeable +dyed +dyeing +dyeings +dyer +dyers +dyes +dyestuff +dyestuffs +dyeweed +dyeweeds +dyewood +dyewoods +dying +dyings +dyke +dyked +dykes +dykey +dyking dynamic +dynamical +dynamically +dynamics +dynamism +dynamisms +dynamist +dynamistic +dynamists +dynamite +dynamited +dynamiter +dynamiters +dynamites +dynamitic +dynamiting +dynamo +dynamometer +dynamometers +dynamometric +dynamometries +dynamometry +dynamos +dynamotor +dynamotors +dynast +dynastic +dynastically +dynasties +dynasts dynasty +dynatron +dynatrons +dyne +dynein +dynel +dynels +dynes +dynode +dynodes +dysarthria +dysarthrias +dyscrasia +dyscrasias +dysenteric +dysenteries +dysentery +dysfunction +dysfunctional +dysfunctions +dysgeneses +dysgenesis +dysgenic +dyskinesia +dyskinesias +dyskinetic +dyslexia +dyslexias +dyslexic +dyslexics +dyslogistic +dyslogistically +dysmenorrhea +dysmenorrheas +dysmenorrheic +dyspepsia +dyspepsias +dyspepsies +dyspepsy +dyspeptic +dyspeptically +dyspeptics +dysphagia +dysphagias +dysphasia +dysphasias +dysphasic +dysphasics +dysphemism +dysphemisms +dysphemistic +dysphonia +dysphonias +dysphoria +dysphorias +dysphoric +dysplasia +dysplasias +dysplastic +dyspnea +dyspneal +dyspneas +dyspneic +dyspnoea +dyspnoeas +dyspnoic +dysprosium +dysprosiums +dysrhythmia +dysrhythmias +dysrhythmic +dystaxia +dystaxias +dystocia +dystocias +dystonia +dystonias +dystonic +dystopia +dystopian +dystopias +dystrophic +dystrophies +dystrophy +dysuria +dysurias +dysuric +dyvour +dyvours each eager +eagerer +eagerest +eagerly +eagerness +eagernesses +eagers eagle +eagles +eaglet +eaglets +eagre +eagres +ealdorman +ealdormen +eanling +eanlings ear +earache +earaches +eardrop +eardrops +eardrum +eardrums +eared +earflap +earflaps +earful +earfuls +earing +earings +earl +earlap +earlaps +earldom +earldoms +earless +earlier +earliest +earliness +earlinesses +earlobe +earlobes +earlock +earlocks +earls +earlship +earlships early +earlywood +earlywoods +earmark +earmarked +earmarking +earmarks +earmuff +earmuffs earn +earned +earner +earners +earnest +earnestly +earnestness +earnestnesses +earnests +earning +earnings +earns +earphone +earphones +earpiece +earpieces +earplug +earplugs +earring +earrings +ears +earshot +earshots +earsplitting +earstone +earstones earth +earthborn +earthbound +earthed +earthen +earthenware +earthenwares +earthier +earthiest +earthily +earthiness +earthinesses +earthing +earthlier +earthliest +earthlight +earthlights +earthlike +earthliness +earthlinesses +earthling +earthlings +earthly +earthman +earthmen +earthmover +earthmovers +earthmoving +earthmovings +earthnut +earthnuts +earthpea +earthpeas earthquake +earthquakes +earthrise +earthrises +earths +earthset +earthsets +earthshaker +earthshakers +earthshaking +earthshakingly +earthshine +earthshines +earthstar +earthstars +earthward +earthwards +earthwork +earthworks +earthworm +earthworms +earthy +earwax +earwaxes +earwig +earwigged +earwigging +earwigs +earwitness +earwitnesses +earworm +earworms +ease +eased +easeful +easefully +easel +easels +easement +easements +eases +easier +easies +easiest +easily +easiness +easinesses +easing east +eastbound easter +easterlies +easterly eastern +easterner +easterners +easternmost +easters +easting +eastings +easts +eastward +eastwards easy +easygoing +easygoingness +easygoingnesses eat +eatable +eatables +eaten +eater +eateries +eaters +eatery +eath +eating +eatings +eats +eau +eaux +eave +eaved +eaves +eavesdrop +eavesdropped +eavesdropper +eavesdroppers +eavesdropping +eavesdrops +ebb +ebbed +ebbet +ebbets +ebbing +ebbs +ebon +ebonies +ebonise +ebonised +ebonises +ebonising +ebonite +ebonites +ebonize +ebonized +ebonizes +ebonizing +ebons +ebony +ebullience +ebulliences +ebulliencies +ebulliency +ebullient +ebulliently +ebullition +ebullitions +ecarte +ecartes +ecaudate +ecbolic +ecbolics +eccentric +eccentrically +eccentricities +eccentricity +eccentrics +ecchymoses +ecchymosis +ecchymotic +ecclesia +ecclesiae +ecclesial +ecclesiastic +ecclesiastical +ecclesiastically +ecclesiasticism +ecclesiasticisms +ecclesiastics +ecclesiological +ecclesiologies +ecclesiologist +ecclesiologists +ecclesiology +eccrine +ecdyses +ecdysial +ecdysiast +ecdysiasts +ecdysis +ecdyson +ecdysone +ecdysones +ecdysons +ecesis +ecesises +echard +echards +eche +eched +echelle +echelles +echelon +echeloned +echeloning +echelons +eches +echeveria +echeverias +echidna +echidnae +echidnas +echinate +eching +echini +echinococci +echinococcoses +echinococcosis +echinococcus +echinoderm +echinodermatous +echinoderms +echinoid +echinoids +echinus +echiuroid +echiuroids +echo +echocardiogram +echocardiograms +echocardiographer +echocardiographers +echocardiographic +echocardiographies +echocardiography +echoed +echoer +echoers +echoes +echoey +echogram +echograms +echoic +echoing +echoism +echoisms +echolalia +echolalias +echolalic +echoless +echolocation +echolocations +echos +echovirus +echoviruses +eclair +eclaircissement +eclaircissements +eclairs +eclampsia +eclampsias +eclamptic +eclat +eclats +eclectic +eclectically +eclecticism +eclecticisms +eclectics +eclipse +eclipsed +eclipses +eclipsing +eclipsis +eclipsises +ecliptic +ecliptics +eclogite +eclogites +eclogue +eclogues +eclosion +eclosions +ecocatastrophe +ecocatastrophes +ecocidal +ecocide +ecocides +ecofreak +ecofreaks +ecologic +ecological +ecologically +ecologies +ecologist +ecologists ecology +econobox +econoboxes +econometric +econometrically +econometrician +econometricians +econometrics +econometrist +econometrists +economic +economical +economically +economics +economies +economise +economised +economises +economising +economist +economists +economize +economized +economizer +economizers +economizes +economizing +economy +ecophysiological +ecophysiologies +ecophysiology +ecospecies +ecosphere +ecospheres +ecosystem +ecosystems +ecotonal +ecotone +ecotones +ecotourism +ecotourisms +ecotourist +ecotourists +ecotype +ecotypes +ecotypic +ecraseur +ecraseurs +ecru +ecrus +ecstasies +ecstasy +ecstatic +ecstatically +ecstatics +ectases +ectasis +ectatic +ecthyma +ecthymata +ectoderm +ectodermal +ectoderms +ectomere +ectomeres +ectomorph +ectomorphic +ectomorphs +ectoparasite +ectoparasites +ectoparasitic +ectopia +ectopias +ectopic +ectopically +ectoplasm +ectoplasmic +ectoplasms +ectosarc +ectosarcs +ectotherm +ectothermic +ectotherms +ectotrophic +ectozoa +ectozoan +ectozoans +ectozoon +ectypal +ectype +ectypes +ecu +ecumenic +ecumenical +ecumenicalism +ecumenicalisms +ecumenically +ecumenicism +ecumenicisms +ecumenicist +ecumenicists +ecumenicities +ecumenicity +ecumenics +ecumenism +ecumenisms +ecumenist +ecumenists +ecus +eczema +eczemas +eczematous +ed +edacious +edacities +edacity +edaphic +edaphically +eddied +eddies +eddo +eddoes +eddy +eddying +edelweiss +edelweisses +edema +edemas +edemata +edematous +edenic +edentate +edentates +edentulous edge +edged +edgeless +edger +edgers +edges +edgeways +edgewise +edgier +edgiest +edgily +edginess +edginesses +edging +edgings +edgy +edh +edhs +edibilities +edibility +edible +edibleness +ediblenesses +edibles +edict +edictal +edicts +edification +edifications +edifice +edifices +edified +edifier +edifiers +edifies +edify +edifying +edile +ediles +edit +editable +edited +editing edition +editions editor +editorial +editorialist +editorialists +editorialization +editorializations +editorialize +editorialized +editorializer +editorializers +editorializes +editorializing +editorially +editorials +editors +editorship +editorships +editress +editresses +edits +educabilities +educability +educable +educables educate +educated +educatedness +educatednesses +educates +educating education +educational +educationalist +educationalists +educationally +educationese +educationeses +educationist +educationists +educations +educative educator +educators +educe +educed +educes +educible +educing +educt +eduction +eductions +eductive +eductor +eductors +educts +edulcorate +edulcorated +edulcorates +edulcorating +edutainment +edutainments +eel +eelgrass +eelgrasses +eelier +eeliest +eellike +eelpout +eelpouts +eels +eelworm +eelworms +eely +eerie +eerier +eeriest +eerily +eeriness +eerinesses +eery +ef +eff +effable +efface +effaceable +effaced +effacement +effacements +effacer +effacers +effaces +effacing effect +effected +effecter +effecters +effecting +effective +effectively +effectiveness +effectivenesses +effectives +effectivities +effectivity +effector +effectors +effects +effectual +effectualities +effectuality +effectually +effectualness +effectualnesses +effectuate +effectuated +effectuates +effectuating +effectuation +effectuations +effeminacies +effeminacy +effeminate +effeminately +effeminates +effendi +effendis +efferent +efferently +efferents +effervesce +effervesced +effervescence +effervescences +effervescent +effervescently +effervesces +effervescing +effete +effetely +effeteness +effetenesses +efficacies +efficacious +efficaciously +efficaciousness +efficaciousnesses +efficacities +efficacity +efficacy +efficiencies +efficiency +efficient +efficiently +effigial +effigies +effigy +effloresce +effloresced +efflorescence +efflorescences +efflorescent +effloresces +efflorescing +effluence +effluences +effluent +effluents +effluvia +effluvium +effluviums +efflux +effluxes +effluxion +effluxions effort +effortful +effortfully +effortfulness +effortfulnesses +effortless +effortlessly +effortlessness +effortlessnesses +efforts +effronteries +effrontery +effs +effulge +effulged +effulgence +effulgences +effulgent +effulges +effulging +effuse +effused +effuses +effusing +effusion +effusions +effusive +effusively +effusiveness +effusivenesses +efs +eft +efts +eftsoon +eftsoons +egad +egads +egal +egalitarian +egalitarianism +egalitarianisms +egalitarians +egalite +egalites +eger +egers +egest +egesta +egested +egesting +egestion +egestions +egestive +egests egg +eggar +eggars +eggbeater +eggbeaters +eggcup +eggcups +egged +egger +eggers +egghead +eggheaded +eggheadedness +eggheadednesses +eggheads +egging +eggless +eggnog +eggnogs eggplant +eggplants +eggs +eggshell +eggshells +eggy +egis +egises +eglantine +eglantines +eglatere +eglateres +eglomise +ego +egocentric +egocentrically +egocentricities +egocentricity +egocentrics +egocentrism +egocentrisms +egoism +egoisms +egoist +egoistic +egoistical +egoistically +egoists +egoless +egomania +egomaniac +egomaniacal +egomaniacally +egomaniacs +egomanias +egos +egotism +egotisms +egotist +egotistic +egotistical +egotistically +egotists +egregious +egregiously +egregiousness +egregiousnesses +egress +egressed +egresses +egressing +egression +egressions +egret +egrets +egyptian +egyptians +eh +eicosanoid +eicosanoids +eide +eider +eiderdown +eiderdowns +eiders +eidetic +eidetically +eidola +eidolic +eidolon +eidolons +eidos +eigenmode +eigenmodes +eigenvalue +eigenvalues +eigenvector +eigenvectors +eight +eighteen +eighteens +eighteenth +eighteenths +eightfold +eighth +eighthly +eighths +eighties +eightieth +eightieths +eights +eightvo +eightvos +eighty +eikon +eikones +eikons +einkorn +einkorns +einstein +einsteinium +einsteiniums +einsteins +eirenic +eisegeses +eisegesis +eisteddfod +eisteddfodau +eisteddfodic +eisteddfods +eiswein +eisweins either +ejaculate +ejaculated +ejaculates +ejaculating +ejaculation +ejaculations +ejaculator +ejaculators +ejaculatory +eject +ejecta +ejectable +ejected +ejecting +ejection +ejections +ejective +ejectives +ejectment +ejectments +ejector +ejectors +ejects +eke +eked +ekes +eking +ekistic +ekistics +ekpwele +ekpweles +ektexine +ektexines +ekuele +el +elaborate +elaborated +elaborately +elaborateness +elaboratenesses +elaborates +elaborating +elaboration +elaborations +elaborative +elain +elains +elan +eland +elands +elans +elaphine +elapid +elapids +elapine +elapse +elapsed +elapses +elapsing +elasmobranch +elasmobranchs +elastase +elastases +elastic +elastically +elasticities +elasticity +elasticized +elastics +elastin +elastins +elastomer +elastomeric +elastomers +elate +elated +elatedly +elatedness +elatednesses +elater +elaterid +elaterids +elaterin +elaterins +elaterite +elaterites +elaters +elates +elating +elation +elations +elative +elatives +elbow +elbowed +elbowing +elbowroom +elbowrooms +elbows +eld elder +elderberries +elderberry +elderlies +elderliness +elderlinesses +elderly +elders +eldership +elderships +eldest +eldress +eldresses +eldrich +eldritch +elds +elecampane +elecampanes elect +electabilities +electability +electable +elected +electee +electees +electing +election +electioneer +electioneered +electioneerer +electioneerers +electioneering +electioneers +elections +elective +electively +electiveness +electivenesses +electives +elector +electoral +electorally +electorate +electorates +electors +electress +electresses +electret +electrets electric electrical +electrically +electrician +electricians +electricities electricity +electrics +electrification +electrifications +electrified +electrifies +electrify +electrifying +electro +electroacoustic +electroacoustics +electroanalyses +electroanalysis +electroanalytical +electrocardiogram +electrocardiograms +electrocardiograph +electrocardiographic +electrocardiographically +electrocardiographies +electrocardiographs +electrocardiography +electrochemical +electrochemically +electrochemistries +electrochemistry +electroconvulsive +electrocorticogram +electrocorticograms +electrocute +electrocuted +electrocutes +electrocuting +electrocution +electrocutions +electrode +electrodeposit +electrodeposited +electrodepositing +electrodeposition +electrodepositions +electrodeposits +electrodermal +electrodes +electrodesiccation +electrodesiccations +electrodialyses +electrodialysis +electrodialytic +electrodynamic +electrodynamics +electrodynamometer +electrodynamometers +electroed +electroencephalogram +electroencephalograms +electroencephalograph +electroencephalographer +electroencephalographers +electroencephalographic +electroencephalographically +electroencephalographies +electroencephalographs +electroencephalography +electrofishing +electrofishings +electroform +electroformed +electroforming +electroforms +electrogeneses +electrogenesis +electrogenic +electrogram +electrograms +electrohydraulic +electroing +electrojet +electrojets +electrokinetic +electrokinetics +electroless +electrologies +electrologist +electrologists +electrology +electroluminescence +electroluminescences +electroluminescent +electrolyses +electrolysis +electrolyte +electrolytes +electrolytic +electrolytically +electrolyze +electrolyzed +electrolyzes +electrolyzing +electromagnet +electromagnetic +electromagnetically +electromagnetism +electromagnetisms +electromagnets +electromechanical +electromechanically +electrometallurgies +electrometallurgy +electrometer +electrometers +electromyogram +electromyograms +electromyograph +electromyographic +electromyographically +electromyographies +electromyographs +electromyography +electron +electronegative +electronegativities +electronegativity electronic +electronically +electronics +electrons +electrooculogram +electrooculograms +electrooculographies +electrooculography +electroosmoses +electroosmosis +electroosmotic +electropherogram +electropherograms +electrophile +electrophiles +electrophilic +electrophilicities +electrophilicity +electrophorese +electrophoresed +electrophoreses +electrophoresing +electrophoresis +electrophoretic +electrophoretically +electrophoretogram +electrophoretograms +electrophori +electrophorus +electrophotographic +electrophotographies +electrophotography +electrophysiologic +electrophysiological +electrophysiologically +electrophysiologies +electrophysiologist +electrophysiologists +electrophysiology +electroplate +electroplated +electroplates +electroplating +electropositive +electroretinogram +electroretinograms +electroretinograph +electroretinographic +electroretinographies +electroretinographs +electroretinography +electros +electroscope +electroscopes +electroshock +electroshocks +electrostatic +electrostatically +electrostatics +electrosurgeries +electrosurgery +electrosurgical +electrotherapies +electrotherapy +electrothermal +electrothermally +electrotonic +electrotonically +electrotonus +electrotonuses +electrotype +electrotyped +electrotyper +electrotypers +electrotypes +electrotyping +electroweak +electrowinning +electrowinnings +electrum +electrums +elects +electuaries +electuary +eledoisin +eledoisins +eleemosynary +elegance +elegances +elegancies +elegancy elegant +elegantly +elegiac +elegiacal +elegiacally +elegiacs +elegies +elegise +elegised +elegises +elegising +elegist +elegists +elegit +elegits +elegize +elegized +elegizes +elegizing +elegy +element +elemental +elementally +elementals +elementarily +elementariness +elementarinesses +elementary +elements +elemi +elemis +elenchi +elenchic +elenchus +elenctic elephant +elephantiases +elephantiasis +elephantine +elephants +elevate +elevated +elevateds +elevates +elevating +elevation +elevations +elevator +elevators +eleven +elevens +elevenses +eleventh +elevenths +elevon +elevons +elf +elfin +elfins +elfish +elfishly +elflike +elflock +elflocks +elhi +elicit +elicitation +elicitations +elicited +eliciting +elicitor +elicitors +elicits +elide +elided +elides +elidible +eliding +eligibilities +eligibility +eligible +eligibles +eligibly +eliminate +eliminated +eliminates +eliminating +elimination +eliminations +eliminative +eliminator +eliminators +elint +elints +elision +elisions +elite +elites +elitism +elitisms +elitist +elitists +elixir +elixirs +elk +elkhound +elkhounds +elks +ell +ellipse +ellipses +ellipsis +ellipsoid +ellipsoidal +ellipsoids +elliptic +elliptical +elliptically +ellipticals +ellipticities +ellipticity +ells +elm +elmier +elmiest +elms +elmy +elocution +elocutionary +elocutionist +elocutionists +elocutions +elodea +elodeas +eloign +eloigned +eloigner +eloigners +eloigning +eloigns +eloin +eloined +eloiner +eloiners +eloining +eloins +elongate +elongated +elongates +elongating +elongation +elongations +elope +eloped +elopement +elopements +eloper +elopers +elopes +eloping +eloquence +eloquences +eloquent +eloquently +els else -email +elsewhere +eluant +eluants +eluate +eluates +elucidate +elucidated +elucidates +elucidating +elucidation +elucidations +elucidative +elucidator +elucidators +elucubrate +elucubrated +elucubrates +elucubrating +elucubration +elucubrations +elude +eluded +eluder +eluders +eludes +eluding +eluent +eluents +elusion +elusions +elusive +elusively +elusiveness +elusivenesses +elusory +elute +eluted +elutes +eluting +elution +elutions +elutriate +elutriated +elutriates +elutriating +elutriation +elutriations +elutriator +elutriators +eluvia +eluvial +eluviate +eluviated +eluviates +eluviating +eluviation +eluviations +eluvium +eluviums +elver +elvers +elves +elvish +elvishly +elysian +elytra +elytroid +elytron +elytrous +elytrum +em +emaciate +emaciated +emaciates +emaciating +emaciation +emaciations +emalangeni +emanate +emanated +emanates +emanating +emanation +emanations +emanative +emanator +emanators +emancipate +emancipated +emancipates +emancipating +emancipation +emancipationist +emancipationists +emancipations +emancipator +emancipators +emarginate +emargination +emarginations +emasculate +emasculated +emasculates +emasculating +emasculation +emasculations +emasculator +emasculators +embalm +embalmed +embalmer +embalmers +embalming +embalmment +embalmments +embalms +embank +embanked +embanking +embankment +embankments +embanks +embar +embarcadero +embarcaderos +embargo +embargoed +embargoes +embargoing +embark +embarkation +embarkations +embarked +embarking +embarkment +embarkments +embarks embarrass +embarrassable +embarrassed +embarrassedly +embarrasses +embarrassing +embarrassingly +embarrassment +embarrassments +embarred +embarring +embars +embassage +embassages +embassies embassy +embattle +embattled +embattlement +embattlements +embattles +embattling +embay +embayed +embaying +embayment +embayments +embays +embed +embedded +embedding +embeddings +embedment +embedments +embeds +embellish +embellished +embellisher +embellishers +embellishes +embellishing +embellishment +embellishments +ember +embers +embezzle +embezzled +embezzlement +embezzlements +embezzler +embezzlers +embezzles +embezzling +embitter +embittered +embittering +embitterment +embitterments +embitters +emblaze +emblazed +emblazer +emblazers +emblazes +emblazing +emblazon +emblazoned +emblazoner +emblazoners +emblazoning +emblazonment +emblazonments +emblazonries +emblazonry +emblazons +emblem +emblematic +emblematical +emblematically +emblematize +emblematized +emblematizes +emblematizing +emblemed +emblements +embleming +emblems +embodied +embodier +embodiers +embodies +embodiment +embodiments +embody +embodying +embolden +emboldened +emboldening +emboldens +embolectomies +embolectomy +emboli +embolic +embolies +embolism +embolismic +embolisms +embolization +embolizations +embolus +emboly +embonpoint +embonpoints +emborder +embordered +embordering +emborders +embosk +embosked +embosking +embosks +embosom +embosomed +embosoming +embosoms +emboss +embossable +embossed +embosser +embossers +embosses +embossing +embossment +embossments +embouchure +embouchures +embourgeoisement +embourgeoisements +embow +embowed +embowel +emboweled +emboweling +embowelled +embowelling +embowels +embower +embowered +embowering +embowers +embowing +embows +embrace +embraceable +embraced +embracement +embracements +embraceor +embraceors +embracer +embraceries +embracers +embracery +embraces +embracing +embracingly +embracive +embrangle +embrangled +embranglement +embranglements +embrangles +embrangling +embrasure +embrasures +embrittle +embrittled +embrittlement +embrittlements +embrittles +embrittling +embrocation +embrocations +embroider +embroidered +embroiderer +embroiderers +embroideries +embroidering +embroiders +embroidery +embroil +embroiled +embroiling +embroilment +embroilments +embroils +embrown +embrowned +embrowning +embrowns +embrue +embrued +embrues +embruing +embrute +embruted +embrutes +embruting +embryo +embryogeneses +embryogenesis +embryogenetic +embryogenic +embryogenies +embryogeny +embryoid +embryoids +embryological +embryologically +embryologies +embryologist +embryologists +embryology +embryon +embryonal +embryonated +embryonic +embryonically +embryons +embryophyte +embryophytes +embryos +emcee +emceed +emceeing +emcees +eme +emeer +emeerate +emeerates +emeers +emend +emendable +emendate +emendated +emendates +emendating +emendation +emendations +emended +emender +emenders +emending +emends +emerald +emeralds +emerge +emerged +emergence +emergences +emergencies emergency +emergent +emergents +emerges +emerging +emeries +emerita +emeritae +emeriti +emeritus +emerod +emerods +emeroid +emeroids +emersed +emersion +emersions +emery +emes +emeses +emesis +emetic +emetically +emetics +emetin +emetine +emetines +emetins +emeu +emeus +emeute +emeutes +emf +emfs +emic +emigrant +emigrants +emigrate +emigrated +emigrates +emigrating +emigration +emigrations +emigre +emigres +eminence +eminences +eminencies +eminency +eminent +eminently +emir +emirate +emirates +emirs +emissaries +emissary +emission +emissions +emissive +emissivities +emissivity +emit +emits +emittance +emittances +emitted +emitter +emitters +emitting +emmenagogue +emmenagogues +emmer +emmers +emmet +emmets +emodin +emodins +emollient +emollients +emolument +emoluments +emote +emoted +emoter +emoters +emotes +emoting +emotion +emotional +emotionalism +emotionalisms +emotionalist +emotionalistic +emotionalists +emotionalities +emotionality +emotionalize +emotionalized +emotionalizes +emotionalizing +emotionally +emotionless +emotionlessly +emotionlessness +emotionlessnesses +emotions +emotive +emotively +emotivities +emotivity +empale +empaled +empaler +empalers +empales +empaling +empanada +empanadas +empanel +empaneled +empaneling +empanelled +empanelling +empanels +empathetic +empathetically +empathic +empathically +empathies +empathise +empathised +empathises +empathising +empathize +empathized +empathizes +empathizing +empathy +empennage +empennages +emperies emperor +emperors +emperorship +emperorships +empery +emphases +emphasis +emphasise +emphasised +emphasises +emphasising +emphasize +emphasized +emphasizes +emphasizing +emphatic +emphatically +emphysema +emphysemas +emphysematous +emphysemic +empire +empires +empiric +empirical +empirically +empiricism +empiricisms +empiricist +empiricists +empirics +emplace +emplaced +emplacement +emplacements +emplaces +emplacing +emplane +emplaned +emplanes +emplaning employ +employabilities +employability +employable +employables +employe +employed +employee +employees +employer +employers +employes +employing +employment +employments +employs +empoison +empoisoned +empoisoning +empoisonment +empoisonments +empoisons +emporia +emporium +emporiums +empower +empowered +empowering +empowerment +empowerments +empowers +empress +empressement +empressements +empresses +emprise +emprises +emprize +emprizes +emptied +emptier +emptiers +empties +emptiest +emptily +emptiness +emptinesses +emptings +emptins empty +emptying +empurple +empurpled +empurples +empurpling +empyema +empyemas +empyemata +empyemic +empyreal +empyrean +empyreans +ems +emu +emulate +emulated +emulates +emulating +emulation +emulations +emulative +emulatively +emulator +emulators +emulous +emulously +emulousness +emulousnesses +emulsifiable +emulsification +emulsifications +emulsified +emulsifier +emulsifiers +emulsifies +emulsify +emulsifying +emulsion +emulsions +emulsive +emulsoid +emulsoidal +emulsoids +emus +emyd +emyde +emydes +emyds +en +enable +enabled +enabler +enablers +enables +enabling +enact +enacted +enacting +enactive +enactment +enactments +enactor +enactors +enactory +enacts +enamel +enameled +enameler +enamelers +enameling +enamelist +enamelists +enamelled +enamelling +enamels +enamelware +enamelwares +enamine +enamines +enamor +enamoration +enamorations +enamored +enamoring +enamors +enamour +enamoured +enamouring +enamours +enantiomer +enantiomeric +enantiomers +enantiomorph +enantiomorphic +enantiomorphism +enantiomorphisms +enantiomorphous +enantiomorphs +enate +enates +enatic +enation +enations +encaenia +encage +encaged +encages +encaging +encamp +encamped +encamping +encampment +encampments +encamps +encapsulate +encapsulated +encapsulates +encapsulating +encapsulation +encapsulations +encapsule +encapsuled +encapsules +encapsuling +encase +encased +encasement +encasements +encases +encash +encashable +encashed +encashes +encashing +encashment +encashments +encasing +encaustic +encaustics +enceinte +enceintes +encephala +encephalitic +encephalitides +encephalitis +encephalitogen +encephalitogenic +encephalitogens +encephalogram +encephalograms +encephalograph +encephalographies +encephalographs +encephalography +encephalomyelitides +encephalomyelitis +encephalomyocarditis +encephalomyocarditises +encephalon +encephalopathic +encephalopathies +encephalopathy +enchain +enchained +enchaining +enchainment +enchainments +enchains +enchant +enchanted +enchanter +enchanters +enchanting +enchantingly +enchantment +enchantments +enchantress +enchantresses +enchants +enchase +enchased +enchaser +enchasers +enchases +enchasing +enchilada +enchiladas +enchiridia +enchiridion +enchiridions +enchoric +encina +encinal +encinas +encipher +enciphered +encipherer +encipherers +enciphering +encipherment +encipherments +enciphers +encircle +encircled +encirclement +encirclements +encircles +encircling +enclasp +enclasped +enclasping +enclasps +enclave +enclaves +enclitic +enclitics +enclose +enclosed +encloser +enclosers +encloses +enclosing +enclosure +enclosures +encode +encoded +encoder +encoders +encodes +encoding +encomia +encomiast +encomiastic +encomiasts +encomium +encomiums +encompass +encompassed +encompasses +encompassing +encompassment +encompassments +encore +encored +encores +encoring +encounter +encountered +encountering +encounters encourage +encouraged encouragement +encouragements +encourager +encouragers +encourages +encouraging +encouragingly +encrimson +encrimsoned +encrimsoning +encrimsons +encroach +encroached +encroacher +encroachers +encroaches +encroaching +encroachment +encroachments +encrust +encrustation +encrustations +encrusted +encrusting +encrusts +encrypt +encrypted +encrypting +encryption +encryptions +encrypts +encumber +encumbered +encumbering +encumbers +encumbrance +encumbrancer +encumbrancers +encumbrances +encyclic +encyclical +encyclicals +encyclics +encyclopaedia +encyclopaedias +encyclopaedic +encyclopedia +encyclopedias +encyclopedic +encyclopedically +encyclopedism +encyclopedisms +encyclopedist +encyclopedists +encyst +encysted +encysting +encystment +encystments +encysts end +endamage +endamaged +endamages +endamaging +endameba +endamebae +endamebas +endamoeba +endamoebae +endamoebas +endanger +endangered +endangering +endangerment +endangerments +endangers +endarch +endarchies +endarchy +endarterectomies +endarterectomy +endbrain +endbrains +endear +endeared +endearing +endearingly +endearment +endearments +endears +endeavor +endeavored +endeavoring +endeavors +endeavour +endeavoured +endeavouring +endeavours +ended +endemial +endemic +endemically +endemicities +endemicity +endemics +endemism +endemisms +ender +endergonic +endermic +enders +endexine +endexines +endgame +endgames ending +endings +endite +endited +endites +enditing +endive +endives +endleaf +endleaves endless +endlessly +endlessness +endlessnesses +endlong +endmost +endnote +endnotes +endobiotic +endocardia +endocardial +endocarditis +endocarditises +endocardium +endocarp +endocarps +endocast +endocasts +endochondral +endocrine +endocrines +endocrinologic +endocrinological +endocrinologies +endocrinologist +endocrinologists +endocrinology +endocytoses +endocytosis +endocytosises +endocytotic +endoderm +endodermal +endodermis +endodermises +endoderms +endodontic +endodontically +endodontics +endodontist +endodontists +endoenzyme +endoenzymes +endoergic +endogamies +endogamous +endogamy +endogen +endogenic +endogenies +endogenous +endogenously +endogens +endogeny +endolithic +endolymph +endolymphatic +endolymphs +endometria +endometrial +endometrioses +endometriosis +endometriosises +endometrites +endometritides +endometritis +endometritises +endometrium +endomitoses +endomitosis +endomitotic +endomixis +endomixises +endomorph +endomorphic +endomorphies +endomorphism +endomorphisms +endomorphs +endomorphy +endonuclease +endonucleases +endonucleolytic +endoparasite +endoparasites +endoparasitic +endoparasitism +endoparasitisms +endopeptidase +endopeptidases +endoperoxide +endoperoxides +endophyte +endophytes +endophytic +endoplasm +endoplasmic +endoplasms +endopod +endopodite +endopodites +endopods +endopolyploid +endopolyploidies +endopolyploidy +endorphin +endorphins +endorsable +endorse +endorsed +endorsee +endorsees +endorsement +endorsements +endorser +endorsers +endorses +endorsing +endorsor +endorsors +endosarc +endosarcs +endoscope +endoscopes +endoscopic +endoscopically +endoscopies +endoscopy +endoskeletal +endoskeleton +endoskeletons +endosmos +endosmoses +endosome +endosomes +endosperm +endosperms +endospore +endospores +endostea +endosteal +endosteally +endosteum +endostyle +endostyles +endosulfan +endosulfans +endosymbiont +endosymbionts +endosymbioses +endosymbiosis +endosymbiotic +endothecia +endothecium +endothelia +endothelial +endothelioma +endotheliomas +endotheliomata +endothelium +endotherm +endothermic +endothermies +endotherms +endothermy +endotoxic +endotoxin +endotoxins +endotracheal +endotrophic +endow +endowed +endower +endowers +endowing +endowment +endowments +endows +endozoic +endpaper +endpapers +endplate +endplates +endpoint +endpoints +endrin +endrins +ends +endue +endued +endues +enduing +endurable +endurably +endurance +endurances +endure +endured +endures +enduring +enduringly +enduringness +enduringnesses +enduro +enduros +endways +endwise +enema +enemas +enemata +enemies enemy energetic +energetically +energetics +energid +energids +energies +energise +energised +energises +energising +energization +energizations +energize +energized +energizer +energizers +energizes +energizing energy +enervate +enervated +enervates +enervating +enervation +enervations +enface +enfaced +enfaces +enfacing +enfeeble +enfeebled +enfeeblement +enfeeblements +enfeebles +enfeebling +enfeoff +enfeoffed +enfeoffing +enfeoffment +enfeoffments +enfeoffs +enfetter +enfettered +enfettering +enfetters +enfever +enfevered +enfevering +enfevers +enfilade +enfiladed +enfilades +enfilading +enflame +enflamed +enflames +enflaming +enfleurage +enfleurages +enfold +enfolded +enfolder +enfolders +enfolding +enfolds +enforce +enforceabilities +enforceability +enforceable +enforced +enforcement +enforcements +enforcer +enforcers +enforces +enforcing +enframe +enframed +enframement +enframements +enframes +enframing +enfranchise +enfranchised +enfranchisement +enfranchisements +enfranchises +enfranchising +eng +engage +engaged +engagement +engagements +engager +engagers +engages +engaging +engagingly +engarland +engarlanded +engarlanding +engarlands +engender +engendered +engendering +engenders +engild +engilded +engilding +engilds +engine +engined engineer +engineered +engineering +engineerings +engineers +engineries +enginery +engines +engining +enginous +engird +engirded +engirding +engirdle +engirdled +engirdles +engirdling +engirds +engirt +english +englished +englishes +englishing +englut +engluts +englutted +englutting +engorge +engorged +engorgement +engorgements +engorges +engorging +engraft +engrafted +engrafting +engraftment +engraftments +engrafts +engrail +engrailed +engrailing +engrails +engrain +engrained +engraining +engrains +engram +engramme +engrammes +engrams +engrave +engraved +engraver +engravers +engraves +engraving +engravings +engross +engrossed +engrosser +engrossers +engrosses +engrossing +engrossingly +engrossment +engrossments +engs +engulf +engulfed +engulfing +engulfment +engulfments +engulfs +enhalo +enhaloed +enhaloes +enhaloing +enhalos +enhance +enhanced +enhancement +enhancements +enhancer +enhancers +enhances +enhancing +enharmonic +enharmonically +enigma +enigmas +enigmata +enigmatic +enigmatical +enigmatically +enisle +enisled +enisles +enisling +enjambed +enjambement +enjambements +enjambment +enjambments +enjoin +enjoined +enjoiner +enjoiners +enjoining +enjoins enjoy enjoyable +enjoyableness +enjoyablenesses +enjoyably +enjoyed +enjoyer +enjoyers +enjoying +enjoyment +enjoyments +enjoys +enkephalin +enkephalins +enkindle +enkindled +enkindles +enkindling +enlace +enlaced +enlacement +enlacements +enlaces +enlacing enlarge +enlargeable +enlarged +enlargement +enlargements +enlarger +enlargers +enlarges +enlarging +enlighten +enlightened +enlightening +enlightenment +enlightenments +enlightens +enlist +enlisted +enlistee +enlistees +enlister +enlisters +enlisting +enlistment +enlistments +enlists +enliven +enlivened +enlivening +enlivens +enmesh +enmeshed +enmeshes +enmeshing +enmeshment +enmeshments +enmities +enmity +ennead +enneadic +enneads +enneagon +enneagons +ennoble +ennobled +ennoblement +ennoblements +ennobler +ennoblers +ennobles +ennobling +ennui +ennuis +ennuye +ennuyee +enoki +enokidake +enokidakes +enokis +enol +enolase +enolases +enolic +enological +enologies +enologist +enologists +enology +enols +enorm +enormities +enormity +enormous +enormously +enormousness +enormousnesses +enosis +enosises enough +enoughs +enounce +enounced +enounces +enouncing +enow +enows +enplane +enplaned +enplanes +enplaning +enquire +enquired +enquires +enquiries +enquiring enquiry +enrage +enraged +enrages +enraging +enrapt +enrapture +enraptured +enraptures +enrapturing +enravish +enravished +enravishes +enravishing +enregister +enregistered +enregistering +enregisters +enrich +enriched +enricher +enrichers +enriches +enriching +enrichment +enrichments +enrobe +enrobed +enrober +enrobers +enrobes +enrobing +enrol +enroll +enrolled +enrollee +enrollees +enroller +enrollers +enrolling +enrollment +enrollments +enrolls +enrols +enroot +enrooted +enrooting +enroots +ens +ensample +ensamples +ensanguine +ensanguined +ensanguines +ensanguining +ensconce +ensconced +ensconces +ensconcing +enscroll +enscrolled +enscrolling +enscrolls +ensemble +ensembles +enserf +enserfed +enserfing +enserfment +enserfments +enserfs +ensheath +ensheathe +ensheathed +ensheathes +ensheathing +ensheaths +enshrine +enshrined +enshrinee +enshrinees +enshrinement +enshrinements +enshrines +enshrining +enshroud +enshrouded +enshrouding +enshrouds +ensiform +ensign +ensigncies +ensigncy +ensigns +ensilage +ensilaged +ensilages +ensilaging +ensile +ensiled +ensiles +ensiling +enskied +enskies +ensky +enskyed +enskying +enslave +enslaved +enslavement +enslavements +enslaver +enslavers +enslaves +enslaving +ensnare +ensnared +ensnarer +ensnarers +ensnares +ensnaring +ensnarl +ensnarled +ensnarling +ensnarls +ensorcel +ensorceled +ensorceling +ensorcell +ensorcelled +ensorcelling +ensorcellment +ensorcellments +ensorcells +ensorcels +ensoul +ensouled +ensouling +ensouls +ensphere +ensphered +enspheres +ensphering +ensue +ensued +ensues +ensuing +ensure +ensured +ensurer +ensurers +ensures +ensuring +enswathe +enswathed +enswathes +enswathing +entablature +entablatures +entail +entailed +entailer +entailers +entailing +entailment +entailments +entails +entameba +entamebae +entamebas +entamoeba +entamoebae +entamoebas +entangle +entangled +entanglement +entanglements +entangler +entanglers +entangles +entangling +entases +entasia +entasias +entasis +entastic +entelechies +entelechy +entellus +entelluses +entente +ententes enter +entera +enterable +enteral +enterally +entered +enterer +enterers +enteric +entering +enteritides +enteritis +enteritises +enterobacteria +enterobacterial +enterobacterium +enterobiases +enterobiasis +enterochromaffin +enterococcal +enterococci +enterococcus +enterocoel +enterocoele +enterocoeles +enterocoelic +enterocoelous +enterocoels +enterocolitis +enterocolitises +enterogastrone +enterogastrones +enterokinase +enterokinases +enteron +enterons +enteropathies +enteropathogenic +enteropathy +enterostomal +enterostomies +enterostomy +enterotoxin +enterotoxins +enteroviral +enterovirus +enteroviruses enterprise +enterpriser +enterprisers +enterprises +enterprising +enters +entertain +entertained +entertainer +entertainers +entertaining +entertainingly entertainment +entertainments +entertains +enthalpies +enthalpy +enthetic +enthral +enthrall +enthralled +enthralling +enthrallment +enthrallments +enthralls +enthrals +enthrone +enthroned +enthronement +enthronements +enthrones +enthroning +enthuse +enthused +enthuses +enthusiasm +enthusiasms +enthusiast enthusiastic +enthusiastically +enthusiasts +enthusing +enthymeme +enthymemes +entia +entice +enticed +enticement +enticements +enticer +enticers +entices +enticing +enticingly entire +entirely +entireness +entirenesses +entires +entireties +entirety +entities +entitle +entitled +entitlement +entitlements +entitles +entitling +entity +entoderm +entodermal +entodermic +entoderms +entoil +entoiled +entoiling +entoils +entomb +entombed +entombing +entombment +entombments +entombs +entomofauna +entomofaunae +entomofaunas +entomological +entomologically +entomologies +entomologist +entomologists +entomology +entomophagous +entomophilies +entomophilous +entomophily +entopic +entoproct +entoprocts +entourage +entourages +entozoa +entozoal +entozoan +entozoans +entozoic +entozoon +entrails +entrain +entrained +entrainer +entrainers +entraining +entrainment +entrainments +entrains entrance +entranced +entrancement +entrancements +entrances +entranceway +entranceways +entrancing +entrant +entrants +entrap +entrapment +entrapments +entrapped +entrapping +entraps +entreat +entreated +entreaties +entreating +entreatingly +entreatment +entreatments +entreats +entreaty +entrechat +entrechats +entrecote +entrecotes +entree +entrees +entremets +entrench +entrenched +entrenches +entrenching +entrenchment +entrenchments +entrepot +entrepots +entrepreneur +entrepreneurial +entrepreneurialism +entrepreneurialisms +entrepreneurially +entrepreneurs +entrepreneurship +entrepreneurships +entresol +entresols +entries +entropic +entropically +entropies +entropion +entropions +entropy +entrust +entrusted +entrusting +entrustment +entrustments +entrusts entry +entryway +entryways +entwine +entwined +entwines +entwining +entwist +entwisted +entwisting +entwists +enucleate +enucleated +enucleates +enucleating +enucleation +enucleations +enumerabilities +enumerability +enumerable +enumerate +enumerated +enumerates +enumerating +enumeration +enumerations +enumerative +enumerator +enumerators +enunciable +enunciate +enunciated +enunciates +enunciating +enunciation +enunciations +enunciator +enunciators +enure +enured +enures +enuresis +enuresises +enuretic +enuretics +enuring +envelop envelope +enveloped +envelopes +enveloping +envelopment +envelopments +envelops +envenom +envenomed +envenoming +envenomization +envenomizations +envenoms +enviable +enviableness +enviablenesses +enviably +envied +envier +enviers +envies +envious +enviously +enviousness +enviousnesses +environ +environed +environing environment +environmental +environmentalism +environmentalisms +environmentalist +environmentalists +environmentally +environments +environs +envisage +envisaged +envisages +envisaging +envision +envisioned +envisioning +envisions +envoi +envois +envoy +envoys envy +envying +envyingly +enwheel +enwheeled +enwheeling +enwheels +enwind +enwinding +enwinds +enwomb +enwombed +enwombing +enwombs +enwound +enwrap +enwrapped +enwrapping +enwraps +enwreathe +enwreathed +enwreathes +enwreathing +enzootic +enzootics +enzym +enzymatic +enzymatically +enzyme +enzymes +enzymic +enzymically +enzymologies +enzymologist +enzymologists +enzymology +enzyms +eobiont +eobionts +eohippus +eohippuses +eolian +eolipile +eolipiles +eolith +eolithic +eoliths +eolopile +eolopiles +eon +eonian +eonism +eonisms +eons +eosin +eosine +eosines +eosinic +eosinophil +eosinophilia +eosinophilias +eosinophilic +eosinophils +eosins +epact +epacts +eparch +eparchies +eparchs +eparchy +epaulet +epaulets +epaulette +epauletted +epaulettes +epazote +epazotes +epee +epeeist +epeeists +epees +epeiric +epeirogenic +epeirogenically +epeirogenies +epeirogeny +ependyma +ependymas +epentheses +epenthesis +epenthetic +epergne +epergnes +epexegeses +epexegesis +epexegetic +epexegetical +epexegetically +epha +ephah +ephahs +ephas +ephebe +ephebes +ephebi +ephebic +epheboi +ephebos +ephebus +ephedra +ephedras +ephedrin +ephedrine +ephedrines +ephedrins +ephemera +ephemerae +ephemeral +ephemeralities +ephemerality +ephemerally +ephemerals +ephemeras +ephemerid +ephemerides +ephemerids +ephemeris +ephemeron +ephod +ephods +ephor +ephoral +ephorate +ephorates +ephori +ephors +epiblast +epiblastic +epiblasts +epibolic +epibolies +epiboly +epic +epical +epically +epicalyces +epicalyx +epicalyxes +epicardia +epicardial +epicardium +epicarp +epicarps +epicedia +epicedium +epicene +epicenes +epicenism +epicenisms +epicenter +epicenters +epicentral +epichlorohydrin +epichlorohydrins +epiclike +epicontinental +epicotyl +epicotyls +epicritic +epics +epicure +epicurean +epicureanism +epicureanisms +epicureans +epicures +epicurism +epicurisms +epicuticle +epicuticles +epicuticular +epicycle +epicycles +epicyclic +epicycloid +epicycloidal +epicycloids +epidemic +epidemical +epidemically +epidemicities +epidemicity +epidemics +epidemiologic +epidemiological +epidemiologically +epidemiologies +epidemiologist +epidemiologists +epidemiology +epidendrum +epidendrums +epiderm +epidermal +epidermic +epidermis +epidermises +epidermoid +epiderms +epidiascope +epidiascopes +epididymal +epididymides +epididymis +epididymites +epididymitides +epididymitis +epididymitises +epidote +epidotes +epidotic +epidural +epifauna +epifaunae +epifaunal +epifaunas +epifocal +epigastric +epigeal +epigean +epigeic +epigene +epigeneses +epigenesis +epigenetic +epigenetically +epigenic +epigeous +epiglottal +epiglottic +epiglottides +epiglottis +epiglottises +epigon +epigone +epigones +epigoni +epigonic +epigonism +epigonisms +epigonous +epigons +epigonus +epigram +epigrammatic +epigrammatically +epigrammatism +epigrammatisms +epigrammatist +epigrammatists +epigrammatize +epigrammatized +epigrammatizer +epigrammatizers +epigrammatizes +epigrammatizing +epigrams +epigraph +epigrapher +epigraphers +epigraphic +epigraphical +epigraphically +epigraphies +epigraphist +epigraphists +epigraphs +epigraphy +epigynies +epigynous +epigyny +epilation +epilations +epilepsies +epilepsy +epileptic +epileptically +epileptics +epileptiform +epileptogenic +epileptoid +epilimnion +epilimnions +epilog +epilogs +epilogue +epilogued +epilogues +epiloguing +epimer +epimerase +epimerases +epimere +epimeres +epimeric +epimers +epimysia +epimysium +epinaoi +epinaos +epinasties +epinasty +epinephrin +epinephrine +epinephrines +epinephrins +epineuria +epineurium +epineuriums +epipelagic +epiphanic +epiphanies +epiphanous +epiphany +epiphenomena +epiphenomenal +epiphenomenalism +epiphenomenalisms +epiphenomenally +epiphenomenon +epiphragm +epiphragms +epiphyseal +epiphyses +epiphysial +epiphysis +epiphyte +epiphytes +epiphytic +epiphytically +epiphytism +epiphytisms +epiphytologies +epiphytology +epiphytotic +epiphytotics +episcia +episcias +episcopacies +episcopacy +episcopal +episcopally +episcopate +episcopates +episcope +episcopes +episiotomies +episiotomy +episode +episodes +episodic +episodical +episodically +episomal +episomally +episome +episomes +epistases +epistasies +epistasis +epistasy +epistatic +epistaxes +epistaxis +epistemic +epistemically +epistemological +epistemologically +epistemologies +epistemologist +epistemologists +epistemology +epistle +epistler +epistlers +epistles +epistolaries +epistolary +epistoler +epistolers +epistome +epistomes +epistrophe +epistrophes +epistyle +epistyles +epitaph +epitaphial +epitaphic +epitaphs +epitases +epitasis +epitaxial +epitaxially +epitaxic +epitaxies +epitaxy +epithalamia +epithalamic +epithalamion +epithalamium +epithalamiums +epithelia +epithelial +epithelialization +epithelializations +epithelialize +epithelialized +epithelializes +epithelializing +epithelioid +epithelioma +epitheliomas +epitheliomata +epitheliomatous +epithelium +epitheliums +epithelization +epithelizations +epithelize +epithelized +epithelizes +epithelizing +epithet +epithetic +epithetical +epithets +epitome +epitomes +epitomic +epitomical +epitomise +epitomised +epitomises +epitomising +epitomize +epitomized +epitomizes +epitomizing +epitope +epitopes +epizoa +epizoic +epizoism +epizoisms +epizoite +epizoites +epizoon +epizootic +epizootics +epizooties +epizootiologic +epizootiological +epizootiologies +epizootiology +epizooty +epoch +epochal +epochally +epochs +epode +epodes +eponym +eponymic +eponymies +eponymous +eponyms +eponymy +epopee +epopees +epopoeia +epopoeias +epos +eposes +epoxidation +epoxidations +epoxide +epoxides +epoxidize +epoxidized +epoxidizes +epoxidizing +epoxied +epoxies +epoxy +epoxyed +epoxying +epsilon +epsilonic +epsilons +equabilities +equability +equable +equableness +equablenesses +equably equal +equaled +equaling +equalise +equalised +equaliser +equalisers +equalises +equalising +equalitarian +equalitarianism +equalitarianisms +equalitarians +equalities equality +equalization +equalizations +equalize +equalized +equalizer +equalizers +equalizes +equalizing +equalled +equalling +equally +equals +equanimities +equanimity +equate +equated +equates +equating +equation +equational +equationally +equations +equator +equatorial +equators +equatorward +equerries +equerry +equestrian +equestrians +equestrienne +equestriennes +equiangular +equicaloric +equid +equidistant +equidistantly +equids +equilateral +equilibrant +equilibrants +equilibrate +equilibrated +equilibrates +equilibrating +equilibration +equilibrations +equilibrator +equilibrators +equilibratory +equilibria +equilibrist +equilibristic +equilibrists +equilibrium +equilibriums +equimolar +equine +equinely +equines +equinities +equinity +equinoctial +equinoctials +equinox +equinoxes equip +equipage +equipages equipment +equipments +equipoise +equipoised +equipoises +equipoising +equipollence +equipollences +equipollent +equipollently +equipollents +equiponderant +equipotential +equipped +equipper +equippers +equipping +equiprobable +equips +equiseta +equisetum +equisetums +equitabilities +equitability +equitable +equitableness +equitablenesses +equitably +equitant +equitation +equitations +equites +equities +equity +equivalence +equivalences +equivalencies +equivalency +equivalent +equivalently +equivalents +equivocal +equivocalities +equivocality +equivocally +equivocalness +equivocalnesses +equivocate +equivocated +equivocates +equivocating +equivocation +equivocations +equivocator +equivocators +equivoke +equivokes +equivoque +equivoques +er +era +eradiate +eradiated +eradiates +eradiating +eradicable +eradicate +eradicated +eradicates +eradicating +eradication +eradications +eradicator +eradicators +eras +erasabilities +erasability +erasable +erase +erased eraser +erasers +erases +erasing +erasion +erasions +erasure +erasures +erbium +erbiums +ere +erect +erectable +erected +erecter +erecters +erectile +erectilities +erectility +erecting +erection +erections +erective +erectly +erectness +erectnesses +erector +erectors +erects +erelong +eremite +eremites +eremitic +eremitical +eremitism +eremitisms +eremuri +eremurus +erenow +erepsin +erepsins +erethic +erethism +erethisms +erewhile +erewhiles +erg +ergastic +ergastoplasm +ergastoplasmic +ergastoplasms +ergate +ergates +ergative +ergo +ergodic +ergodicities +ergodicity +ergograph +ergographs +ergometer +ergometers +ergometric +ergonomic +ergonomically +ergonomics +ergonomist +ergonomists +ergonovine +ergonovines +ergosterol +ergosterols +ergot +ergotamine +ergotamines +ergotic +ergotism +ergotisms +ergotized +ergots +ergs +erica +ericaceous +ericas +ericoid +erigeron +erigerons +eringo +eringoes +eringos +eriophyid +eriophyids +eristic +eristical +eristically +eristics +erlking +erlkings +ermine +ermined +ermines +ern +erne +ernes +erns +erode +eroded +erodent +erodes +erodibilities +erodibility +erodible +eroding +erogenic +erogenous +eros +erose +erosely +eroses +erosible +erosion +erosional +erosionally +erosions +erosive +erosiveness +erosivenesses +erosivities +erosivity +erotic +erotica +erotical +erotically +eroticism +eroticisms +eroticist +eroticists +eroticization +eroticizations +eroticize +eroticized +eroticizes +eroticizing +erotics +erotism +erotisms +erotization +erotizations +erotize +erotized +erotizes +erotizing +erotogenic +err +errancies +errancy +errand +errands +errant +errantly +errantries +errantry +errants +errata +erratas +erratic +erratical +erratically +erraticism +erraticisms +erratics +erratum +erred +errhine +errhines +erring +erringly +erroneous +erroneously +erroneousness +erroneousnesses error +errorless +errors +errs +ers +ersatz +ersatzes +erses +erst +erstwhile +eruct +eructate +eructated +eructates +eructating +eructation +eructations +eructed +eructing +eructs +erudite +eruditely +erudition +eruditions +erugo +erugos +erumpent erupt +erupted +eruptible +erupting +eruption +eruptions +eruptive +eruptively +eruptives +erupts +ervil +ervils +eryngo +eryngoes +eryngos +erysipelas +erysipelases +erythema +erythemas +erythematous +erythorbate +erythorbates +erythremia +erythremias +erythrism +erythrismal +erythrisms +erythristic +erythrite +erythrites +erythroblast +erythroblastic +erythroblastoses +erythroblastosis +erythroblasts +erythrocyte +erythrocytes +erythrocytic +erythroid +erythromycin +erythromycins +erythron +erythrons +erythropoieses +erythropoiesis +erythropoietic +erythropoietin +erythropoietins +erythrosin +erythrosine +erythrosines +erythrosins +es +escadrille +escadrilles +escalade +escaladed +escalader +escaladers +escalades +escalading +escalate +escalated +escalates +escalating +escalation +escalations +escalator +escalators +escalatory +escallop +escalloped +escalloping +escallops +escalop +escaloped +escaloping +escalops +escapade +escapades escape +escaped +escapee +escapees +escapement +escapements +escaper +escapers +escapes +escaping +escapism +escapisms +escapist +escapists +escapologies +escapologist +escapologists +escapology +escar +escargot +escargots +escarole +escaroles +escarp +escarped +escarping +escarpment +escarpments +escarps +escars +eschalot +eschalots +eschar +escharotic +escharotics +eschars +eschatological +eschatologically +eschatologies +eschatology +escheat +escheatable +escheated +escheating +escheats +eschew +eschewal +eschewals +eschewed +eschewing +eschews +escolar +escolars +escort +escorted +escorting +escorts +escot +escoted +escoting +escots +escritoire +escritoires +escrow +escrowed +escrowing +escrows +escuage +escuages +escudo +escudos +esculent +esculents +escutcheon +escutcheons +esemplastic +eserine +eserines +eses +eskar +eskars +esker +eskers +esophageal +esophagi +esophagus +esoteric +esoterica +esoterically +esotericism +esotericisms +espadrille +espadrilles +espalier +espaliered +espaliering +espaliers +espanol +espanoles +esparto +espartos +especial especially +esperance +esperances +espial +espials +espied +espiegle +espieglerie +espiegleries +espies +espionage +espionages +esplanade +esplanades +espousal +espousals +espouse +espoused +espouser +espousers +espouses +espousing +espresso +espressos +esprit +esprits +espy +espying +esquire +esquired +esquires +esquiring +ess essay -europe -european +essayed +essayer +essayers +essaying +essayist +essayistic +essayists +essays +essence +essences +essential +essentialism +essentialisms +essentialist +essentialists +essentialities +essentiality +essentialize +essentialized +essentializes +essentializing +essentially +essentialness +essentialnesses +essentials +esses +essoin +essoins +essonite +essonites +establish +establishable +established +establisher +establishers +establishes +establishing +establishment +establishmentarian +establishmentarianism +establishmentarianisms +establishmentarians +establishments +estaminet +estaminets +estancia +estancias +estate +estated +estates +estating +esteem +esteemed +esteeming +esteems +ester +esterase +esterases +esterification +esterifications +esterified +esterifies +esterify +esterifying +esters +estheses +esthesia +esthesias +esthesis +esthesises +esthete +esthetes +esthetic +esthetician +estheticians +estheticism +estheticisms +esthetics +estimable +estimableness +estimablenesses +estimably +estimate +estimated +estimates +estimating +estimation +estimations +estimative +estimator +estimators +estival +estivate +estivated +estivates +estivating +estivation +estivations +estop +estopped +estoppel +estoppels +estopping +estops +estovers +estradiol +estradiols +estragon +estragons +estral +estrange +estranged +estrangement +estrangements +estranger +estrangers +estranges +estranging +estray +estrayed +estraying +estrays +estreat +estreated +estreating +estreats +estrin +estrins +estriol +estriols +estrogen +estrogenic +estrogenically +estrogens +estrone +estrones +estrous +estrual +estrum +estrums +estrus +estruses +estuarial +estuaries +estuarine +estuary +esurience +esuriences +esurient +esuriently +et +eta +etagere +etageres +etalon +etalons +etamin +etamine +etamines +etamins +etape +etapes +etas +etatism +etatisms +etatist +etcetera +etceteras +etch +etchant +etchants +etched +etcher +etchers +etches +etching +etchings +eternal +eternalize +eternalized +eternalizes +eternalizing +eternally +eternalness +eternalnesses +eternals +eterne +eternise +eternised +eternises +eternising +eternities +eternity +eternization +eternizations +eternize +eternized +eternizes +eternizing +etesian +etesians +eth +ethambutol +ethambutols +ethane +ethanes +ethanol +ethanolamine +ethanolamines +ethanols +ethene +ethenes +ethephon +ethephons +ether +ethereal +etherealities +ethereality +etherealization +etherealizations +etherealize +etherealized +etherealizes +etherealizing +ethereally +etherealness +etherealnesses +etheric +etherified +etherifies +etherify +etherifying +etherish +etherization +etherizations +etherize +etherized +etherizer +etherizers +etherizes +etherizing +ethers +ethic +ethical +ethicalities +ethicality +ethically +ethicalness +ethicalnesses +ethicals +ethician +ethicians +ethicist +ethicists +ethicize +ethicized +ethicizes +ethicizing +ethics +ethinyl +ethinyls +ethion +ethionamide +ethionamides +ethionine +ethionines +ethions +ethmoid +ethmoidal +ethmoids +ethnarch +ethnarchs +ethnic +ethnical +ethnically +ethnicities +ethnicity +ethnics +ethnobotanical +ethnobotanies +ethnobotanist +ethnobotanists +ethnobotany +ethnocentric +ethnocentricities +ethnocentricity +ethnocentrism +ethnocentrisms +ethnographer +ethnographers +ethnographic +ethnographical +ethnographically +ethnographies +ethnography +ethnohistorian +ethnohistorians +ethnohistoric +ethnohistorical +ethnohistories +ethnohistory +ethnologic +ethnological +ethnologies +ethnologist +ethnologists +ethnology +ethnomethodologies +ethnomethodologist +ethnomethodologists +ethnomethodology +ethnomusicological +ethnomusicologies +ethnomusicologist +ethnomusicologists +ethnomusicology +ethnos +ethnoscience +ethnosciences +ethnoses +ethological +ethologies +ethologist +ethologists +ethology +ethos +ethoses +ethoxies +ethoxy +ethoxyl +ethoxyls +eths +ethyl +ethylate +ethylated +ethylates +ethylating +ethylbenzene +ethylbenzenes +ethylene +ethylenediaminetetraacetate +ethylenediaminetetraacetates +ethylenes +ethylenic +ethylic +ethyls +ethyne +ethynes +ethynyl +ethynyls +etic +etiolate +etiolated +etiolates +etiolating +etiolation +etiolations +etiologic +etiological +etiologically +etiologies +etiology +etiquette +etiquettes +etna +etnas +etoile +etoiles +etouffee +etouffees +etude +etudes +etui +etuis +etwee +etwees +etyma +etymological +etymologically +etymologies +etymologise +etymologised +etymologises +etymologising +etymologist +etymologists +etymologize +etymologized +etymologizes +etymologizing +etymology +etymon +etymons +eucaine +eucaines +eucalypt +eucalypti +eucalyptol +eucalyptole +eucalyptoles +eucalyptols +eucalypts +eucalyptus +eucalyptuses +eucaryote +eucaryotes +eucharis +eucharises +eucharistic +euchre +euchred +euchres +euchring +euchromatic +euchromatin +euchromatins +euclase +euclases +euclidean +euclidian +eucrite +eucrites +eucritic +eudaemon +eudaemonism +eudaemonisms +eudaemonist +eudaemonistic +eudaemonists +eudaemons +eudaimonism +eudaimonisms +eudemon +eudemons +eudiometer +eudiometers +eudiometric +eudiometrically +eugenia +eugenias +eugenic +eugenically +eugenicist +eugenicists +eugenics +eugenist +eugenists +eugenol +eugenols +eugeosynclinal +eugeosyncline +eugeosynclines +euglena +euglenas +euglenoid +euglenoids +euglobulin +euglobulins +euhemerism +euhemerisms +euhemerist +euhemeristic +euhemerists +eukaryote +eukaryotes +eukaryotic +eulachan +eulachans +eulachon +eulachons +eulogia +eulogiae +eulogias +eulogies +eulogise +eulogised +eulogises +eulogising +eulogist +eulogistic +eulogistically +eulogists +eulogium +eulogiums +eulogize +eulogized +eulogizer +eulogizers +eulogizes +eulogizing +eulogy +eunuch +eunuchism +eunuchisms +eunuchoid +eunuchoids +eunuchs +euonymus +euonymuses +eupatrid +eupatridae +eupatrids +eupepsia +eupepsias +eupepsies +eupepsy +eupeptic +euphausiid +euphausiids +euphemise +euphemised +euphemises +euphemising +euphemism +euphemisms +euphemist +euphemistic +euphemistically +euphemists +euphemize +euphemized +euphemizer +euphemizers +euphemizes +euphemizing +euphenic +euphenics +euphonic +euphonically +euphonies +euphonious +euphoniously +euphoniousness +euphoniousnesses +euphonium +euphoniums +euphony +euphorbia +euphorbias +euphoria +euphoriant +euphoriants +euphorias +euphoric +euphorically +euphotic +euphrasies +euphrasy +euphroe +euphroes +euphuism +euphuisms +euphuist +euphuistic +euphuistically +euphuists +euploid +euploidies +euploids +euploidy +eupnea +eupneas +eupneic +eupnoea +eupnoeas +eupnoeic +eureka +eurhythmic +eurhythmics +eurhythmies +eurhythmy +euripi +euripus +euro +eurokies +eurokous +euroky +europium +europiums +euros +eurybath +eurybathic +eurybaths +euryhaline +euryokies +euryoky +eurypterid +eurypterids +eurythermal +eurythermic +eurythermous +eurythmic +eurythmics +eurythmies +eurythmy +eurytopic +eustacies +eustacy +eustatic +eustele +eusteles +eutaxies +eutaxy +eutectic +eutectics +eutectoid +eutectoids +euthanasia +euthanasias +euthanasic +euthanatize +euthanatized +euthanatizes +euthanatizing +euthanize +euthanized +euthanizes +euthanizing +euthenics +euthenist +euthenists +eutherian +eutherians +euthyroid +eutrophic +eutrophication +eutrophications +eutrophies +eutrophy +euxenite +euxenites +evacuant +evacuants +evacuate +evacuated +evacuates +evacuating +evacuation +evacuations +evacuative +evacuee +evacuees +evadable +evade +evaded +evader +evaders +evades +evadible +evading +evagination +evaginations evaluate +evaluated +evaluates +evaluating +evaluation +evaluations +evaluative +evaluator +evaluators +evanesce +evanesced +evanescence +evanescences +evanescent +evanesces +evanescing +evangel +evangelic +evangelical +evangelically +evangelism +evangelisms +evangelist +evangelistic +evangelistically +evangelists +evangelization +evangelizations +evangelize +evangelized +evangelizes +evangelizing +evangels +evanish +evanished +evanishes +evanishing +evaporate +evaporated +evaporates +evaporating +evaporation +evaporations +evaporative +evaporator +evaporators +evaporite +evaporites +evaporitic +evapotranspiration +evapotranspirations +evasion +evasions +evasive +evasively +evasiveness +evasivenesses +eve +evection +evections even +evened +evener +eveners +evenest +evenfall +evenfalls +evenhanded +evenhandedly +evenhandedness +evenhandednesses evening +evenings +evenly +evenness +evennesses +evens +evensong +evensongs event +eventful +eventfully +eventfulness +eventfulnesses +eventide +eventides +eventless +events +eventual +eventualities +eventuality +eventually +eventuate +eventuated +eventuates +eventuating ever +everblooming +everduring +everglade +everglades +evergreen +evergreens +everlasting +everlastingly +everlastingness +everlastingnesses +everlastings +evermore +eversible +eversion +eversions +evert +everted +everting +evertor +evertors +everts every everybody everyday +everydayness +everydaynesses +everyman +everymen everyone +everyplace everything +everyway everywhere +everywoman +everywomen +eves +evict +evicted +evictee +evictees +evicting +eviction +evictions +evictor +evictors +evicts evidence +evidenced +evidences +evidencing evident +evidential +evidentially +evidentiary +evidently +evil +evildoer +evildoers +evildoing +evildoings +eviler +evilest +eviller +evillest +evilly +evilness +evilnesses +evils +evince +evinced +evinces +evincible +evincing +evincive +eviscerate +eviscerated +eviscerates +eviscerating +evisceration +eviscerations +evitable +evite +evited +evites +eviting +evocable +evocation +evocations +evocative +evocatively +evocativeness +evocativenesses +evocator +evocators +evoke +evoked +evoker +evokers +evokes +evoking +evolute +evolutes evolution +evolutionarily +evolutionary +evolutionism +evolutionisms +evolutionist +evolutionists +evolutions +evolvable +evolve +evolved +evolvement +evolvements +evolver +evolvers +evolves +evolving +evonymus +evonymuses +evulsion +evulsions +evzone +evzones +ewe +ewer +ewers +ewes +ex +exacerbate +exacerbated +exacerbates +exacerbating +exacerbation +exacerbations exact +exacta +exactable +exactas +exacted +exacter +exacters +exactest +exacting +exactingly +exactingness +exactingnesses +exaction +exactions +exactitude +exactitudes +exactly +exactness +exactnesses +exactor +exactors +exacts +exaggerate +exaggerated +exaggeratedly +exaggeratedness +exaggeratednesses +exaggerates +exaggerating +exaggeration +exaggerations +exaggerative +exaggerator +exaggerators +exaggeratory +exalt +exaltation +exaltations +exalted +exaltedly +exalter +exalters +exalting +exalts exam +examen +examens +examinable +examinant +examinants examination +examinational +examinations examine +examined +examinee +examinees +examiner +examiners +examines +examining example +exampled +examples +exampling +exams +exanimate +exanthem +exanthema +exanthemas +exanthemata +exanthematic +exanthematous +exanthems +exarch +exarchal +exarchate +exarchates +exarchies +exarchs +exarchy +exasperate +exasperated +exasperatedly +exasperates +exasperating +exasperatingly +exasperation +exasperations +excavate +excavated +excavates +excavating +excavation +excavational +excavations +excavator +excavators +exceed +exceeded +exceeder +exceeders +exceeding +exceedingly +exceeds +excel +excelled +excellence +excellences +excellencies +excellency excellent +excellently +excelling +excels +excelsior +excelsiors except +excepted +excepting +exception +exceptionabilities +exceptionability +exceptionable +exceptionably +exceptional +exceptionalism +exceptionalisms +exceptionalities +exceptionality +exceptionally +exceptionalness +exceptionalnesses +exceptions +exceptive +excepts +excerpt +excerpted +excerpter +excerpters +excerpting +excerption +excerptions +excerptor +excerptors +excerpts +excess +excessed +excesses +excessing +excessive +excessively +excessiveness +excessivenesses exchange +exchangeabilities +exchangeability +exchangeable +exchanged +exchanger +exchangers +exchanges +exchanging +exchequer +exchequers +excide +excided +excides +exciding +excimer +excimers +excipient +excipients +exciple +exciples +excisable +excise +excised +exciseman +excisemen +excises +excising +excision +excisional +excisions +excitabilities +excitability +excitable +excitableness +excitablenesses +excitant +excitants +excitation +excitations +excitative +excitatory excite +excited +excitedly +excitement +excitements +exciter +exciters +excites +exciting +excitingly +exciton +excitonic +excitons +excitor +excitors +exclaim +exclaimed +exclaimer +exclaimers +exclaiming +exclaims +exclamation +exclamations +exclamatory +exclave +exclaves +excludabilities +excludability +excludable +exclude +excluded +excluder +excluders +excludes +excludible +excluding +exclusion +exclusionary +exclusionist +exclusionists +exclusions +exclusive +exclusively +exclusiveness +exclusivenesses +exclusives +exclusivism +exclusivisms +exclusivist +exclusivists +exclusivities +exclusivity +excogitate +excogitated +excogitates +excogitating +excogitation +excogitations +excogitative +excommunicate +excommunicated +excommunicates +excommunicating +excommunication +excommunications +excommunicative +excommunicator +excommunicators +excoriate +excoriated +excoriates +excoriating +excoriation +excoriations +excrement +excremental +excrementitious +excrements +excrescence +excrescences +excrescencies +excrescency +excrescent +excrescently +excreta +excretal +excrete +excreted +excreter +excreters +excretes +excreting +excretion +excretions +excretory +excruciate +excruciated +excruciates +excruciating +excruciatingly +excruciation +excruciations +exculpate +exculpated +exculpates +exculpating +exculpation +exculpations +exculpatory +excurrent +excursion +excursionist +excursionists +excursions +excursive +excursively +excursiveness +excursivenesses +excursus +excursuses +excusable +excusableness +excusablenesses +excusably +excusatory excuse +excused +excuser +excusers +excuses +excusing +exec +execrable +execrableness +execrablenesses +execrably +execrate +execrated +execrates +execrating +execration +execrations +execrative +execrator +execrators +execs +executable +executables +executant +executants +execute +executed +executer +executers +executes +executing +execution +executioner +executioners +executions +executive +executives +executor +executorial +executors +executorship +executorships +executory +executrices +executrix +executrixes +exedra +exedrae +exegeses +exegesis +exegete +exegetes +exegetic +exegetical +exegetist +exegetists +exempla +exemplar +exemplarily +exemplariness +exemplarinesses +exemplarities +exemplarity +exemplars +exemplary +exemplification +exemplifications +exemplified +exemplifies +exemplify +exemplifying +exemplum +exempt +exempted +exempting +exemption +exemptions +exempts +exenterate +exenterated +exenterates +exenterating +exenteration +exenterations +exequial +exequies +exequy +exercisable exercise +exercised +exerciser +exercisers +exercises +exercising +exercitation +exercitations +exergonic +exergual +exergue +exergues +exert +exerted +exerting +exertion +exertions +exertive +exerts +exes +exeunt +exfoliate +exfoliated +exfoliates +exfoliating +exfoliation +exfoliations +exfoliative +exhalant +exhalants +exhalation +exhalations +exhale +exhaled +exhalent +exhalents +exhales +exhaling +exhaust +exhausted +exhauster +exhausters +exhaustibilities +exhaustibility +exhaustible +exhausting +exhaustion +exhaustions +exhaustive +exhaustively +exhaustiveness +exhaustivenesses +exhaustivities +exhaustivity +exhaustless +exhaustlessly +exhaustlessness +exhaustlessnesses +exhausts +exhibit +exhibited +exhibiting exhibition +exhibitioner +exhibitioners +exhibitionism +exhibitionisms +exhibitionist +exhibitionistic +exhibitionistically +exhibitionists +exhibitions +exhibitive +exhibitor +exhibitors +exhibitory +exhibits +exhilarate +exhilarated +exhilarates +exhilarating +exhilaratingly +exhilaration +exhilarations +exhilarative +exhort +exhortation +exhortations +exhortative +exhortatory +exhorted +exhorter +exhorters +exhorting +exhorts +exhumation +exhumations +exhume +exhumed +exhumer +exhumers +exhumes +exhuming +exigence +exigences +exigencies +exigency +exigent +exigently +exigible +exiguities +exiguity +exiguous +exiguously +exiguousness +exiguousnesses +exile +exiled +exiles +exilian +exilic +exiling +eximious +exine +exines exist +existed existence +existences +existent +existential +existentialism +existentialisms +existentialist +existentialistic +existentialistically +existentialists +existentially +existents +existing +exists exit +exited +exiting +exitless +exits +exobiological +exobiologies +exobiologist +exobiologists +exobiology +exocarp +exocarps +exocrine +exocrines +exocyclic +exocytoses +exocytosis +exocytotic +exoderm +exodermis +exodermises +exoderms +exodoi +exodontia +exodontias +exodontist +exodontists +exodos +exodus +exoduses +exoenzyme +exoenzymes +exoergic +exoerythrocytic +exogamic +exogamies +exogamous +exogamy +exogen +exogenous +exogenously +exogens +exon +exonerate +exonerated +exonerates +exonerating +exoneration +exonerations +exonerative +exonic +exons +exonuclease +exonucleases +exonumia +exopeptidase +exopeptidases +exophthalmic +exophthalmos +exophthalmoses +exophthalmus +exophthalmuses +exorable +exorbitance +exorbitances +exorbitant +exorbitantly +exorcise +exorcised +exorciser +exorcisers +exorcises +exorcising +exorcism +exorcisms +exorcist +exorcistic +exorcistical +exorcists +exorcize +exorcized +exorcizes +exorcizing +exordia +exordial +exordium +exordiums +exoskeletal +exoskeleton +exoskeletons +exosmic +exosmose +exosmoses +exosphere +exospheres +exospheric +exospore +exospores +exostoses +exostosis +exoteric +exoterically +exothermal +exothermally +exothermic +exothermically +exothermicities +exothermicity +exotic +exotica +exotically +exoticism +exoticisms +exoticness +exoticnesses +exotics +exotism +exotisms +exotoxic +exotoxin +exotoxins expand +expandabilities +expandability +expandable +expanded +expander +expanders +expanding +expandor +expandors +expands +expanse +expanses +expansibilities +expansibility +expansible +expansion +expansional +expansionary +expansionism +expansionisms +expansionist +expansionistic +expansionists +expansions +expansive +expansively +expansiveness +expansivenesses +expansivities +expansivity +expat +expatiate +expatiated +expatiates +expatiating +expatiation +expatiations +expatriate +expatriated +expatriates +expatriating +expatriation +expatriations +expatriatism +expatriatisms +expats expect +expectable +expectably +expectance +expectances +expectancies +expectancy +expectant +expectantly +expectants expectation +expectational +expectations +expectative +expected +expectedly +expectedness +expectednesses +expecting +expectorant +expectorants +expectorate +expectorated +expectorates +expectorating +expectoration +expectorations +expects +expedience +expediences +expediencies +expediency +expedient +expediential +expediently +expedients +expedite +expedited +expediter +expediters +expedites +expediting +expedition +expeditionary +expeditions +expeditious +expeditiously +expeditiousness +expeditiousnesses +expeditor +expeditors +expel +expellable +expelled +expellee +expellees +expeller +expellers +expelling +expels +expend +expendabilities +expendability +expendable +expendables +expended +expender +expenders +expending +expenditure +expenditures +expends expense +expensed +expenses +expensing expensive +expensively +expensiveness +expensivenesses experience +experienced +experiences +experiencing +experiential +experientially experiment +experimental +experimentalism +experimentalisms +experimentalist +experimentalists +experimentally +experimentation +experimentations +experimented +experimenter +experimenters +experimenting +experiments expert +experted +experting +expertise +expertises +expertism +expertisms +expertize +expertized +expertizes +expertizing +expertly +expertness +expertnesses +experts +expiable +expiate +expiated +expiates +expiating +expiation +expiations +expiator +expiators +expiatory +expiration +expirations +expiratory +expire +expired +expirer +expirers +expires +expiries +expiring +expiry explain +explainable +explained +explainer +explainers +explaining +explains explanation +explanations +explanative +explanatively +explanatorily +explanatory +explant +explantation +explantations +explanted +explanting +explants +expletive +expletives +expletory +explicable +explicably +explicate +explicated +explicates +explicating +explication +explications +explicative +explicatively +explicator +explicators +explicatory explicit +explicitly +explicitness +explicitnesses +explicits explode +exploded +exploder +exploders +explodes +exploding +exploit +exploitable +exploitation +exploitations +exploitative +exploitatively +exploited +exploiter +exploiters +exploiting +exploitive +exploits +exploration +explorational +explorations +explorative +exploratively +exploratory explore +explored +explorer +explorers +explores +exploring +explosion +explosions +explosive +explosively +explosiveness +explosivenesses +explosives +expo +exponent +exponential +exponentially +exponentials +exponentiation +exponentiations +exponents export +exportabilities +exportability +exportable +exportation +exportations +exported +exporter +exporters +exporting +exports +expos +exposal +exposals expose +exposed +exposer +exposers +exposes +exposing +exposit +exposited +expositing +exposition +expositional +expositions +expositive +expositor +expositors +expository +exposits +expostulate +expostulated +expostulates +expostulating +expostulation +expostulations +expostulatory +exposure +exposures +expound +expounded +expounder +expounders +expounding +expounds express +expressage +expressages +expressed +expresser +expressers +expresses +expressible +expressing expression +expressional +expressionism +expressionisms +expressionist +expressionistic +expressionistically +expressionists +expressionless +expressionlessly +expressionlessness +expressionlessnesses +expressions +expressive +expressively +expressiveness +expressivenesses +expressivities +expressivity +expressly +expressman +expressmen +expresso +expressos +expressway +expressways +expropriate +expropriated +expropriates +expropriating +expropriation +expropriations +expropriator +expropriators +expulse +expulsed +expulses +expulsing +expulsion +expulsions +expulsive +expunction +expunctions +expunge +expunged +expunger +expungers +expunges +expunging +expurgate +expurgated +expurgates +expurgating +expurgation +expurgations +expurgator +expurgatorial +expurgators +expurgatory +exquisite +exquisitely +exquisiteness +exquisitenesses +exquisites +exsanguinate +exsanguinated +exsanguinates +exsanguinating +exsanguination +exsanguinations +exscind +exscinded +exscinding +exscinds +exsecant +exsecants +exsect +exsected +exsecting +exsects +exsert +exserted +exsertile +exserting +exsertion +exsertions +exserts +exsiccate +exsiccated +exsiccates +exsiccating +exsiccation +exsiccations +exsolution +exsolutions +extant +extemporal +extemporally +extemporaneities +extemporaneity +extemporaneous +extemporaneously +extemporaneousness +extemporaneousnesses +extemporarily +extemporary +extempore +extemporisation +extemporisations +extemporise +extemporised +extemporises +extemporising +extemporization +extemporizations +extemporize +extemporized +extemporizer +extemporizers +extemporizes +extemporizing +extend +extendabilities +extendability +extendable +extended +extendedly +extendedness +extendednesses +extender +extenders +extendible +extending +extends +extensibilities +extensibility +extensible +extensile extension +extensional +extensionalities +extensionality +extensionally +extensions +extensities +extensity +extensive +extensively +extensiveness +extensivenesses +extensometer +extensometers +extensor +extensors +extent +extents +extenuate +extenuated +extenuates +extenuating +extenuation +extenuations +extenuator +extenuators +extenuatory +exterior +exteriorise +exteriorised +exteriorises +exteriorising +exteriorities +exteriority +exteriorization +exteriorizations +exteriorize +exteriorized +exteriorizes +exteriorizing +exteriorly +exteriors +exterminate +exterminated +exterminates +exterminating +extermination +exterminations +exterminator +exterminators +exterminatory +extermine +extermined +extermines +extermining +extern +external +externalisation +externalisations +externalise +externalised +externalises +externalising +externalism +externalisms +externalities +externality +externalization +externalizations +externalize +externalized +externalizes +externalizing +externally +externals +externe +externes +externs +externship +externships +exteroceptive +exteroceptor +exteroceptors +exterritorial +exterritorialities +exterritoriality +extinct +extincted +extincting +extinction +extinctions +extinctive +extincts +extinguish +extinguishable +extinguished +extinguisher +extinguishers +extinguishes +extinguishing +extinguishment +extinguishments +extirpate +extirpated +extirpates +extirpating +extirpation +extirpations +extirpator +extirpators +extol +extoll +extolled +extoller +extollers +extolling +extolls +extolment +extolments +extols +extort +extorted +extorter +extorters +extorting +extortion +extortionary +extortionate +extortionately +extortioner +extortioners +extortionist +extortionists +extortions +extortive +extorts extra +extracellular +extracellularly +extrachromosomal +extracorporeal +extracorporeally +extracranial +extract +extractabilities +extractability +extractable +extracted +extracting +extraction +extractions +extractive +extractively +extractives +extractor +extractors +extracts +extracurricular +extracurriculars +extraditable +extradite +extradited +extradites +extraditing +extradition +extraditions +extrados +extradoses +extraembryonic +extragalactic +extrahepatic +extrajudicial +extrajudicially +extralegal +extralegally +extralimital +extralinguistic +extralinguistically +extraliterary +extralities +extrality +extralogical +extramarital +extramundane +extramural +extramurally +extramusical +extraneous +extraneously +extraneousness +extraneousnesses +extranuclear +extraordinaire +extraordinarily +extraordinariness +extraordinarinesses extraordinary +extrapolate +extrapolated +extrapolates +extrapolating +extrapolation +extrapolations +extrapolative +extrapolator +extrapolators +extrapyramidal +extras +extrasensory +extrasystole +extrasystoles +extraterrestrial +extraterrestrials +extraterritorial +extraterritorialities +extraterritoriality +extratextual +extrauterine +extravagance +extravagances +extravagancies +extravagancy +extravagant +extravagantly +extravaganza +extravaganzas +extravagate +extravagated +extravagates +extravagating +extravasate +extravasated +extravasates +extravasating +extravasation +extravasations +extravascular +extravehicular +extraversion +extraversions +extravert +extraverted +extraverts +extrema extreme +extremely +extremeness +extremenesses +extremer +extremes +extremest +extremism +extremisms +extremist +extremists +extremities +extremity +extremum +extricable +extricate +extricated +extricates +extricating +extrication +extrications +extrinsic +extrinsically +extrorse +extroversion +extroversions +extrovert +extroverted +extroverts +extrudabilities +extrudability +extrudable +extrude +extruded +extruder +extruders +extrudes +extruding +extrusion +extrusions +extrusive +extubate +extubated +extubates +extubating +exuberance +exuberances +exuberant +exuberantly +exuberate +exuberated +exuberates +exuberating +exudate +exudates +exudation +exudations +exudative +exude +exuded +exudes +exuding +exult +exultance +exultances +exultancies +exultancy +exultant +exultantly +exultation +exultations +exulted +exulting +exultingly +exults +exurb +exurban +exurbanite +exurbanites +exurbia +exurbias +exurbs +exuvia +exuviae +exuvial +exuviate +exuviated +exuviates +exuviating +exuviation +exuviations +exuvium +eyas +eyases eye +eyeable +eyeball +eyeballed +eyeballing +eyeballs +eyebar +eyebars +eyebeam +eyebeams +eyebolt +eyebolts +eyebright +eyebrights +eyebrow +eyebrows +eyecup +eyecups +eyed +eyedness +eyednesses +eyedropper +eyedroppers +eyedrops +eyeful +eyefuls +eyeglass +eyeglasses +eyehole +eyeholes +eyehook +eyehooks +eyeing +eyelash +eyelashes +eyeless +eyelet +eyelets +eyeletted +eyeletting +eyelid +eyelids +eyelike +eyeliner +eyeliners +eyen +eyepiece +eyepieces +eyepoint +eyepoints +eyepopper +eyepoppers +eyer +eyers +eyes +eyeshade +eyeshades +eyeshot +eyeshots eyesight +eyesights +eyesome +eyesore +eyesores +eyespot +eyespots +eyestalk +eyestalks +eyestone +eyestones +eyestrain +eyestrains +eyestrings +eyeteeth +eyetooth +eyewash +eyewashes +eyewater +eyewaters +eyewear +eyewink +eyewinks +eyewitness +eyewitnesses +eying +eyne +eyra +eyras +eyre +eyres +eyrie +eyries +eyrir +eyry +fa +fable +fabled +fabler +fablers +fables +fabliau +fabliaux +fabling +fabric +fabricant +fabricants +fabricate +fabricated +fabricates +fabricating +fabrication +fabrications +fabricator +fabricators +fabrics +fabular +fabulist +fabulistic +fabulists +fabulous +fabulously +fabulousness +fabulousnesses +facade +facades face +faceable +facecloth +facecloths +faced +facedown +facedowns +faceless +facelessness +facelessnesses +faceplate +faceplates +facer +facers +faces +facet +facete +faceted +facetely +facetiae +faceting +facetious +facetiously +facetiousness +facetiousnesses +facets +facetted +facetting +faceup +facia facial +facially +facials +facias +faciend +faciends +facies +facile +facilely +facileness +facilenesses +facilitate +facilitated +facilitates +facilitating +facilitation +facilitations +facilitative +facilitator +facilitators +facilitatory +facilities +facility +facing +facings +facsimile +facsimiles fact +factful +facticities +facticity +faction +factional +factionalism +factionalisms +factionally +factions +factious +factiously +factiousness +factiousnesses +factitious +factitiously +factitiousness +factitiousnesses +factitive +factitively +factoid +factoids +factor +factorable +factorage +factorages +factored +factorial +factorials +factories +factoring +factorization +factorizations +factorize +factorized +factorizes +factorizing +factors +factorship +factorships factory +factorylike +factotum +factotums +facts +factual +factualism +factualisms +factualist +factualists +factualities +factuality +factually +factualness +factualnesses +facture +factures +facula +faculae +facular +facultative +facultatively +faculties +faculty +fad +fadable +faddier +faddiest +faddish +faddishness +faddishnesses +faddism +faddisms +faddist +faddists +faddy fade +fadeaway +fadeaways +faded +fadedly +fadeless +fader +faders +fades +fadge +fadged +fadges +fadging +fading +fadings +fado +fados +fads +faecal +faeces +faena +faenas +faerie +faeries +faery +fag +fagged +fagging +faggot +faggoted +faggoting +faggotings +faggotries +faggotry +faggots +faggoty +faggy +fagin +fagins +fagot +fagoted +fagoter +fagoters +fagoting +fagotings +fagots +fags +fahlband +fahlbands +faience +faiences fail +failed +failing +failingly +failings +faille +failles +fails failure +failures +fain +faineant +faineants +fainer +fainest +faint +fainted +fainter +fainters +faintest +fainthearted +faintheartedly +faintheartedness +faintheartednesses +fainting +faintish +faintishness +faintishnesses +faintly +faintness +faintnesses +faints fair +faired +fairer +fairest +fairground +fairgrounds +fairies +fairing +fairings +fairish +fairishly +fairlead +fairleader +fairleaders +fairleads +fairly +fairness +fairnesses +fairs +fairway +fairways +fairy +fairyism +fairyisms +fairyland +fairylands +fairylike faith +faithed +faithful +faithfully +faithfulness +faithfulnesses +faithfuls +faithing +faithless +faithlessly +faithlessness +faithlessnesses +faiths +faitour +faitours +fajita +fajitas +fake +faked +fakeer +fakeers +faker +fakeries +fakers +fakery +fakes +fakey +faking +fakir +fakirs +falafel +falbala +falbalas +falcate +falcated +falces +falchion +falchions +falciform +falcon +falconer +falconers +falconet +falconets +falconine +falconries +falconry +falcons +falderal +falderals +falderol +falderols +faldstool +faldstools fall +fallacies +fallacious +fallaciously +fallaciousness +fallaciousnesses +fallacy +fallal +fallaleries +fallalery +fallals +fallaway +fallaways +fallback +fallbacks +fallen +faller +fallers +fallfish +fallfishes +fallibilities +fallibility +fallible +fallibly +falling +falloff +falloffs +fallout +fallouts +fallow +fallowed +fallowing +fallowness +fallownesses +fallows +falls false +falsehood +falsehoods +falsely +falseness +falsenesses +falser +falsest +falsetto +falsettos +falsework +falseworks +falsie +falsies +falsifiabilities +falsifiability +falsifiable +falsification +falsifications +falsified +falsifier +falsifiers +falsifies +falsify +falsifying +falsities +falsity +faltboat +faltboats +falter +faltered +falterer +falterers +faltering +falteringly +falters +falx +fame +famed +fameless +fames +familial familiar +familiarise +familiarised +familiarises +familiarising +familiarities +familiarity +familiarization +familiarizations +familiarize +familiarized +familiarizes +familiarizing +familiarly +familiarness +familiarnesses +familiars +families +familism +familisms +familistic family +famine +famines +faming +famish +famished +famishes +famishing +famishment +famishments famous +famously +famousness +famousnesses +famuli +famulus fan +fanatic +fanatical +fanatically +fanaticalness +fanaticalnesses +fanaticism +fanaticisms +fanaticize +fanaticized +fanaticizes +fanaticizing +fanatics +fancied +fancier +fanciers +fancies +fanciest +fancified +fancifies +fanciful +fancifully +fancifulness +fancifulnesses +fancify +fancifying +fancily +fanciness +fancinesses fancy +fancying +fancywork +fancyworks +fandango +fandangos +fandom +fandoms +fane +fanega +fanegada +fanegadas +fanegas +fanes +fanfare +fanfares +fanfaron +fanfaronade +fanfaronades +fanfarons +fanfold +fanfolded +fanfolding +fanfolds +fang +fanga +fangas +fanged +fangless +fanglike +fangs +fanion +fanions +fanjet +fanjets +fanlight +fanlights +fanlike +fanned +fanner +fanners +fannies +fanning +fanny +fano +fanon +fanons +fanos +fans +fantabulous +fantail +fantails +fantasia +fantasias +fantasie +fantasied +fantasies +fantasise +fantasised +fantasises +fantasising +fantasist +fantasists +fantasize +fantasized +fantasizer +fantasizers +fantasizes +fantasizing +fantasm +fantasms +fantast fantastic +fantastical +fantasticalities +fantasticality +fantastically +fantasticalness +fantasticalnesses +fantasticate +fantasticated +fantasticates +fantasticating +fantastication +fantastications +fantastico +fantasticoes +fantastics +fantasts fantasy +fantasying +fantasyland +fantasylands +fantoccini +fantod +fantods +fantom +fantoms +fanum +fanums +fanwise +fanwort +fanworts +fanzine +fanzines +faqir +faqirs +faquir +faquirs far +farad +faradaic +faraday +faradays +faradic +faradise +faradised +faradises +faradising +faradism +faradisms +faradize +faradized +faradizes +faradizing +farads +farandole +farandoles +faraway +farce +farced +farcer +farcers +farces +farceur +farceurs +farci +farcical +farcicalities +farcicality +farcically +farcie +farcies +farcing +farcy +fard +farded +fardel +fardels +farding +fards fare +fared +farer +farers +fares +farewell +farewelled +farewelling +farewells +farfal +farfals +farfel +farfels +farfetchedness +farfetchednesses +farina +farinaceous +farinas +faring +farinha +farinhas +farinose +farkleberries +farkleberry +farl +farle +farles +farls farm +farmable +farmed farmer +farmerette +farmerettes +farmers +farmhand +farmhands +farmhouse +farmhouses +farming +farmings +farmland +farmlands +farms +farmstead +farmsteads +farmwife +farmwives +farmwork +farmworker +farmworkers +farmworks +farmyard +farmyards +farnesol +farnesols +farness +farnesses +faro +faros +farouche +farraginous +farrago +farragoes +farrier +farrieries +farriers +farriery +farrow +farrowed +farrowing +farrows +farseeing +farside +farsides +farsighted +farsightedly +farsightedness +farsightednesses +fart +farted +farther +farthermost +farthest +farthing +farthingale +farthingales +farthings +farting +farts +fas +fasces +fascia +fasciae +fascial +fascias +fasciate +fasciated +fasciation +fasciations +fascicle +fascicled +fascicles +fascicular +fascicularly +fasciculate +fasciculated +fasciculation +fasciculations +fascicule +fascicules +fasciculi +fasciculus +fascinate +fascinated +fascinates +fascinating +fascinatingly +fascination +fascinations +fascinator +fascinators +fascine +fascines +fascioliases +fascioliasis +fascism +fascisms +fascist +fascistic +fascistically +fascists +fash +fashed +fashes +fashing +fashion +fashionabilities +fashionability +fashionable +fashionableness +fashionablenesses +fashionables +fashionably +fashioned +fashioner +fashioners +fashioning +fashionmonger +fashionmongers +fashions +fashious fast +fastback +fastbacks +fastball +fastballer +fastballers +fastballs +fasted fasten +fastened +fastener +fasteners +fastening +fastenings +fastens +faster +fastest +fastidious +fastidiously +fastidiousness +fastidiousnesses +fastigiate +fasting +fastings +fastness +fastnesses +fasts +fastuous fat +fatal +fatalism +fatalisms +fatalist +fatalistic +fatalistically +fatalists +fatalities +fatality +fatally +fatback +fatbacks +fatbird +fatbirds +fate +fated +fateful +fatefully +fatefulness +fatefulnesses +fates +fathead +fatheaded +fatheadedly +fatheadedness +fatheadednesses +fatheads father +fathered +fatherhood +fatherhoods +fathering +fatherland +fatherlands +fatherless +fatherlike +fatherliness +fatherlinesses +fatherly +fathers +fathom +fathomable +fathomed +fathoming +fathomless +fathomlessly +fathomlessness +fathomlessnesses +fathoms +fatidic +fatidical +fatigabilities +fatigability +fatigable +fatigue +fatigued +fatigues +fatiguing +fatiguingly +fating +fatless +fatlike +fatling +fatlings +fatly +fatness +fatnesses +fats +fatshedera +fatshederas +fatso +fatsoes +fatsos +fatstock +fatstocks +fatted +fatten +fattened +fattener +fatteners +fattening +fattens +fatter +fattest +fattier +fatties +fattiest +fattily +fattiness +fattinesses +fatting +fattish +fatty +fatuities +fatuity +fatuous +fatuously +fatuousness +fatuousnesses +fatwa +fatwas +fatwood +fatwoods +faubourg +faubourgs +faucal +faucals +fauces +faucet +faucets +faucial +faugh +fauld +faulds fault +faulted +faultfinder +faultfinders +faultfinding +faultfindings +faultier +faultiest +faultily +faultiness +faultinesses +faulting +faultless +faultlessly +faultlessness +faultlessnesses +faults +faulty +faun +fauna +faunae +faunal +faunally +faunas +faunistic +faunistically +faunlike +fauns +fauteuil +fauteuils +fauve +fauves +fauvism +fauvisms +fauvist +fauvists +faux +fava +favas +fave +favela +favelas +favella +favellas +faves +favism +favisms +favonian favor +favorable +favorableness +favorablenesses +favorably +favored +favorer +favorers +favoring favorite +favorites +favoritism +favoritisms +favors favour -favourite +favoured +favourer +favourers +favouring +favours +favus +favuses +fawn +fawned +fawner +fawners +fawnier +fawniest +fawning +fawningly +fawnlike +fawns +fawny +fax +faxed +faxes +faxing +fay +fayalite +fayalites +fayed +faying +fays +faze +fazed +fazenda +fazendas +fazes +fazing +feal +fealties +fealty fear +feared +fearer +fearers +fearful +fearfuller +fearfullest +fearfully +fearfulness +fearfulnesses +fearing +fearless +fearlessly +fearlessness +fearlessnesses +fears +fearsome +fearsomely +fearsomeness +fearsomenesses +feasance +feasances +fease +feased +feases +feasibilities +feasibility +feasible +feasibly +feasing feast +feasted +feaster +feasters +feastful +feasting +feasts +feat +feater +featest feather +featherbed +featherbedded +featherbedding +featherbeddings +featherbeds +featherbrain +featherbrained +featherbrains +feathered +featheredge +featheredged +featheredges +featheredging +featherhead +featherheaded +featherheads +featherier +featheriest +feathering +featherings +featherless +featherlight +feathers +featherstitch +featherstitched +featherstitches +featherstitching +featherweight +featherweights +feathery +featlier +featliest +featly +feats +feature +featured +featureless +features +featurette +featurettes +featuring +feaze +feazed +feazes +feazing +febrific +febrifuge +febrifuges +febrile +fecal +feces +fecial +fecials +feck +feckless +fecklessly +fecklessness +fecklessnesses +feckly +fecks +fecula +feculae +feculence +feculences +feculent +fecund +fecundate +fecundated +fecundates +fecundating +fecundation +fecundations +fecundities +fecundity +fed +fedayee +fedayeen +federacies +federacy federal +federalese +federaleses +federalism +federalisms +federalist +federalists +federalization +federalizations +federalize +federalized +federalizes +federalizing +federally +federals +federate +federated +federates +federating +federation +federations +federative +federatively +fedora +fedoras +feds fee +feeble +feebleminded +feeblemindedly +feeblemindedness +feeblemindednesses +feebleness +feeblenesses +feebler +feeblest +feeblish +feebly feed +feedable +feedback +feedbacks +feedbag +feedbags +feedbox +feedboxes +feeder +feeders +feedhole +feedholes +feeding +feedlot +feedlots +feeds +feedstock +feedstocks +feedstuff +feedstuffs +feeing feel +feeler +feelers +feeless feeling +feelingly +feelingness +feelingnesses +feelings +feels +fees +feet +feetfirst +feetless +feeze +feezed +feezes +feezing +feh +fehs +feign +feigned +feigner +feigners +feigning +feigns +feijoa +feijoas +feint +feinted +feinting +feints +feirie +feist +feistier +feistiest +feistiness +feistinesses +feists +feisty +felafel +feldsher +feldshers +feldspar +feldspars +feldspathic +felicific +felicitate +felicitated +felicitates +felicitating +felicitation +felicitations +felicitator +felicitators +felicities +felicitous +felicitously +felicitousness +felicitousnesses +felicity +felid +felids +feline +felinely +felines +felinities +felinity +fell +fella +fellable +fellah +fellaheen +fellahin +fellahs +fellas +fellate +fellated +fellates +fellating +fellatio +fellation +fellations +fellatios +fellator +fellators +felled +feller +fellers +fellest +fellies +felling +fellmonger +fellmongered +fellmongeries +fellmongering +fellmongerings +fellmongers +fellmongery +fellness +fellnesses +felloe +felloes fellow +fellowed +fellowing +fellowly +fellowman +fellowmen +fellows +fellowship +fellowshiped +fellowshiping +fellowshipped +fellowshipping +fellowships +fells +felly +felon +felonies +felonious +feloniously +feloniousness +feloniousnesses +felonries +felonry +felons +felony +felsite +felsites +felsitic +felspar +felspars +felstone +felstones +felt +felted +felting +feltings +feltlike +felts +felucca +feluccas +felwort +felworts +fem female +femaleness +femalenesses +females +feme +femes +feminacies +feminacy +feminie +feminine +femininely +feminineness +femininenesses +feminines +femininities +femininity +feminise +feminised +feminises +feminising +feminism +feminisms +feminist +feministic +feminists +feminities +feminity +feminization +feminizations +feminize +feminized +feminizes +feminizing +femme +femmes +femora +femoral +fems +femtosecond +femtoseconds +femur +femurs +fen +fenagle +fenagled +fenagles +fenagling fence +fenced +fenceless +fencelessness +fencelessnesses +fencer +fencerow +fencerows +fencers +fences +fencible +fencibles +fencing +fencings +fend +fended +fender +fendered +fenderless +fenders +fending +fends +fenestra +fenestrae +fenestral +fenestrate +fenestrated +fenestration +fenestrations +fenland +fenlands +fennec +fennecs +fennel +fennels +fenny +fens +fenthion +fenthions +fenugreek +fenugreeks +fenuron +fenurons +feod +feodaries +feodary +feods +feoff +feoffed +feoffee +feoffees +feoffer +feoffers +feoffing +feoffment +feoffments +feoffor +feoffors +feoffs +fer +feracities +feracity +feral +ferbam +ferbams +fere +feres +feretories +feretory +feria +feriae +ferial +ferias +ferine +ferities +ferity +ferlie +ferlies +ferly +fermata +fermatas +fermate +ferment +fermentable +fermentation +fermentations +fermentative +fermented +fermenter +fermenters +fermenting +fermentor +fermentors +ferments +fermi +fermion +fermions +fermis +fermium +fermiums +fern +ferneries +fernery +fernier +ferniest +fernless +fernlike +ferns +ferny +ferocious +ferociously +ferociousness +ferociousnesses +ferocities +ferocity +ferrate +ferrates +ferredoxin +ferredoxins +ferrel +ferreled +ferreling +ferrelled +ferrelling +ferrels +ferreous +ferret +ferreted +ferreter +ferreters +ferreting +ferretings +ferrets +ferrety +ferriage +ferriages +ferric +ferricyanide +ferricyanides +ferried +ferries +ferriferous +ferrimagnet +ferrimagnetic +ferrimagnetically +ferrimagnetism +ferrimagnetisms +ferrimagnets +ferrite +ferrites +ferritic +ferritin +ferritins +ferrocene +ferrocenes +ferroconcrete +ferroconcretes +ferrocyanide +ferrocyanides +ferroelectric +ferroelectricities +ferroelectricity +ferroelectrics +ferromagnesian +ferromagnet +ferromagnetic +ferromagnetism +ferromagnetisms +ferromagnets +ferromanganese +ferromanganeses +ferrosilicon +ferrosilicons +ferrotype +ferrotypes +ferrous +ferruginous +ferrule +ferruled +ferrules +ferruling +ferrum +ferrums ferry +ferryboat +ferryboats +ferrying +ferryman +ferrymen +fertile +fertilely +fertileness +fertilenesses +fertilities +fertility +fertilizable +fertilization +fertilizations +fertilize +fertilized +fertilizer +fertilizers +fertilizes +fertilizing +ferula +ferulae +ferulas +ferule +feruled +ferules +feruling +fervencies +fervency +fervent +fervently +fervid +fervidly +fervidness +fervidnesses +fervor +fervors +fervour +fervours +fescennine +fescue +fescues +fess +fesse +fessed +fesses +fessing +fesswise +festal +festally +fester +festered +festering +festers +festinate +festinated +festinately +festinates +festinating festival +festivalgoer +festivalgoers +festivals +festive +festively +festiveness +festivenesses +festivities +festivity +festoon +festooned +festooneries +festoonery +festooning +festoons +fet +feta +fetal +fetas +fetation +fetations fetch +fetched +fetcher +fetchers +fetches +fetching +fetchingly +fete +feted +feterita +feteritas +fetes +fetial +fetiales +fetialis +fetials +fetich +fetiches +fetichism +fetichisms +feticide +feticides +fetid +fetidly +fetidness +fetidnesses +feting +fetish +fetishes +fetishism +fetishisms +fetishist +fetishistic +fetishistically +fetishists +fetlock +fetlocks +fetologies +fetologist +fetologists +fetology +fetoprotein +fetoproteins +fetor +fetors +fetoscope +fetoscopes +fetoscopies +fetoscopy +fets +fetted +fetter +fettered +fetterer +fetterers +fettering +fetters +fetting +fettle +fettled +fettles +fettling +fettlings +fettuccine +fettuccini +fettucine +fettucini +fetus +fetuses +feu +feuar +feuars +feud +feudal +feudalism +feudalisms +feudalist +feudalistic +feudalists +feudalities +feudality +feudalization +feudalizations +feudalize +feudalized +feudalizes +feudalizing +feudally +feudaries +feudary +feudatories +feudatory +feuded +feuding +feudist +feudists +feuds +feued +feuilleton +feuilletonism +feuilletonisms +feuilletonist +feuilletonists +feuilletons +feuing +feus fever +fevered +feverfew +feverfews +fevering +feverish +feverishly +feverishness +feverishnesses +feverous +fevers +feverwort +feverworts few +fewer +fewest +fewness +fewnesses +fewtrils +fey +feyer +feyest +feyly +feyness +feynesses +fez +fezes +fezzed +fezzes +fiacre +fiacres +fiance +fiancee +fiancees +fiances +fianchetti +fianchetto +fianchettoed +fianchettoing +fianchettos +fiar +fiars +fiaschi +fiasco +fiascoes +fiascos +fiat +fiats +fib +fibbed +fibber +fibbers +fibbing fiber +fiberboard +fiberboards +fibered +fiberfill +fiberfills +fiberglass +fiberglassed +fiberglasses +fiberglassing +fiberization +fiberizations +fiberize +fiberized +fiberizes +fiberizing +fibers +fiberscope +fiberscopes +fibranne +fibrannes fibre +fibreboard +fibreboards +fibrefill +fibrefills +fibreglass +fibreglasses +fibres +fibril +fibrilla +fibrillae +fibrillar +fibrillate +fibrillated +fibrillates +fibrillating +fibrillation +fibrillations +fibrils +fibrin +fibrinogen +fibrinogens +fibrinoid +fibrinoids +fibrinolyses +fibrinolysin +fibrinolysins +fibrinolysis +fibrinolytic +fibrinopeptide +fibrinopeptides +fibrins +fibroblast +fibroblastic +fibroblasts +fibrocystic +fibroid +fibroids +fibroin +fibroins +fibroma +fibromas +fibromata +fibromatous +fibronectin +fibronectins +fibrosarcoma +fibrosarcomas +fibrosarcomata +fibroses +fibrosis +fibrosites +fibrositides +fibrositis +fibrositises +fibrotic +fibrous +fibrovascular +fibs +fibula +fibulae +fibular +fibulas +fice +fices +fiche +fiches +fichu +fichus +ficin +ficins +fickle +fickleness +ficklenesses +fickler +ficklest +fickly +fico +ficoes +fictile fiction +fictional +fictionalise +fictionalised +fictionalises +fictionalising +fictionalities +fictionality +fictionalization +fictionalizations +fictionalize +fictionalized +fictionalizes +fictionalizing +fictionally +fictioneer +fictioneering +fictioneerings +fictioneers +fictionist +fictionists +fictionization +fictionizations +fictionize +fictionized +fictionizes +fictionizing +fictions +fictitious +fictitiously +fictitiousness +fictitiousnesses +fictive +fictively +fictiveness +fictivenesses +ficus +ficuses +fid +fiddle +fiddleback +fiddlebacks +fiddled +fiddlehead +fiddleheads +fiddler +fiddlers +fiddles +fiddlestick +fiddlesticks +fiddling +fiddly +fideism +fideisms +fideist +fideistic +fideists +fidelities +fidelity +fidge +fidged +fidges +fidget +fidgeted +fidgeter +fidgeters +fidgetiness +fidgetinesses +fidgeting +fidgets +fidgety +fidging +fido +fidos +fids +fiducial +fiducially +fiduciaries +fiduciary +fie +fief +fiefdom +fiefdoms +fiefs field +fielded +fielder +fielders +fieldfare +fieldfares +fielding +fieldpiece +fieldpieces +fields +fieldstone +fieldstones +fieldstrip +fieldstripped +fieldstripping +fieldstrips +fieldstript +fieldwork +fieldworks +fiend +fiendish +fiendishly +fiendishness +fiendishnesses +fiends fierce +fiercely +fierceness +fiercenesses +fiercer +fiercest +fierier +fieriest +fierily +fieriness +fierinesses +fiery +fiesta +fiestas +fife +fifed +fifer +fifers +fifes +fifing +fifteen +fifteens +fifteenth +fifteenths +fifth +fifthly +fifths +fifties +fiftieth +fiftieths +fifty +fiftyish +fig +figeater +figeaters +figged +figging fight +fighter +fighters +fighting +fightings +fights +figment +figments +figs +figuline +figulines +figural +figurant +figurants +figurate +figuration +figurations +figurative +figuratively +figurativeness +figurativenesses figure +figured +figurehead +figureheads +figurer +figurers +figures +figurine +figurines +figuring +figwort +figworts +fil +fila +filagree +filagreed +filagreeing +filagrees +filament +filamentary +filamentous +filaments +filar +filaree +filarees +filaria +filariae +filarial +filarian +filariases +filariasis +filariid +filariids +filature +filatures +filbert +filberts +filch +filched +filcher +filchers +filches +filching file +fileable +filed +filefish +filefishes +filemot +filer +filers +files +filet +fileted +fileting +filets +filial +filially +filiate +filiated +filiates +filiating +filiation +filiations +filibeg +filibegs +filibuster +filibustered +filibusterer +filibusterers +filibustering +filibusters +filicide +filicides +filiform +filigree +filigreed +filigreeing +filigrees +filing +filings +filiopietistic +filister +filisters fill +fille +filled +filler +fillers +filles +fillet +filleted +filleting +fillets +fillies +filling +fillings +fillip +filliped +filliping +fillips +fillo +fillos +fills +filly film +filmable +filmcard +filmcards +filmdom +filmdoms +filmed +filmer +filmers +filmgoer +filmgoers +filmic +filmically +filmier +filmiest +filmily +filminess +filminesses +filming +filmland +filmlands +filmmaker +filmmakers +filmmaking +filmmakings +filmographies +filmography +films +filmset +filmsets +filmsetter +filmsetters +filmsetting +filmsettings +filmstrip +filmstrips +filmy +filo +filos +filose +fils +filter +filterabilities +filterability +filterable +filtered +filterer +filterers +filtering +filters +filth +filthier +filthiest +filthily +filthiness +filthinesses +filths +filthy +filtrable +filtrate +filtrated +filtrates +filtrating +filtration +filtrations +filum +fimble +fimbles +fimbria +fimbriae +fimbrial +fimbriate +fimbriated +fimbriation +fimbriations +fin +finable +finagle +finagled +finagler +finaglers +finagles +finagling final +finale +finales +finalis +finalise +finalised +finalises +finalising +finalism +finalisms +finalist +finalists +finalities +finality +finalization +finalizations +finalize +finalized +finalizes +finalizing +finally +finals finance +financed +finances +financial +financially +financier +financiers +financing +financings +finback +finbacks +finch +finches find +findable +finder +finders +finding +findings +finds fine +fineable +fined +finely +fineness +finenesses +finer +fineries +finery +fines +finespun +finesse +finessed +finesses +finessing +finest +finfish +finfishes +finfoot +finfoots finger +fingerboard +fingerboards +fingered +fingerer +fingerers +fingerhold +fingerholds +fingering +fingerings +fingerlike +fingerling +fingerlings fingernail +fingernails +fingerpick +fingerpicked +fingerpicking +fingerpickings +fingerpicks +fingerpost +fingerposts +fingerprint +fingerprinted +fingerprinting +fingerprintings +fingerprints +fingers +fingertip +fingertips +finial +finialed +finials +finical +finically +finicalness +finicalnesses +finickier +finickiest +finickin +finickiness +finickinesses +finicking +finicky +finikin +finiking +fining +finings +finis +finises finish +finished +finisher +finishers +finishes +finishing +finite +finitely +finiteness +finitenesses +finites +finitude +finitudes +fink +finked +finking +finks +finless +finlike +finmark +finmarks +finned +finnickier +finnickiest +finnicky +finnier +finniest +finning +finnmark +finnmarks +finny +fino +finochio +finochios +finos +fins +fiord +fiords +fioritura +fioriture +fipple +fipples +fique +fiques +fir fire +fireable +firearm +firearms +fireback +firebacks +fireball +fireballer +fireballers +fireballing +fireballs +firebase +firebases +firebird +firebirds +fireboat +fireboats +firebomb +firebombed +firebombing +firebombs +firebox +fireboxes +firebrand +firebrands +firebrat +firebrats +firebreak +firebreaks +firebrick +firebricks +firebug +firebugs +fireclay +fireclays +firecracker +firecrackers +fired +firedamp +firedamps +firedog +firedogs +firedrake +firedrakes +firefang +firefanged +firefanging +firefangs +firefight +firefighter +firefighters +firefights +fireflies +firefly +fireguard +fireguards +firehall +firehalls +firehouse +firehouses +fireless +firelight +firelights +firelit +firelock +firelocks +fireman +firemanic +firemen +firepan +firepans +firepink +firepinks +fireplace +fireplaced +fireplaces +fireplug +fireplugs +firepot +firepots +firepower +firepowers +fireproof +fireproofed +fireproofing +fireproofs +firer +fireroom +firerooms +firers +fires +fireside +firesides +firestone +firestones +firestorm +firestorms +firethorn +firethorns +firetrap +firetraps +firewater +firewaters +fireweed +fireweeds +firewood +firewoods +firework fireworks +fireworm +fireworms +firing +firings +firkin +firkins firm +firmament +firmamental +firmaments +firman +firmans +firmed +firmer +firmers +firmest +firming +firmly +firmness +firmnesses +firms +firmware +firmwares +firn +firns +firry +firs +first +firstborn +firstborns +firstfruits +firsthand +firstling +firstlings +firstly +firsts +firth +firths +fisc +fiscal +fiscally +fiscals +fiscs fish +fishabilities +fishability +fishable +fishbolt +fishbolts +fishbone +fishbones +fishbowl +fishbowls +fished +fisher +fisherfolk +fisheries +fisherman +fishermen +fishers +fisherwoman +fisherwomen +fishery +fishes +fisheye +fisheyes +fishgig +fishgigs +fishhook +fishhooks +fishier +fishiest +fishily +fishing +fishings +fishless +fishlike +fishline +fishlines +fishmeal +fishmeals +fishmonger +fishmongers +fishnet +fishnets +fishplate +fishplates +fishpole +fishpoles +fishpond +fishponds +fishtail +fishtailed +fishtailing +fishtails +fishway +fishways +fishwife +fishwives +fishworm +fishworms +fishy +fissate +fissile +fissilities +fissility +fission +fissionabilities +fissionability +fissionable +fissionables +fissional +fissioned +fissioning +fissions +fissiparous +fissiparousness +fissiparousnesses +fissiped +fissipeds +fissure +fissured +fissures +fissuring fist +fisted +fistfight +fistfights +fistful +fistfuls +fistic +fisticuffs +fisting +fistnote +fistnotes +fists +fistula +fistulae +fistular +fistulas +fistulous fit +fitch +fitchee +fitches +fitchet +fitchets +fitchew +fitchews +fitchy +fitful +fitfully +fitfulness +fitfulnesses +fitly +fitment +fitments +fitness +fitnesses +fits +fittable +fitted +fitter +fitters +fittest +fitting +fittingly +fittingness +fittingnesses +fittings +five +fivefold +fivepins +fiver +fivers +fives fix +fixable +fixate +fixated +fixates +fixatif +fixatifs +fixating +fixation +fixations +fixative +fixatives +fixed +fixedly +fixedness +fixednesses +fixer +fixers +fixes +fixing +fixings +fixit +fixities +fixity +fixt +fixture +fixtures +fixure +fixures +fiz +fizgig +fizgigs +fizz +fizzed +fizzer +fizzers +fizzes +fizzier +fizziest +fizzing +fizzle +fizzled +fizzles +fizzling +fizzy +fjeld +fjelds +fjord +fjords +flab +flabbergast +flabbergasted +flabbergasting +flabbergastingly +flabbergasts +flabbier +flabbiest +flabbily +flabbiness +flabbinesses +flabby +flabella +flabellate +flabelliform +flabellum +flabs +flaccid +flaccidities +flaccidity +flaccidly +flack +flacked +flackeries +flackery +flacking +flacks +flacon +flacons flag +flagella +flagellant +flagellantism +flagellantisms +flagellants +flagellar +flagellate +flagellated +flagellates +flagellating +flagellation +flagellations +flagellin +flagellins +flagellum +flagellums +flageolet +flageolets +flagged +flagger +flaggers +flaggier +flaggiest +flagging +flaggingly +flaggings +flaggy +flagitious +flagitiously +flagitiousness +flagitiousnesses +flagless +flagman +flagmen +flagon +flagons +flagpole +flagpoles +flagrance +flagrances +flagrancies +flagrancy +flagrant +flagrantly +flags +flagship +flagships +flagstaff +flagstaffs +flagstaves +flagstick +flagsticks +flagstone +flagstones +flail +flailed +flailing +flails +flair +flairs +flak +flake +flaked +flaker +flakers +flakes +flakey +flakier +flakiest +flakily +flakiness +flakinesses +flaking +flaky +flam +flambe +flambeau +flambeaus +flambeaux +flambee +flambeed +flambeing +flambes +flamboyance +flamboyances +flamboyancies +flamboyancy +flamboyant +flamboyantly +flamboyants flame +flamed +flamen +flamenco +flamencos +flamens +flameout +flameouts +flameproof +flameproofed +flameproofer +flameproofers +flameproofing +flameproofs +flamer +flamers +flames +flamethrower +flamethrowers +flamier +flamiest +flamines +flaming +flamingly +flamingo +flamingoes +flamingos +flammabilities +flammability +flammable +flammables +flammed +flamming +flams +flamy +flan +flancard +flancards +flanerie +flaneries +flanes +flaneur +flaneurs +flange +flanged +flanger +flangers +flanges +flanging +flank +flanked +flanken +flanker +flankers +flanking +flanks +flannel +flanneled +flannelette +flannelettes +flanneling +flannelled +flannelling +flannelly +flannelmouthed +flannels +flans +flap +flapdoodle +flapdoodles +flapjack +flapjacks +flapless +flappable +flapped +flapper +flappers +flappier +flappiest +flapping +flappy +flaps +flare +flared +flares +flaring +flaringly flash +flashback +flashbacks +flashboard +flashboards +flashbulb +flashbulbs +flashcard +flashcards +flashcube +flashcubes +flashed +flasher +flashers +flashes +flashgun +flashguns +flashier +flashiest +flashily +flashiness +flashinesses +flashing +flashings +flashlamp +flashlamps flashlight +flashlights +flashover +flashovers +flashtube +flashtubes +flashy +flask +flasket +flaskets +flasks flat +flatbed +flatbeds +flatboat +flatboats +flatcap +flatcaps +flatcar +flatcars +flatfeet +flatfish +flatfishes +flatfoot +flatfooted +flatfooting +flatfoots +flathead +flatheads +flatiron +flatirons +flatland +flatlander +flatlanders +flatlands +flatlet +flatlets +flatling +flatlings +flatlong +flatly +flatmate +flatmates +flatness +flatnesses +flats +flatted +flatten +flattened +flattener +flatteners +flattening +flattens +flatter +flattered +flatterer +flatterers +flatteries +flattering +flatteringly +flatters +flattery +flattest +flatting +flattish +flattop +flattops +flatulence +flatulences +flatulencies +flatulency +flatulent +flatulently +flatus +flatuses +flatware +flatwares +flatwash +flatwashes +flatways +flatwise +flatwork +flatworks +flatworm +flatworms +flaunt +flaunted +flaunter +flaunters +flauntier +flauntiest +flaunting +flauntingly +flaunts +flaunty +flautist +flautists +flavanol +flavanols +flavanone +flavanones +flavin +flavine +flavines +flavins +flavone +flavones +flavonoid +flavonoids +flavonol +flavonols +flavoprotein +flavoproteins +flavor +flavored +flavorer +flavorers +flavorful +flavorfully +flavoring +flavorings +flavorist +flavorists +flavorless +flavors +flavorsome +flavory +flavour +flavoured +flavouring +flavours +flavoury +flaw +flawed +flawier +flawiest +flawing +flawless +flawlessly +flawlessness +flawlessnesses +flaws +flawy +flax +flaxen +flaxes +flaxier +flaxiest +flaxseed +flaxseeds +flaxy +flay +flayed +flayer +flayers +flaying +flays +flea +fleabag +fleabags +fleabane +fleabanes +fleabite +fleabites +fleahopper +fleahoppers +fleam +fleams +fleapit +fleapits +fleas +fleawort +fleaworts +fleche +fleches +flechette +flechettes +fleck +flecked +flecking +flecks +flecky +flection +flections +fled +fledge +fledged +fledges +fledgier +fledgiest +fledging +fledgling +fledglings +fledgy flee +fleece +fleeced +fleecer +fleecers +fleeces +fleech +fleeched +fleeches +fleeching +fleecier +fleeciest +fleecily +fleecing +fleecy +fleeing +fleer +fleered +fleering +fleeringly +fleers +flees +fleet +fleeted +fleeter +fleetest +fleeting +fleetingly +fleetingness +fleetingnesses +fleetly +fleetness +fleetnesses +fleets +fleishig +flemish +flemished +flemishes +flemishing +flench +flenched +flenches +flenching +flense +flensed +flenser +flensers +flenses +flensing flesh +fleshed +flesher +fleshers +fleshes +fleshier +fleshiest +fleshiness +fleshinesses +fleshing +fleshings +fleshlier +fleshliest +fleshly +fleshment +fleshments +fleshpot +fleshpots +fleshy +fletch +fletched +fletcher +fletchers +fletches +fletching +fletchings +fleury +flew +flews +flex +flexagon +flexagons +flexed +flexes +flexibilities +flexibility flexible +flexibly +flexile +flexing +flexion +flexions +flexitime +flexitimes +flexographic +flexographically +flexographies +flexography +flexor +flexors +flextime +flextimes +flexuose +flexuous +flexural +flexure +flexures +fley +fleyed +fleying +fleys +flibbertigibbet +flibbertigibbets +flibbertigibbety +flic +flichter +flichtered +flichtering +flichters +flick +flicked +flicker +flickered +flickering +flickeringly +flickers +flickery +flicking +flicks +flics +flied +flier +fliers +flies +fliest flight +flighted +flightier +flightiest +flightily +flightiness +flightinesses +flighting +flightless +flights +flighty +flimflam +flimflammed +flimflammer +flimflammeries +flimflammers +flimflammery +flimflamming +flimflams +flimsier +flimsies +flimsiest +flimsily +flimsiness +flimsinesses +flimsy +flinch +flinched +flincher +flinchers +flinches +flinching +flinder +flinders +fling +flinger +flingers +flinging +flings +flinkite +flinkites +flint +flinted +flintier +flintiest +flintily +flintiness +flintinesses +flinting +flintlike +flintlock +flintlocks +flints +flinty +flip +flippancies +flippancy +flippant +flippantly +flipped +flipper +flippers +flippest +flipping +flippy +flips +flirt +flirtation +flirtations +flirtatious +flirtatiously +flirtatiousness +flirtatiousnesses +flirted +flirter +flirters +flirtier +flirtiest +flirting +flirts +flirty +flit +flitch +flitched +flitches +flitching +flite +flited +flites +fliting +flits +flitted +flitter +flittered +flittering +flitters +flitting +flivver +flivvers float +floatage +floatages +floatation +floatations +floated +floatel +floatels +floater +floaters +floatier +floatiest +floating +floatplane +floatplanes +floats +floaty +floc +flocced +flocci +floccing +floccose +flocculant +flocculants +flocculate +flocculated +flocculates +flocculating +flocculation +flocculations +flocculator +flocculators +floccule +flocculent +floccules +flocculi +flocculus +floccus +flock +flocked +flockier +flockiest +flocking +flockings +flocks +flocky +flocs +floe +floes +flog +flogged +flogger +floggers +flogging +floggings +flogs +flokati +flokatis +flong +flongs flood +flooded +flooder +flooders +floodgate +floodgates +flooding +floodlight +floodlighted +floodlighting +floodlights +floodlit +floodplain +floodplains +floods +floodwater +floodwaters +floodway +floodways +flooey +flooie floor +floorage +floorages +floorboard +floorboards +floorcloth +floorcloths +floored +floorer +floorers +flooring +floorings +floors +floorwalker +floorwalkers +floosie +floosies +floosy +floozie +floozies +floozy +flop +flophouse +flophouses +flopover +flopovers +flopped +flopper +floppers +floppier +floppies +floppiest +floppily +floppiness +floppinesses +flopping +floppy +flops +flora +florae +floral +florally +florals +floras +florence +florences +florescence +florescences +florescent +floret +florets +floriated +floriation +floriations +floribunda +floribundas +floricultural +floriculture +floricultures +floriculturist +floriculturists +florid +floridities +floridity +floridly +floridness +floridnesses +floriferous +floriferousness +floriferousnesses +florigen +florigenic +florigens +florilegia +florilegium +florin +florins +florist +floristic +floristically +floristries +floristry +florists +floruit +floruits +floss +flossed +flosses +flossie +flossier +flossies +flossiest +flossily +flossing +flossy +flota +flotage +flotages +flotas +flotation +flotations +flotilla +flotillas +flotsam +flotsams +flounce +flounced +flounces +flouncier +flounciest +flouncing +flouncings +flouncy +flounder +floundered +floundering +flounders flour +floured +flouring +flourish +flourished +flourisher +flourishers +flourishes +flourishing +flourishingly +flourless +flours +floury +flout +flouted +flouter +flouters +flouting +flouts flow +flowage +flowages +flowchart +flowcharting +flowchartings +flowcharts +flowed flower +flowerage +flowerages +flowered +flowerer +flowerers +floweret +flowerets +flowerette +flowerettes +flowerful +flowerier +floweriest +flowerily +floweriness +flowerinesses +flowering +flowerless +flowerlike +flowerpot +flowerpots +flowers +flowery +flowing +flowingly +flowmeter +flowmeters +flown +flows +flowstone +flowstones flu +flub +flubbed +flubber +flubbers +flubbing +flubdub +flubdubs +flubs +fluctuant +fluctuate +fluctuated +fluctuates +fluctuating +fluctuation +fluctuational +fluctuations +flue +flued +fluegelhorn +fluegelhorns +fluencies fluency fluent +fluently +flueric +fluerics +flues +fluff +fluffed +fluffier +fluffiest +fluffily +fluffiness +fluffinesses +fluffing +fluffs +fluffy +flugelhorn +flugelhornist +flugelhornists +flugelhorns +fluid +fluidal +fluidally +fluidextract +fluidextracts +fluidic +fluidics +fluidise +fluidised +fluidises +fluidising +fluidities +fluidity +fluidization +fluidizations +fluidize +fluidized +fluidizer +fluidizers +fluidizes +fluidizing +fluidly +fluidness +fluidnesses +fluidram +fluidrams +fluids +fluke +fluked +flukes +flukey +flukier +flukiest +fluking +fluky +flume +flumed +flumes +fluming +flummeries +flummery +flummox +flummoxed +flummoxes +flummoxing +flump +flumped +flumping +flumps +flung +flunk +flunked +flunker +flunkers +flunkey +flunkeys +flunkies +flunking +flunks +flunky +fluor +fluorene +fluorenes +fluoresce +fluoresced +fluorescein +fluoresceins +fluorescence +fluorescences +fluorescent +fluorescents +fluorescer +fluorescers +fluoresces +fluorescing +fluoric +fluorid +fluoridate +fluoridated +fluoridates +fluoridating +fluoridation +fluoridations +fluoride +fluorides +fluorids +fluorimeter +fluorimeters +fluorimetric +fluorimetries +fluorimetry +fluorin +fluorinate +fluorinated +fluorinates +fluorinating +fluorination +fluorinations +fluorine +fluorines +fluorins +fluorite +fluorites +fluorocarbon +fluorocarbons +fluorochrome +fluorochromes +fluorographic +fluorographies +fluorography +fluorometer +fluorometers +fluorometric +fluorometries +fluorometry +fluoroscope +fluoroscoped +fluoroscopes +fluoroscopic +fluoroscopically +fluoroscopies +fluoroscoping +fluoroscopist +fluoroscopists +fluoroscopy +fluoroses +fluorosis +fluorotic +fluorouracil +fluorouracils +fluors +fluorspar +fluorspars +fluphenazine +fluphenazines +flurried +flurries +flurry +flurrying +flus +flush +flushable +flushed +flusher +flushers +flushes +flushest +flushing +flushness +flushnesses +fluster +flustered +flusteredly +flustering +flusters +flute +fluted +flutelike +fluter +fluters +flutes +flutey +flutier +flutiest +fluting +flutings +flutist +flutists +flutter +flutterboard +flutterboards +fluttered +flutterer +flutterers +fluttering +flutters +fluttery +fluty +fluvial +fluviatile +flux +fluxed +fluxes +fluxgate +fluxgates +fluxing +fluxion +fluxional +fluxions +fluyt +fluyts fly +flyable +flyaway +flyaways +flybelt +flybelts +flyblew +flyblow +flyblowing +flyblown +flyblows +flyboat +flyboats +flyboy +flyboys +flybridge +flybridges +flyby +flybys +flycatcher +flycatchers +flyer +flyers +flying +flyings +flyleaf +flyleaves +flyless +flyman +flymen +flyoff +flyoffs +flyover +flyovers +flypaper +flypapers +flypast +flypasts +flysch +flysches +flyspeck +flyspecked +flyspecking +flyspecks +flyswatter +flyswatters +flyte +flyted +flytes +flytier +flytiers +flyting +flytings +flytrap +flytraps +flyway +flyways +flyweight +flyweights +flywheel +flywheels +foal +foaled +foaling +foals +foam +foamable +foamed +foamer +foamers +foamflower +foamflowers +foamier +foamiest +foamily +foaminess +foaminesses +foaming +foamless +foamlike +foams +foamy +fob +fobbed +fobbing +fobs +focaccia +focaccias +focal +focalise +focalised +focalises +focalising +focalization +focalizations +focalize +focalized +focalizes +focalizing +focally +foci focus +focusable +focused +focuser +focusers +focuses +focusing +focusless +focussed +focusses +focussing +fodder +foddered +foddering +fodders +fodgel +foe +foehn +foehns +foeman +foemen +foes +foetal +foetid +foetor +foetors +foetus +foetuses fog +fogbound +fogbow +fogbows +fogdog +fogdogs +fogey +fogeys +fogfruit +fogfruits +foggage +foggages +fogged +fogger +foggers +foggier +foggiest +foggily +fogginess +fogginesses +fogging foggy +foghorn +foghorns +fogie +fogies +fogless +fogs +fogy +fogyish +fogyism +fogyisms +foh +fohn +fohns +foible +foibles +foil +foilable +foiled +foiling +foils +foilsman +foilsmen +foin +foined +foining +foins +foison +foisons +foist +foisted +foisting +foists +folacin +folacins +folate +folates fold +foldable +foldaway +foldboat +foldboats +folded +folder +folderol +folderols +folders +folding +foldout +foldouts +folds +folia +foliaceous +foliage +foliaged +foliages +foliar +foliate +foliated +foliates +foliating +foliation +foliations +folio +folioed +folioing +folios +foliose +folious +folium +foliums folk +folkie +folkies +folkish +folkishness +folkishnesses +folklife +folklike +folklives +folklore +folklores +folkloric +folklorish +folklorist +folkloristic +folklorists +folkmoot +folkmoots +folkmot +folkmote +folkmotes +folkmots +folks +folksier +folksiest +folksily +folksiness +folksinesses +folksinger +folksingers +folksinging +folksingings +folksy +folktale +folktales +folkway +folkways +folky +folles +follicle +follicles +follicular +folliculites +folliculitides +folliculitis +folliculitises +follies +follis follow +followed +follower +followers +followership +followerships +following +followings +follows +folly +foment +fomentation +fomentations +fomented +fomenter +fomenters +fomenting +foments +fomite +fomites +fon fond +fondant +fondants +fonded +fonder +fondest +fonding +fondle +fondled +fondler +fondlers +fondles +fondling +fondlings +fondly +fondness +fondnesses +fonds +fondu +fondue +fondues +fondus +fons +font +fontal +fontanel +fontanelle +fontanelles +fontanels +fontina +fontinas +fonts food +foodie +foodies +foodless +foodlessness +foodlessnesses +foods +foodstuff +foodstuffs +foodways +foofaraw +foofaraws fool +fooled +fooleries +foolery +foolfish +foolfishes +foolhardier +foolhardiest +foolhardily +foolhardiness +foolhardinesses +foolhardy +fooling foolish +foolisher +foolishest +foolishly +foolishness +foolishnesses +foolproof +fools +foolscap +foolscaps foot +footage +footages football +footballer +footballers +footballs +footbath +footbaths +footboard +footboards +footboy +footboys +footbridge +footbridges +footcloth +footcloths +footdragger +footdraggers +footed +footer +footers +footfall +footfalls +footfault +footfaulted +footfaulting +footfaults +footgear +footgears +foothill +foothills +foothold +footholds +footie +footier +footies +footiest +footing +footings +footlambert +footlamberts +footle +footled +footler +footlers +footles +footless +footlessly +footlessness +footlessnesses +footlights +footlike +footling +footlocker +footlockers +footloose +footman +footmark +footmarks +footmen +footnote +footnoted +footnotes +footnoting +footpace +footpaces +footpad +footpads +footpath +footpaths +footprint +footprints +footrace +footraces +footrest +footrests +footrope +footropes +foots +footsie +footsies +footslog +footslogged +footslogger +footsloggers +footslogging +footslogs +footsore +footsoreness +footsorenesses +footstep +footsteps +footstone +footstones +footstool +footstools +footsy +footwall +footwalls +footway +footways +footwear +footwork +footworks +footworn +footy +foozle +foozled +foozler +foozlers +foozles +foozling +fop +fopped +fopperies +foppery +fopping +foppish +foppishly +foppishness +foppishnesses +fops for +fora +forage +foraged +forager +foragers +forages +foraging +foram +foramen +foramens +foramina +foraminal +foraminifer +foraminifera +foraminiferal +foraminiferan +foraminiferans +foraminifers +foraminous +forams +foray +forayed +forayer +forayers +foraying +forays +forb +forbad +forbade +forbear +forbearance +forbearances +forbearer +forbearers +forbearing +forbears forbid +forbidal +forbidals +forbiddance +forbiddances +forbidden +forbidder +forbidders +forbidding +forbiddingly +forbids +forbode +forboded +forbodes +forboding +forbore +forborne +forbs +forby +forbye force +forced +forcedly +forceful +forcefully +forcefulness +forcefulnesses +forceless +forcemeat +forcemeats +forceps +forcepslike +forcer +forcers +forces +forcible +forcibleness +forciblenesses +forcibly +forcing +forcipes +ford +fordable +forded +fordid +fording +fordless +fordo +fordoes +fordoing +fordone +fords +fore +forearm +forearmed +forearming +forearms +forebay +forebays +forebear +forebears +forebode +foreboded +foreboder +foreboders +forebodes +forebodies +foreboding +forebodingly +forebodingness +forebodingnesses +forebodings +forebody +foreboom +forebooms +forebrain +forebrains +foreby +forebye +forecaddie +forecaddies forecast +forecastable +forecasted +forecaster +forecasters +forecasting +forecastle +forecastles +forecasts +forecheck +forechecked +forechecker +forecheckers +forechecking +forechecks +foreclose +foreclosed +forecloses +foreclosing +foreclosure +foreclosures +forecourt +forecourts +foredate +foredated +foredates +foredating +foredeck +foredecks +foredid +foredo +foredoes +foredoing +foredone +foredoom +foredoomed +foredooming +foredooms +foreface +forefaces +forefather +forefathers +forefeel +forefeeling +forefeels +forefeet +forefelt +forefend +forefended +forefending +forefends +forefinger +forefingers +forefoot +forefront +forefronts +foregather +foregathered +foregathering +foregathers +forego +foregoer +foregoers +foregoes +foregoing +foregone +foreground +foregrounded +foregrounding +foregrounds +foregut +foreguts +forehand +forehanded +forehandedly +forehandedness +forehandednesses +forehands forehead +foreheads +forehoof +forehoofs +forehooves foreign foreigner +foreigners +foreignism +foreignisms +foreignness +foreignnesses +forejudge +forejudged +forejudges +forejudging +foreknew +foreknow +foreknowing +foreknowledge +foreknowledges +foreknown +foreknows +foreladies +forelady +foreland +forelands +foreleg +forelegs +forelimb +forelimbs +forelock +forelocked +forelocking +forelocks +foreman +foremanship +foremanships +foremast +foremasts +foremen +foremilk +foremilks +foremost +foremother +foremothers +forename +forenamed +forenames +forenoon +forenoons +forensic +forensically +forensics +foreordain +foreordained +foreordaining +foreordains +foreordination +foreordinations +forepart +foreparts +forepassed +forepast +forepaw +forepaws +forepeak +forepeaks +foreplay +foreplays +forequarter +forequarters +foreran +forerank +foreranks +forereach +forereached +forereaches +forereaching +forerun +forerunner +forerunners +forerunning +foreruns +fores +foresaid +foresail +foresails +foresaw foresee +foreseeabilities +foreseeability +foreseeable +foreseeing +foreseen +foreseer +foreseers +foresees +foreshadow +foreshadowed +foreshadower +foreshadowers +foreshadowing +foreshadows +foreshank +foreshanks +foresheet +foresheets +foreshock +foreshocks +foreshore +foreshores +foreshorten +foreshortened +foreshortening +foreshortens +foreshow +foreshowed +foreshowing +foreshown +foreshows +foreside +foresides +foresight +foresighted +foresightedly +foresightedness +foresightednesses +foresightful +foresights +foreskin +foreskins +forespeak +forespeaking +forespeaks +forespoke +forespoken forest +forestage +forestages +forestal +forestall +forestalled +forestaller +forestallers +forestalling +forestallment +forestallments +forestalls +forestation +forestations +forestay +forestays +forestaysail +forestaysails +forested +forester +foresters +forestial +foresting +forestland +forestlands +forestries +forestry +forests +foreswear +foreswearing +foreswears +foreswore +foresworn +foretaste +foretasted +foretastes +foretasting +foretell +foreteller +foretellers +foretelling +foretells +forethought +forethoughtful +forethoughtfully +forethoughtfulness +forethoughtfulnesses +forethoughts +foretime +foretimes +foretoken +foretokened +foretokening +foretokens +foretold +foretop +foretopman +foretopmen +foretops forever +forevermore +foreverness +forevernesses +forevers +forewarn +forewarned +forewarning +forewarns +forewent +forewing +forewings +forewoman +forewomen +foreword +forewords +foreworn +foreyard +foreyards +forfeit +forfeitable +forfeited +forfeiter +forfeiters +forfeiting +forfeits +forfeiture +forfeitures +forfend +forfended +forfending +forfends +forgat +forgather +forgathered +forgathering +forgathers +forgave +forge +forgeabilities +forgeability +forgeable +forged +forger +forgeries +forgers +forgery +forges forget forgetful +forgetfully +forgetfulness +forgetfulnesses +forgetive +forgets +forgettable +forgetter +forgetters +forgetting +forging +forgings +forgivable +forgivably forgive +forgiven +forgiveness +forgivenesses +forgiver +forgivers +forgives +forgiving +forgivingly +forgivingness +forgivingnesses +forgo +forgoer +forgoers +forgoes +forgoing +forgone +forgot +forgotten +forint +forints +forjudge +forjudged +forjudges +forjudging fork +forkball +forkballs +forked +forkedly +forker +forkers +forkful +forkfuls +forkier +forkiest +forking +forkless +forklift +forklifted +forklifting +forklifts +forklike +forks +forksful +forky +forlorn +forlorner +forlornest +forlornly +forlornness +forlornnesses form +formabilities +formability +formable +formal +formaldehyde +formaldehydes +formalin +formalins +formalise +formalised +formalises +formalising +formalism +formalisms +formalist +formalistic +formalists +formalities +formality +formalizable +formalization +formalizations +formalize +formalized +formalizer +formalizers +formalizes +formalizing +formally +formalness +formalnesses +formals +formamide +formamides +formant +formants format +formate +formates +formation +formations +formative +formatively +formatives +formats +formatted +formatter +formatters +formatting +forme +formed +formee former +formerly +formers +formes +formfitting +formful +formic +formicaries +formicary +formidabilities +formidability +formidable +formidableness +formidablenesses +formidably +forming +formless +formlessly +formlessness +formlessnesses +formol +formols +forms +formula +formulae +formulaic +formulaically +formularies +formularization +formularizations +formularize +formularized +formularizer +formularizers +formularizes +formularizing +formulary +formulas +formulate +formulated +formulates +formulating +formulation +formulations +formulator +formulators +formulize +formulized +formulizes +formulizing +formwork +formworks +formyl +formyls +fornical +fornicate +fornicated +fornicates +fornicating +fornication +fornications +fornicator +fornicators +fornices +fornix +forrader +forrarder +forrit +forsake +forsaken +forsaker +forsakers +forsakes +forsaking +forsook +forsooth +forspent +forswear +forswearing +forswears +forswore +forsworn +forsythia +forsythias +fort +fortalice +fortalices +forte +fortepiano +fortepianos +fortes +forth +forthcoming +forthright +forthrightly +forthrightness +forthrightnesses +forthrights +forthwith +forties +fortieth +fortieths +fortification +fortifications +fortified +fortifier +fortifiers +fortifies +fortify +fortifying +fortis +fortissimi +fortissimo +fortissimos +fortitude +fortitudes fortnight +fortnightlies +fortnightly +fortnights +fortress +fortressed +fortresses +fortressing +fortresslike +forts +fortuities +fortuitous +fortuitously +fortuitousness +fortuitousnesses +fortuity fortunate +fortunately +fortunateness +fortunatenesses fortune +fortuned +fortunes +fortuneteller +fortunetellers +fortunetelling +fortunetellings +fortuning +forty +fortyish +forum +forums forward +forwarded +forwarder +forwarders +forwardest +forwarding +forwardly +forwardness +forwardnesses +forwards +forwent +forwhy +forworn +forzando +forzandos +foss +fossa +fossae +fossas +fossate +fosse +fosses +fossette +fossettes +fossick +fossicked +fossicker +fossickers +fossicking +fossicks +fossil +fossiliferous +fossilise +fossilised +fossilises +fossilising +fossilization +fossilizations +fossilize +fossilized +fossilizes +fossilizing +fossils +fossorial foster +fosterage +fosterages +fostered +fosterer +fosterers +fostering +fosterling +fosterlings +fosters +fou +fouette +fouettes +fought +foughten +foul +foulard +foulards +foulbrood +foulbroods +fouled +fouler +foulest +fouling +foulings +foully +foulmouthed +foulness +foulnesses +fouls found +foundation +foundational +foundationally +foundationless +foundations +founded +founder +foundered +foundering +founders +founding +foundling +foundlings +foundries +foundry +founds +fount fountain +fountained +fountainhead +fountainheads +fountaining +fountains +founts +four +fourchee +fourdrinier +fourdriniers +fourfold +fourgon +fourgons +fourplex +fourplexes +fourragere +fourrageres +fours +fourscore +foursome +foursomes +foursquare +fourteen +fourteener +fourteeners +fourteens +fourteenth +fourteenths +fourth +fourthly +fourths +fovea +foveae +foveal +foveas +foveate +foveated +foveola +foveolae +foveolar +foveolas +foveole +foveoles +foveolet +foveolets +fowl +fowled +fowler +fowlers +fowling +fowlings +fowlpox +fowlpoxes +fowls fox +foxed +foxes +foxfire +foxfires +foxfish +foxfishes +foxglove +foxgloves +foxhole +foxholes +foxhound +foxhounds +foxhunt +foxhunted +foxhunter +foxhunters +foxhunting +foxhuntings +foxhunts +foxier +foxiest +foxily +foxiness +foxinesses +foxing +foxings +foxlike +foxskin +foxskins +foxtail +foxtails +foxtrot +foxtrots +foxtrotted +foxtrotting +foxy +foy +foyer +foyers +foys +fozier +foziest +foziness +fozinesses +fozy +frabjous +fracas +fracases +fractal +fractals +fracted +fracti +fraction +fractional +fractionalization +fractionalizations +fractionalize +fractionalized +fractionalizes +fractionalizing +fractionally +fractionate +fractionated +fractionates +fractionating +fractionation +fractionations +fractionator +fractionators +fractioned +fractioning +fractions +fractious +fractiously +fractiousness +fractiousnesses +fractur +fracture +fractured +fractures +fracturing +fracturs +fractus +frae +fraena +fraenum +fraenums +frag +fragged +fragging +fraggings fragile +fragilities +fragility +fragment +fragmental +fragmentally +fragmentarily +fragmentariness +fragmentarinesses +fragmentary +fragmentate +fragmentated +fragmentates +fragmentating +fragmentation +fragmentations +fragmented +fragmenting +fragmentize +fragmentized +fragmentizes +fragmentizing +fragments +fragrance +fragrances +fragrancies +fragrancy fragrant +fragrantly +frags +frail +frailer +frailest +frailly +frailness +frailnesses +frails +frailties +frailty +fraise +fraises +fraktur +frakturs +framable +frambesia +frambesias +framboise +framboises +frame +frameable +framed +framer +framers +frames +frameshift +frameshifts framework +frameworks +framing +framings franc +franchise +franchised +franchisee +franchisees +franchiser +franchisers +franchises +franchising +franchisor +franchisors +francium +franciums +francolin +francolins +francophone +francs +frangibilities +frangibility +frangible +frangipane +frangipanes +frangipani +frangipanis +frangipanni +franglais +frank +frankable +franked +franker +frankers +frankest +frankfurt +frankfurter +frankfurters +frankfurts +frankincense +frankincenses +franking +franklin +franklinite +franklinites +franklins +frankly +frankness +franknesses +frankpledge +frankpledges +franks +frantic +frantically +franticness +franticnesses +frap +frappe +frapped +frappes +frapping +fraps +frass +frasses +frat +frater +fraternal +fraternalism +fraternalisms +fraternally +fraternities +fraternity +fraternization +fraternizations +fraternize +fraternized +fraternizer +fraternizers +fraternizes +fraternizing +fraters +fratricidal +fratricide +fratricides +frats +fraud +frauds +fraudulence +fraudulences +fraudulent +fraudulently +fraudulentness +fraudulentnesses +fraught +fraughted +fraughting +fraughts +fraulein +frauleins +fraxinella +fraxinellas +fray +frayed +fraying +frayings +frays +frazil +frazils +frazzle +frazzled +frazzles +frazzling +freak +freaked +freakier +freakiest +freakily +freakiness +freakinesses +freaking +freakish +freakishly +freakishness +freakishnesses +freakout +freakouts +freaks +freaky +freckle +freckled +freckles +frecklier +freckliest +freckling +freckly free +freebase +freebased +freebaser +freebasers +freebases +freebasing +freebee +freebees +freebie +freebies +freeboard +freeboards +freeboot +freebooted +freebooter +freebooters +freebooting +freeboots +freeborn +freed +freedman +freedmen freedom +freedoms +freedwoman +freedwomen +freeform +freehand +freehanded +freehandedly +freehandedness +freehandednesses +freehearted +freeheartedly +freehold +freeholder +freeholders +freeholds +freeing +freelance +freelanced +freelancer +freelancers +freelances +freelancing +freeload +freeloaded +freeloader +freeloaders +freeloading +freeloads +freely +freeman +freemartin +freemartins +freemasonries +freemasonry +freemen +freeness +freenesses +freer +freers +frees +freesia +freesias +freest +freestanding +freestone +freestones +freestyle +freestyler +freestylers +freestyles +freethinker +freethinkers +freethinking +freethinkings freeway +freeways +freewheel +freewheeled +freewheeler +freewheelers +freewheeling +freewheelingly +freewheels +freewill +freewriting +freewritings freeze +freezer +freezers +freezes freezing +freezingly +freight +freightage +freightages +freighted +freighter +freighters +freighting +freights +fremd +fremitus +fremituses +frena +french +frenched +frenches +frenchification +frenchifications +frenchified +frenchifies +frenchify +frenchifying +frenching +frenetic +frenetically +freneticism +freneticisms +frenetics +frenula +frenulum +frenulums +frenum +frenums +frenzied +frenziedly +frenzies +frenzily +frenzy +frenzying +frequence +frequences +frequencies +frequency frequent +frequentation +frequentations +frequentative +frequentatives +frequented +frequenter +frequenters +frequentest +frequenting +frequently +frequentness +frequentnesses +frequents +frere +freres +fresco +frescoed +frescoer +frescoers +frescoes +frescoing +frescos fresh +freshed +freshen +freshened +freshener +fresheners +freshening +freshens +fresher +freshes +freshest +freshet +freshets +freshing +freshly +freshman +freshmen +freshness +freshnesses +freshwater +freshwaters +fresnel +fresnels +fret +fretful +fretfully +fretfulness +fretfulnesses +fretless +frets +fretsaw +fretsaws +fretsome +fretted +fretter +fretters +frettier +frettiest +fretting +fretty +fretwork +fretworks +friabilities +friability +friable +friar +friaries +friarly +friars +friary +fribble +fribbled +fribbler +fribblers +fribbles +fribbling +fricandeau +fricandeaus +fricandeaux +fricando +fricandoes +fricassee +fricasseed +fricasseeing +fricassees +fricative +fricatives friction +frictional +frictionally +frictionless +frictionlessly +frictions fridge +fridges +fried +friedcake +friedcakes friend +friended +friending +friendless +friendlessness +friendlessnesses +friendlier +friendlies +friendliest +friendlily +friendliness +friendlinesses friendly +friends friendship +friendships +frier +friers +fries +frieze +friezelike +friezes +frig +frigate +frigates +frigged +frigging +fright +frighted frighten +frightened +frightening +frighteningly +frightens +frightful +frightfully +frightfulness +frightfulnesses +frighting +frights +frigid +frigidities +frigidity +frigidly +frigidness +frigidnesses +frigorific +frigs +frijol +frijole +frijoles +frill +frilled +friller +frillers +frillier +frilliest +frilling +frillings +frills +frilly +fringe +fringed +fringes +fringier +fringiest +fringing +fringy +fripperies +frippery +frise +frises +frisette +frisettes +friseur +friseurs +frisk +frisked +frisker +friskers +frisket +friskets +friskier +friskiest +friskily +friskiness +friskinesses +frisking +frisks +frisky +frisson +frissons +frit +frith +friths +fritillaria +fritillarias +fritillaries +fritillary +frits +fritt +frittata +frittatas +fritted +fritter +frittered +fritterer +fritterers +frittering +fritters +fritting +fritts +fritz +fritzes +frivol +frivoled +frivoler +frivolers +frivoling +frivolities +frivolity +frivolled +frivoller +frivollers +frivolling +frivolous +frivolously +frivolousness +frivolousnesses +frivols +friz +frized +frizer +frizers +frizes +frizette +frizettes +frizing +frizz +frizzed +frizzer +frizzers +frizzes +frizzier +frizziest +frizzily +frizziness +frizzinesses +frizzing +frizzle +frizzled +frizzler +frizzlers +frizzles +frizzlier +frizzliest +frizzling +frizzly +frizzy +fro +frock +frocked +frocking +frocks +froe +froes frog +frogeye +frogeyed +frogeyes +frogfish +frogfishes +frogged +froggier +froggiest +frogging +froggy +froghopper +froghoppers +froglike +frogman +frogmen +frogs +frolic +frolicked +frolicking +frolicky +frolics +frolicsome from +fromage +fromages +fromenties +fromenty +frond +fronded +frondeur +frondeurs +frondose +fronds +frons front +frontage +frontages +frontal +frontalities +frontality +frontally +frontals +frontcourt +frontcourts +fronted +fronter +frontes frontier +frontiers +frontiersman +frontiersmen +fronting +frontispiece +frontispieces +frontless +frontlet +frontlets +frontline +frontogeneses +frontogenesis +frontolyses +frontolysis +fronton +frontons +frontrunner +frontrunners +fronts +frontward +frontwards +frore +frosh frost +frostbit +frostbite +frostbites +frostbiting +frostbitings +frostbitten +frosted +frosteds +frostier +frostiest +frostily +frostiness +frostinesses +frosting +frostings +frosts +frostwork +frostworks +frosty +froth +frothed +frothier +frothiest +frothily +frothiness +frothinesses +frothing +froths +frothy +frottage +frottages +frotteur +frotteurs +froufrou +froufrous +frounce +frounced +frounces +frouncing +frouzier +frouziest +frouzy +frow +froward +frowardly +frowardness +frowardnesses +frown +frowned +frowner +frowners +frowning +frowningly +frowns +frows +frowsier +frowsiest +frowst +frowsted +frowstier +frowstiest +frowsting +frowsts +frowsty +frowsy +frowzier +frowziest +frowzily +frowzy +froze +frozen +frozenly +frozenness +frozennesses +fructification +fructifications +fructified +fructifies +fructify +fructifying +fructose +fructoses +fructuous +frug +frugal +frugalities +frugality +frugally +frugged +frugging +frugivore +frugivores +frugivorous +frugs fruit +fruitage +fruitages +fruitarian +fruitarians +fruitcake +fruitcakes +fruited +fruiter +fruiterer +fruiterers +fruiters +fruitful +fruitfuller +fruitfullest +fruitfully +fruitfulness +fruitfulnesses +fruitier +fruitiest +fruitily +fruitiness +fruitinesses +fruiting +fruition +fruitions +fruitless +fruitlessly +fruitlessness +fruitlessnesses +fruitlet +fruitlets +fruits +fruitwood +fruitwoods +fruity +frumenties +frumenty +frump +frumpier +frumpiest +frumpily +frumpish +frumps +frumpy +frusta +frustrate +frustrated +frustrates +frustrating +frustratingly +frustration +frustrations +frustule +frustules +frustum +frustums +frutescent +fruticose fry +fryer +fryers +frying +frypan +frypans +fub +fubbed +fubbing +fubs +fubsier +fubsiest +fubsy +fuchsia +fuchsias +fuchsin +fuchsine +fuchsines +fuchsins +fuci +fuck +fucked +fucker +fuckers +fucking +fucks +fuckup +fuckups +fucoid +fucoidal +fucoids +fucose +fucoses +fucous +fucoxanthin +fucoxanthins +fucus +fucuses +fud +fuddle +fuddled +fuddles +fuddling +fudge +fudged +fudges +fudging +fuds +fuehrer +fuehrers fuel +fueled +fueler +fuelers +fueling +fuelled +fueller +fuellers +fuelling +fuels +fuelwood +fuelwoods +fug +fugacious +fugacities +fugacity +fugal +fugally +fugato +fugatos +fugged +fuggier +fuggiest +fuggily +fugging +fuggy +fugio +fugios +fugitive +fugitively +fugitiveness +fugitivenesses +fugitives +fugle +fugled +fugleman +fuglemen +fugles +fugling +fugs +fugu +fugue +fugued +fugues +fuguing +fuguist +fuguists +fugus +fuhrer +fuhrers +fuji +fujis +fulcra +fulcrum +fulcrums +fulfil +fulfill +fulfilled +fulfiller +fulfillers +fulfilling +fulfillment +fulfillments +fulfills +fulfils +fulgent +fulgently +fulgid +fulgurant +fulgurate +fulgurated +fulgurates +fulgurating +fulguration +fulgurations +fulgurite +fulgurites +fulgurous +fulham +fulhams +fuliginous +fuliginously full +fullam +fullams +fullback +fullbacks +fulled +fuller +fullered +fullerene +fullerenes +fulleries +fullering +fullers +fullery +fullest +fullface +fullfaces +fulling +fullmouthed +fullness +fullnesses +fulls +fully +fulmar +fulmars +fulminant +fulminate +fulminated +fulminates +fulminating +fulmination +fulminations +fulmine +fulmined +fulmines +fulminic +fulmining +fulness +fulnesses +fulsome +fulsomely +fulsomeness +fulsomenesses +fulvous +fumarase +fumarases +fumarate +fumarates +fumaric +fumarole +fumaroles +fumarolic +fumatories +fumatory +fumble +fumbled +fumbler +fumblers +fumbles +fumbling +fumblingly +fume +fumed +fumeless +fumelike +fumer +fumers +fumes +fumet +fumets +fumette +fumettes +fumier +fumiest +fumigant +fumigants +fumigate +fumigated +fumigates +fumigating +fumigation +fumigations +fumigator +fumigators +fuming +fumingly +fumitories +fumitory +fumuli +fumulus +fumy fun +funambulism +funambulisms +funambulist +funambulists function +functional +functionalism +functionalisms +functionalist +functionalistic +functionalists +functionalities +functionality +functionally +functionaries +functionary +functioned +functioning +functionless +functions +functor +functors +fund +fundament fundamental +fundamentalism +fundamentalisms +fundamentalist +fundamentalistic +fundamentalists +fundamentally +fundamentals +fundaments +funded +fundi +fundic +funding +fundraiser +fundraisers +fundraising +fundraisings +funds +fundus funeral +funerals +funerary +funereal +funereally +funest +funfair +funfairs +fungal +fungals +fungi +fungibilities +fungibility +fungible +fungibles +fungic +fungicidal +fungicidally +fungicide +fungicides +fungiform +fungistatic +fungo +fungoes +fungoid +fungoids +fungous +fungus +funguses +funicle +funicles +funicular +funiculars +funiculi +funiculus +funk +funked +funker +funkers +funkia +funkias +funkier +funkiest +funkiness +funkinesses +funking +funks +funky +funned +funnel +funneled +funnelform +funneling +funnelled +funnelling +funnels +funner +funnest +funnier +funnies +funniest +funnily +funniness +funninesses +funning funny +funnyman +funnymen +funs fur +furan +furane +furanes +furanose +furanoses +furanoside +furanosides +furans +furazolidone +furazolidones +furbearer +furbearers +furbelow +furbelowed +furbelowing +furbelows +furbish +furbished +furbisher +furbishers +furbishes +furbishing +furcate +furcated +furcates +furcating +furcation +furcations +furcraea +furcraeas +furcula +furculae +furcular +furculum +furfur +furfural +furfurals +furfuran +furfurans +furfures +furibund +furies +furioso +furious +furiously +furl +furlable +furled +furler +furlers +furless +furling +furlong +furlongs +furlough +furloughed +furloughing +furloughs +furls +furmenties +furmenty +furmeties +furmety +furmities +furmity +furnace +furnaced +furnaces +furnacing +furnish furnished +furnisher +furnishers +furnishes +furnishing +furnishings furniture +furnitures +furor +furore +furores +furors +furosemide +furosemides +furred +furrier +furrieries +furriers +furriery +furriest +furrily +furriner +furriners +furring +furrings +furrow +furrowed +furrower +furrowers +furrowing +furrows +furrowy +furry +furs further +furtherance +furtherances +furthered +furtherer +furtherers +furthering +furthermore +furthermost +furthers +furthest +furtive +furtively +furtiveness +furtivenesses +furuncle +furuncles +furunculoses +furunculosis +fury +furze +furzes +furzier +furziest +furzy +fusain +fusains +fuscous +fuse +fused +fusee +fusees +fusel +fuselage +fuselages +fuseless +fusels +fuses +fusibilities +fusibility +fusible +fusibly +fusiform +fusil +fusile +fusileer +fusileers +fusilier +fusiliers +fusillade +fusillades +fusilli +fusillis +fusils +fusing +fusion +fusionist +fusionists +fusions +fuss +fussbudget +fussbudgets +fussbudgety +fussed +fusser +fussers +fusses +fussier +fussiest +fussily +fussiness +fussinesses +fussing +fusspot +fusspots +fussy +fustian +fustians +fustic +fustics +fustier +fustiest +fustigate +fustigated +fustigates +fustigating +fustigation +fustigations +fustily +fustiness +fustinesses +fusty +fusulinid +fusulinids +futharc +futharcs +futhark +futharks +futhorc +futhorcs +futhork +futhorks +futile +futilely +futileness +futilenesses +futilitarian +futilitarianism +futilitarianisms +futilitarians +futilities +futility +futon +futons +futtock +futtocks +futural future +futureless +futurelessness +futurelessnesses +futures +futurism +futurisms +futurist +futuristic +futuristically +futuristics +futurists +futurities +futurity +futurological +futurologies +futurologist +futurologists +futurology +futz +futzed +futzes +futzing +fuze +fuzed +fuzee +fuzees +fuzes +fuzil +fuzils +fuzing +fuzz +fuzzed +fuzzes +fuzzier +fuzziest +fuzzily +fuzziness +fuzzinesses +fuzzing +fuzzy +fyce +fyces +fyke +fykes +fylfot +fylfots +fytte +fyttes +gab +gabardine +gabardines +gabbard +gabbards +gabbart +gabbarts +gabbed +gabber +gabbers +gabbier +gabbiest +gabbing +gabble +gabbled +gabbler +gabblers +gabbles +gabbling +gabbro +gabbroic +gabbroid +gabbros +gabby +gabelle +gabelled +gabelles +gaberdine +gaberdines +gabfest +gabfests +gabies +gabion +gabions +gable +gabled +gables +gabling +gaboon +gaboons +gabs +gaby +gad +gadabout +gadabouts +gadarene +gadded +gadder +gadders +gaddi +gadding +gaddis +gadflies +gadfly +gadget +gadgeteer +gadgeteers +gadgetries +gadgetry +gadgets +gadgety +gadi +gadid +gadids +gadis +gadoid +gadoids +gadolinite +gadolinites +gadolinium +gadoliniums +gadroon +gadrooned +gadrooning +gadroonings +gadroons +gads +gadwall +gadwalls +gadzookeries +gadzookery +gadzooks +gae +gaed +gaeing +gaen +gaes +gaff +gaffe +gaffed +gaffer +gaffers +gaffes +gaffing +gaffs +gag +gaga +gagaku +gagakus +gage +gaged +gager +gagers +gages +gagged +gagger +gaggers +gagging +gaggle +gaggled +gaggles +gaggling +gaging +gagman +gagmen +gags +gagster +gagsters +gahnite +gahnites +gaieties +gaiety +gaijin +gaillardia +gaillardias +gaily gain +gainable +gained +gainer +gainers +gainful +gainfully +gainfulness +gainfulnesses +gaingiving +gaingivings +gaining +gainless +gainlier +gainliest +gainly +gains +gainsaid +gainsay +gainsayer +gainsayers +gainsaying +gainsays +gainst +gait +gaited +gaiter +gaiters +gaiting +gaits +gal +gala +galabia +galabias +galabieh +galabiehs +galabiya +galabiyas +galactic +galactorrhea +galactorrheas +galactosamine +galactosamines +galactose +galactosemia +galactosemias +galactosemic +galactoses +galactosidase +galactosidases +galactoside +galactosides +galactosyl +galactosyls +galago +galagos +galah +galahs +galangal +galangals +galantine +galantines +galas +galatea +galateas +galavant +galavanted +galavanting +galavants +galax +galaxes +galaxies +galaxy +galbanum +galbanums +gale +galea +galeae +galeas +galeate +galeated +galena +galenas +galenic +galenical +galenicals +galenite +galenites +galere +galeres +gales +galilee +galilees +galingale +galingales +galiot +galiots +galipot +galipots +galivant +galivanted +galivanting +galivants +gall +gallamine +gallamines +gallant +gallanted +gallanting +gallantly +gallantries +gallantry +gallants +gallate +gallates +gallbladder +gallbladders +galleass +galleasses +galled +gallein +galleins +galleon +galleons +galleria +gallerias +galleried +galleries gallery +gallerygoer +gallerygoers +gallerying +galleryite +galleryites +gallet +galleta +galletas +galleted +galleting +gallets +galley +galleys +gallflies +gallfly +galliard +galliards +galliass +galliasses +gallic +gallican +gallicism +gallicisms +gallicization +gallicizations +gallicize +gallicized +gallicizes +gallicizing +gallied +gallies +galligaskins +gallimaufries +gallimaufry +gallinaceous +galling +gallingly +gallinipper +gallinippers +gallinule +gallinules +galliot +galliots +gallipot +gallipots +gallium +galliums +gallivant +gallivanted +gallivanting +gallivants +gallnut +gallnuts gallon +gallonage +gallonages +gallons +galloon +galloons +galloot +galloots +gallop +gallopade +gallopades +galloped +galloper +gallopers +galloping +gallops +gallous +gallowglass +gallowglasses +gallows +gallowses +galls +gallstone +gallstones +gallus +gallused +galluses +gally +gallying +galoot +galoots +galop +galopade +galopades +galoped +galoping +galops +galore +galores +galosh +galoshe +galoshed +galoshes +gals +galumph +galumphed +galumphing +galumphs +galvanic +galvanically +galvanise +galvanised +galvanises +galvanising +galvanism +galvanisms +galvanization +galvanizations +galvanize +galvanized +galvanizer +galvanizers +galvanizes +galvanizing +galvanometer +galvanometers +galvanometric +galvanoscope +galvanoscopes +galyac +galyacs +galyak +galyaks +gam +gama +gamas +gamashes +gamay +gamays +gamb +gamba +gambade +gambades +gambado +gambadoes +gambados +gambas +gambe +gambes +gambeson +gambesons +gambia +gambias +gambier +gambiers +gambir +gambirs +gambit +gambits +gamble +gambled +gambler +gamblers +gambles +gambling +gamboge +gamboges +gambol +gamboled +gamboling +gambolled +gambolling +gambols +gambrel +gambrels +gambs +gambusia +gambusias game +gamecock +gamecocks +gamed +gamekeeper +gamekeepers +gamelan +gamelans +gamelike +gamely +gameness +gamenesses +gamer +gamers +games +gamesman +gamesmanship +gamesmanships +gamesmen +gamesome +gamesomely +gamesomeness +gamesomenesses +gamest +gamester +gamesters +gametangia +gametangium +gamete +gametes +gametic +gametically +gametocyte +gametocytes +gametogeneses +gametogenesis +gametogenic +gametogenous +gametophore +gametophores +gametophyte +gametophytes +gametophytic +gamey +gamic +gamier +gamiest +gamily +gamin +gamine +gamines +gaminess +gaminesses +gaming +gamings +gamins +gamma +gammadia +gammadion +gammas +gammed +gammer +gammers +gammier +gammiest +gamming +gammon +gammoned +gammoner +gammoners +gammoning +gammons +gammy +gamodeme +gamodemes +gamopetalous +gamp +gamps +gams +gamut +gamuts +gamy +gan +ganache +ganaches +gander +gandered +gandering +ganders +gane +ganef +ganefs +ganev +ganevs +gang +gangbang +gangbanger +gangbangers +gangbangs +gangbuster +gangbusters +ganged +ganger +gangers +ganging +gangland +ganglands +ganglia +ganglial +gangliar +ganglier +gangliest +gangling +ganglion +ganglionated +ganglionic +ganglions +ganglioside +gangliosides +gangly +gangplank +gangplanks +gangplow +gangplows +gangrel +gangrels +gangrene +gangrened +gangrenes +gangrening +gangrenous +gangs +gangster +gangsterdom +gangsterdoms +gangsterish +gangsterism +gangsterisms +gangsters +gangue +gangues +gangway +gangways +ganister +ganisters +ganja +ganjah +ganjahs +ganjas +gannet +gannets +gannister +gannisters +ganof +ganofs +ganoid +ganoids +gantelope +gantelopes +gantlet +gantleted +gantleting +gantlets +gantline +gantlines +gantlope +gantlopes +gantries +gantry +ganymede +ganymedes +gaol +gaoled +gaoler +gaolers +gaoling +gaols +gap +gape +gaped +gaper +gapers +gapes +gapeseed +gapeseeds +gapeworm +gapeworms +gaping +gapingly +gaposis +gaposises +gapped +gappier +gappiest +gapping +gappy +gaps +gapy +gar garage +garaged +garageman +garagemen +garages +garaging +garb garbage +garbageman +garbagemen +garbages +garbanzo +garbanzos +garbed +garbing +garble +garbled +garbler +garblers +garbles +garbless +garbling +garboard +garboards +garboil +garboils +garbs +garcon +garcons +gardant garden +gardened +gardener +gardeners +gardenful +gardenfuls +gardenia +gardenias +gardening +gardens +garderobe +garderobes +gardyloo +garfish +garfishes +garganey +garganeys +gargantuan +garget +gargets +gargety +gargle +gargled +gargler +garglers +gargles +gargling +gargoyle +gargoyled +gargoyles +garibaldi +garibaldis +garigue +garigues +garish +garishly +garishness +garishnesses +garland +garlanded +garlanding +garlands garlic +garlicked +garlicky +garlics garment +garmented +garmenting +garments +garner +garnered +garnering +garners +garnet +garnetiferous +garnets +garni +garnierite +garnierites +garnish +garnished +garnishee +garnisheed +garnisheeing +garnishees +garnishes +garnishing +garnishment +garnishments +garniture +garnitures +garote +garoted +garotes +garoting +garotte +garotted +garotter +garotters +garottes +garotting +garpike +garpikes +garred +garret +garrets +garring +garrison +garrisoned +garrisoning +garrisons +garron +garrons +garrote +garroted +garroter +garroters +garrotes +garroting +garrotte +garrotted +garrottes +garrotting +garrulities +garrulity +garrulous +garrulously +garrulousness +garrulousnesses +gars +garter +gartered +gartering +garters +garth +garths +garvey +garveys gas +gasalier +gasaliers +gasbag +gasbags +gascon +gasconade +gasconaded +gasconader +gasconaders +gasconades +gasconading +gascons +gaselier +gaseliers +gaseous +gaseousness +gaseousnesses +gases +gash +gashed +gasher +gashes +gashest +gashing +gasholder +gasholders +gashouse +gashouses +gasification +gasifications +gasified +gasifier +gasifiers +gasifies +gasiform +gasify +gasifying +gasket +gaskets +gaskin +gasking +gaskings +gaskins +gasless +gaslight +gaslights +gaslit +gasman +gasmen +gasogene +gasogenes +gasohol +gasohols +gasolene +gasolenes +gasolier +gasoliers +gasoline +gasolines +gasolinic +gasometer +gasometers +gasp +gasped +gasper +gaspers +gasping +gasps +gassed +gasser +gassers +gasses +gassier +gassiest +gassily +gassiness +gassinesses +gassing +gassings +gassy +gast +gasted +gaster +gasters +gastight +gastightness +gastightnesses +gasting +gastness +gastnesses +gastraea +gastraeas +gastral +gastrea +gastreas +gastrectomies +gastrectomy +gastric +gastrin +gastrins +gastritides +gastritis +gastrocnemii +gastrocnemius +gastroduodenal +gastroenteritides +gastroenteritis +gastroenteritises +gastroenterological +gastroenterologies +gastroenterologist +gastroenterologists +gastroenterology +gastroesophageal +gastrointestinal +gastrolith +gastroliths +gastronome +gastronomes +gastronomic +gastronomical +gastronomically +gastronomies +gastronomist +gastronomists +gastronomy +gastropod +gastropods +gastroscope +gastroscopes +gastroscopic +gastroscopies +gastroscopist +gastroscopists +gastroscopy +gastrotrich +gastrotrichs +gastrovascular +gastrula +gastrulae +gastrular +gastrulas +gastrulate +gastrulated +gastrulates +gastrulating +gastrulation +gastrulations +gasts +gasworks +gat gate +gateau +gateaux +gated +gatefold +gatefolds +gatehouse +gatehouses +gatekeeper +gatekeepers +gatekeeping +gateless +gatelike +gateman +gatemen +gatepost +gateposts +gates +gateway +gateways gather +gathered +gatherer +gatherers +gathering +gatherings +gathers +gating +gator +gators +gats +gauche +gauchely +gaucheness +gauchenesses +gaucher +gaucherie +gaucheries +gauchest +gaucho +gauchos +gaud +gauderies +gaudery +gaudier +gaudies +gaudiest +gaudily +gaudiness +gaudinesses +gauds +gaudy +gauffer +gauffered +gauffering +gauffers +gauge +gauged +gauger +gaugers +gauges +gauging +gault +gaults +gaum +gaumed +gauming +gaums +gaun +gaunt +gaunter +gauntest +gauntlet +gauntleted +gauntleting +gauntlets +gauntly +gauntness +gauntnesses +gauntries +gauntry +gaur +gaurs +gauss +gausses +gauze +gauzelike +gauzes +gauzier +gauziest +gauzily +gauzy +gavage +gavages +gave +gavel +gaveled +gaveling +gavelkind +gavelkinds +gavelled +gavelling +gavelock +gavelocks +gavels +gavial +gavials +gavot +gavots +gavotte +gavotted +gavottes +gavotting +gawk +gawked +gawker +gawkers +gawkier +gawkies +gawkiest +gawkily +gawkiness +gawkinesses +gawking +gawkish +gawkishly +gawkishness +gawkishnesses +gawks +gawky +gawp +gawped +gawper +gawpers +gawping +gawps +gawsie +gawsy gay +gayal +gayals +gayer +gayest +gayeties +gayety +gayly +gayness +gaynesses +gays +gaywings +gazabo +gazaboes +gazabos +gazania +gazanias +gazar +gazars +gaze +gazebo +gazeboes +gazebos +gazed +gazehound +gazehounds +gazelle +gazelles +gazer +gazers +gazes +gazette +gazetted +gazetteer +gazetteers +gazettes +gazetting +gazing +gazogene +gazogenes +gazpacho +gazpachos +gazump +gazumped +gazumper +gazumpers +gazumping +gazumps +geanticline +geanticlines +gear +gearbox +gearboxes +gearcase +gearcases +gearchange +gearchanges +geared +gearing +gearings +gearless +gears +gearshift +gearshifts +gearwheel +gearwheels +geck +gecked +gecking +gecko +geckoes +geckos +gecks +ged +gedankenexperiment +gedankenexperiments +geds +gee +geed +geegaw +geegaws +geeing +geek +geekier +geekiest +geeks +geeky +geepound +geepounds +gees +geese +geest +geests +geez +geezer +geezers +gegenschein +gegenscheins +geisha +geishas +gel +gelable +gelada +geladas +gelandesprung +gelandesprungs +gelant +gelants +gelate +gelated +gelates +gelati +gelatin +gelatine +gelatines +gelating +gelatinization +gelatinizations +gelatinize +gelatinized +gelatinizes +gelatinizing +gelatinous +gelatinously +gelatinousness +gelatinousnesses +gelatins +gelation +gelations +gelato +gelatos +geld +gelded +gelder +gelders +gelding +geldings +gelds +gelee +gelees +gelid +gelidities +gelidity +gelidly +gelignite +gelignites +gellant +gellants +gelled +gelling +gels +gelsemia +gelsemium +gelsemiums +gelt +gelts +gem +gemeinschaft +gemeinschaften +gemeinschafts +geminal +geminally +geminate +geminated +geminates +geminating +gemination +geminations +gemlike +gemma +gemmae +gemmate +gemmated +gemmates +gemmating +gemmation +gemmations +gemmed +gemmier +gemmiest +gemmily +gemming +gemmologies +gemmologist +gemmologists +gemmology +gemmule +gemmules +gemmy +gemological +gemologies +gemologist +gemologists +gemology +gemot +gemote +gemotes +gemots +gems +gemsbok +gemsboks +gemsbuck +gemsbucks +gemstone +gemstones +gemutlich +gemutlichkeit +gemutlichkeits +gen +gendarme +gendarmerie +gendarmeries +gendarmery +gendarmes +gender +gendered +gendering +genders +gene +genealogical +genealogically +genealogies +genealogist +genealogists +genealogy +genera +generable general +generalisation +generalisations +generalise +generalised +generalises +generalising +generalissimo +generalissimos +generalist +generalists +generalities +generality +generalizabilities +generalizability +generalizable +generalization +generalizations +generalize +generalized +generalizer +generalizers +generalizes +generalizing +generally +generals +generalship +generalships +generate +generated +generates +generating generation +generational +generationally +generations +generative +generator +generators +generatrices +generatrix +generic +generically +genericness +genericnesses +generics +generosities +generosity generous +generously +generousness +generousnesses +genes +geneses +genesis +genet +genetic +genetical +genetically +geneticist +geneticists +genetics +genets +genette +genettes +geneva +genevas +genial +genialities +geniality +genially +genic +genically +geniculate +geniculated +genie +genies +genii +genip +genipap +genipaps +genips +genital +genitalia +genitalic +genitally +genitals +genitival +genitivally +genitive +genitives +genitor +genitors +genitourinary +geniture +genitures +genius +geniuses +genoa +genoas +genocidal +genocide +genocides +genoise +genoises +genom +genome +genomes +genomic +genoms +genotype +genotypes +genotypic +genotypical +genotypically +genre +genres +genro +genros +gens +genseng +gensengs +gent +gentamicin +gentamicins +genteel +genteeler +genteelest +genteelism +genteelisms +genteelly +genteelness +genteelnesses +gentes +gentian +gentians +gentil +gentile +gentiles +gentilesse +gentilesses +gentilities +gentility gentle +gentled +gentlefolk +gentlefolks gentleman +gentlemanlike +gentlemanlikeness +gentlemanlikenesses +gentlemanliness +gentlemanlinesses +gentlemanly +gentlemen +gentleness +gentlenesses +gentleperson +gentlepersons +gentler +gentles +gentlest +gentlewoman +gentlewomen +gentling +gently +gentoo +gentoos +gentrice +gentrices +gentries +gentrification +gentrifications +gentrified +gentrifier +gentrifiers +gentrifies +gentrify +gentrifying +gentry +gents +genu +genua +genuflect +genuflected +genuflecting +genuflection +genuflections +genuflects +genuine +genuinely +genuineness +genuinenesses +genus +genuses +geobotanic +geobotanical +geobotanies +geobotanist +geobotanists +geobotany +geocentric +geocentrically +geochemical +geochemically +geochemist +geochemistries +geochemistry +geochemists +geochronologic +geochronological +geochronologically +geochronologies +geochronologist +geochronologists +geochronology +geode +geodes +geodesic +geodesics +geodesies +geodesist +geodesists +geodesy +geodetic +geodetical +geodic +geoduck +geoducks +geognosies +geognosy +geographer +geographers +geographic +geographical +geographically +geographies geography +geohydrologic +geohydrologies +geohydrologist +geohydrologists +geohydrology +geoid +geoidal +geoids +geologer +geologers +geologic +geological +geologically +geologies +geologist +geologists +geologize +geologized +geologizes +geologizing +geology +geomagnetic +geomagnetically +geomagnetism +geomagnetisms +geomancer +geomancers +geomancies +geomancy +geomantic +geometer +geometers +geometric +geometrical +geometrically +geometrician +geometricians +geometrics +geometrid +geometrids +geometries +geometrise +geometrised +geometrises +geometrising +geometrization +geometrizations +geometrize +geometrized +geometrizes +geometrizing geometry +geomorphic +geomorphological +geomorphologies +geomorphologist +geomorphologists +geomorphology +geophagies +geophagy +geophone +geophones +geophysical +geophysically +geophysicist +geophysicists +geophysics +geophyte +geophytes +geopolitical +geopolitically +geopolitician +geopoliticians +geopolitics +geoponic +geopressured +geoprobe +geoprobes +georgette +georgettes +georgic +georgics +geoscience +geosciences +geoscientist +geoscientists +geostationary +geostrategic +geostrategies +geostrategist +geostrategists +geostrategy +geostrophic +geostrophically +geosynchronous +geosynclinal +geosyncline +geosynclines +geotactic +geotaxes +geotaxis +geotechnical +geotectonic +geotectonically +geothermal +geothermally +geotropic +geotropically +geotropism +geotropisms +gerah +gerahs +geranial +geranials +geraniol +geraniols +geranium +geraniums +gerardia +gerardias +gerbera +gerberas +gerbil +gerbille +gerbilles +gerbils +gerent +gerents +gerenuk +gerenuks +gerfalcon +gerfalcons +geriatric +geriatrician +geriatricians +geriatrics +germ +german +germander +germanders +germane +germanely +germanic +germanium +germaniums +germanization +germanizations +germanize +germanized +germanizes +germanizing +germans +germen +germens +germfree +germicidal +germicide +germicides +germier +germiest +germina +germinabilities +germinability +germinal +germinally +germinate +germinated +germinates +germinating +germination +germinations +germinative +germproof +germs +germy +gerontic +gerontocracies +gerontocracy +gerontocrat +gerontocratic +gerontocrats +gerontologic +gerontological +gerontologies +gerontologist +gerontologists +gerontology +gerontomorphic +gerrymander +gerrymandered +gerrymandering +gerrymanders +gerund +gerundive +gerundives +gerunds +gesellschaft +gesellschaften +gesellschafts +gesneria +gesneriad +gesneriads +gesso +gessoed +gessoes +gest +gestalt +gestalten +gestaltist +gestaltists +gestalts +gestapo +gestapos +gestate +gestated +gestates +gestating +gestation +gestational +gestations +geste +gestes +gestic +gestical +gesticulant +gesticulate +gesticulated +gesticulates +gesticulating +gesticulation +gesticulations +gesticulative +gesticulator +gesticulators +gesticulatory +gests +gestural +gesturally gesture +gestured +gesturer +gesturers +gestures +gesturing +gesundheit get +geta +getable +getas +getatable +getaway +getaways +gets +gettable +getter +gettered +gettering +getters +getting +getup +getups +geum +geums +gewgaw +gewgaws +gewurztraminer +gewurztraminers +gey +geyser +geyserite +geyserites +geysers +gharial +gharials +gharri +gharries +gharris +gharry +ghast +ghastful +ghastfully +ghastlier +ghastliest +ghastliness +ghastlinesses +ghastly +ghat +ghats +ghaut +ghauts +ghazi +ghazies +ghazis +ghee +ghees +gherao +gheraoed +gheraoes +gheraoing +gherkin +gherkins +ghetto +ghettoed +ghettoes +ghettoing +ghettoization +ghettoizations +ghettoize +ghettoized +ghettoizes +ghettoizing +ghettos +ghi +ghibli +ghiblis +ghillie +ghillies +ghis +ghost +ghosted +ghostier +ghostiest +ghosting +ghostings +ghostlier +ghostliest +ghostlike +ghostliness +ghostlinesses +ghostly +ghosts +ghostwrite +ghostwriter +ghostwriters +ghostwrites +ghostwriting +ghostwritten +ghostwrote +ghosty +ghoul +ghoulie +ghoulies +ghoulish +ghoulishly +ghoulishness +ghoulishnesses +ghouls +ghyll +ghylls +giant +giantess +giantesses +giantism +giantisms +giantlike +giants +giaour +giaours +giardiases +giardiasis +gib +gibbed +gibber +gibbered +gibberellin +gibberellins +gibbering +gibberish +gibberishes +gibbers +gibbet +gibbeted +gibbeting +gibbets +gibbetted +gibbetting +gibbing +gibbon +gibbons +gibbose +gibbosities +gibbosity +gibbous +gibbsite +gibbsites +gibe +gibed +giber +gibers +gibes +gibing +gibingly +giblet +giblets +gibs +gibson +gibsons +gid +giddap +giddied +giddier +giddies +giddiest +giddily +giddiness +giddinesses +giddy +giddyap +giddying +giddyup +gids +gie +gied +gieing +gien +gies gift gifted +giftedly +giftedness +giftednesses +gifting +giftless +gifts +giftware +giftwares +gig +giga +gigabit +gigabits +gigabyte +gigabytes +gigahertz +gigantesque +gigantic +gigantically +gigantism +gigantisms +gigas +gigaton +gigatons +gigawatt +gigawatts +gigged +gigging +giggle +giggled +giggler +gigglers +giggles +gigglier +giggliest +giggling +gigglingly +giggly +gighe +giglet +giglets +giglot +giglots +gigolo +gigolos +gigot +gigots +gigs +gigue +gigues +gilbert +gilberts +gild +gilded +gilder +gilders +gildhall +gildhalls +gilding +gildings +gilds +gill +gilled +giller +gillers +gillie +gillied +gillies +gilling +gillnet +gillnets +gillnetted +gillnetter +gillnetters +gillnetting +gills +gilly +gillyflower +gillyflowers +gillying +gilt +gilthead +giltheads +gilts +gimbal +gimbaled +gimbaling +gimballed +gimballing +gimbals +gimcrack +gimcrackeries +gimcrackery +gimcracks +gimel +gimels +gimlet +gimleted +gimleting +gimlets +gimmal +gimmals +gimme +gimmes +gimmick +gimmicked +gimmicking +gimmickries +gimmickry +gimmicks +gimmicky +gimmie +gimmies +gimp +gimped +gimpier +gimpiest +gimping +gimps +gimpy +gin +gingal +gingall +gingalls +gingals +gingeley +gingeleys +gingeli +gingelies +gingelis +gingelli +gingellies +gingellis +gingelly +gingely +ginger +gingerbread +gingerbreaded +gingerbreads +gingerbready +gingered +gingering +gingerliness +gingerlinesses +gingerly +gingerroot +gingerroots +gingers +gingersnap +gingersnaps +gingery +gingham +ginghams +gingili +gingilis +gingilli +gingillis +gingiva +gingivae +gingival +gingivectomies +gingivectomy +gingivites +gingivitides +gingivitis +gingivitises +gingko +gingkoes +gink +ginkgo +ginkgoes +ginkgos +ginks +ginned +ginner +ginners +ginnier +ginniest +ginning +ginnings +ginny +gins +ginseng +ginsengs +gip +gipon +gipons +gipped +gipper +gippers +gipping +gips +gipsied +gipsies +gipsy +gipsying giraffe +giraffes +giraffish +girandole +girandoles +girasol +girasole +girasoles +girasols +gird +girded +girder +girders +girding +girdle +girdled +girdler +girdlers +girdles +girdling +girds girl +girlfriend +girlfriends +girlhood +girlhoods +girlie +girlies +girlish +girlishly +girlishness +girlishnesses +girls +girly +girn +girned +girning +girns +giro +giron +girons +giros +girosol +girosols +girsh +girshes +girt +girted +girth +girthed +girthing +girths +girting +girts +gisarme +gisarmes +gismo +gismos +gist +gists +git +gitano +gitanos +gits +gittern +gitterns +gittin give +giveable +giveaway +giveaways +giveback +givebacks +given +givens +giver +givers +gives +giving +gizmo +gizmos +gizzard +gizzards +gjetost +gjetosts +glabella +glabellae +glabellar +glabrate +glabrescent +glabrous +glace +glaceed +glaceing +glaces +glacial +glacially +glaciate +glaciated +glaciates +glaciating +glaciation +glaciations +glacier +glaciers +glaciological +glaciologies +glaciologist +glaciologists +glaciology +glacis +glacises glad +gladded +gladden +gladdened +gladdening +gladdens +gladder +gladdest +gladding +glade +glades +gladiate +gladiator +gladiatorial +gladiators +gladier +gladiest +gladiola +gladiolas +gladioli +gladiolus +gladioluses +gladlier +gladliest +gladly +gladness +gladnesses +glads +gladsome +gladsomely +gladsomeness +gladsomenesses +gladsomer +gladsomest +gladstone +gladstones +glady +glaiket +glaikit +glair +glaire +glaired +glaires +glairier +glairiest +glairing +glairs +glairy +glaive +glaived +glaives +glamor +glamorise +glamorised +glamorises +glamorising +glamorization +glamorizations +glamorize +glamorized +glamorizer +glamorizers +glamorizes +glamorizing +glamorous +glamorously +glamorousness +glamorousnesses +glamors +glamour +glamoured +glamouring +glamourize +glamourized +glamourizes +glamourizing +glamourless +glamourous +glamours glance +glanced +glancer +glancers +glances +glancing +glancingly +gland +glandered +glanders +glandes +glandless +glands +glandular +glandularly +glandule +glandules +glans glare +glared +glares +glarier +glariest +glaring +glaringly +glaringness +glaringnesses +glary +glasnost +glasnosts glass +glassblower +glassblowers +glassblowing +glassblowings +glassed +glasses +glassful +glassfuls +glasshouse +glasshouses +glassie +glassier +glassies +glassiest +glassily +glassine +glassines +glassiness +glassinesses +glassing +glassless +glassmaker +glassmakers +glassmaking +glassmakings +glassman +glassmen +glasspaper +glasspapered +glasspapering +glasspapers +glassware +glasswares +glasswork +glassworker +glassworkers +glassworks +glasswort +glassworts +glassy +glaucoma +glaucomas +glauconite +glauconites +glauconitic +glaucous +glaucousness +glaucousnesses +glaze +glazed +glazer +glazers +glazes +glazier +glazieries +glaziers +glaziery +glaziest +glazing +glazings +glazy +gleam +gleamed +gleamer +gleamers +gleamier +gleamiest +gleaming +gleams +gleamy +glean +gleanable +gleaned +gleaner +gleaners +gleaning +gleanings +gleans +gleba +glebae +glebe +glebes +gled +glede +gledes +gleds +glee +gleed +gleeds +gleeful +gleefully +gleefulness +gleefulnesses +gleek +gleeked +gleeking +gleeks +gleeman +gleemen +glees +gleesome +gleet +gleeted +gleetier +gleetiest +gleeting +gleets +gleety +gleg +glegly +glegness +glegnesses +gleization +gleizations +glen +glengarries +glengarry +glenlike +glenoid +glens +gley +gleyed +gleying +gleyings +gleys +glia +gliadin +gliadine +gliadines +gliadins +glial +glias +glib +glibber +glibbest +glibly +glibness +glibnesses +glide +glided +glider +gliders +glides +gliding +gliff +gliffs +glim +glime +glimed +glimes +gliming +glimmer +glimmered +glimmering +glimmerings +glimmers +glimpse +glimpsed +glimpser +glimpsers +glimpses +glimpsing +glims +glint +glinted +glinting +glints +glioblastoma +glioblastomas +glioblastomata +glioma +gliomas +gliomata +glissade +glissaded +glissader +glissaders +glissades +glissading +glissandi +glissando +glissandos +glisten +glistened +glistening +glistens +glister +glistered +glistering +glisters +glitch +glitches +glitchy +glitter +glitterati +glittered +glittering +glitteringly +glitters +glittery +glitz +glitzes +glitzier +glitziest +glitzy +gloam +gloaming +gloamings +gloams +gloat +gloated +gloater +gloaters +gloating +gloatingly +gloats +glob +global +globalise +globalised +globalises +globalising +globalism +globalisms +globalist +globalists +globalization +globalizations +globalize +globalized +globalizes +globalizing +globally +globate +globated +globbier +globbiest +globby globe +globed +globefish +globefishes +globeflower +globeflowers +globes +globin +globing +globins +globoid +globoids +globose +globous +globs +globular +globule +globules +globulin +globulins +glochid +glochidia +glochidium +glochids +glockenspiel +glockenspiels +glogg +gloggs +glom +glomera +glomerular +glomerule +glomerules +glomeruli +glomerulonephritides +glomerulonephritis +glomerulus +glommed +glomming +gloms +glomus +glonoin +glonoins +gloom +gloomed +gloomful +gloomier +gloomiest +gloomily +gloominess +gloominesses +glooming +gloomings +glooms +gloomy +glop +glopped +glopping +gloppy +glops +gloria +glorias +gloried +glories +glorification +glorifications +glorified +glorifier +glorifiers +glorifies +glorify +glorifying +gloriole +glorioles +glorious +gloriously +gloriousness +gloriousnesses glory +glorying +gloss +glossa +glossae +glossal +glossarial +glossaries +glossarist +glossarists +glossary +glossas +glossator +glossators +glossed +glosseme +glossemes +glosser +glossers +glosses +glossier +glossies +glossiest +glossily +glossina +glossinas +glossiness +glossinesses +glossing +glossitis +glossitises +glossographer +glossographers +glossolalia +glossolalias +glossolalist +glossolalists +glossopharyngeal +glossopharyngeals +glossy +glost +glosts +glottal +glottic +glottides +glottis +glottises +glottochronological +glottochronologies +glottochronology +glout +glouted +glouting +glouts glove +gloved +glover +glovers +gloves +gloving +glow +glowed +glower +glowered +glowering +glowers +glowflies +glowfly +glowing +glowingly +glows +glowworm +glowworms +gloxinia +gloxinias +gloze +glozed +glozes +glozing +glucagon +glucagons +glucan +glucans +glucinic +glucinum +glucinums +glucocorticoid +glucocorticoids +glucokinase +glucokinases +gluconate +gluconates +gluconeogeneses +gluconeogenesis +glucosamine +glucosamines +glucose +glucoses +glucosic +glucosidase +glucosidases +glucoside +glucosides +glucosidic +glucuronidase +glucuronidases +glucuronide +glucuronides glue +glued +glueing +gluelike +gluepot +gluepots +gluer +gluers +glues +gluey +glug +glugged +glugging +glugs +gluier +gluiest +gluily +gluing +glum +glume +glumes +glumly +glummer +glummest +glumness +glumnesses +glumpier +glumpiest +glumpily +glumpy +glunch +glunched +glunches +glunching +gluon +gluons +glut +glutamate +glutamates +glutaminase +glutaminases +glutamine +glutamines +glutaraldehyde +glutaraldehydes +glutathione +glutathiones +gluteal +glutei +glutelin +glutelins +gluten +glutenous +glutens +glutethimide +glutethimides +gluteus +glutinous +glutinously +gluts +glutted +glutting +glutton +gluttonies +gluttonous +gluttonously +gluttonousness +gluttonousnesses +gluttons +gluttony +glycan +glycans +glyceraldehyde +glyceraldehydes +glyceric +glyceride +glycerides +glyceridic +glycerin +glycerinate +glycerinated +glycerinates +glycerinating +glycerine +glycerines +glycerins +glycerol +glycerols +glyceryl +glyceryls +glycin +glycine +glycines +glycins +glycogen +glycogeneses +glycogenesis +glycogenolyses +glycogenolysis +glycogenolytic +glycogens +glycol +glycolic +glycolipid +glycolipids +glycols +glycolyses +glycolysis +glycolytic +glyconic +glyconics +glycopeptide +glycopeptides +glycoprotein +glycoproteins +glycosaminoglycan +glycosaminoglycans +glycosidase +glycosidases +glycoside +glycosides +glycosidic +glycosidically +glycosuria +glycosurias +glycosyl +glycosylate +glycosylated +glycosylates +glycosylating +glycosylation +glycosylations +glycosyls +glycyl +glycyls +glyph +glyphic +glyphs +glyptic +glyptics +gnar +gnarl +gnarled +gnarlier +gnarliest +gnarling +gnarls +gnarly +gnarr +gnarred +gnarring +gnarrs +gnars +gnash +gnashed +gnashes +gnashing +gnat +gnatcatcher +gnatcatchers +gnathal +gnathic +gnathion +gnathions +gnathite +gnathites +gnatlike +gnats +gnattier +gnattiest +gnatty +gnaw +gnawable +gnawed +gnawer +gnawers +gnawing +gnawings +gnawn +gnaws +gneiss +gneisses +gneissic +gneissoid +gneissose +gnocchi +gnome +gnomelike +gnomes +gnomic +gnomical +gnomish +gnomist +gnomists +gnomon +gnomonic +gnomons +gnoses +gnosis +gnostic +gnosticism +gnosticisms +gnotobiotic +gnotobiotically +gnu +gnus go +goa +goad +goaded +goading +goadlike +goads goal +goaled +goalie +goalies +goaling +goalkeeper +goalkeepers +goalless +goalmouth +goalmouths +goalpost +goalposts +goals +goaltender +goaltenders +goaltending +goaltendings +goalward +goanna +goannas +goas goat +goatee +goateed +goatees +goatfish +goatfishes +goatherd +goatherds +goatish +goatlike +goats +goatskin +goatskins +goatsucker +goatsuckers +gob +goban +gobang +gobangs +gobans +gobbed +gobbet +gobbets +gobbing +gobble +gobbled +gobbledegook +gobbledegooks +gobbledygook +gobbledygooks +gobbler +gobblers +gobbles +gobbling +gobies +gobioid +gobioids +goblet +goblets +goblin +goblins +gobo +goboes +gobonee +gobony +gobos +gobs +goby god +godchild +godchildren +goddam +goddammed +goddamming +goddamn +goddamned +goddamning +goddamns +goddams +goddaughter +goddaughters +godded +goddess +goddesses +godding +godet +godets +godfather +godfathered +godfathering +godfathers +godforsaken +godhead +godheads +godhood +godhoods +godless +godlessness +godlessnesses +godlier +godliest +godlike +godlikeness +godlikenesses +godlily +godliness +godlinesses +godling +godlings +godly +godmother +godmothers +godown +godowns +godparent +godparents +godroon +godroons +gods +godsend +godsends +godship +godships +godson +godsons +godwit +godwits +goer +goers +goes +goethite +goethites +gofer +gofers +goffer +goffered +goffering +goffers +goggle +goggled +goggler +gogglers +goggles +gogglier +goggliest +goggling +goggly +goglet +goglets +gogo +gogos +going +goings +goiter +goiters +goitre +goitres +goitrogen +goitrogenic +goitrogenicities +goitrogenicity +goitrogens +goitrous +golconda +golcondas gold +goldarn +goldarns +goldbrick +goldbricked +goldbricking +goldbricks +goldbug +goldbugs golden +goldener +goldenest +goldeneye +goldeneyes +goldenly +goldenness +goldennesses +goldenrod +goldenrods +goldenseal +goldenseals +golder +goldest +goldeye +goldeyes +goldfield +goldfields +goldfinch +goldfinches +goldfish +goldfishes +golds +goldsmith +goldsmiths +goldstone +goldstones +goldurn +goldurns +golem +golems golf +golfed +golfer +golfers +golfing +golfings +golfs +golgotha +golgothas +goliard +goliardic +goliards +golliwog +golliwogg +golliwoggs +golliwogs +golly +gollywog +gollywogs +golosh +goloshe +goloshes +gombo +gombos +gombroon +gombroons +gomeral +gomerals +gomerel +gomerels +gomeril +gomerils +gomuti +gomutis +gonad +gonadal +gonadectomies +gonadectomized +gonadectomy +gonadial +gonadic +gonadotrophic +gonadotrophin +gonadotrophins +gonadotropic +gonadotropin +gonadotropins +gonads +gondola +gondolas +gondolier +gondoliers +gone +gonef +gonefs +goneness +gonenesses +goner +goners +gonfalon +gonfalons +gonfanon +gonfanons +gong +gonged +gonging +gonglike +gongoristic +gongs +gonia +gonidia +gonidial +gonidic +gonidium +gonif +goniff +goniffs +gonifs +goniometer +goniometers +goniometric +goniometries +goniometry +gonion +gonium +gonococcal +gonococci +gonococcus +gonocyte +gonocytes +gonof +gonofs +gonoph +gonophore +gonophores +gonophs +gonopore +gonopores +gonorrhea +gonorrheal +gonorrheas +gonzo +goo +goober +goobers good +goodby +goodbye +goodbyes +goodbys +goodie +goodies +goodish +goodlier +goodliest +goodly +goodman +goodmen +goodness +goodnesses goods +goodwife +goodwill +goodwilled +goodwills +goodwives +goody +gooey +gooeyness +gooeynesses +goof +goofball +goofballs +goofed +goofier +goofiest +goofily +goofiness +goofinesses +goofing +goofs +goofy +googlies +googly +googol +googolplex +googolplexes +googols +gooier +gooiest +gook +gooks +gooky +goombah +goombahs +goombay +goombays +goon +gooney +gooneys +goonie +goonies +goons +goony +goop +goopier +goopiest +goops +goopy +gooral +goorals +goos +goosander +goosanders goose +gooseberries +gooseberry +goosed +goosefish +goosefishes +gooseflesh +goosefleshes +goosefoot +goosefoots +goosegrass +goosegrasses +gooseneck +goosenecked +goosenecks +gooses +goosey +goosier +goosiest +goosing +goosy +gopher +gophers +gor +goral +gorals +gorbellies +gorbelly +gorblimy +gorcock +gorcocks +gore +gored +gores +gorge +gorged +gorgedly +gorgeous +gorgeously +gorgeousness +gorgeousnesses +gorger +gorgerin +gorgerins +gorgers +gorges +gorget +gorgeted +gorgets +gorging +gorgon +gorgonian +gorgonians +gorgonize +gorgonized +gorgonizes +gorgonizing +gorgons +gorhen +gorhens +gorier +goriest +gorilla +gorillas +gorily +goriness +gorinesses +goring +gormand +gormandise +gormandised +gormandises +gormandising +gormandize +gormandized +gormandizer +gormandizers +gormandizes +gormandizing +gormands +gormless +gorp +gorps +gorse +gorses +gorsier +gorsiest +gorsy +gory +gosh +goshawk +goshawks +gosling +goslings +gospel +gospeler +gospelers +gospeller +gospellers +gospels +gosport +gosports +gossamer +gossamers +gossamery +gossan +gossans +gossip +gossiped +gossiper +gossipers +gossiping +gossipmonger +gossipmongers +gossipped +gossipping +gossipries +gossipry +gossips +gossipy +gossoon +gossoons +gossypol +gossypols +got +gothic +gothically +gothicize +gothicized +gothicizes +gothicizing +gothics +gothite +gothites +gotten +gouache +gouaches +gouge +gouged +gouger +gougers +gouges +gouging +goulash +goulashes +gourami +gouramies +gouramis +gourd +gourde +gourdes +gourds +gourmand +gourmandise +gourmandises +gourmandism +gourmandisms +gourmandize +gourmandized +gourmandizes +gourmandizing +gourmands +gourmet +gourmets +gout +goutier +goutiest +goutily +gouts +gouty govern +governable +governance +governances +governed +governess +governesses +governessy +governing government +governmental +governmentalism +governmentalisms +governmentalist +governmentalists +governmentalize +governmentalized +governmentalizes +governmentalizing +governmentally +governmentese +governmenteses +governments +governor +governorate +governorates +governors +governorship +governorships +governs +gowan +gowaned +gowans +gowany +gowd +gowds +gowk +gowks +gown +gowned +gowning +gowns +gownsman +gownsmen +gox +goxes +goy +goyim +goyish +goys +graal +graals +grab +grabbed +grabber +grabbers +grabbier +grabbiest +grabbing +grabble +grabbled +grabbler +grabblers +grabbles +grabbling +grabby +graben +grabens +grabs +grace +graced +graceful +gracefuller +gracefullest +gracefully +gracefulness +gracefulnesses +graceless +gracelessly +gracelessness +gracelessnesses +graces +gracile +gracileness +gracilenesses +graciles +gracilis +gracilities +gracility +gracing +gracioso +graciosos +gracious +graciously +graciousness +graciousnesses +grackle +grackles +grad +gradable +gradate +gradated +gradates +gradating +gradation +gradational +gradationally +gradations grade +graded +gradeless +grader +graders +grades +gradient +gradients +gradin +gradine +gradines +grading +gradins +gradiometer +gradiometers +grads gradual +gradualism +gradualisms +gradualist +gradualists +gradually +gradualness +gradualnesses +graduals +graduand +graduands graduate +graduated +graduates +graduating graduation +graduations +graduator +graduators +gradus +graduses +graecize +graecized +graecizes +graecizing +graffiti +graffitist +graffitists +graffito +graft +graftage +graftages +grafted +grafter +grafters +grafting +grafts +graham +grahams +grail +grails grain +grained +grainer +grainers +grainfield +grainfields +grainier +grainiest +graininess +graininesses +graining +grains +grainy gram +grama +gramaries +gramary +gramarye +gramaryes +gramas +gramercies +gramercy +gramicidin +gramicidins +gramineous +graminivorous grammar +grammarian +grammarians +grammars +grammatical +grammaticalities +grammaticality +grammatically +grammaticalness +grammaticalnesses +gramme +grammes +gramophone +gramophones +gramp +gramps +grampus +grampuses +grams +gran +grana +granadilla +granadillas +granaries +granary grand +grandad +grandaddies +grandaddy +grandads +grandam +grandame +grandames +grandams +grandaunt +grandaunts +grandbabies +grandbaby grandchild +grandchildren +granddad +granddaddies +granddaddy +granddads +granddam +granddams granddaughter +granddaughters +grandee +grandees +grander +grandest +grandeur +grandeurs grandfather +grandfathered +grandfathering +grandfatherly +grandfathers +grandiflora +grandiflorae +grandifloras +grandiloquence +grandiloquences +grandiloquent +grandiloquently +grandiose +grandiosely +grandioseness +grandiosenesses +grandiosities +grandiosity +grandioso +grandkid +grandkids +grandly grandma +grandmas +grandmaster +grandmasters grandmother +grandmotherly +grandmothers +grandnephew +grandnephews +grandness +grandnesses +grandniece +grandnieces grandpa +grandparent +grandparental +grandparenthood +grandparenthoods grandparents +grandpas +grands +grandsir +grandsire +grandsires +grandsirs grandson +grandsons +grandstand +grandstanded +grandstander +grandstanders +grandstanding +grandstands +granduncle +granduncles +grange +granger +grangerism +grangerisms +grangers +granges +granita +granitas +granite +granitelike +granites +graniteware +granitewares +granitic +granitoid +granivorous +grannie +grannies granny +granodiorite +granodiorites +granodioritic +granola +granolas +granolithic +granophyre +granophyres +granophyric +grans +grant +grantable +granted +grantee +grantees +granter +granters +granting +grantor +grantors +grants +grantsman +grantsmanship +grantsmanships +grantsmen +granular +granularities +granularity +granulate +granulated +granulates +granulating +granulation +granulations +granulator +granulators +granule +granules +granulite +granulites +granulitic +granulocyte +granulocytes +granulocytic +granulocytopoieses +granulocytopoiesis +granuloma +granulomas +granulomata +granulomatous +granulose +granuloses +granulosis +granum grape +grapefruit +grapefruits +grapelike +graperies +grapery +grapes +grapeshot +grapevine +grapevines +grapey graph +graphed +grapheme +graphemes +graphemic +graphemically +graphemics +graphic +graphical +graphically +graphicness +graphicnesses +graphics +graphing +graphite +graphites +graphitic +graphitizable +graphitization +graphitizations +graphitize +graphitized +graphitizes +graphitizing +grapholect +grapholects +graphological +graphologies +graphologist +graphologists +graphology +graphs +grapier +grapiest +grapiness +grapinesses +graplin +grapline +graplines +graplins +grapnel +grapnels +grappa +grappas +grapple +grappled +grappler +grapplers +grapples +grappling +grapplings +graptolite +graptolites +grapy grasp +graspable +grasped +grasper +graspers +grasping +graspingly +graspingness +graspingnesses +grasps grass +grassed +grasses +grasshopper +grasshoppers +grassier +grassiest +grassily +grassing +grassland +grasslands +grassless +grasslike +grassroot +grassroots +grassy +grat +grate +grated grateful +gratefuller +gratefullest +gratefully +gratefulness +gratefulnesses +grater +graters +grates +graticule +graticules +gratification +gratifications +gratified +gratifies +gratify +gratifying +gratifyingly +gratin +gratine +gratinee +gratineed +gratineeing +gratinees +grating +gratingly +gratings +gratins +gratis +gratitude +gratitudes +gratuities +gratuitous +gratuitously +gratuitousness +gratuitousnesses +gratuity +gratulate +gratulated +gratulates +gratulating +gratulation +gratulations +gratulatory +graupel +graupels +gravamen +gravamens +gravamina +grave +graved +gravel +graveled +graveless +graveling +gravelled +gravelling +gravelly +gravels +gravely +graven +graveness +gravenesses +graver +gravers +graves +graveside +gravesides +gravest +gravestone +gravestones +graveyard +graveyards +gravid +gravida +gravidae +gravidas +gravidities +gravidity +gravidly +gravies +gravimeter +gravimeters +gravimetric +gravimetrically +gravimetries +gravimetry +graving +gravitas +gravitases +gravitate +gravitated +gravitates +gravitating +gravitation +gravitational +gravitationally +gravitations +gravitative +gravities +graviton +gravitons gravity +gravlaks +gravlax +gravure +gravures +gravy gray +grayback +graybacks +graybeard +graybeards +grayed +grayer +grayest +grayfish +grayfishes +graying +grayish +graylag +graylags +grayling +graylings +grayly +graymail +graymails +grayness +graynesses +grayout +grayouts +grays +graywacke +graywackes +grazable +graze +grazeable +grazed +grazer +grazers +grazes +grazier +graziers +grazing +grazings +grazioso +grease +greaseball +greaseballs +greased +greaseless +greasepaint +greasepaints +greaseproof +greaseproofs +greaser +greasers +greases +greasewood +greasewoods +greasier +greasiest +greasily +greasiness +greasinesses +greasing +greasy great +greatcoat +greatcoats +greaten +greatened +greatening +greatens +greater +greatest +greathearted +greatheartedly +greatheartedness +greatheartednesses +greatly +greatness +greatnesses +greats +greave +greaved +greaves +grebe +grebes +grecianize +grecianized +grecianizes +grecianizing +grecize +grecized +grecizes +grecizing +gree +greed +greedier +greediest +greedily +greediness +greedinesses +greeds greedy +greegree +greegrees +greeing +greek green +greenback +greenbacker +greenbackers +greenbackism +greenbackisms +greenbacks +greenbelt +greenbelts +greenbrier +greenbriers +greenbug +greenbugs +greened +greener +greeneries +greenery +greenest +greenfinch +greenfinches +greenflies +greenfly +greengage +greengages greengrocer +greengroceries +greengrocers +greengrocery +greenhead +greenheads +greenheart +greenhearts +greenhorn +greenhorns +greenhouse +greenhouses +greenie +greenier +greenies +greeniest +greening +greenings +greenish +greenishness +greenishnesses +greenkeeper +greenkeepers +greenlet +greenlets +greenling +greenlings +greenly +greenmail +greenmailed +greenmailer +greenmailers +greenmailing +greenmails +greenness +greennesses +greenockite +greenockites +greenroom +greenrooms +greens +greensand +greensands +greenshank +greenshanks +greensick +greensickness +greensicknesses +greenskeeper +greenskeepers +greenstone +greenstones +greenstuff +greenstuffs +greensward +greenswards +greenth +greenths +greenway +greenways +greenwing +greenwings +greenwood +greenwoods +greeny +grees greet +greeted +greeter +greeters greeting +greetings +greets +gregarine +gregarines +gregarious +gregariously +gregariousness +gregariousnesses +grego +gregos +greige +greiges +greisen +greisens +gremial +gremials +gremlin +gremlins +gremmie +gremmies +gremmy +grenade +grenades +grenadier +grenadiers +grenadine +grenadines +grew +grewsome +grewsomer +grewsomest grey +greyed +greyer +greyest +greyhen +greyhens +greyhound +greyhounds +greying +greyish +greylag +greylags +greyly +greyness +greynesses +greys +gribble +gribbles +grid +gridder +gridders +griddle +griddlecake +griddlecakes +griddled +griddles +griddling +gride +grided +grides +griding +gridiron +gridirons +gridlock +gridlocked +gridlocking +gridlocks +grids +grief +griefs +grievance +grievances +grievant +grievants +grieve +grieved +griever +grievers +grieves +grieving +grievous +grievously +grievousness +grievousnesses +griff +griffe +griffes +griffin +griffins +griffon +griffons +griffs +grift +grifted +grifter +grifters +grifting +grifts +grig +grigri +grigris +grigs grill +grillade +grillades +grillage +grillages +grille +grilled +griller +grillers +grilles +grilling +grillroom +grillrooms +grills +grillwork +grillworks +grilse +grilses +grim +grimace +grimaced +grimacer +grimacers +grimaces +grimacing +grimalkin +grimalkins +grime +grimed +grimes +grimier +grimiest +grimily +griminess +griminesses +griming +grimly +grimmer +grimmest +grimness +grimnesses +grimy +grin +grinch +grinches +grind +grinded +grinder +grinderies +grinders +grindery +grinding +grindingly +grinds +grindstone +grindstones +gringo +gringos +grinned +grinner +grinners +grinning +grinningly +grins +griot +griots +grip +gripe +griped +griper +gripers +gripes +gripey +gripier +gripiest +griping +gripman +gripmen +grippe +gripped +gripper +grippers +grippes +grippier +grippiest +gripping +grippingly +gripple +grippy +grips +gripsack +gripsacks +gript +gripy +grisaille +grisailles +griseofulvin +griseofulvins +griseous +grisette +grisettes +griskin +griskins +grislier +grisliest +grisliness +grislinesses +grisly +grison +grisons +grist +gristle +gristles +gristlier +gristliest +gristliness +gristlinesses +gristly +gristmill +gristmills +grists +grit +grith +griths +grits +gritted +grittier +grittiest +grittily +grittiness +grittinesses +gritting +gritty +grivet +grivets +grizzle +grizzled +grizzler +grizzlers +grizzles +grizzlier +grizzlies +grizzliest +grizzling +grizzly +groan +groaned +groaner +groaners +groaning +groans +groat +groats grocer +groceries +grocers grocery +grog +groggeries +groggery +groggier +groggiest +groggily +grogginess +grogginesses +groggy +grogram +grograms +grogs +grogshop +grogshops +groin +groined +groining +groins +grommet +grommets +gromwell +gromwells +groom +groomed +groomer +groomers +grooming +grooms +groomsman +groomsmen +groove +grooved +groover +groovers +grooves +groovier +grooviest +grooving +groovy +grope +groped +groper +gropers +gropes +groping +grosbeak +grosbeaks +groschen +grosgrain +grosgrains +gross +grossed +grosser +grossers +grosses +grossest +grossing +grossly +grossness +grossnesses +grossular +grossularite +grossularites +grossulars +grosz +grosze +groszy +grot +grotesque +grotesquely +grotesqueness +grotesquenesses +grotesquerie +grotesqueries +grotesquery +grotesques +grots +grottier +grottiest +grotto +grottoes +grottos +grotty +grouch +grouched +grouches +grouchier +grouchiest +grouchily +grouchiness +grouchinesses +grouching +grouchy ground +groundbreaker +groundbreakers +groundbreaking +groundburst +groundbursts +grounded +grounder +grounders +groundfish +groundfishes +groundhog +groundhogs +grounding +groundings +groundless +groundlessly +groundlessness +groundlessnesses +groundling +groundlings +groundmass +groundmasses +groundnut +groundnuts +groundout +groundouts +grounds +groundsel +groundsels +groundsheet +groundsheets +groundskeeper +groundskeepers +groundsman +groundsmen +groundswell +groundswells +groundwater +groundwaters +groundwood +groundwoods +groundwork +groundworks group +groupable +grouped +grouper +groupers +groupie +groupies +grouping +groupings +groupoid +groupoids +groups +groupthink +groupthinks +groupuscule +groupuscules +grouse +groused +grouser +grousers +grouses +grousing +grout +grouted +grouter +grouters +groutier +groutiest +grouting +grouts +grouty +grove +groved +grovel +groveled +groveler +grovelers +groveling +grovelingly +grovelled +grovelling +grovels +groves grow +growable +grower +growers +growing +growingly +growl +growled +growler +growlers +growlier +growliest +growliness +growlinesses +growling +growlingly +growls +growly +grown +grownup +grownups +grows growth +growthier +growthiest +growthiness +growthinesses +growths +growthy +groyne +groynes +grub +grubbed +grubber +grubbers +grubbier +grubbiest +grubbily +grubbiness +grubbinesses +grubbing +grubby +grubs +grubstake +grubstaked +grubstaker +grubstakers +grubstakes +grubstaking +grubworm +grubworms +grudge +grudged +grudger +grudgers +grudges +grudging +grudgingly +grue +gruel +grueled +grueler +gruelers +grueling +gruelingly +gruelings +gruelled +grueller +gruellers +gruelling +gruellings +gruels +grues +gruesome +gruesomely +gruesomeness +gruesomenesses +gruesomer +gruesomest +gruff +gruffed +gruffer +gruffest +gruffier +gruffiest +gruffily +gruffing +gruffish +gruffly +gruffness +gruffnesses +gruffs +gruffy +grugru +grugrus +gruiform +grum +grumble +grumbled +grumbler +grumblers +grumbles +grumbling +grumblingly +grumbly +grume +grumes +grummer +grummest +grummet +grummets +grumose +grumous +grump +grumped +grumphie +grumphies +grumphy +grumpier +grumpiest +grumpily +grumpiness +grumpinesses +grumping +grumpish +grumps +grumpy +grunge +grunges +grungier +grungiest +grungy +grunion +grunions +grunt +grunted +grunter +grunters +grunting +gruntle +gruntled +gruntles +gruntling +grunts +grushie +grutch +grutched +grutches +grutching +grutten +gruyere +gruyeres +gryphon +gryphons +guacamole +guacamoles +guacharo +guacharoes +guacharos +guaco +guacos +guaiac +guaiacol +guaiacols +guaiacs +guaiacum +guaiacums +guaiocum +guaiocums +guan +guanaco +guanacos +guanase +guanases +guanay +guanays +guanethidine +guanethidines +guanidin +guanidine +guanidines +guanidins +guanin +guanine +guanines +guanins +guano +guanos +guanosine +guanosines +guans +guar +guarani +guaranies +guaranis guarantee +guaranteed +guaranteeing +guarantees +guarantied +guaranties +guarantor +guarantors +guaranty +guarantying guard +guardant +guardants +guarded +guardedly +guardedness +guardednesses +guarder +guarders +guardhouse +guardhouses +guardian +guardians +guardianship +guardianships +guarding +guardrail +guardrails +guardroom +guardrooms +guards +guardsman +guardsmen +guars +guava +guavas +guayabera +guayaberas +guayule +guayules +gubernatorial +guck +gucks +gude +gudes +gudgeon +gudgeoned +gudgeoning +gudgeons +guenon +guenons +guerdon +guerdoned +guerdoning +guerdons +gueridon +gueridons +guerilla +guerillas +guernsey +guernseys +guerrilla +guerrillas guess +guessable +guessed +guesser +guessers +guesses +guessing +guesstimate +guesstimated +guesstimates +guesstimating +guesswork +guessworks guest +guested +guesthouse +guesthouses +guesting +guests +guff +guffaw +guffawed +guffawing +guffaws +guffs +guggle +guggled +guggles +guggling +guglet +guglets +guid +guidable guidance +guidances guide +guidebook +guidebooks +guided +guideline +guidelines +guidepost +guideposts +guider +guiders +guides +guideway +guideways +guiding +guidon +guidons +guids +guidwillie +guild +guilder +guilders +guildhall +guildhalls +guilds +guildship +guildships +guildsman +guildsmen +guile +guiled +guileful +guilefully +guilefulness +guilefulnesses +guileless +guilelessly +guilelessness +guilelessnesses +guiles +guiling +guillemet +guillemets +guillemot +guillemots +guilloche +guilloches +guillotine +guillotined +guillotines +guillotining +guilt +guiltier +guiltiest +guiltily +guiltiness +guiltinesses +guiltless +guiltlessly +guiltlessness +guiltlessnesses +guilts guilty +guimpe +guimpes +guinea +guineas +guipure +guipures +guiro +guiros +guisard +guisards +guise +guised +guises +guising guitar +guitarfish +guitarfishes +guitarist +guitarists +guitars +guitguit +guitguits +gul +gulag +gulags +gular +gulch +gulches +gulden +guldens +gules +gulf +gulfed +gulfier +gulfiest +gulfing +gulflike +gulfs +gulfweed +gulfweeds +gulfy +gull +gullable +gullably +gulled +gullet +gullets +gulley +gulleys +gullibilities +gullibility +gullible +gullibly +gullied +gullies +gulling +gulls +gully +gullying +gulosities +gulosity +gulp +gulped +gulper +gulpers +gulpier +gulpiest +gulping +gulps +gulpy +guls +gum +gumbo +gumboil +gumboils +gumboot +gumboots +gumbos +gumbotil +gumbotils +gumdrop +gumdrops +gumless +gumlike +gumma +gummas +gummata +gummatous +gummed +gummer +gummers +gummier +gummiest +gumminess +gumminesses +gumming +gummite +gummites +gummose +gummoses +gummosis +gummous +gummy +gumption +gumptions +gums +gumshoe +gumshoed +gumshoeing +gumshoes +gumtree +gumtrees +gumweed +gumweeds +gumwood +gumwoods gun +gunboat +gunboats +guncotton +guncottons +gundog +gundogs +gunfight +gunfighter +gunfighters +gunfighting +gunfights +gunfire +gunfires +gunflint +gunflints +gunfought +gunite +gunites +gunk +gunkhole +gunkholed +gunkholes +gunkholing +gunks +gunky +gunless +gunlock +gunlocks +gunman +gunmen +gunmetal +gunmetals +gunned +gunnel +gunnels +gunnen +gunner +gunneries +gunners +gunnery +gunnies +gunning +gunnings +gunny +gunnybag +gunnybags +gunnysack +gunnysacks +gunpaper +gunpapers +gunplay +gunplays +gunpoint +gunpoints +gunpowder +gunpowders +gunroom +gunrooms +gunrunner +gunrunners +gunrunning +gunrunnings +guns +gunsel +gunsels +gunship +gunships +gunshot +gunshots +gunslinger +gunslingers +gunslinging +gunslingings +gunsmith +gunsmithing +gunsmithings +gunsmiths +gunstock +gunstocks +gunwale +gunwales +guppies +guppy +gurge +gurged +gurges +gurging +gurgle +gurgled +gurgles +gurglet +gurglets +gurgling +gurnard +gurnards +gurnet +gurnets +gurney +gurneys +gurries +gurry +gursh +gurshes +guru +gurus +guruship +guruships +gush +gushed +gusher +gushers +gushes +gushier +gushiest +gushily +gushiness +gushinesses +gushing +gushingly +gushy +gusset +gusseted +gusseting +gussets +gussie +gussied +gussies +gussy +gussying +gust +gustable +gustables +gustation +gustations +gustatorily +gustatory +gusted +gustier +gustiest +gustily +gustiness +gustinesses +gusting +gustless +gusto +gustoes +gusts +gusty +gut +gutbucket +gutbuckets +gutless +gutlessness +gutlessnesses +gutlike +guts +gutsier +gutsiest +gutsily +gutsiness +gutsinesses +gutsy +gutta +guttae +guttate +guttated +guttation +guttations +gutted +gutter +guttered +guttering +gutterings +gutters +guttersnipe +guttersnipes +guttersnipish +guttery +guttier +guttiest +gutting +guttle +guttled +guttler +guttlers +guttles +guttling +guttural +gutturalism +gutturalisms +gutturals +gutty +guv +guvs +guy +guyed +guying +guyline +guylines +guyot +guyots +guys +guzzle +guzzled +guzzler +guzzlers +guzzles +guzzling +gweduc +gweduck +gweducks +gweducs +gybe +gybed +gybes +gybing gym +gymkhana +gymkhanas +gymnasia gymnasium +gymnasiums +gymnast +gymnastic +gymnastically gymnastics +gymnasts +gymnosophist +gymnosophists +gymnosperm +gymnospermies +gymnospermous +gymnosperms +gymnospermy +gyms +gynaecea +gynaeceum +gynaecia +gynaecium +gynaecologies +gynaecology +gynandries +gynandromorph +gynandromorphic +gynandromorphies +gynandromorphism +gynandromorphisms +gynandromorphs +gynandromorphy +gynandrous +gynandry +gynarchies +gynarchy +gynecia +gynecic +gynecium +gynecocracies +gynecocracy +gynecocratic +gynecoid +gynecologic +gynecological +gynecologies +gynecologist +gynecologists +gynecology +gynecomastia +gynecomastias +gyniatries +gyniatry +gynoecia +gynoecium +gynogeneses +gynogenesis +gynogenetic +gynophore +gynophores +gyp +gyplure +gyplures +gypped +gypper +gyppers +gypping +gyps +gypseian +gypseous +gypsied +gypsies +gypsiferous +gypsophila +gypsophilas +gypster +gypsters +gypsum +gypsums +gypsy +gypsydom +gypsydoms +gypsying +gypsyish +gypsyism +gypsyisms +gyral +gyrally +gyrase +gyrases +gyrate +gyrated +gyrates +gyrating +gyration +gyrational +gyrations +gyrator +gyrators +gyratory +gyre +gyred +gyrene +gyrenes +gyres +gyrfalcon +gyrfalcons +gyri +gyring +gyro +gyrocompass +gyrocompasses +gyrofrequencies +gyrofrequency +gyroidal +gyromagnetic +gyron +gyrons +gyroplane +gyroplanes +gyros +gyroscope +gyroscopes +gyroscopic +gyroscopically +gyrose +gyrostabilizer +gyrostabilizers +gyrostat +gyrostats +gyrus +gyve +gyved +gyves +gyving +ha +haaf +haafs +haar +haars +habanera +habaneras +habdalah +habdalahs +haberdasher +haberdasheries +haberdashers +haberdashery +habergeon +habergeons +habile +habiliment +habiliments +habilitate +habilitated +habilitates +habilitating +habilitation +habilitations habit +habitabilities +habitability +habitable +habitableness +habitablenesses +habitably +habitan +habitans +habitant +habitants +habitat +habitation +habitations +habitats +habited +habiting +habits +habitual +habitually +habitualness +habitualnesses +habituate +habituated +habituates +habituating +habituation +habituations +habitude +habitudes +habitue +habitues +habitus +haboob +haboobs +habu +habus +hacek +haceks +hacendado +hacendados +hachure +hachured +hachures +hachuring +hacienda +haciendado +haciendados +haciendas +hack +hackamore +hackamores +hackberries +hackberry +hackbut +hackbuts +hacked +hackee +hackees +hacker +hackers +hackie +hackies +hacking +hackle +hackled +hackler +hacklers +hackles +hacklier +hackliest +hackling +hackly +hackman +hackmatack +hackmatacks +hackmen +hackney +hackneyed +hackneying +hackneys +hacks +hacksaw +hacksaws +hackwork +hackworks +had +hadal +hadarim +haddest +haddock +haddocks +hade +haded +hades +hading +hadith +hadiths +hadj +hadjee +hadjees +hadjes +hadji +hadjis +hadron +hadronic +hadrons +hadrosaur +hadrosaurs +hadst +hae +haecceities +haecceity +haed +haeing +haem +haemal +haematal +haematic +haematics +haematin +haematins +haematite +haematites +haemic +haemin +haemins +haemoid +haems +haen +haeredes +haeres +haes +haet +haets +haffet +haffets +haffit +haffits +hafis +hafiz +hafnium +hafniums +haft +haftara +haftarah +haftarahs +haftaras +haftarot +haftaroth +hafted +hafter +hafters +hafting +haftorah +haftorahs +haftorot +haftoroth +hafts +hag +hagadic +hagadist +hagadists +hagberries +hagberry +hagborn +hagbush +hagbushes +hagbut +hagbuts +hagdon +hagdons +hagfish +hagfishes +haggada +haggadah +haggadahs +haggadas +haggadic +haggadist +haggadistic +haggadists +haggadot +haggadoth +haggard +haggardly +haggardness +haggardnesses +haggards +hagged +hagging +haggis +haggises +haggish +haggle +haggled +haggler +hagglers +haggles +haggling +hagiographer +hagiographers +hagiographic +hagiographical +hagiographies +hagiography +hagiologic +hagiological +hagiologies +hagiology +hagioscope +hagioscopes +hagioscopic +hagridden +hagride +hagrides +hagriding +hagrode +hags +hah +haha +hahas +hahnium +hahniums +hahs +haik +haika +haiks +haiku +hail +hailed +hailer +hailers +hailing +hails +hailstone +hailstones +hailstorm +hailstorms hair +hairball +hairballs +hairband +hairbands +hairbreadth +hairbreadths +hairbrush +hairbrushes +haircap +haircaps +haircloth +haircloths haircut +haircuts +haircutter +haircutters +haircutting +haircuttings +hairdo +hairdos +hairdresser +hairdressers +hairdressing +hairdressings +haired +hairier +hairiest +hairiness +hairinesses +hairless +hairlessness +hairlessnesses +hairlike +hairline +hairlines +hairlock +hairlocks +hairnet +hairnets +hairpiece +hairpieces +hairpin +hairpins +hairs +hairsbreadth +hairsbreadths +hairsplitter +hairsplitters +hairsplitting +hairsplittings +hairspring +hairsprings +hairstreak +hairstreaks +hairstyle +hairstyles +hairstyling +hairstylings +hairstylist +hairstylists +hairwork +hairworks +hairworm +hairworms +hairy +haj +hajes +haji +hajis +hajj +hajjes +hajji +hajjis +hake +hakeem +hakeems +hakes +hakim +hakims +halacha +halachas +halachot +halachoth +halakah +halakahs +halakha +halakhas +halakhot +halakic +halakist +halakists +halakoth +halala +halalah +halalahs +halalas +halation +halations +halavah +halavahs +halazone +halazones +halberd +halberds +halbert +halberts +halcyon +halcyons +hale +haled +haleness +halenesses +haler +halers +haleru +hales +halest half +halfback +halfbacks +halfbeak +halfbeaks +halfhearted +halfheartedly +halfheartedness +halfheartednesses +halflife +halflives +halfness +halfnesses +halfpence +halfpennies +halfpenny +halftime +halftimes +halftone +halftones +halfway +halibut +halibuts +halid +halide +halides +halidom +halidome +halidomes +halidoms +halids +haling +halite +halites +halitoses +halitosis +halitus +halituses hall +hallah +hallahs +hallel +hallels +hallelujah +hallelujahs +halliard +halliards +hallmark +hallmarked +hallmarking +hallmarks +hallo +halloa +halloaed +halloaing +halloas +halloed +halloes +halloing +halloo +hallooed +hallooing +halloos +hallos +hallot +halloth +hallow +hallowed +hallower +hallowers +hallowing +hallows +halls +halluces +hallucinate +hallucinated +hallucinates +hallucinating +hallucination +hallucinations +hallucinator +hallucinators +hallucinatory +hallucinogen +hallucinogenic +hallucinogenics +hallucinogens +hallucinoses +hallucinosis +hallucinosises +hallux +hallway +hallways +halm +halma +halmas +halms +halo +halocarbon +halocarbons +halocline +haloclines +haloed +haloes +halogen +halogenate +halogenated +halogenates +halogenating +halogenation +halogenations +halogenous +halogens +halogeton +halogetons +haloid +haloids +haloing +halolike +halomorphic +haloperidol +haloperidols +halophile +halophiles +halophilic +halophyte +halophytes +halophytic +halos +halothane +halothanes +halt +halted +halter +halterbreak +halterbreaking +halterbreaks +halterbroke +halterbroken +haltere +haltered +halteres +haltering +halters +halting +haltingly +haltless +halts +halutz +halutzim +halva +halvah +halvahs +halvas +halve +halved +halvers +halves +halving +halyard +halyards ham +hamada +hamadas +hamadryad +hamadryades +hamadryads +hamal +hamals +hamantasch +hamantaschen +hamartia +hamartias +hamate +hamates +hamaul +hamauls +hambone +hamboned +hambones +hamboning +hamburg hamburger +hamburgers +hamburgs +hame +hames +hamlet +hamlets +hammada +hammadas +hammal +hammals +hammed hammer +hammered +hammerer +hammerers +hammerhead +hammerheads +hammering +hammerless +hammerlock +hammerlocks +hammers +hammertoe +hammertoes +hammier +hammiest +hammily +hamminess +hamminesses +hamming +hammock +hammocks +hammy +hamper +hampered +hamperer +hamperers +hampering +hampers +hams +hamster +hamsters +hamstring +hamstringing +hamstrings +hamstrung +hamular +hamulate +hamuli +hamulose +hamulous +hamulus +hamza +hamzah +hamzahs +hamzas +hanaper +hanapers +hance +hances hand handbag +handbags +handball +handballs +handbarrow +handbarrows +handbasket +handbaskets +handbell +handbells +handbill +handbills +handblown +handbook +handbooks +handbreadth +handbreadths +handcar +handcars +handcart +handcarts +handclasp +handclasps +handcraft +handcrafted +handcrafting +handcrafts +handcraftsman +handcraftsmanship +handcraftsmanships +handcraftsmen +handcuff +handcuffed +handcuffing +handcuffs +handed +handedness +handednesses +handfast +handfasted +handfasting +handfastings +handfasts handful +handfuls +handgrip +handgrips +handgun +handguns +handheld +handhelds +handhold +handholding +handholdings +handholds +handicap +handicapped +handicapper +handicappers +handicapping +handicaps +handicraft +handicrafter +handicrafters +handicrafts +handicraftsman +handicraftsmen +handier +handiest +handily +handiness +handinesses +handing +handiwork +handiworks handkerchief +handkerchiefs +handkerchieves handle +handleable +handlebar +handlebars +handled +handleless +handler +handlers +handles +handless +handlike +handling +handlings +handlist +handlists +handloom +handlooms +handmade +handmaid +handmaiden +handmaidens +handmaids +handoff +handoffs +handout +handouts +handover +handovers +handpick +handpicked +handpicking +handpicks +handpress +handpresses +handprint +handprints +handrail +handrailing +handrailings +handrails +hands +handsaw +handsaws +handsbreadth +handsbreadths +handsel +handseled +handseling +handselled +handselling +handsels +handset +handsets +handsewn +handsful +handshake +handshakes handsome +handsomely +handsomeness +handsomenesses +handsomer +handsomest +handspike +handspikes +handspring +handsprings +handstand +handstands +handwheel +handwheels +handwork +handworker +handworkers +handworks +handwoven +handwringer +handwringers +handwringing +handwringings +handwrit +handwrite +handwrites handwriting +handwritings +handwritten +handwrote +handwrought handy +handyman +handymen +handyperson +handypersons hang +hangable +hangar +hangared +hangaring +hangars +hangbird +hangbirds +hangdog +hangdogs +hanged +hanger +hangers +hangfire +hangfires +hanging +hangings +hangman +hangmen +hangnail +hangnails +hangnest +hangnests +hangout +hangouts +hangover +hangovers +hangs +hangtag +hangtags +hangul +hangup +hangups +haniwa +hank +hanked +hanker +hankered +hankerer +hankerers +hankering +hankers +hankie +hankies +hanking +hanks +hanky +hansa +hansas +hanse +hansel +hanseled +hanseling +hanselled +hanselling +hansels +hanses +hansom +hansoms +hant +hanted +hanting +hantle +hantles +hants +hanuman +hanumans +hao +haole +haoles +hap +hapax +hapaxes +haphazard +haphazardly +haphazardness +haphazardnesses +haphazardries +haphazardry +haphazards +haphtara +haphtaras +haphtarot +haphtaroth +hapless +haplessly +haplessness +haplessnesses +haplite +haplites +haploid +haploidies +haploids +haploidy +haplologies +haplology +haplont +haplontic +haplonts +haplopia +haplopias +haploses +haplosis +haplotype +haplotypes +haply +happed happen +happenchance +happenchances +happened +happening +happenings +happens +happenstance +happenstances +happier +happiest +happily happiness +happinesses +happing happy +haps +hapten +haptene +haptenes +haptenic +haptens +haptic +haptical +haptoglobin +haptoglobins +harangue +harangued +haranguer +haranguers +harangues +haranguing +harass +harassed +harasser +harassers +harasses +harassing +harassment +harassments +harbinger +harbingered +harbingering +harbingers harbor +harborage +harborages +harbored +harborer +harborers +harborful +harborfuls +harboring +harborless +harbormaster +harbormasters +harbors +harborside harbour +harboured +harbouring +harbours hard +hardback +hardbacks +hardball +hardballs +hardboard +hardboards +hardboot +hardboots +hardbound +hardcase +hardcore +hardcover +hardcovers +hardedge +hardedges +harden +hardened +hardener +hardeners +hardening +hardenings +hardens +harder +hardest +hardfisted +hardhack +hardhacks +hardhanded +hardhandedness +hardhandednesses +hardhat +hardhats +hardhead +hardheaded +hardheadedly +hardheadedness +hardheadednesses +hardheads +hardhearted +hardheartedness +hardheartednesses +hardier +hardies +hardiest +hardihood +hardihoods +hardily +hardiment +hardiments +hardiness +hardinesses +hardinggrass +hardinggrasses +hardline hardly +hardmouthed +hardness +hardnesses +hardnose +hardnoses +hardpan +hardpans +hards +hardscrabble +hardset hardship +hardships +hardstand +hardstanding +hardstandings +hardstands +hardtack +hardtacks +hardtop +hardtops +hardware +hardwares +hardwire +hardwired +hardwires +hardwiring +hardwood +hardwoods hardworking +hardy +hare +harebell +harebells +harebrained +hared +hareem +hareems +harelike +harelip +harelips +harem +harems +hares +hariana +harianas +haricot +haricots +harijan +harijans +haring +hark +harked +harken +harkened +harkener +harkeners +harkening +harkens +harking +harks +harl +harlequin +harlequinade +harlequinades +harlequins +harlot +harlotries +harlotry +harlots +harls harm +harmattan +harmattans +harmed +harmer +harmers harmful +harmfully +harmfulness +harmfulnesses +harmin +harmine +harmines +harming +harmins +harmless +harmlessly +harmlessness +harmlessnesses +harmonic +harmonica +harmonically +harmonicas +harmonicist +harmonicists +harmonics +harmonies +harmonious +harmoniously +harmoniousness +harmoniousnesses +harmonise +harmonised +harmonises +harmonising +harmonium +harmoniums +harmonization +harmonizations +harmonize +harmonized +harmonizer +harmonizers +harmonizes +harmonizing harmony +harms +harness +harnessed +harnesses +harnessing +harp +harped +harper +harpers +harpies +harpin +harping +harpings +harpins +harpist +harpists +harpoon +harpooned +harpooner +harpooners +harpooning +harpoons +harps +harpsichord +harpsichordist +harpsichordists +harpsichords +harpy +harquebus +harquebuses +harquebusier +harquebusiers +harridan +harridans +harried +harrier +harriers +harries +harrow +harrowed +harrower +harrowers +harrowing +harrows +harrumph +harrumphed +harrumphing +harrumphs +harry +harrying +harsh +harshen +harshened +harshening +harshens +harsher +harshest +harshly +harshness +harshnesses +harslet +harslets +hart +hartal +hartals +hartebeest +hartebeests +harts +hartshorn +hartshorns +harumph +harumphed +harumphing +harumphs +haruspex +haruspication +haruspications +haruspices harvest +harvestable +harvested +harvester +harvesters +harvesting +harvestman +harvestmen +harvests +harvesttime +harvesttimes +has +hasenpfeffer +hasenpfeffers +hash +hashed +hasheesh +hasheeshes +hashes +hashhead +hashheads +hashing +hashish +hashishes +haslet +haslets +hasp +hasped +hasping +hasps +hassel +hassels +hassle +hassled +hassles +hassling +hassock +hassocks +hast +hastate +haste +hasted +hasteful +hasten +hastened +hastener +hasteners +hastening +hastens +hastes +hastier +hastiest +hastily +hastiness +hastinesses +hasting +hasty hat +hatable +hatband +hatbands +hatbox +hatboxes hatch +hatchabilities +hatchability +hatchable +hatchback +hatchbacks +hatcheck +hatched +hatchel +hatcheled +hatcheling +hatchelled +hatchelling +hatchels +hatcher +hatcheries +hatchers +hatchery +hatches +hatchet +hatchets +hatching +hatchings +hatchling +hatchlings +hatchment +hatchments +hatchway +hatchways hate +hateable +hated +hateful +hatefully +hatefulness +hatefulnesses +hatemonger +hatemongers +hater +haters +hates +hatful +hatfuls +hath +hating +hatless +hatlike +hatmaker +hatmakers +hatpin +hatpins +hatrack +hatracks +hatred +hatreds +hats +hatsful +hatted +hatter +hatteria +hatterias +hatters +hatting +hauberk +hauberks +haugh +haughs +haughtier +haughtiest +haughtily +haughtiness +haughtinesses +haughty +haul +haulage +haulages +hauled +hauler +haulers +haulier +hauliers +hauling +haulm +haulmier +haulmiest +haulms +haulmy +hauls +haulyard +haulyards +haunch +haunched +haunches +haunt +haunted +haunter +haunters +haunting +hauntingly +haunts +hausen +hausens +hausfrau +hausfrauen +hausfraus +haustella +haustellum +haustoria +haustorial +haustorium +haut +hautbois +hautboy +hautboys +haute +hauteur +hauteurs +havarti +havartis +havdalah +havdalahs have +havelock +havelocks +haven +havened +havening +havens +haver +havered +haverel +haverels +havering +havers +haversack +haversacks +haves +having +havior +haviors +haviour +haviours +havoc +havocked +havocker +havockers +havocking +havocs +haw +hawed +hawfinch +hawfinches +hawing +hawk +hawkbill +hawkbills +hawked +hawker +hawkers +hawkey +hawkeyed +hawkeys +hawkie +hawkies +hawking +hawkings +hawkish +hawkishly +hawkishness +hawkishnesses +hawklike +hawkmoth +hawkmoths +hawknose +hawknoses +hawks +hawksbill +hawksbills +hawkshaw +hawkshaws +hawkweed +hawkweeds +haws +hawse +hawsehole +hawseholes +hawser +hawsers +hawses +hawthorn +hawthorns +hay +haycock +haycocks +hayed +hayer +hayers +hayfield +hayfields +hayfork +hayforks +haying +hayings +haylage +haylages +hayloft +haylofts +haymaker +haymakers +haymow +haymows +hayrack +hayracks +hayrick +hayricks +hayride +hayrides +hays +hayseed +hayseeds +haystack +haystacks +hayward +haywards +haywire +haywires +hazan +hazanim +hazans +hazard +hazarded +hazarding +hazardous +hazardously +hazardousness +hazardousnesses +hazards +haze +hazed +hazel +hazelhen +hazelhens +hazelly +hazelnut +hazelnuts +hazels +hazer +hazers +hazes +hazier +haziest +hazily +haziness +hazinesses +hazing +hazings +hazy +hazzan +hazzanim +hazzans he head headache +headaches +headachier +headachiest +headachy +headband +headbands +headboard +headboards +headcheese +headcheeses +headdress +headdresses +headed +header +headers +headfirst +headfish +headfishes +headforemost +headgate +headgates +headgear +headgears +headhunt +headhunted +headhunter +headhunters +headhunting +headhunts +headier +headiest +headily +headiness +headinesses +heading +headings +headlamp +headlamps +headland +headlands +headless +headlessness +headlessnesses +headlight +headlights headline +headlined +headliner +headliners +headlines +headlining +headlock +headlocks +headlong +headman headmaster +headmasters +headmastership +headmasterships +headmen headmistress +headmistresses +headmost +headnote +headnotes +headphone +headphones +headpiece +headpieces +headpin +headpins +headquarter +headquartered +headquartering +headquarters +headrace +headraces +headrest +headrests +headroom +headrooms +heads +headsail +headsails +headset +headsets +headship +headships +headshrinker +headshrinkers +headsman +headsmen +headspace +headspaces +headspring +headsprings +headstall +headstalls +headstand +headstands +headstay +headstays +headstock +headstocks +headstone +headstones +headstream +headstreams +headstrong +headwaiter +headwaiters +headwater +headwaters +headway +headways +headwind +headwinds +headword +headwords +headwork +headworks +heady +heal +healable +healed +healer +healers +healing +heals health +healthful +healthfully +healthfulness +healthfulnesses +healthier +healthiest +healthily +healthiness +healthinesses +healths healthy +heap +heaped +heaping +heaps hear +hearable +heard +hearer +hearers hearing +hearings +hearken +hearkened +hearkening +hearkens +hears +hearsay +hearsays +hearse +hearsed +hearses +hearsing heart +heartache +heartaches +heartbeat +heartbeats +heartbreak +heartbreaker +heartbreakers +heartbreaking +heartbreakingly +heartbreaks +heartbroken +heartburn +heartburning +heartburnings +heartburns +hearted +hearten +heartened +heartening +hearteningly +heartens +heartfelt +hearth +hearths +hearthstone +hearthstones +heartier +hearties +heartiest +heartily +heartiness +heartinesses +hearting +heartland +heartlands +heartless +heartlessly +heartlessness +heartlessnesses +heartrending +heartrendingly +hearts +heartsease +heartseases +heartsick +heartsickness +heartsicknesses +heartsome +heartsomely +heartsore +heartstring +heartstrings +heartthrob +heartthrobs +heartwarming +heartwood +heartwoods +heartworm +heartworms +hearty heat +heatable +heated +heatedly +heater +heaters +heath +heathen +heathendom +heathendoms +heathenish +heathenishly +heathenism +heathenisms +heathenize +heathenized +heathenizes +heathenizing +heathens +heather +heathers +heathery +heathier +heathiest +heathland +heathlands +heathless +heathlike +heaths +heathy +heating +heatless +heatproof +heats +heatstroke +heatstrokes +heaume +heaumes +heave +heaved heaven +heavenlier +heavenliest +heavenliness +heavenlinesses +heavenly +heavens +heavenward +heavenwards +heaver +heavers +heaves +heavier +heavies +heaviest +heavily +heaviness +heavinesses +heaving heavy +heavyhearted +heavyheartedly +heavyheartedness +heavyheartednesses +heavyset +heavyweight +heavyweights +hebdomad +hebdomadal +hebdomadally +hebdomads +hebe +hebephrenia +hebephrenias +hebephrenic +hebephrenics +hebes +hebetate +hebetated +hebetates +hebetating +hebetation +hebetations +hebetic +hebetude +hebetudes +hebetudinous +hebraization +hebraizations +hebraize +hebraized +hebraizes +hebraizing +hecatomb +hecatombs +heck +heckle +heckled +heckler +hecklers +heckles +heckling +hecks +hectare +hectares +hectic +hectical +hectically +hecticly +hectogram +hectograms +hectograph +hectographed +hectographing +hectographs +hectoliter +hectoliters +hectometer +hectometers +hector +hectored +hectoring +hectoringly +hectors +heddle +heddles +heder +heders +hedge +hedged +hedgehog +hedgehogs +hedgehop +hedgehopped +hedgehopper +hedgehoppers +hedgehopping +hedgehops +hedgepig +hedgepigs +hedger +hedgerow +hedgerows +hedgers +hedges +hedgier +hedgiest +hedging +hedgingly +hedgy +hedonic +hedonically +hedonics +hedonism +hedonisms +hedonist +hedonistic +hedonistically +hedonists +heed +heeded +heeder +heeders +heedful +heedfully +heedfulness +heedfulnesses +heeding +heedless +heedlessly +heedlessness +heedlessnesses +heeds +heehaw +heehawed +heehawing +heehaws heel +heelball +heelballs +heeled +heeler +heelers +heeling +heelings +heelless +heelpiece +heelpieces +heelpost +heelposts +heels +heeltap +heeltaps +heeze +heezed +heezes +heezing +heft +hefted +hefter +hefters +heftier +heftiest +heftily +heftiness +heftinesses +hefting +hefts +hefty +hegari +hegaris +hegemonic +hegemonies +hegemony +hegira +hegiras +hegumen +hegumene +hegumenes +hegumenies +hegumens +hegumeny +heh +hehs +heifer +heifers +heigh height +heighten +heightened +heightening +heightens +heighth +heighths +heights +heil +heiled +heiling +heils +heimish +heinie +heinies +heinous +heinously +heinousness +heinousnesses +heir +heirdom +heirdoms +heired +heiress +heiresses +heiring +heirless +heirloom +heirlooms +heirs +heirship +heirships +heishi +heist +heisted +heister +heisters +heisting +heists +hejira +hejiras +hektare +hektares +held +heldentenor +heldentenors +heliac +heliacal +heliacally +heliast +heliasts +helical +helically +helices +helicities +helicity +helicoid +helicoidal +helicoids +helicon +helicons +helicopt +helicopted helicopter +helicoptered +helicoptering +helicopters +helicopting +helicopts +helilift +helilifted +helilifting +helilifts +helio +heliocentric +heliograph +heliographed +heliographic +heliographing +heliographs +heliolatries +heliolatrous +heliolatry +heliometer +heliometers +heliometric +heliometrically +helios +heliostat +heliostats +heliotrope +heliotropes +heliotropic +heliotropism +heliotropisms +heliozoan +heliozoans +helipad +helipads +heliport +heliports +helistop +helistops +helium +heliums +helix +helixes +hell +hellacious +hellaciously +hellbender +hellbenders +hellbent +hellbox +hellboxes +hellbroth +hellbroths +hellcat +hellcats +hellebore +hellebores +helled +hellenization +hellenizations +hellenize +hellenized +hellenizes +hellenizing +heller +helleri +helleries +hellers +hellery +hellfire +hellfires +hellgrammite +hellgrammites +hellhole +hellholes +hellhound +hellhounds +helling +hellion +hellions +hellish +hellishly +hellishness +hellishnesses +hellkite +hellkites hello +helloed +helloes +helloing +hellos +hells +helluva +helm +helmed helmet +helmeted +helmeting +helmetlike +helmets +helming +helminth +helminthiases +helminthiasis +helminthic +helminthologies +helminthology +helminths +helmless +helms +helmsman +helmsmanship +helmsmanships +helmsmen +helo +helos +helot +helotage +helotages +helotism +helotisms +helotries +helotry +helots help +helpable +helped +helper +helpers helpful +helpfully +helpfulness +helpfulnesses +helping +helpings +helpless +helplessly +helplessness +helplessnesses +helpmate +helpmates +helpmeet +helpmeets +helps +helve +helved +helves +helving +hem +hemacytometer +hemacytometers +hemagglutinate +hemagglutinated +hemagglutinates +hemagglutinating +hemagglutination +hemagglutinations +hemagglutinin +hemagglutinins +hemagog +hemagogs +hemal +hemangioma +hemangiomas +hemangiomata +hematal +hematein +hemateins +hematic +hematics +hematin +hematine +hematines +hematinic +hematinics +hematins +hematite +hematites +hematitic +hematocrit +hematocrits +hematogenous +hematoid +hematologic +hematological +hematologies +hematologist +hematologists +hematology +hematoma +hematomas +hematomata +hematophagous +hematopoieses +hematopoiesis +hematopoietic +hematoporphyrin +hematoporphyrins +hematoxylin +hematoxylins +hematuria +hematurias +heme +hemelytra +hemelytron +hemerocallis +hemerocallises +hemerythrin +hemerythrins +hemes +hemiacetal +hemiacetals +hemic +hemicellulose +hemicelluloses +hemichordate +hemichordates +hemicycle +hemicycles +hemidemisemiquaver +hemidemisemiquavers +hemihedral +hemihydrate +hemihydrated +hemihydrates +hemimetabolous +hemimorphic +hemimorphism +hemimorphisms +hemin +hemins +hemiola +hemiolas +hemiolia +hemiolias +hemiplegia +hemiplegias +hemiplegic +hemiplegics +hemipter +hemipteran +hemipterans +hemipterous +hemipters +hemisphere +hemispheres +hemispheric +hemispherical +hemistich +hemistichs +hemizygous +hemline +hemlines +hemlock +hemlocks +hemmed +hemmer +hemmers +hemming +hemochromatoses +hemochromatosis +hemochromatosises +hemocoel +hemocoels +hemocyanin +hemocyanins +hemocyte +hemocytes +hemocytometer +hemocytometers +hemodialyses +hemodialysis +hemodilution +hemodilutions +hemodynamic +hemodynamically +hemodynamics +hemoflagellate +hemoflagellates +hemoglobin +hemoglobinopathies +hemoglobinopathy +hemoglobins +hemoglobinuria +hemoglobinurias +hemoglobinuric +hemoid +hemolymph +hemolymphs +hemolyses +hemolysin +hemolysins +hemolysis +hemolytic +hemolyze +hemolyzed +hemolyzes +hemolyzing +hemophilia +hemophiliac +hemophiliacs +hemophilias +hemophilic +hemophilics +hemopoieses +hemopoiesis +hemopoietic +hemoprotein +hemoproteins +hemoptyses +hemoptysis +hemorrhage +hemorrhaged +hemorrhages +hemorrhagic +hemorrhaging +hemorrhoid +hemorrhoidal +hemorrhoidals +hemorrhoids +hemosiderin +hemosiderins +hemostases +hemostasis +hemostat +hemostatic +hemostatics +hemostats +hemp +hempen +hempie +hempier +hempiest +hemplike +hemps +hempseed +hempseeds +hempweed +hempweeds +hempy +hems +hemstitch +hemstitched +hemstitcher +hemstitchers +hemstitches +hemstitching hen +henbane +henbanes +henbit +henbits +hence +henceforth +henceforward +henchman +henchmen +hencoop +hencoops +hendecasyllabic +hendecasyllabics +hendecasyllable +hendecasyllables +hendiadys +hendiadyses +henequen +henequens +henequin +henequins +henhouse +henhouses +heniquen +heniquens +henlike +henna +hennaed +hennaing +hennas +henneries +hennery +henotheism +henotheisms +henotheist +henotheistic +henotheists +henpeck +henpecked +henpecking +henpecks +henries +henry +henrys +hens +hent +hented +henting +hents +hep +heparin +heparinized +heparins +hepatectomies +hepatectomized +hepatectomy +hepatic +hepatica +hepaticae +hepaticas +hepatics +hepatitides +hepatitis +hepatize +hepatized +hepatizes +hepatizing +hepatocellular +hepatocyte +hepatocytes +hepatoma +hepatomas +hepatomata +hepatomegalies +hepatomegaly +hepatopancreas +hepatopancreases +hepatotoxic +hepatotoxicities +hepatotoxicity +hepcat +hepcats +heptachlor +heptachlors +heptad +heptads +heptagon +heptagonal +heptagons +heptameter +heptameters +heptane +heptanes +heptarch +heptarchies +heptarchs +heptarchy +heptose +heptoses her +herald +heralded +heraldic +heraldically +heralding +heraldries +heraldry +heralds herb +herbaceous +herbage +herbages +herbal +herbalist +herbalists +herbals +herbaria +herbarium +herbariums +herbed +herbicidal +herbicidally +herbicide +herbicides +herbier +herbiest +herbivore +herbivores +herbivories +herbivorous +herbivory +herbless +herblike +herbs +herby +herculean +hercules +herculeses +herd +herded +herder +herders +herdic +herdics +herding +herdlike +herdman +herdmen +herds +herdsman +herdsmen here +hereabout +hereabouts +hereafter +hereafters +hereat +hereaway +hereaways +hereby +heredes +hereditament +hereditaments +hereditarian +hereditarians +hereditarily +hereditary +heredities +heredity +herein +hereinabove +hereinafter +hereinbefore +hereinbelow +hereinto +hereof +hereon +heres +heresiarch +heresiarchs +heresies +heresy +heretic +heretical +heretically +heretics +hereto +heretofore +heretrices +heretrix +heretrixes +hereunder +hereunto +hereupon +herewith +heriot +heriots +heritabilities +heritability +heritable +heritage +heritages +heritor +heritors +heritrices +heritrix +heritrixes +herl +herls +herm +herma +hermae +hermaean +hermai +hermaphrodite +hermaphrodites +hermaphroditic +hermaphroditism +hermaphroditisms +hermatypic +hermeneutic +hermeneutical +hermeneutically +hermeneutics +hermetic +hermetical +hermetically +hermeticism +hermeticisms +hermetism +hermetisms +hermetist +hermetists +hermit +hermitage +hermitages +hermitic +hermitism +hermitisms +hermitries +hermitry +hermits +herms +hern +hernia +herniae +hernial +hernias +herniate +herniated +herniates +herniating +herniation +herniations +herns hero +heroes +heroic +heroical +heroically +heroicomic +heroicomical +heroics +heroin +heroine +heroines +heroinism +heroinisms +heroins +heroism +heroisms +heroize +heroized +heroizes +heroizing +heron +heronries +heronry +herons +heros +herpes +herpesvirus +herpesviruses +herpetic +herpetological +herpetologies +herpetologist +herpetologists +herpetology +herrenvolk +herrenvolks +herried +herries +herring +herringbone +herringboned +herringbones +herringboning +herrings +herry +herrying hers herself +herstories +herstory +hertz +hertzes +hes +hesitance +hesitances +hesitancies +hesitancy +hesitant +hesitantly hesitate +hesitated +hesitater +hesitaters +hesitates +hesitating +hesitatingly +hesitation +hesitations +hesperidia +hesperidin +hesperidins +hesperidium +hessian +hessians +hessite +hessites +hessonite +hessonites +hest +hests +het +hetaera +hetaerae +hetaeras +hetaeric +hetaira +hetairai +hetairas +hetero +heteroatom +heteroatoms +heteroauxin +heteroauxins +heterocercal +heterochromatic +heterochromatin +heterochromatins +heteroclite +heteroclites +heterocycle +heterocycles +heterocyclic +heterocyclics +heterocyst +heterocystous +heterocysts +heterodox +heterodoxies +heterodoxy +heteroduplex +heteroduplexes +heterodyne +heterodyned +heterodynes +heterodyning +heteroecious +heteroecism +heteroecisms +heterogamete +heterogametes +heterogametic +heterogameties +heterogamety +heterogamies +heterogamous +heterogamy +heterogeneities +heterogeneity +heterogeneous +heterogeneously +heterogeneousness +heterogeneousnesses +heterogenies +heterogenous +heterogeny +heterogonic +heterogonies +heterogony +heterograft +heterografts +heterokaryon +heterokaryons +heterokaryoses +heterokaryosis +heterokaryosises +heterokaryotic +heterologous +heterologously +heterolyses +heterolysis +heterolytic +heteromorphic +heteromorphism +heteromorphisms +heteronomies +heteronomous +heteronomy +heteronym +heteronyms +heterophil +heterophile +heterophonies +heterophony +heterophyllies +heterophyllous +heterophylly +heteroploid +heteroploidies +heteroploids +heteroploidy +heteropterous +heteros +heteroses +heterosexual +heterosexualities +heterosexuality +heterosexually +heterosexuals +heterosis +heterospories +heterosporous +heterospory +heterothallic +heterothallism +heterothallisms +heterotic +heterotopic +heterotroph +heterotrophic +heterotrophically +heterotrophies +heterotrophs +heterotrophy +heterotypic +heterozygoses +heterozygosis +heterozygosities +heterozygosity +heterozygote +heterozygotes +heterozygous +heth +heths +hetman +hetmans +hets +heuch +heuchs +heugh +heughs +heulandite +heulandites +heuristic +heuristically +heuristics +hew +hewable +hewed +hewer +hewers +hewing +hewn +hews +hex +hexachlorethane +hexachlorethanes +hexachloroethane +hexachloroethanes +hexachlorophene +hexachlorophenes +hexachord +hexachords +hexad +hexade +hexadecimal +hexadecimals +hexades +hexadic +hexads +hexagon +hexagonal +hexagonally +hexagons +hexagram +hexagrams +hexahedra +hexahedron +hexahedrons +hexahydrate +hexahydrates +hexameter +hexameters +hexamethonium +hexamethoniums +hexamethylenetetramine +hexamethylenetetramines +hexamine +hexamines +hexane +hexanes +hexapla +hexaplar +hexaplas +hexaploid +hexaploidies +hexaploids +hexaploidy +hexapod +hexapodies +hexapods +hexapody +hexarchies +hexarchy +hexed +hexer +hexerei +hexereis +hexers +hexes +hexing +hexobarbital +hexobarbitals +hexokinase +hexokinases +hexone +hexones +hexosaminidase +hexosaminidases +hexosan +hexosans +hexose +hexoses +hexyl +hexylresorcinol +hexylresorcinols +hexyls +hey +heyday +heydays +heydey +heydeys hi +hiatal +hiatus +hiatuses +hibachi +hibachis +hibakusha +hibernacula +hibernaculum +hibernal +hibernate +hibernated +hibernates +hibernating +hibernation +hibernations +hibernator +hibernators +hibiscus +hibiscuses +hic +hiccough +hiccoughed +hiccoughing +hiccoughs +hiccup +hiccuped +hiccuping +hiccupped +hiccupping +hiccups +hick +hickey +hickeys +hickies +hickish +hickories +hickory +hicks +hid +hidable +hidalgo +hidalgos +hidden +hiddenite +hiddenites +hiddenly +hiddenness +hiddennesses hide +hideaway +hideaways +hidebound +hided +hideless +hideosities +hideosity +hideous +hideously +hideousness +hideousnesses +hideout +hideouts +hider +hiders +hides +hiding +hidings +hidroses +hidrosis +hidrotic +hidrotics +hie +hied +hieing +hiemal +hierarch +hierarchal +hierarchic +hierarchical +hierarchically +hierarchies +hierarchize +hierarchized +hierarchizes +hierarchizing +hierarchs +hierarchy +hieratic +hieratically +hierodule +hierodules +hieroglyph +hieroglyphic +hieroglyphical +hieroglyphically +hieroglyphics +hieroglyphs +hierophant +hierophantic +hierophants +hies +hifalutin +higgle +higgled +higgler +higglers +higgles +higgling high +highball +highballed +highballing +highballs +highbinder +highbinders +highborn +highboy +highboys +highbred +highbrow +highbrowed +highbrowism +highbrowisms +highbrows +highbush +highchair +highchairs +higher +highest +highfalutin +highflier +highfliers +highflyer +highflyers +highhanded +highhandedly +highhandedness +highhandednesses +highjack +highjacked +highjacking +highjacks +highland +highlander +highlanders +highlands +highlife +highlifes +highlight +highlighted +highlighter +highlighters +highlighting +highlights +highly +highness +highnesses +highroad +highroads +highs +highspot +highspots +hight +hightail +hightailed +hightailing +hightails +highted +highth +highths +highting +hights highway +highwayman +highwaymen +highways +hijack +hijacked +hijacker +hijackers +hijacking +hijackings +hijacks +hijinks +hike +hiked +hiker +hikers +hikes +hiking +hila +hilar +hilarious +hilariously +hilariousness +hilariousnesses +hilarities +hilarity +hilding +hildings +hili hill +hillbillies +hillbilly +hillcrest +hillcrests +hilled +hiller +hillers +hillier +hilliest +hilling +hillo +hilloa +hilloaed +hilloaing +hilloas +hillock +hillocks +hillocky +hilloed +hilloes +hilloing +hillos +hills +hillside +hillsides +hilltop +hilltops +hilly +hilt +hilted +hilting +hiltless +hilts +hilum +hilus him +himatia +himation +himations himself +hin +hind +hindbrain +hindbrains +hinder +hindered +hinderer +hinderers +hindering +hinders +hindgut +hindguts +hindmost +hindquarter +hindquarters +hindrance +hindrances +hinds +hindsight +hindsights +hinge +hinged +hinger +hingers +hinges +hinging +hinnied +hinnies +hinny +hinnying +hins +hint +hinted +hinter +hinterland +hinterlands +hinters +hinting +hints +hip +hipbone +hipbones +hipless +hiplike +hipline +hiplines +hipness +hipnesses +hipparch +hipparchs +hipped +hipper +hippest +hippie +hippiedom +hippiedoms +hippieness +hippienesses +hippier +hippies +hippiest +hippiness +hippinesses +hipping +hippish +hippo +hippocampal +hippocampi +hippocampus +hippocras +hippocrases +hippodrome +hippodromes +hippogriff +hippogriffs +hippopotami +hippopotamus +hippopotamuses +hippos +hippy +hips +hipshot +hipster +hipsterism +hipsterisms +hipsters +hirable +hiragana +hiraganas +hircine hire +hireable +hired +hireling +hirelings +hirer +hirers +hires +hiring +hirple +hirpled +hirples +hirpling +hirsel +hirseled +hirseling +hirselled +hirselling +hirsels +hirsle +hirsled +hirsles +hirsling +hirsute +hirsuteness +hirsutenesses +hirsutism +hirsutisms +hirudin +hirudins his +hisn +hispanidad +hispanidads +hispanism +hispanisms +hispid +hiss +hissed +hisself +hisser +hissers +hisses +hissies +hissing +hissings +hissy +hist +histamin +histaminase +histaminases +histamine +histaminergic +histamines +histamins +histed +histidin +histidine +histidines +histidins +histing +histiocyte +histiocytes +histiocytic +histochemical +histochemically +histochemistries +histochemistry +histocompatibilities +histocompatibility +histogen +histogeneses +histogenesis +histogenetic +histogens +histogram +histograms +histoid +histologic +histological +histologically +histologies +histologist +histologists +histology +histolyses +histolysis +histone +histones +histopathologic +histopathological +histopathologically +histopathologies +histopathologist +histopathologists +histopathology +histophysiologic +histophysiological +histophysiologies +histophysiology +histoplasmoses +histoplasmosis +histoplasmosises +historian +historians +historic +historical +historically +historicalness +historicalnesses +historicism +historicisms +historicist +historicists +historicities +historicity +historicize +historicized +historicizes +historicizing +histories +historiographer +historiographers +historiographic +historiographical +historiographically +historiographies +historiography history +histrionic +histrionically +histrionics +hists hit +hitch +hitched +hitcher +hitchers +hitches +hitchhike +hitchhiked +hitchhiker +hitchhikers +hitchhikes +hitchhiking +hitching +hither +hithermost +hitherto +hitherward +hitless +hits +hitter +hitters +hitting +hive +hived +hiveless +hives +hiving +hizzoner +hizzoners +hm +hmm +ho +hoactzin +hoactzines +hoactzins +hoagie +hoagies +hoagy +hoar +hoard +hoarded +hoarder +hoarders +hoarding +hoardings +hoards +hoarfrost +hoarfrosts +hoarier +hoariest +hoarily +hoariness +hoarinesses +hoars +hoarse +hoarsely +hoarsen +hoarsened +hoarseness +hoarsenesses +hoarsening +hoarsens +hoarser +hoarsest +hoary +hoatzin +hoatzines +hoatzins +hoax +hoaxed +hoaxer +hoaxers +hoaxes +hoaxing +hob +hobbed +hobbies +hobbing +hobbit +hobbits +hobble +hobblebush +hobblebushes +hobbled +hobbledehoy +hobbledehoys +hobbler +hobblers +hobbles +hobbling hobby +hobbyhorse +hobbyhorses +hobbyist +hobbyists +hobgoblin +hobgoblins +hoblike +hobnail +hobnailed +hobnailing +hobnails +hobnob +hobnobbed +hobnobber +hobnobbers +hobnobbing +hobnobs +hobo +hoboed +hoboes +hoboing +hoboism +hoboisms +hobos +hobs +hock +hocked +hocker +hockers +hockey +hockeys +hocking +hocks +hockshop +hockshops +hocus +hocused +hocuses +hocusing +hocussed +hocusses +hocussing +hod +hodad +hodaddies +hodaddy +hodads +hodden +hoddens +hoddin +hoddins +hodgepodge +hodgepodges +hodoscope +hodoscopes +hods +hoe +hoecake +hoecakes +hoed +hoedown +hoedowns +hoeing +hoelike +hoer +hoers +hoes +hog +hogan +hogans +hogback +hogbacks +hogfish +hogfishes +hogg +hogged +hogger +hoggers +hogget +hoggets +hogging +hoggish +hoggishly +hoggishness +hoggishnesses +hoggs +hoglike +hogmanay +hogmanays +hogmane +hogmanes +hogmenay +hogmenays +hognose +hognoses +hognut +hognuts +hogs +hogshead +hogsheads +hogtie +hogtied +hogtieing +hogties +hogtying +hogwash +hogwashes +hogweed +hogweeds +hoick +hoicked +hoicking +hoicks +hoiden +hoidened +hoidening +hoidens +hoise +hoised +hoises +hoising +hoist +hoisted +hoister +hoisters +hoisting +hoists +hoke +hoked +hokes +hokey +hokeyness +hokeynesses +hokeypokey +hokeypokeys +hokier +hokiest +hokily +hokiness +hokinesses +hoking +hokku +hokum +hokums +hokypokies +hokypoky +holandric +holard +holards hold +holdable +holdall +holdalls +holdback +holdbacks +holden +holder +holders +holdfast +holdfasts +holding +holdings +holdout +holdouts +holdover +holdovers +holds +holdup +holdups hole +holed +holeless +holes +holey +holibut +holibuts holiday +holidayed +holidayer +holidayers +holidaying +holidaymaker +holidaymakers +holidays +holier +holies +holiest +holily +holiness +holinesses +holing +holism +holisms +holist +holistic +holistically +holists +holk +holked +holking +holks +holla +hollaed +hollaing +holland +hollandaise +hollandaises +hollands +hollas +holler +hollered +hollering +hollers +hollies +hollo +holloa +holloaed +holloaing +holloas +holloed +holloes +holloing +holloo +hollooed +hollooing +holloos +hollos +hollow +holloware +hollowares +hollowed +hollower +hollowest +hollowing +hollowly +hollowness +hollownesses +hollows +hollowware +hollowwares +holly +hollyhock +hollyhocks +holm +holmic +holmium +holmiums +holms +holoblastic +holocaust +holocausts +holocrine +holoenzyme +holoenzymes +hologamies +hologamy +hologram +holograms +holograph +holographed +holographer +holographers +holographic +holographically +holographies +holographing +holographs +holography +hologynies +hologyny +holohedral +holometabolism +holometabolisms +holometabolous +holophrastic +holophytic +holothurian +holothurians +holotype +holotypes +holotypic +holozoic +holp +holpen +hols +holstein +holsteins +holster +holstered +holstering +holsters +holt +holts holy +holyday +holydays +holystone +holystoned +holystones +holystoning +holytide +holytides +homage +homaged +homager +homagers +homages +homaging +hombre +hombres +homburg +homburgs home +homebodies +homebody +homebound +homeboy +homeboys +homebred +homebreds +homebuilt +homecoming +homecomings +homed +homegrown homeland +homelands +homeless +homelessness +homelessnesses +homelier +homeliest +homelike +homeliness +homelinesses +homely +homemade +homemaker +homemakers +homemaking +homemakings +homeobox +homeoboxes +homeomorphic +homeomorphism +homeomorphisms +homeopath +homeopathic +homeopathically +homeopathies +homeopaths +homeopathy +homeostases +homeostasis +homeostatic +homeotherm +homeothermic +homeothermies +homeotherms +homeothermy +homeotic +homeowner +homeowners +homeport +homeported +homeporting +homeports +homer +homered +homering +homeroom +homerooms +homers +homes +homeschool +homeschooled +homeschooler +homeschoolers +homeschooling +homeschools +homesick +homesickness +homesicknesses +homesite +homesites +homespun +homespuns +homestay +homestays +homestead +homesteaded +homesteader +homesteaders +homesteading +homesteads +homestretch +homestretches hometown +hometowns +homeward +homewards homework +homeworks +homey +homeyness +homeynesses +homicidal +homicidally +homicide +homicides +homier +homiest +homiletic +homiletical +homiletics +homilies +homilist +homilists +homily +homines +hominess +hominesses +homing +hominian +hominians +hominid +hominids +hominies +hominine +hominization +hominizations +hominize +hominized +hominizes +hominizing +hominoid +hominoids +hominy +hommock +hommocks +hommos +hommoses +homo +homocercal +homoerotic +homoeroticism +homoeroticisms +homogametic +homogamies +homogamous +homogamy +homogenate +homogenates +homogeneities +homogeneity +homogeneous +homogeneously +homogeneousness +homogeneousnesses +homogenies +homogenisation +homogenisations +homogenise +homogenised +homogenises +homogenising +homogenization +homogenizations +homogenize +homogenized +homogenizer +homogenizers +homogenizes +homogenizing +homogenous +homogeny +homogonies +homogony +homograft +homografts +homograph +homographic +homographs +homoiotherm +homoiothermic +homoiotherms +homoiousian +homoiousians +homolog +homologate +homologated +homologates +homologating +homologation +homologations +homological +homologically +homologies +homologize +homologized +homologizer +homologizers +homologizes +homologizing +homologous +homologs +homologue +homologues +homology +homolyses +homolysis +homolytic +homomorphic +homomorphism +homomorphisms +homonuclear +homonym +homonymic +homonymies +homonymous +homonymously +homonyms +homonymy +homoousian +homoousians +homophile +homophobe +homophobes +homophobia +homophobias +homophobic +homophone +homophones +homophonic +homophonies +homophonous +homophony +homoplasies +homoplastic +homoplasy +homopolar +homopolymer +homopolymeric +homopolymers +homopteran +homopterans +homopterous +homos +homoscedastic +homoscedasticities +homoscedasticity +homosex +homosexes +homosexual +homosexualities +homosexuality +homosexually +homosexuals +homospories +homosporous +homospory +homothallic +homothallism +homothallisms +homotransplant +homotransplantation +homotransplantations +homotransplants +homozygoses +homozygosis +homozygosities +homozygosity +homozygote +homozygotes +homozygous +homozygously +homunculi +homunculus +homy +hon +honan +honans +honcho +honchoed +honchoing +honchos +honda +hondas +hondle +hondled +hondles +hondling +hone +honed +honer +honers +hones honest +honester +honestest +honesties +honestly +honesty +honewort +honeworts honey +honeybee +honeybees +honeybun +honeybunch +honeybunches +honeybuns +honeycomb +honeycombed +honeycombing +honeycombs +honeycreeper +honeycreepers +honeydew +honeydews +honeyeater +honeyeaters +honeyed +honeyful +honeyguide +honeyguides +honeying +honeymoon +honeymooned +honeymooner +honeymooners +honeymooning +honeymoons +honeys +honeysuckle +honeysuckles +hong +hongs +honied +honing +honk +honked +honker +honkers +honkey +honkeys +honkie +honkies +honking +honks +honky honor +honorabilities +honorability +honorable +honorableness +honorablenesses +honorably +honorand +honorands +honoraria +honoraries +honorarily +honorarium +honorariums +honorary +honored +honoree +honorees +honorer +honorers +honorific +honorifically +honorifics +honoring +honors honour +honourable +honoured +honourer +honourers +honouring +honours +hons +hooch +hooches +hood +hooded +hoodedness +hoodednesses +hoodie +hoodier +hoodies +hoodiest +hooding +hoodless +hoodlike +hoodlum +hoodlumish +hoodlumism +hoodlumisms +hoodlums +hoodoo +hoodooed +hoodooing +hoodooism +hoodooisms +hoodoos +hoods +hoodwink +hoodwinked +hoodwinker +hoodwinkers +hoodwinking +hoodwinks +hoody +hooey +hooeys +hoof +hoofbeat +hoofbeats +hoofed +hoofer +hoofers +hoofing +hoofless +hooflike +hoofprint +hoofprints +hoofs hook +hooka +hookah +hookahs +hookas +hooked +hooker +hookers +hookey +hookeys +hookier +hookies +hookiest +hooking +hookless +hooklet +hooklets +hooklike +hooknose +hooknoses +hooks +hookup +hookups +hookworm +hookworms +hooky +hoolie +hooligan +hooliganism +hooliganisms +hooligans +hooly +hoop +hooped +hooper +hoopers +hooping +hoopla +hooplas +hoopless +hooplike +hoopoe +hoopoes +hoopoo +hoopoos +hoops +hoopskirt +hoopskirts +hoopster +hoopsters +hoorah +hoorahed +hoorahing +hoorahs +hooray +hoorayed +hooraying +hoorays +hoosegow +hoosegows +hoosgow +hoosgows +hoot +hootch +hootches +hooted +hootenannies +hootenanny +hooter +hooters +hootier +hootiest +hooting +hoots +hooty +hooved +hooves +hop hope +hoped hopeful +hopefully +hopefulness +hopefulnesses +hopefuls hopeless +hopelessly +hopelessness +hopelessnesses +hoper +hopers +hopes +hophead +hopheads +hoping +hoplite +hoplites +hoplitic +hopped +hopper +hoppers +hoppier +hoppiest +hopping +hoppings +hopple +hoppled +hopples +hoppling +hoppy +hops +hopsack +hopsacking +hopsackings +hopsacks +hopscotch +hopscotched +hopscotches +hopscotching +hoptoad +hoptoads +hora +horah +horahs +horal +horary +horas +horde +horded +hordein +hordeins +hordes +hording +horehound +horehounds +horizon +horizonal +horizonless +horizons +horizontal +horizontalities +horizontality +horizontally +horizontals +hormogonia +hormogonium +hormonal +hormonally +hormone +hormonelike +hormones +hormonic +horn +hornbeam +hornbeams +hornbill +hornbills +hornblende +hornblendes +hornblendic +hornbook +hornbooks +horned +hornedness +hornednesses +hornet +hornets +hornfels +hornier +horniest +hornily +horniness +horninesses +horning +hornist +hornists +hornito +hornitos +hornless +hornlessness +hornlessnesses +hornlike +hornpipe +hornpipes +hornpout +hornpouts +horns +hornstone +hornstones +hornswoggle +hornswoggled +hornswoggles +hornswoggling +horntail +horntails +hornworm +hornworms +hornwort +hornworts +horny +horologe +horologes +horological +horologies +horologist +horologists +horology +horoscope +horoscopes +horrendous +horrendously +horrent horrible +horribleness +horriblenesses +horribles +horribly +horrid +horridly +horridness +horridnesses +horrific +horrifically +horrified +horrifies +horrify +horrifying +horrifyingly +horror +horrors horse +horseback +horsebacks +horsebean +horsebeans +horsecar +horsecars +horsed +horsefeathers +horseflesh +horsefleshes +horseflies +horsefly +horsehair +horsehairs +horsehide +horsehides +horselaugh +horselaughs +horseless +horselike +horseman +horsemanship +horsemanships +horsemen +horsemint +horsemints +horseplay +horseplayer +horseplayers +horseplays +horsepower +horsepowers +horsepox +horsepoxes +horseradish +horseradishes +horses +horseshit +horseshits +horseshod +horseshoe +horseshoed +horseshoeing +horseshoer +horseshoers +horseshoes +horsetail +horsetails +horseweed +horseweeds +horsewhip +horsewhipped +horsewhipper +horsewhippers +horsewhipping +horsewhips +horsewoman +horsewomen +horsey +horsier +horsiest +horsily +horsiness +horsinesses +horsing +horst +horste +horstes +horsts +horsy +hortative +hortatively +hortatory +horticultural +horticulturally +horticulture +horticultures +horticulturist +horticulturists +hosanna +hosannaed +hosannah +hosannahs +hosannaing +hosannas +hose +hosed +hosel +hosels +hosen +hosepipe +hosepipes +hoses +hosier +hosieries +hosiers +hosiery +hosing +hospice +hospices +hospitable +hospitably hospital +hospitalise +hospitalised +hospitalises +hospitalising +hospitalities +hospitality +hospitalization +hospitalizations +hospitalize +hospitalized +hospitalizes +hospitalizing +hospitals +hospitia +hospitium +hospodar +hospodars host +hosta +hostage +hostages +hostas +hosted +hostel +hosteled +hosteler +hostelers +hosteling +hostelled +hosteller +hostellers +hostelling +hostelries +hostelry +hostels hostess +hostessed +hostesses +hostessing +hostile +hostilely +hostiles +hostilities +hostility +hosting +hostler +hostlers +hostly +hosts hot +hotbed +hotbeds +hotblood +hotbloods +hotbox +hotboxes +hotcake +hotcakes +hotch +hotched +hotches +hotching +hotchpot +hotchpotch +hotchpotches +hotchpots hotdog +hotdogged +hotdogger +hotdoggers +hotdogging +hotdogs hotel +hoteldom +hoteldoms +hotelier +hoteliers +hotelman +hotelmen +hotels +hotfoot +hotfooted +hotfooting +hotfoots +hothead +hotheaded +hotheadedly +hotheadedness +hotheadednesses +hotheads +hothouse +hothouses +hotline +hotlines +hotly +hotness +hotnesses +hotpress +hotpressed +hotpresses +hotpressing +hotrod +hotrods +hots +hotshot +hotshots +hotspur +hotspurs +hotted +hotter +hottest +hotting +hottish +houdah +houdahs +hound +hounded +hounder +hounders +hounding +hounds hour +hourglass +hourglasses +houri +houris +hourly +hours house +houseboat +houseboater +houseboaters +houseboats +housebound +houseboy +houseboys +housebreak +housebreaker +housebreakers +housebreaking +housebreakings +housebreaks +housebroke +housebroken +housecarl +housecarls +houseclean +housecleaned +housecleaning +housecleanings +housecleans +housecoat +housecoats +housed +housedress +housedresses +housefather +housefathers +houseflies +housefly +housefront +housefronts +houseful +housefuls +houseguest +houseguests +household +householder +householders +households +househusband +househusbands +housekeep +housekeeper +housekeepers +housekeeping +housekeepings +housekeeps +housekept +housel +houseled +houseleek +houseleeks +houseless +houselessness +houselessnesses +houselights +houseling +houselled +houselling +housels +housemaid +housemaids +houseman +housemaster +housemasters +housemate +housemates +housemen +housemother +housemothers +housepainter +housepainters +houseparent +houseparents +houseperson +housepersons +houseplant +houseplants +houser +houseroom +houserooms +housers +houses +housesat +housesit +housesits +housesitting +housetop +housetops +housewares +housewarming +housewarmings housewife +housewifeliness +housewifelinesses +housewifely +housewiferies +housewifery +housewifey +housewives housework +houseworks +housing +housings +hove +hovel +hoveled +hoveling +hovelled +hovelling +hovels +hover +hovercraft +hovercrafts +hovered +hoverer +hoverers +hovering +hovers how +howbeit +howdah +howdahs +howdie +howdied +howdies +howdy +howdying +howe +howes however +howf +howff +howffs +howfs +howitzer +howitzers +howk +howked +howking +howks howl +howled +howler +howlers +howlet +howlets +howling +howlingly +howls +hows +howsoever +hoy +hoya +hoyas +hoyden +hoydened +hoydening +hoydenish +hoydens +hoyle +hoyles +hoys +huarache +huaraches +huaracho +huarachos +hub +hubbies +hubbly +hubbub +hubbubs +hubby +hubcap +hubcaps +hubris +hubrises +hubristic +hubs +huck +huckaback +huckabacks +huckle +huckleberries +huckleberry +huckles +hucks +huckster +huckstered +huckstering +hucksterism +hucksterisms +hucksters +huddle +huddled +huddler +huddlers +huddles +huddling +hue +hued +hueless +hues +huff +huffed +huffier +huffiest +huffily +huffiness +huffinesses +huffing +huffish +huffs +huffy hug huge +hugely +hugeness +hugenesses +hugeous +hugeously +huger +hugest +huggable +hugged +hugger +huggers +hugging +hugs +huh +huic +huipil +huipiles +huipils +huisache +huisaches +hula +hulas +hulk +hulked +hulkier +hulkiest +hulking +hulks +hulky +hull +hullabaloo +hullabaloos +hulled +huller +hullers +hulling +hullo +hulloa +hulloaed +hulloaing +hulloas +hulloed +hulloes +hulloing +hullos +hulls +hum human +humane +humanely +humaneness +humanenesses +humaner +humanest +humanise +humanised +humanises +humanising +humanism +humanisms +humanist +humanistic +humanistically +humanists +humanitarian +humanitarianism +humanitarianisms +humanitarians +humanities +humanity +humanization +humanizations +humanize +humanized +humanizer +humanizers +humanizes +humanizing +humankind +humanlike +humanly +humanness +humannesses +humanoid +humanoids +humans +humate +humates +humble +humbled +humbleness +humblenesses +humbler +humblers +humbles +humblest +humbling +humblingly +humbly +humbug +humbugged +humbuggeries +humbuggery +humbugging +humbugs +humdinger +humdingers +humdrum +humdrums +humectant +humectants +humeral +humerals +humeri +humerus +humic +humid +humidification +humidifications +humidified +humidifier +humidifiers +humidifies +humidify +humidifying +humidistat +humidistats +humidities +humidity +humidly +humidor +humidors +humification +humifications +humified +humiliate +humiliated +humiliates +humiliating +humiliatingly +humiliation +humiliations +humilities +humility +hummable +hummed +hummer +hummers +humming +hummingbird +hummingbirds +hummock +hummocked +hummocking +hummocks +hummocky +hummus +hummuses +humongous humor +humoral +humored +humoresque +humoresques +humorful +humoring +humorist +humoristic +humorists +humorless +humorlessly +humorlessness +humorlessnesses humorous +humorously +humorousness +humorousnesses +humors humour +humoured +humouring +humours +hump +humpback +humpbacked +humpbacks +humped +humph +humphed +humphing +humphs +humpier +humpiest +humping +humpless +humps +humpy +hums +humungous +humus +humuses +humvee +humvees +hun +hunch +hunchback +hunchbacked +hunchbacks +hunched +hunches +hunching hundred +hundredfold +hundreds +hundredth +hundredths +hundredweight +hundredweights +hung hunger +hungered +hungering +hungers +hungover +hungrier +hungriest +hungrily +hungriness +hungrinesses hungry +hunh +hunk +hunker +hunkered +hunkering +hunkers +hunkier +hunkies +hunkiest +hunks +hunky +hunnish +huns hunt +huntable +hunted +huntedly hunter +hunters +hunting +huntings +huntress +huntresses +hunts +huntsman +huntsmen +hup +hurdies +hurdle +hurdled +hurdler +hurdlers +hurdles +hurdling +hurds +hurl +hurled +hurler +hurlers +hurley +hurleys +hurlies +hurling +hurlings +hurls +hurly +hurrah +hurrahed +hurrahing +hurrahs +hurray +hurrayed +hurraying +hurrays hurricane +hurricanes +hurried +hurriedly +hurriedness +hurriednesses +hurrier +hurriers +hurries hurry +hurrying +hurst +hursts hurt +hurter +hurters +hurtful +hurtfully +hurtfulness +hurtfulnesses +hurting +hurtle +hurtled +hurtles +hurtless +hurtling +hurts husband +husbanded +husbander +husbanders +husbanding +husbandly +husbandman +husbandmen +husbandries +husbandry +husbands +hush +hushaby +hushed +hushedly +hushes +hushful +hushing +husk +husked +husker +huskers +huskier +huskies +huskiest +huskily +huskiness +huskinesses +husking +huskings +husklike +husks +husky +hussar +hussars +hussies +hussy +hustings +hustle +hustled +hustler +hustlers +hustles +hustling +huswife +huswifes +huswives +hut +hutch +hutched +hutches +hutching +hutlike +hutment +hutments +huts +hutted +hutting +hutzpa +hutzpah +hutzpahs +hutzpas +huzza +huzzaed +huzzah +huzzahed +huzzahing +huzzahs +huzzaing +huzzas +hwan +hyacinth +hyacinthine +hyacinths +hyaena +hyaenas +hyaenic +hyalin +hyaline +hyalines +hyalins +hyalite +hyalites +hyalogen +hyalogens +hyaloid +hyaloids +hyaloplasm +hyaloplasms +hyaluronidase +hyaluronidases +hybrid +hybridism +hybridisms +hybridities +hybridity +hybridization +hybridizations +hybridize +hybridized +hybridizer +hybridizers +hybridizes +hybridizing +hybridoma +hybridomas +hybrids +hybris +hybrises +hydathode +hydathodes +hydatid +hydatids +hydra +hydracid +hydracids +hydrae +hydragog +hydragogs +hydralazine +hydralazines +hydrangea +hydrangeas +hydrant +hydranth +hydranths +hydrants +hydras +hydrase +hydrases +hydrate +hydrated +hydrates +hydrating +hydration +hydrations +hydrator +hydrators +hydraulic +hydraulically +hydraulics +hydrazide +hydrazides +hydrazine +hydrazines +hydria +hydriae +hydric +hydrid +hydride +hydrides +hydrids +hydro +hydrobiological +hydrobiologies +hydrobiologist +hydrobiologists +hydrobiology +hydrocarbon +hydrocarbons +hydrocele +hydroceles +hydrocephalic +hydrocephalics +hydrocephalies +hydrocephalus +hydrocephaluses +hydrocephaly +hydrochloride +hydrochlorides +hydrochlorothiazide +hydrochlorothiazides +hydrocolloid +hydrocolloidal +hydrocolloids +hydrocortisone +hydrocortisones +hydrocrack +hydrocracked +hydrocracker +hydrocrackers +hydrocracking +hydrocrackings +hydrocracks +hydrodynamic +hydrodynamical +hydrodynamically +hydrodynamicist +hydrodynamicists +hydrodynamics +hydroelectric +hydroelectrically +hydroelectricities +hydroelectricity +hydrofoil +hydrofoils +hydrogel +hydrogels hydrogen -i +hydrogenase +hydrogenases +hydrogenate +hydrogenated +hydrogenates +hydrogenating +hydrogenation +hydrogenations +hydrogenous +hydrogens +hydrographer +hydrographers +hydrographic +hydrographies +hydrography +hydroid +hydroids +hydrokinetic +hydrolase +hydrolases +hydrologic +hydrological +hydrologically +hydrologies +hydrologist +hydrologists +hydrology +hydrolysate +hydrolysates +hydrolyses +hydrolysis +hydrolytic +hydrolytically +hydrolyzable +hydrolyzate +hydrolyzates +hydrolyze +hydrolyzed +hydrolyzes +hydrolyzing +hydromagnetic +hydromancies +hydromancy +hydromechanical +hydromechanics +hydromedusa +hydromedusae +hydromel +hydromels +hydrometallurgical +hydrometallurgies +hydrometallurgist +hydrometallurgists +hydrometallurgy +hydrometeor +hydrometeorological +hydrometeorologies +hydrometeorologist +hydrometeorologists +hydrometeorology +hydrometeors +hydrometer +hydrometers +hydrometric +hydromorphic +hydronic +hydronically +hydronium +hydroniums +hydropathic +hydropathies +hydropathy +hydroperoxide +hydroperoxides +hydrophane +hydrophanes +hydrophilic +hydrophilicities +hydrophilicity +hydrophobia +hydrophobias +hydrophobic +hydrophobicities +hydrophobicity +hydrophone +hydrophones +hydrophyte +hydrophytes +hydrophytic +hydropic +hydroplane +hydroplaned +hydroplanes +hydroplaning +hydroponic +hydroponically +hydroponics +hydropower +hydropowers +hydrops +hydropses +hydropsies +hydropsy +hydroquinone +hydroquinones +hydros +hydrosere +hydroseres +hydroski +hydroskis +hydrosol +hydrosolic +hydrosols +hydrospace +hydrospaces +hydrosphere +hydrospheres +hydrospheric +hydrostatic +hydrostatically +hydrostatics +hydrotherapies +hydrotherapy +hydrothermal +hydrothermally +hydrothoraces +hydrothorax +hydrothoraxes +hydrotropic +hydrotropism +hydrotropisms +hydrous +hydroxide +hydroxides +hydroxy +hydroxyapatite +hydroxyapatites +hydroxyl +hydroxylamine +hydroxylamines +hydroxylapatite +hydroxylapatites +hydroxylase +hydroxylases +hydroxylate +hydroxylated +hydroxylates +hydroxylating +hydroxylation +hydroxylations +hydroxylic +hydroxyls +hydroxyproline +hydroxyprolines +hydroxytryptamine +hydroxytryptamines +hydroxyurea +hydroxyureas +hydroxyzine +hydroxyzines +hydrozoan +hydrozoans +hyena +hyenas +hyenic +hyenine +hyenoid +hyetal +hygeist +hygeists +hygieist +hygieists +hygiene +hygienes +hygienic +hygienically +hygienics +hygienist +hygienists +hygrograph +hygrographs +hygrometer +hygrometers +hygrometric +hygrophilous +hygrophyte +hygrophytes +hygrophytic +hygroscopic +hygroscopicities +hygroscopicity +hying +hyla +hylas +hylozoic +hylozoism +hylozoisms +hylozoist +hylozoistic +hylozoists +hymen +hymenal +hymeneal +hymeneally +hymeneals +hymenia +hymenial +hymenium +hymeniums +hymenoptera +hymenopteran +hymenopterans +hymenopteron +hymenopterons +hymenopterous +hymens +hymn +hymnal +hymnals +hymnaries +hymnary +hymnbook +hymnbooks +hymned +hymning +hymnist +hymnists +hymnless +hymnlike +hymnodies +hymnody +hymnologies +hymnology +hymns +hyoid +hyoidal +hyoidean +hyoids +hyoscine +hyoscines +hyoscyamine +hyoscyamines +hyp +hypabyssal +hypabyssally +hypaethral +hypallage +hypallages +hypanthia +hypanthium +hype +hyped +hyper +hyperacid +hyperacidities +hyperacidity +hyperactive +hyperactives +hyperactivities +hyperactivity +hyperacuities +hyperacuity +hyperacute +hyperaesthesia +hyperaesthesias +hyperaesthetic +hyperaggressive +hyperalert +hyperalimentation +hyperalimentations +hyperarid +hyperarousal +hyperarousals +hyperaware +hyperawareness +hyperawarenesses +hyperbaric +hyperbarically +hyperbola +hyperbolae +hyperbolas +hyperbole +hyperboles +hyperbolic +hyperbolical +hyperbolically +hyperbolist +hyperbolists +hyperbolize +hyperbolized +hyperbolizes +hyperbolizing +hyperboloid +hyperboloidal +hyperboloids +hyperborean +hyperboreans +hypercalcemia +hypercalcemias +hypercalcemic +hypercapnia +hypercapnias +hypercapnic +hypercatabolism +hypercatabolisms +hypercatalectic +hypercatalexes +hypercatalexis +hypercautious +hypercharge +hypercharged +hypercharges +hypercholesterolemia +hypercholesterolemias +hypercholesterolemic +hypercivilized +hypercoagulabilities +hypercoagulability +hypercoagulable +hypercompetitive +hypercomplex +hyperconcentration +hyperconcentrations +hyperconscious +hyperconsciousness +hyperconsciousnesses +hypercorrect +hypercorrection +hypercorrections +hypercorrectly +hypercorrectness +hypercorrectnesses +hypercritic +hypercritical +hypercritically +hypercriticism +hypercriticisms +hypercritics +hypercube +hypercubes +hyperdevelopment +hyperdevelopments +hyperefficient +hyperemia +hyperemias +hyperemic +hyperemotional +hyperemotionalities +hyperemotionality +hyperendemic +hyperenergetic +hyperesthesia +hyperesthesias +hyperesthetic +hypereutectic +hypereutectoid +hyperexcitabilities +hyperexcitability +hyperexcitable +hyperexcited +hyperexcitement +hyperexcitements +hyperexcretion +hyperexcretions +hyperextend +hyperextended +hyperextending +hyperextends +hyperextension +hyperextensions +hyperfastidious +hyperfine +hyperfunction +hyperfunctional +hyperfunctioning +hyperfunctions +hypergamies +hypergamy +hyperglycemia +hyperglycemias +hyperglycemic +hypergol +hypergolic +hypergolically +hypergols +hyperhidroses +hyperhidrosis +hyperimmune +hyperimmunization +hyperimmunizations +hyperimmunize +hyperimmunized +hyperimmunizes +hyperimmunizing +hyperinflated +hyperinflation +hyperinflationary +hyperinflations +hyperinnervation +hyperinnervations +hyperinsulinism +hyperinsulinisms +hyperintellectual +hyperintelligent +hyperintense +hyperinvolution +hyperinvolutions +hyperirritabilities +hyperirritability +hyperirritable +hyperkeratoses +hyperkeratosis +hyperkeratotic +hyperkineses +hyperkinesia +hyperkinesias +hyperkinesis +hyperkinetic +hyperlipemia +hyperlipemias +hyperlipemic +hyperlipidemia +hyperlipidemias +hypermania +hypermanias +hypermanic +hypermarket +hypermarkets +hypermasculine +hypermedia +hypermetabolic +hypermetabolism +hypermetabolisms +hypermeter +hypermeters +hypermetric +hypermetrical +hypermetropia +hypermetropias +hypermetropic +hypermnesia +hypermnesias +hypermnesic +hypermobilities +hypermobility +hypermodern +hypermodernist +hypermodernists +hypermutabilities +hypermutability +hypermutable +hypernationalistic +hyperon +hyperons +hyperope +hyperopes +hyperopia +hyperopias +hyperopic +hyperostoses +hyperostosis +hyperostotic +hyperparasite +hyperparasites +hyperparasitic +hyperparasitism +hyperparasitisms +hyperparathyroidism +hyperparathyroidisms +hyperphagia +hyperphagias +hyperphagic +hyperphysical +hyperpigmentation +hyperpigmentations +hyperpigmented +hyperpituitarism +hyperpituitarisms +hyperpituitary +hyperplane +hyperplanes +hyperplasia +hyperplasias +hyperplastic +hyperploid +hyperploidies +hyperploids +hyperploidy +hyperpnea +hyperpneas +hyperpneic +hyperpolarization +hyperpolarizations +hyperpolarize +hyperpolarized +hyperpolarizes +hyperpolarizing +hyperproducer +hyperproducers +hyperproduction +hyperproductions +hyperpure +hyperpyrexia +hyperpyrexias +hyperrational +hyperrationalities +hyperrationality +hyperreactive +hyperreactivities +hyperreactivity +hyperreactor +hyperreactors +hyperrealism +hyperrealisms +hyperrealist +hyperrealistic +hyperresponsive +hyperromantic +hypersaline +hypersalinities +hypersalinity +hypersalivation +hypersalivations +hypersecretion +hypersecretions +hypersensitive +hypersensitiveness +hypersensitivenesses +hypersensitivities +hypersensitivity +hypersensitization +hypersensitizations +hypersensitize +hypersensitized +hypersensitizes +hypersensitizing +hypersexual +hypersexualities +hypersexuality +hypersomnolence +hypersomnolences +hypersonic +hypersonically +hyperspace +hyperspaces +hyperstatic +hypersthene +hypersthenes +hypersthenic +hyperstimulate +hyperstimulated +hyperstimulates +hyperstimulating +hyperstimulation +hyperstimulations +hypersurface +hypersurfaces +hypersusceptibilities +hypersusceptibility +hypersusceptible +hypertense +hypertension +hypertensions +hypertensive +hypertensives +hypertext +hypertexts +hyperthermia +hyperthermias +hyperthermic +hyperthyroid +hyperthyroidism +hyperthyroidisms +hypertonia +hypertonias +hypertonic +hypertonicities +hypertonicity +hypertrophic +hypertrophied +hypertrophies +hypertrophy +hypertrophying +hypertypical +hyperurbanism +hyperurbanisms +hyperuricemia +hyperuricemias +hypervelocities +hypervelocity +hyperventilate +hyperventilated +hyperventilates +hyperventilating +hyperventilation +hyperventilations +hypervigilance +hypervigilances +hypervigilant +hypervirulent +hyperviscosities +hyperviscosity +hypervitaminoses +hypervitaminosis +hypes +hypha +hyphae +hyphal +hyphemia +hyphemias +hyphen +hyphenate +hyphenated +hyphenates +hyphenating +hyphenation +hyphenations +hyphened +hyphening +hyphenless +hyphens +hyping +hypnagogic +hypnic +hypnogogic +hypnoid +hypnoidal +hypnopompic +hypnoses +hypnosis +hypnotherapies +hypnotherapist +hypnotherapists +hypnotherapy +hypnotic +hypnotically +hypnotics +hypnotism +hypnotisms +hypnotist +hypnotists +hypnotizabilities +hypnotizability +hypnotizable +hypnotize +hypnotized +hypnotizes +hypnotizing +hypo +hypoacid +hypoallergenic +hypoblast +hypoblasts +hypocalcemia +hypocalcemias +hypocalcemic +hypocaust +hypocausts +hypocenter +hypocenters +hypocentral +hypochlorite +hypochlorites +hypochondria +hypochondriac +hypochondriacal +hypochondriacally +hypochondriacs +hypochondrias +hypochondriases +hypochondriasis +hypocorism +hypocorisms +hypocoristic +hypocoristical +hypocoristically +hypocotyl +hypocotyls +hypocrisies +hypocrisy +hypocrite +hypocrites +hypocritical +hypocritically +hypocycloid +hypocycloids +hypoderm +hypodermal +hypodermic +hypodermically +hypodermics +hypodermis +hypodermises +hypoderms +hypodiploid +hypodiploidies +hypodiploidy +hypoed +hypoeutectoid +hypogastric +hypogea +hypogeal +hypogean +hypogene +hypogeous +hypogeum +hypoglossal +hypoglossals +hypoglycemia +hypoglycemias +hypoglycemic +hypoglycemics +hypogynies +hypogynous +hypogyny +hypoing +hypokalemia +hypokalemias +hypokalemic +hypolimnia +hypolimnion +hypolimnions +hypomagnesemia +hypomagnesemias +hypomania +hypomanias +hypomanic +hypomorph +hypomorphic +hypomorphs +hyponea +hyponeas +hyponoia +hyponoias +hypoparathyroidism +hypoparathyroidisms +hypopharynges +hypopharynx +hypopharynxes +hypophyseal +hypophysectomies +hypophysectomize +hypophysectomized +hypophysectomizes +hypophysectomizing +hypophysectomy +hypophyses +hypophysial +hypophysis +hypopituitarism +hypopituitarisms +hypopituitary +hypoplasia +hypoplasias +hypoplastic +hypoploid +hypoploids +hypopnea +hypopneas +hypopyon +hypopyons +hypos +hyposensitization +hyposensitizations +hyposensitize +hyposensitized +hyposensitizes +hyposensitizing +hypospadias +hypospadiases +hypostases +hypostasis +hypostatic +hypostatically +hypostatization +hypostatizations +hypostatize +hypostatized +hypostatizes +hypostatizing +hypostome +hypostomes +hypostyle +hypostyles +hypotactic +hypotaxes +hypotaxis +hypotension +hypotensions +hypotensive +hypotensives +hypotenuse +hypotenuses +hypothalami +hypothalamic +hypothalamus +hypothec +hypothecate +hypothecated +hypothecates +hypothecating +hypothecation +hypothecations +hypothecator +hypothecators +hypothecs +hypothenuse +hypothenuses +hypothermal +hypothermia +hypothermias +hypothermic +hypotheses +hypothesis +hypothesize +hypothesized +hypothesizes +hypothesizing +hypothetical +hypothetically +hypothyroid +hypothyroidism +hypothyroidisms +hypotonia +hypotonias +hypotonic +hypotonicities +hypotonicity +hypoxanthine +hypoxanthines +hypoxemia +hypoxemias +hypoxemic +hypoxia +hypoxias +hypoxic +hyps +hypsometer +hypsometers +hypsometric +hyraces +hyracoid +hyracoids +hyrax +hyraxes +hyson +hysons +hyssop +hyssops +hysterectomies +hysterectomized +hysterectomy +hystereses +hysteresis +hysteretic +hysteria +hysterias +hysteric +hysterical +hysterically +hysterics +hysteroid +hysterotomies +hysterotomy +hyte +iamb +iambi +iambic +iambics +iambs +iambus +iambuses +iatric +iatrical +iatrogenic +iatrogenically +ibex +ibexes +ibices +ibidem +ibis +ibises +ibogaine +ibogaines +ibuprofen +ibuprofens ice -icecream +iceberg +icebergs +iceblink +iceblinks +iceboat +iceboater +iceboaters +iceboating +iceboatings +iceboats +icebound +icebox +iceboxes +icebreaker +icebreakers +icecap +icecaps +iced +icefall +icefalls +icehouse +icehouses +icekhana +icekhanas +iceless +icelike +iceman +icemen +ices +ich +ichneumon +ichneumons +ichnite +ichnites +ichor +ichorous +ichors +ichs +ichthyic +ichthyofauna +ichthyofaunae +ichthyofaunal +ichthyofaunas +ichthyological +ichthyologically +ichthyologies +ichthyologist +ichthyologists +ichthyology +ichthyophagous +ichthyosaur +ichthyosaurian +ichthyosaurians +ichthyosaurs +icicle +icicled +icicles +icier +iciest +icily +iciness +icinesses +icing +icings +ick +icker +ickers +ickier +ickiest +ickily +ickiness +ickinesses +icky +icon +icones +iconic +iconical +iconically +iconicities +iconicity +iconoclasm +iconoclasms +iconoclast +iconoclastic +iconoclastically +iconoclasts +iconographer +iconographers +iconographic +iconographical +iconographically +iconographies +iconography +iconolatries +iconolatry +iconological +iconologies +iconology +iconoscope +iconoscopes +iconostases +iconostasis +icons +icosahedra +icosahedral +icosahedron +icosahedrons +icteric +icterics +icterus +icteruses +ictic +ictus +ictuses +icy +id idea +ideal +idealess +idealise +idealised +idealises +idealising +idealism +idealisms +idealist +idealistic +idealistically +idealists +idealities +ideality +idealization +idealizations +idealize +idealized +idealizer +idealizers +idealizes +idealizing +idealless +ideally +idealogies +idealogue +idealogues +idealogy +ideals +ideas +ideate +ideated +ideates +ideating +ideation +ideational +ideationally +ideations +ideative +idem +idempotent +idempotents +identic +identical +identically +identicalness +identicalnesses +identifiable +identifiably identification +identifications +identified +identifier +identifiers +identifies identify +identifying +identities +identity +ideogram +ideogramic +ideogrammatic +ideogrammic +ideograms +ideograph +ideographic +ideographically +ideographies +ideographs +ideography +ideologic +ideological +ideologically +ideologies +ideologist +ideologists +ideologize +ideologized +ideologizes +ideologizing +ideologue +ideologues +ideology +ideomotor +ides +idioblast +idioblastic +idioblasts +idiocies +idiocy +idiographic +idiolect +idiolectal +idiolects idiom +idiomatic +idiomatically +idiomaticness +idiomaticnesses +idiomorphic +idioms +idiopathic +idiopathically +idiosyncrasies +idiosyncrasy +idiosyncratic +idiosyncratically +idiot +idiotic +idiotical +idiotically +idiotism +idiotisms +idiots +idle +idled +idleness +idlenesses +idler +idlers +idles +idlesse +idlesses +idlest +idling +idly +idocrase +idocrases +idol +idolater +idolaters +idolator +idolators +idolatries +idolatrous +idolatrously +idolatrousness +idolatrousnesses +idolatry +idolise +idolised +idoliser +idolisers +idolises +idolising +idolism +idolisms +idolization +idolizations +idolize +idolized +idolizer +idolizers +idolizes +idolizing +idols +idoneities +idoneity +idoneous +ids +idyl +idylist +idylists +idyll +idyllic +idyllically +idyllist +idyllists +idylls +idyls if +iff +iffier +iffiest +iffiness +iffinesses +iffy +ifs +igloo +igloos +iglu +iglus +ignatia +ignatias +igneous +ignescent +ignified +ignifies +ignify +ignifying +ignimbrite +ignimbrites +ignitabilities +ignitability +ignitable +ignite +ignited +igniter +igniters +ignites +ignitible +igniting +ignition +ignitions +ignitor +ignitors +ignitron +ignitrons +ignobilities +ignobility +ignoble +ignobleness +ignoblenesses +ignobly +ignominies +ignominious +ignominiously +ignominiousness +ignominiousnesses +ignominy +ignorable +ignorami +ignoramus +ignoramuses +ignorance +ignorances +ignorant +ignorantly +ignorantness +ignorantnesses ignore +ignored +ignorer +ignorers +ignores +ignoring +iguana +iguanas +iguanian +iguanians +iguanodon +iguanodons +ihram +ihrams +ikat +ikats +ikebana +ikebanas +ikon +ikons +ilea +ileac +ileal +ileitides +ileitis +ileum +ileus +ileuses +ilex +ilexes +ilia +iliac +iliad +iliads +ilial +ilium +ilk +ilka +ilks ill +illation +illations +illative +illatively +illatives +illaudable +illaudably illegal +illegalities +illegality +illegalization +illegalizations +illegalize +illegalized +illegalizes +illegalizing +illegally +illegals +illegibilities +illegibility +illegible +illegibly +illegitimacies +illegitimacy +illegitimate +illegitimately +iller +illest +illiberal +illiberalism +illiberalisms +illiberalities +illiberality +illiberally +illiberalness +illiberalnesses +illicit +illicitly +illimitabilities +illimitability +illimitable +illimitableness +illimitablenesses +illimitably +illinium +illiniums +illiquid +illiquidities +illiquidity +illite +illiteracies +illiteracy +illiterate +illiterately +illiterateness +illiteratenesses +illiterates +illites +illitic illness +illnesses +illocutionary +illogic +illogical +illogicalities +illogicality +illogically +illogicalness +illogicalnesses +illogics +ills +illume +illumed +illumes +illuminable +illuminance +illuminances +illuminant +illuminants +illuminate +illuminated +illuminates +illuminati +illuminating +illuminatingly +illumination +illuminations +illuminative +illuminator +illuminators +illumine +illumined +illumines +illuming +illumining +illuminism +illuminisms +illuminist +illuminists +illusion +illusional +illusionary +illusionism +illusionisms +illusionist +illusionistic +illusionistically +illusionists +illusions +illusive +illusively +illusiveness +illusivenesses +illusorily +illusoriness +illusorinesses +illusory +illustrate +illustrated +illustrates +illustrating +illustration +illustrational +illustrations +illustrative +illustratively +illustrator +illustrators +illustrious +illustriously +illustriousness +illustriousnesses +illuvia +illuvial +illuviated +illuviation +illuviations +illuvium +illuviums +illy +ilmenite +ilmenites +image +imaged +imager +imageries +imagers +imagery +images +imaginable +imaginableness +imaginablenesses +imaginably +imaginal +imaginaries +imaginarily +imaginariness +imaginarinesses +imaginary +imagination +imaginations +imaginative +imaginatively +imaginativeness +imaginativenesses imagine +imagined +imaginer +imaginers +imagines +imaging +imagings +imagining +imagism +imagisms +imagist +imagistic +imagistically +imagists +imago +imagoes +imagos +imam +imamate +imamates +imams +imaret +imarets +imaum +imaums +imbalance +imbalanced +imbalances +imbalm +imbalmed +imbalmer +imbalmers +imbalming +imbalms +imbark +imbarked +imbarking +imbarks +imbecile +imbeciles +imbecilic +imbecilities +imbecility +imbed +imbedded +imbedding +imbeds +imbibe +imbibed +imbiber +imbibers +imbibes +imbibing +imbibition +imbibitional +imbibitions +imbitter +imbittered +imbittering +imbitters +imblaze +imblazed +imblazes +imblazing +imbodied +imbodies +imbody +imbodying +imbolden +imboldened +imboldening +imboldens +imbosom +imbosomed +imbosoming +imbosoms +imbower +imbowered +imbowering +imbowers +imbricate +imbricated +imbricates +imbricating +imbrication +imbrications +imbroglio +imbroglios +imbrown +imbrowned +imbrowning +imbrowns +imbrue +imbrued +imbrues +imbruing +imbrute +imbruted +imbrutes +imbruting +imbue +imbued +imbues +imbuing +imid +imidazole +imidazoles +imide +imides +imidic +imido +imids +imine +imines +imino +imipramine +imipramines +imitable +imitate +imitated +imitates +imitating +imitation +imitations +imitative +imitatively +imitativeness +imitativenesses +imitator +imitators +immaculacies +immaculacy +immaculate +immaculately +immane +immanence +immanences +immanencies +immanency +immanent +immanentism +immanentisms +immanentist +immanentistic +immanentists +immanently +immaterial +immaterialism +immaterialisms +immaterialist +immaterialists +immaterialities +immateriality +immaterialize +immaterialized +immaterializes +immaterializing +immature +immaturely +immatures +immaturities +immaturity +immeasurable +immeasurableness +immeasurablenesses +immeasurably +immediacies +immediacy +immediate immediately +immediateness +immediatenesses +immedicable +immedicably +immemorial +immemorially +immense +immensely +immenseness +immensenesses +immenser +immensest +immensities +immensity +immensurable +immerge +immerged +immerges +immerging +immerse +immersed +immerses +immersible +immersing +immersion +immersions +immesh +immeshed +immeshes +immeshing +immethodical +immethodically +immies +immigrant +immigrants +immigrate +immigrated +immigrates +immigrating immigration +immigrational +immigrations +imminence +imminences +imminencies +imminency +imminent +imminently +immingle +immingled +immingles +immingling +immiscibilities +immiscibility +immiscible +immitigable +immitigably +immittance +immittances +immix +immixed +immixes +immixing +immixture +immixtures +immobile +immobilism +immobilisms +immobilities +immobility +immobilization +immobilizations +immobilize +immobilized +immobilizer +immobilizers +immobilizes +immobilizing +immoderacies +immoderacy +immoderate +immoderately +immoderateness +immoderatenesses +immoderation +immoderations +immodest +immodesties +immodestly +immodesty +immolate +immolated +immolates +immolating +immolation +immolations +immolator +immolators +immoral +immoralism +immoralisms +immoralist +immoralists +immoralities +immorality +immorally +immortal +immortalise +immortalised +immortalises +immortalising +immortalities +immortality +immortalization +immortalizations +immortalize +immortalized +immortalizer +immortalizers +immortalizes +immortalizing +immortally +immortals +immortelle +immortelles +immotile +immovabilities +immovability +immovable +immovableness +immovablenesses +immovables +immovably +immune +immunes +immunise +immunised +immunises +immunising +immunities +immunity +immunization +immunizations +immunize +immunized +immunizes +immunizing +immunoassay +immunoassayable +immunoassays +immunoblot +immunoblots +immunoblotting +immunoblottings +immunochemical +immunochemically +immunochemist +immunochemistries +immunochemistry +immunochemists +immunocompetence +immunocompetences +immunocompetent +immunocompromised +immunocytochemical +immunocytochemically +immunocytochemistries +immunocytochemistry +immunodeficiencies +immunodeficiency +immunodeficient +immunodiagnoses +immunodiagnosis +immunodiagnostic +immunodiffusion +immunodiffusions +immunoelectrophoreses +immunoelectrophoresis +immunoelectrophoretic +immunoelectrophoretically +immunofluorescence +immunofluorescences +immunofluorescent +immunogen +immunogeneses +immunogenesis +immunogenetic +immunogenetically +immunogeneticist +immunogeneticists +immunogenetics +immunogenic +immunogenicities +immunogenicity +immunogens +immunoglobulin +immunoglobulins +immunohematologic +immunohematological +immunohematologies +immunohematologist +immunohematologists +immunohematology +immunohistochemical +immunohistochemistries +immunohistochemistry +immunologic +immunological +immunologically +immunologies +immunologist +immunologists +immunology +immunomodulator +immunomodulators +immunomodulatory +immunopathologic +immunopathological +immunopathologies +immunopathologist +immunopathologists +immunopathology +immunoprecipitate +immunoprecipitated +immunoprecipitates +immunoprecipitating +immunoprecipitation +immunoprecipitations +immunoreactive +immunoreactivities +immunoreactivity +immunoregulation +immunoregulations +immunoregulatory +immunosorbent +immunosorbents +immunosuppress +immunosuppressant +immunosuppressants +immunosuppressed +immunosuppresses +immunosuppressing +immunosuppression +immunosuppressions +immunosuppressive +immunotherapeutic +immunotherapies +immunotherapy +immure +immured +immurement +immurements +immures +immuring +immutabilities +immutability +immutable +immutableness +immutablenesses +immutably +immy +imp +impact +impacted +impacter +impacters +impacting +impaction +impactions +impactive +impactor +impactors +impacts +impaint +impainted +impainting +impaints +impair +impaired +impairer +impairers +impairing +impairment +impairments +impairs +impala +impalas +impale +impaled +impalement +impalements +impaler +impalers +impales +impaling +impalpabilities +impalpability +impalpable +impalpably +impanel +impaneled +impaneling +impanelled +impanelling +impanels +imparadise +imparadised +imparadises +imparadising +imparities +imparity +impark +imparked +imparking +imparks +impart +impartation +impartations +imparted +imparter +imparters +impartial +impartialities +impartiality +impartially +impartible +impartibly +imparting +impartment +impartments +imparts +impassabilities +impassability +impassable +impassableness +impassablenesses +impassably +impasse +impasses +impassibilities +impassibility +impassible +impassibly +impassion +impassioned +impassioning +impassions +impassive +impassively +impassiveness +impassivenesses +impassivities +impassivity +impaste +impasted +impastes +impasting +impasto +impastoed +impastos +impatience +impatiences +impatiens +impatient +impatiently +impavid +impawn +impawned +impawning +impawns +impeach +impeachable +impeached +impeaches +impeaching +impeachment +impeachments +impearl +impearled +impearling +impearls +impeccabilities +impeccability +impeccable +impeccably +impecuniosities +impecuniosity +impecunious +impecuniously +impecuniousness +impecuniousnesses +imped +impedance +impedances +impede +impeded +impeder +impeders +impedes +impediment +impedimenta +impediments +impeding +impel +impelled +impeller +impellers +impelling +impellor +impellors +impels +impend +impended +impendent +impending +impends +impenetrabilities +impenetrability +impenetrable +impenetrably +impenitence +impenitences +impenitent +impenitently +imperative +imperatively +imperativeness +imperativenesses +imperatives +imperator +imperatorial +imperators +imperceivable +imperceptible +imperceptibly +imperceptive +imperceptiveness +imperceptivenesses +impercipience +impercipiences +impercipient +imperfect +imperfection +imperfections +imperfective +imperfectives +imperfectly +imperfectness +imperfectnesses +imperfects +imperforate +imperia +imperial +imperialism +imperialisms +imperialist +imperialistic +imperialistically +imperialists +imperially +imperials +imperil +imperiled +imperiling +imperilled +imperilling +imperilment +imperilments +imperils +imperious +imperiously +imperiousness +imperiousnesses +imperishabilities +imperishability +imperishable +imperishableness +imperishablenesses +imperishables +imperishably +imperium +imperiums +impermanence +impermanences +impermanencies +impermanency +impermanent +impermanently +impermeabilities +impermeability +impermeable +impermissibilities +impermissibility +impermissible +impermissibly +impersonal +impersonalities +impersonality +impersonalization +impersonalizations +impersonalize +impersonalized +impersonalizes +impersonalizing +impersonally +impersonate +impersonated +impersonates +impersonating +impersonation +impersonations +impersonator +impersonators +impertinence +impertinences +impertinencies +impertinency +impertinent +impertinently +imperturbabilities +imperturbability +imperturbable +imperturbably +impervious +imperviously +imperviousness +imperviousnesses +impetiginous +impetigo +impetigos +impetrate +impetrated +impetrates +impetrating +impetration +impetrations +impetuosities +impetuosity +impetuous +impetuously +impetuousness +impetuousnesses +impetus +impetuses +imphee +imphees +impi +impieties +impiety +imping +impinge +impinged +impingement +impingements +impinger +impingers +impinges +impinging +impings +impious +impiously +impis +impish +impishly +impishness +impishnesses +implacabilities +implacability +implacable +implacably +implant +implantable +implantation +implantations +implanted +implanter +implanters +implanting +implants +implausibilities +implausibility +implausible +implausibly +implead +impleaded +impleading +impleads +impledge +impledged +impledges +impledging +implement +implementation +implementations +implemented +implementer +implementers +implementing +implementor +implementors +implements +implicate +implicated +implicates +implicating +implication +implications +implicative +implicatively +implicativeness +implicativenesses +implicit +implicitly +implicitness +implicitnesses +implied +implies +implode +imploded +implodes +imploding +implore +implored +implorer +implorers +implores +imploring +imploringly +implosion +implosions +implosive +implosives +imply +implying +impolicies +impolicy +impolite +impolitely +impoliteness +impolitenesses +impolitic +impolitical +impolitically +impoliticly +imponderabilities +imponderability +imponderable +imponderables +imponderably +impone +imponed +impones +imponing +imporous import +importable importance +importances +importancies +importancy important +importantly +importation +importations +imported +importer +importers +importing +imports +importunate +importunately +importunateness +importunatenesses +importune +importuned +importunely +importuner +importuners +importunes +importuning +importunities +importunity +impose +imposed +imposer +imposers +imposes +imposing +imposingly +imposition +impositions +impossibilities +impossibility impossible +impossibleness +impossiblenesses +impossibly +impost +imposted +imposter +imposters +imposthume +imposthumes +imposting +impostor +impostors +imposts +impostume +impostumes +imposture +impostures +impotence +impotences +impotencies +impotency +impotent +impotently +impotents +impound +impounded +impounding +impoundment +impoundments +impounds +impoverish +impoverished +impoverisher +impoverishers +impoverishes +impoverishing +impoverishment +impoverishments +impower +impowered +impowering +impowers +impracticabilities +impracticability +impracticable +impracticably +impractical +impracticalities +impracticality +impractically +imprecate +imprecated +imprecates +imprecating +imprecation +imprecations +imprecatory +imprecise +imprecisely +impreciseness +imprecisenesses +imprecision +imprecisions +impregn +impregnabilities +impregnability +impregnable +impregnableness +impregnablenesses +impregnably +impregnant +impregnants +impregnate +impregnated +impregnates +impregnating +impregnation +impregnations +impregnator +impregnators +impregned +impregning +impregns +impresa +impresario +impresarios +impresas +imprese +impreses impress +impressed +impresses +impressibilities +impressibility +impressible +impressing impression +impressionabilities +impressionability +impressionable +impressionism +impressionisms +impressionist +impressionistic +impressionistically +impressionists +impressions +impressive +impressively +impressiveness +impressivenesses +impressment +impressments +impressure +impressures +imprest +imprests +imprimatur +imprimaturs +imprimis +imprint +imprinted +imprinter +imprinters +imprinting +imprintings +imprints +imprison +imprisoned +imprisoning +imprisonment +imprisonments +imprisons +improbabilities +improbability +improbable +improbably +impromptu +impromptus +improper +improperly +improperness +impropernesses +improprieties +impropriety +improv +improvabilities +improvability +improvable improve +improved +improvement +improvements +improver +improvers +improves +improvidence +improvidences +improvident +improvidently +improving +improvisation +improvisational +improvisationally +improvisations +improvisator +improvisatore +improvisatores +improvisatori +improvisatorial +improvisators +improvisatory +improvise +improvised +improviser +improvisers +improvises +improvising +improvisor +improvisors +improvs +imprudence +imprudences +imprudent +imprudently +imps +impudence +impudences +impudent +impudently +impudicities +impudicity +impugn +impugnable +impugned +impugner +impugners +impugning +impugns +impuissance +impuissances +impuissant +impulse +impulsed +impulses +impulsing +impulsion +impulsions +impulsive +impulsively +impulsiveness +impulsivenesses +impulsivities +impulsivity +impunities +impunity +impure +impurely +impureness +impurenesses +impurities +impurity +imputabilities +imputability +imputable +imputation +imputations +imputative +imputatively +impute +imputed +imputer +imputers +imputes +imputing in +inabilities +inability +inaccessibilities +inaccessibility +inaccessible +inaccessibly +inaccuracies +inaccuracy +inaccurate +inaccurately +inaction +inactions +inactivate +inactivated +inactivates +inactivating +inactivation +inactivations +inactive +inactively +inactivities +inactivity +inadequacies +inadequacy +inadequate +inadequately +inadequateness +inadequatenesses +inadmissibilities +inadmissibility +inadmissible +inadmissibly +inadvertence +inadvertences +inadvertencies +inadvertency +inadvertent +inadvertently +inadvisabilities +inadvisability +inadvisable +inalienabilities +inalienability +inalienable +inalienably +inalterabilities +inalterability +inalterable +inalterableness +inalterablenesses +inalterably +inamorata +inamoratas +inane +inanely +inaneness +inanenesses +inaner +inanes +inanest +inanimate +inanimately +inanimateness +inanimatenesses +inanities +inanition +inanitions +inanity +inapparent +inapparently +inappeasable +inappetence +inappetences +inapplicabilities +inapplicability +inapplicable +inapplicably +inapposite +inappositely +inappositeness +inappositenesses +inappreciable +inappreciably +inappreciative +inappreciatively +inappreciativeness +inappreciativenesses +inapproachable +inappropriate +inappropriately +inappropriateness +inappropriatenesses +inapt +inaptitude +inaptitudes +inaptly +inaptness +inaptnesses +inarable +inarch +inarched +inarches +inarching +inarguable +inarguably +inarm +inarmed +inarming +inarms +inarticulacies +inarticulacy +inarticulate +inarticulately +inarticulateness +inarticulatenesses +inarticulates +inartistic +inartistically +inattention +inattentions +inattentive +inattentively +inattentiveness +inattentivenesses +inaudibilities +inaudibility +inaudible +inaudibly +inaugural +inaugurals +inaugurate +inaugurated +inaugurates +inaugurating +inauguration +inaugurations +inaugurator +inaugurators +inauspicious +inauspiciously +inauspiciousness +inauspiciousnesses +inauthentic +inauthenticities +inauthenticity +inbeing +inbeings +inboard +inboards +inborn +inbound +inbounded +inbounding +inbounds +inbreathe +inbreathed +inbreathes +inbreathing +inbred +inbreds +inbreed +inbreeding +inbreedings +inbreeds +inbuilt +inburst +inbursts +inby +inbye +incage +incaged +incages +incaging +incalculabilities +incalculability +incalculable +incalculably +incalescence +incalescences +incalescent +incandesce +incandesced +incandescence +incandescences +incandescent +incandescently +incandescents +incandesces +incandescing +incant +incantation +incantational +incantations +incantatory +incanted +incanting +incants +incapabilities +incapability +incapable +incapableness +incapablenesses +incapably +incapacitate +incapacitated +incapacitates +incapacitating +incapacitation +incapacitations +incapacities +incapacity +incarcerate +incarcerated +incarcerates +incarcerating +incarceration +incarcerations +incardination +incardinations +incarnadine +incarnadined +incarnadines +incarnadining +incarnate +incarnated +incarnates +incarnating +incarnation +incarnations +incase +incased +incases +incasing +incaution +incautions +incautious +incautiously +incautiousness +incautiousnesses +incendiaries +incendiarism +incendiarisms +incendiary +incense +incensed +incenses +incensing +incenter +incenters +incentive +incentives +incept +incepted +incepting +inception +inceptions +inceptive +inceptively +inceptives +inceptor +inceptors +incepts +incertitude +incertitudes +incessancies +incessancy +incessant +incessantly +incest +incests +incestuous +incestuously +incestuousness +incestuousnesses inch +inched +inches +inching +inchmeal +inchoate +inchoately +inchoateness +inchoatenesses +inchoative +inchoatively +inchoatives +inchworm +inchworms +incidence +incidences incident +incidental +incidentally +incidentals +incidents +incinerate +incinerated +incinerates +incinerating +incineration +incinerations +incinerator +incinerators +incipience +incipiences +incipiencies +incipiency +incipient +incipiently +incipit +incipits +incisal +incise +incised +incises +incising +incision +incisions +incisive +incisively +incisiveness +incisivenesses +incisor +incisors +incisory +incisure +incisures +incitant +incitants +incitation +incitations +incite +incited +incitement +incitements +inciter +inciters +incites +inciting +incivil +incivilities +incivility +inclasp +inclasped +inclasping +inclasps +inclemencies +inclemency +inclement +inclemently +inclinable +inclination +inclinational +inclinations +incline +inclined +incliner +incliners +inclines +inclining +inclinings +inclinometer +inclinometers +inclip +inclipped +inclipping +inclips +inclose +inclosed +incloser +inclosers +incloses +inclosing +inclosure +inclosures +includable include +included +includes +includible +including +inclusion +inclusions +inclusive +inclusively +inclusiveness +inclusivenesses +incoercible +incog +incogitant +incognita +incognitas +incognito +incognitos +incognizance +incognizances +incognizant +incogs +incoherence +incoherences +incoherent +incoherently +incombustibilities +incombustibility +incombustible +incombustibles income +incomer +incomers +incomes +incoming +incomings +incommensurabilities +incommensurability +incommensurable +incommensurables +incommensurably +incommensurate +incommode +incommoded +incommodes +incommoding +incommodious +incommodiously +incommodiousness +incommodiousnesses +incommodities +incommodity +incommunicabilities +incommunicability +incommunicable +incommunicably +incommunicado +incommunicative +incommutable +incommutably +incomparabilities +incomparability +incomparable +incomparably +incompatibilities +incompatibility +incompatible +incompatibles +incompatibly +incompetence +incompetences +incompetencies +incompetency +incompetent +incompetently +incompetents +incomplete +incompletely +incompleteness +incompletenesses +incompliant +incomprehensibilities +incomprehensibility +incomprehensible +incomprehensibleness +incomprehensiblenesses +incomprehensibly +incomprehension +incomprehensions +incompressible +incomputable +incomputably +inconceivabilities +inconceivability +inconceivable +inconceivableness +inconceivablenesses +inconceivably +inconcinnities +inconcinnity +inconclusive +inconclusively +inconclusiveness +inconclusivenesses +incondite +inconformities +inconformity +incongruence +incongruences +incongruent +incongruently +incongruities +incongruity +incongruous +incongruously +incongruousness +incongruousnesses +inconnu +inconnus +inconscient +inconsecutive +inconsequence +inconsequences +inconsequent +inconsequential +inconsequentialities +inconsequentiality +inconsequentially +inconsequently +inconsiderable +inconsiderableness +inconsiderablenesses +inconsiderably +inconsiderate +inconsiderately +inconsiderateness +inconsideratenesses +inconsideration +inconsiderations +inconsistence +inconsistences +inconsistencies +inconsistency +inconsistent +inconsistently +inconsolable +inconsolableness +inconsolablenesses +inconsolably +inconsonance +inconsonances +inconsonant +inconspicuous +inconspicuously +inconspicuousness +inconspicuousnesses +inconstancies +inconstancy +inconstant +inconstantly +inconsumable +inconsumably +incontestabilities +incontestability +incontestable +incontestably +incontinence +incontinences +incontinencies +incontinency +incontinent +incontinently +incontrollable +incontrovertible +incontrovertibly +inconvenience +inconvenienced +inconveniences +inconveniencies +inconveniencing +inconveniency +inconvenient +inconveniently +inconvertibilities +inconvertibility +inconvertible +inconvertibly +inconvincible +incony +incoordination +incoordinations +incorporable +incorporate +incorporated +incorporates +incorporating +incorporation +incorporations +incorporative +incorporator +incorporators +incorporeal +incorporeally +incorporeities +incorporeity +incorpse +incorpsed +incorpses +incorpsing +incorrect +incorrectly +incorrectness +incorrectnesses +incorrigibilities +incorrigibility +incorrigible +incorrigibleness +incorrigiblenesses +incorrigibles +incorrigibly +incorrupt +incorrupted +incorruptibilities +incorruptibility +incorruptible +incorruptibles +incorruptibly +incorruption +incorruptions +incorruptly +incorruptness +incorruptnesses +increasable increase +increased +increaser +increasers +increases +increasing +increasingly +increate +incredibilities +incredibility +incredible +incredibleness +incrediblenesses +incredibly +incredulities +incredulity +incredulous +incredulously +increment +incremental +incrementalism +incrementalisms +incrementalist +incrementalists +incrementally +incremented +incrementing +increments +increscent +incriminate +incriminated +incriminates +incriminating +incrimination +incriminations +incriminatory +incross +incrossed +incrosses +incrossing +incrust +incrustation +incrustations +incrusted +incrusting +incrusts +incubate +incubated +incubates +incubating +incubation +incubations +incubative +incubator +incubators +incubatory +incubi +incubus +incubuses +incudal +incudate +incudes +inculcate +inculcated +inculcates +inculcating +inculcation +inculcations +inculcator +inculcators +inculpable +inculpate +inculpated +inculpates +inculpating +inculpation +inculpations +inculpatory +incult +incumbencies +incumbency +incumbent +incumbents +incumber +incumbered +incumbering +incumbers +incunable +incunables +incunabula +incunabulum +incur +incurable +incurables +incurably +incuriosities +incuriosity +incurious +incuriously +incuriousness +incuriousnesses +incurred +incurrence +incurrences +incurrent +incurring +incurs +incursion +incursions +incurvate +incurvated +incurvates +incurvating +incurvation +incurvations +incurvature +incurvatures +incurve +incurved +incurves +incurving +incus +incuse +incused +incuses +incusing +indaba +indabas +indagate +indagated +indagates +indagating +indagation +indagations +indagator +indagators +indamin +indamine +indamines +indamins +indebted +indebtedness +indebtednesses +indecencies +indecency +indecent +indecenter +indecentest +indecently +indecipherable +indecision +indecisions +indecisive +indecisively +indecisiveness +indecisivenesses +indeclinable +indecomposable +indecorous +indecorously +indecorousness +indecorousnesses +indecorum +indecorums indeed +indefatigabilities +indefatigability +indefatigable +indefatigableness +indefatigablenesses +indefatigably +indefeasibilities +indefeasibility +indefeasible +indefeasibly +indefectibilities +indefectibility +indefectible +indefectibly +indefensibilities +indefensibility +indefensible +indefensibly +indefinabilities +indefinability +indefinable +indefinableness +indefinablenesses +indefinables +indefinably +indefinite +indefinitely +indefiniteness +indefinitenesses +indefinites +indehiscence +indehiscences +indehiscent +indelibilities +indelibility +indelible +indelibly +indelicacies +indelicacy +indelicate +indelicately +indelicateness +indelicatenesses +indemnification +indemnifications +indemnified +indemnifier +indemnifiers +indemnifies +indemnify +indemnifying +indemnities +indemnity +indemonstrable +indemonstrably +indene +indenes +indent +indentation +indentations +indented +indenter +indenters +indenting +indention +indentions +indentor +indentors +indents +indenture +indentured +indentures +indenturing independence +independences +independencies +independency independent +independently +independents +indescribable +indescribableness +indescribablenesses +indescribably +indestructibilities +indestructibility +indestructible +indestructibleness +indestructiblenesses +indestructibly +indeterminable +indeterminably +indeterminacies +indeterminacy +indeterminate +indeterminately +indeterminateness +indeterminatenesses +indetermination +indeterminations +indeterminism +indeterminisms +indeterminist +indeterministic +indeterminists +indevout +index +indexation +indexations +indexed +indexer +indexers +indexes +indexical +indexicals +indexing +indexings +indican +indicans +indicant +indicants indicate +indicated +indicates +indicating +indication +indicational +indications +indicative +indicatively +indicatives +indicator +indicators +indicatory +indices +indicia +indicias +indicium +indiciums +indict +indictable +indicted +indictee +indictees +indicter +indicters +indicting +indiction +indictions +indictment +indictments +indictor +indictors +indicts +indie +indies +indifference +indifferences +indifferencies +indifferency +indifferent +indifferentism +indifferentisms +indifferentist +indifferentists +indifferently +indigen +indigence +indigences +indigene +indigenes +indigenization +indigenizations +indigenize +indigenized +indigenizes +indigenizing +indigenous +indigenously +indigenousness +indigenousnesses +indigens +indigent +indigents +indigested +indigestibilities +indigestibility +indigestible +indigestibles +indigestion +indigestions +indign +indignant +indignantly +indignation +indignations +indignities +indignity +indignly +indigo +indigoes +indigoid +indigoids +indigos +indigotin +indigotins +indirect +indirection +indirections +indirectly +indirectness +indirectnesses +indiscernible +indisciplinable +indiscipline +indisciplined +indisciplines +indiscoverable +indiscreet +indiscreetly +indiscreetness +indiscreetnesses +indiscretion +indiscretions +indiscriminate +indiscriminately +indiscriminateness +indiscriminatenesses +indiscriminating +indiscriminatingly +indiscrimination +indiscriminations +indispensabilities +indispensability +indispensable +indispensableness +indispensablenesses +indispensables +indispensably +indispose +indisposed +indisposes +indisposing +indisposition +indispositions +indisputable +indisputableness +indisputablenesses +indisputably +indissociable +indissociably +indissolubilities +indissolubility +indissoluble +indissolubleness +indissolublenesses +indissolubly +indistinct +indistinctive +indistinctly +indistinctness +indistinctnesses +indistinguishabilities +indistinguishability +indistinguishable +indistinguishableness +indistinguishablenesses +indistinguishably +indite +indited +inditer +inditers +indites +inditing +indium +indiums +individual +individualise +individualised +individualises +individualising +individualism +individualisms +individualist +individualistic +individualistically +individualists +individualities +individuality +individualization +individualizations +individualize +individualized +individualizes +individualizing +individually +individuals +individuate +individuated +individuates +individuating +individuation +individuations +indivisibilities +indivisibility +indivisible +indivisibles +indivisibly +indocile +indocilities +indocility +indoctrinate +indoctrinated +indoctrinates +indoctrinating +indoctrination +indoctrinations +indoctrinator +indoctrinators +indol +indole +indolence +indolences +indolent +indolently +indoles +indols +indomethacin +indomethacins +indomitabilities +indomitability +indomitable +indomitableness +indomitablenesses +indomitably +indoor +indoors +indophenol +indophenols +indorse +indorsed +indorsee +indorsees +indorsement +indorsements +indorser +indorsers +indorses +indorsing +indorsor +indorsors +indow +indowed +indowing +indows +indoxyl +indoxyls +indraft +indrafts +indrawn +indri +indris +indubitabilities +indubitability +indubitable +indubitableness +indubitablenesses +indubitably +induce +induced +inducement +inducements +inducer +inducers +induces +inducibilities +inducibility +inducible +inducing +induct +inductance +inductances +inducted +inductee +inductees +inducting +induction +inductions +inductive +inductively +inductor +inductors +inducts +indue +indued +indues +induing +indulge +indulged +indulgence +indulgences +indulgent +indulgently +indulger +indulgers +indulges +indulging +indulin +induline +indulines +indulins +indult +indults +indurate +indurated +indurates +indurating +induration +indurations +indurative +indusia +indusial +indusium +industrial +industrialise +industrialised +industrialises +industrialising +industrialism +industrialisms +industrialist +industrialists +industrialization +industrializations +industrialize +industrialized +industrializes +industrializing +industrially +industrials +industries +industrious +industriously +industriousness +industriousnesses industry +indwell +indweller +indwellers +indwelling +indwells +indwelt +inearth +inearthed +inearthing +inearths +inebriant +inebriants +inebriate +inebriated +inebriates +inebriating +inebriation +inebriations +inebrieties +inebriety +inedible +inedita +inedited +ineducabilities +ineducability +ineducable +ineffabilities +ineffability +ineffable +ineffableness +ineffablenesses +ineffably +ineffaceabilities +ineffaceability +ineffaceable +ineffaceably +ineffective +ineffectively +ineffectiveness +ineffectivenesses +ineffectual +ineffectualities +ineffectuality +ineffectually +ineffectualness +ineffectualnesses +inefficacies +inefficacious +inefficaciously +inefficaciousness +inefficaciousnesses +inefficacy +inefficiencies +inefficiency +inefficient +inefficiently +inefficients +inegalitarian +inelastic +inelasticities +inelasticity +inelegance +inelegances +inelegant +inelegantly +ineligibilities +ineligibility +ineligible +ineligibles +ineloquent +ineloquently +ineluctabilities +ineluctability +ineluctable +ineluctably +ineludible +inenarrable +inept +ineptitude +ineptitudes +ineptly +ineptness +ineptnesses +inequalities +inequality +inequitable +inequitably +inequities +inequity +inequivalve +inequivalved +ineradicabilities +ineradicability +ineradicable +ineradicably +inerrancies +inerrancy +inerrant +inert +inertia +inertiae +inertial +inertially +inertias +inertly +inertness +inertnesses +inerts +inescapable +inescapably +inessential +inessentials +inestimable +inestimably +inevitabilities +inevitability +inevitable +inevitableness +inevitablenesses +inevitably +inexact +inexactitude +inexactitudes +inexactly +inexactness +inexactnesses +inexcusable +inexcusableness +inexcusablenesses +inexcusably +inexhaustibilities +inexhaustibility +inexhaustible +inexhaustibleness +inexhaustiblenesses +inexhaustibly +inexistence +inexistences +inexistent +inexorabilities +inexorability +inexorable +inexorableness +inexorablenesses +inexorably +inexpedience +inexpediences +inexpediencies +inexpediency +inexpedient +inexpediently +inexpensive +inexpensively +inexpensiveness +inexpensivenesses +inexperience +inexperienced +inexperiences +inexpert +inexpertly +inexpertness +inexpertnesses +inexperts +inexpiable +inexpiably +inexplainable +inexplicabilities +inexplicability +inexplicable +inexplicableness +inexplicablenesses +inexplicably +inexplicit +inexpressibilities +inexpressibility +inexpressible +inexpressibleness +inexpressiblenesses +inexpressibly +inexpressive +inexpressively +inexpressiveness +inexpressivenesses +inexpugnable +inexpugnableness +inexpugnablenesses +inexpugnably +inexpungible +inextinguishable +inextinguishably +inextricabilities +inextricability +inextricable +inextricably +infall +infallibilities +infallibility +infallible +infallibly +infalling +infalls +infamies +infamous +infamously +infamy +infancies +infancy +infant +infanta +infantas +infante +infantes +infanticidal +infanticide +infanticides +infantile +infantilism +infantilisms +infantilities +infantility +infantilization +infantilizations +infantilize +infantilized +infantilizes +infantilizing +infantine +infantries +infantry +infantryman +infantrymen +infants +infarct +infarcted +infarction +infarctions +infarcts +infare +infares +infatuate +infatuated +infatuates +infatuating +infatuation +infatuations +infauna +infaunae +infaunal +infaunas +infeasibilities +infeasibility +infeasible +infect +infected +infecter +infecters +infecting +infection +infections +infectious +infectiously +infectiousness +infectiousnesses +infective +infectivities +infectivity +infector +infectors +infects +infecund +infelicities +infelicitous +infelicitously +infelicity +infeoff +infeoffed +infeoffing +infeoffs +infer +inferable +inference +inferences +inferential +inferentially +inferior +inferiorities +inferiority +inferiorly +inferiors +infernal +infernally +inferno +infernos +inferred +inferrer +inferrers +inferrible +inferring +infers +infertile +infertilities +infertility +infest +infestant +infestants +infestation +infestations +infested +infester +infesters +infesting +infests +infibulate +infibulated +infibulates +infibulating +infibulation +infibulations +infidel +infidelities +infidelity +infidels +infield +infielder +infielders +infields +infight +infighter +infighters +infighting +infightings +infights +infiltrate +infiltrated +infiltrates +infiltrating +infiltration +infiltrations +infiltrative +infiltrator +infiltrators +infinite +infinitely +infiniteness +infinitenesses +infinites +infinitesimal +infinitesimally +infinitesimals +infinities +infinitival +infinitive +infinitively +infinitives +infinitude +infinitudes +infinity +infirm +infirmaries +infirmary +infirmed +infirming +infirmities +infirmity +infirmly +infirms +infix +infixation +infixations +infixed +infixes +infixing +infixion +infixions +inflame +inflamed +inflamer +inflamers +inflames +inflaming +inflammabilities +inflammability +inflammable +inflammableness +inflammablenesses +inflammables +inflammably +inflammation +inflammations +inflammatorily +inflammatory +inflatable +inflatables +inflate +inflated +inflater +inflaters +inflates +inflating +inflation +inflationary +inflationism +inflationisms +inflationist +inflationists +inflations +inflator +inflators +inflect +inflectable +inflected +inflecting +inflection +inflectional +inflectionally +inflections +inflective +inflects +inflexed +inflexibilities +inflexibility +inflexible +inflexibleness +inflexiblenesses +inflexibly +inflexion +inflexions +inflict +inflicted +inflicter +inflicters +inflicting +infliction +inflictions +inflictive +inflictor +inflictors +inflicts +inflight +inflorescence +inflorescences +inflow +inflows influence +influenceable +influenced +influences +influencing +influent +influential +influentially +influentials +influents +influenza +influenzal +influenzas +influx +influxes +info +infold +infolded +infolder +infolders +infolding +infolds +infomercial +infomercials inform +informal +informalities +informality +informally +informant +informants +informatics information +informational +informationally +informations +informative +informatively +informativeness +informativenesses +informatorily +informatory +informed +informedly +informer +informers +informing +informs +infos +infotainment +infotainments +infought +infra +infract +infracted +infracting +infraction +infractions +infracts +infrahuman +infrahumans +infrangibilities +infrangibility +infrangible +infrangibly +infrared +infrareds +infrasonic +infraspecific +infrastructure +infrastructures +infrequence +infrequences +infrequencies +infrequency +infrequent +infrequently +infringe +infringed +infringement +infringements +infringer +infringers +infringes +infringing +infrugal +infundibula +infundibular +infundibuliform +infundibulum +infuriate +infuriated +infuriates +infuriating +infuriatingly +infuriation +infuriations +infuse +infused +infuser +infusers +infuses +infusibilities +infusibility +infusible +infusibleness +infusiblenesses +infusing +infusion +infusions +infusive +infusorian +infusorians +ingate +ingates +ingather +ingathered +ingathering +ingatherings +ingathers +ingenious +ingeniously +ingeniousness +ingeniousnesses +ingenue +ingenues +ingenuities +ingenuity +ingenuous +ingenuously +ingenuousness +ingenuousnesses +ingest +ingesta +ingested +ingestible +ingesting +ingestion +ingestions +ingestive +ingests +ingle +inglenook +inglenooks +ingles +inglorious +ingloriously +ingloriousness +ingloriousnesses +ingoing +ingot +ingoted +ingoting +ingots +ingraft +ingrafted +ingrafting +ingrafts +ingrain +ingrained +ingrainedly +ingraining +ingrains +ingrate +ingrates +ingratiate +ingratiated +ingratiates +ingratiating +ingratiatingly +ingratiation +ingratiations +ingratiatory +ingratitude +ingratitudes +ingredient +ingredients +ingress +ingresses +ingression +ingressions +ingressive +ingressiveness +ingressivenesses +ingressives +ingroup +ingroups +ingrowing +ingrown +ingrownness +ingrownnesses +ingrowth +ingrowths +inguinal +ingulf +ingulfed +ingulfing +ingulfs +ingurgitate +ingurgitated +ingurgitates +ingurgitating +ingurgitation +ingurgitations +inhabit +inhabitable +inhabitancies +inhabitancy +inhabitant +inhabitants +inhabitation +inhabitations +inhabited +inhabiter +inhabiters +inhabiting +inhabits +inhalant +inhalants +inhalation +inhalational +inhalations +inhalator +inhalators +inhale +inhaled +inhaler +inhalers +inhales +inhaling +inharmonic +inharmonies +inharmonious +inharmoniously +inharmoniousness +inharmoniousnesses +inharmony +inhaul +inhauler +inhaulers +inhauls +inhere +inhered +inherence +inherences +inherent +inherently +inheres +inhering +inherit +inheritabilities +inheritability +inheritable +inheritableness +inheritablenesses +inheritance +inheritances +inherited +inheriting +inheritor +inheritors +inheritress +inheritresses +inheritrices +inheritrix +inheritrixes +inherits +inhesion +inhesions +inhibin +inhibins +inhibit +inhibited +inhibiting +inhibition +inhibitions +inhibitive +inhibitor +inhibitors +inhibitory +inhibits +inholding +inholdings +inhomogeneities +inhomogeneity +inhomogeneous +inhospitable +inhospitableness +inhospitablenesses +inhospitably +inhospitalities +inhospitality +inhuman +inhumane +inhumanely +inhumanities +inhumanity +inhumanly +inhumanness +inhumannesses +inhumation +inhumations +inhume +inhumed +inhumer +inhumers +inhumes +inhuming +inia +inimical +inimically +inimitable +inimitableness +inimitablenesses +inimitably +inion +iniquities +iniquitous +iniquitously +iniquitousness +iniquitousnesses +iniquity initial +initialed +initialing +initialism +initialisms +initialization +initializations +initialize +initialized +initializes +initializing +initialled +initialling +initially +initialness +initialnesses +initials +initiate +initiated +initiates +initiating +initiation +initiations +initiative +initiatives +initiator +initiators +initiatory +inject +injectable +injectables +injectant +injectants +injected +injecting +injection +injections +injective +injector +injectors +injects +injudicious +injudiciously +injudiciousness +injudiciousnesses +injunction +injunctions +injunctive injure +injured +injurer +injurers +injures +injuries +injuring +injurious +injuriously +injuriousness +injuriousnesses injury +injustice +injustices ink +inkberries +inkberry +inkblot +inkblots +inked +inker +inkers +inkhorn +inkhorns +inkier +inkiest +inkiness +inkinesses +inking +inkjet +inkle +inkles +inkless +inklike +inkling +inklings +inkpot +inkpots +inks +inkstand +inkstands +inkstone +inkstones +inkwell +inkwells +inkwood +inkwoods +inky +inlace +inlaced +inlaces +inlacing +inlaid +inland +inlander +inlanders +inlands +inlay +inlayer +inlayers +inlaying +inlays +inlet +inlets +inletting +inlier +inliers +inly +inmate +inmates +inmesh +inmeshed +inmeshes +inmeshing +inmost inn +innards +innate +innately +innateness +innatenesses +inned +inner +innerly +innermost +innermosts +inners +innersole +innersoles +innerspring +innervate +innervated +innervates +innervating +innervation +innervations +innerve +innerved +innerves +innerving +inning +innings +innkeeper +innkeepers +innless +innocence +innocences +innocencies +innocency innocent +innocenter +innocentest +innocently +innocents +innocuous +innocuously +innocuousness +innocuousnesses +innominate +innovate +innovated +innovates +innovating +innovation +innovational +innovations +innovative +innovatively +innovativeness +innovativenesses +innovator +innovators +innovatory +inns +innuendo +innuendoed +innuendoes +innuendoing +innuendos +innumerable +innumerably +innumeracies +innumeracy +innumerate +innumerates +innumerous +inobservance +inobservances +inobservant +inocula +inoculant +inoculants +inoculate +inoculated +inoculates +inoculating +inoculation +inoculations +inoculative +inoculator +inoculators +inoculum +inoculums +inoffensive +inoffensively +inoffensiveness +inoffensivenesses +inoperable +inoperative +inoperativeness +inoperativenesses +inoperculate +inoperculates +inopportune +inopportunely +inopportuneness +inopportunenesses +inordinate +inordinately +inordinateness +inordinatenesses +inorganic +inorganically +inosculate +inosculated +inosculates +inosculating +inosculation +inosculations +inosite +inosites +inositol +inositols +inotropic +inpatient +inpatients +inphase +inpour +inpoured +inpouring +inpourings +inpours +input +inputs +inputted +inputting +inquest +inquests +inquiet +inquieted +inquieting +inquiets +inquietude +inquietudes +inquiline +inquilines +inquire +inquired +inquirer +inquirers +inquires +inquiries +inquiring +inquiringly +inquiry +inquisition +inquisitional +inquisitions +inquisitive +inquisitively +inquisitiveness +inquisitivenesses +inquisitor +inquisitorial +inquisitorially +inquisitors +inro +inroad +inroads +inrush +inrushes +ins +insalubrious +insalubrities +insalubrity +insane +insanely +insaneness +insanenesses +insaner +insanest +insanitary +insanitation +insanitations +insanities +insanity +insatiabilities +insatiability +insatiable +insatiableness +insatiablenesses +insatiably +insatiate +insatiately +insatiateness +insatiatenesses +inscape +inscapes +inscribe +inscribed +inscriber +inscribers +inscribes +inscribing +inscription +inscriptional +inscriptions +inscriptive +inscriptively +inscroll +inscrolled +inscrolling +inscrolls +inscrutabilities +inscrutability +inscrutable +inscrutableness +inscrutablenesses +inscrutably +insculp +insculped +insculping +insculps +inseam +inseams insect +insectan +insectaries +insectary +insecticidal +insecticidally +insecticide +insecticides +insectile +insectivore +insectivores +insectivorous +insects +insecure +insecurely +insecureness +insecurenesses +insecurities +insecurity +inselberg +inselberge +inselbergs +inseminate +inseminated +inseminates +inseminating +insemination +inseminations +inseminator +inseminators +insensate +insensately +insensibilities +insensibility +insensible +insensibleness +insensiblenesses +insensibly +insensitive +insensitively +insensitiveness +insensitivenesses +insensitivities +insensitivity +insentience +insentiences +insentient +inseparabilities +inseparability +inseparable +inseparableness +inseparablenesses +inseparables +inseparably insert +inserted +inserter +inserters +inserting +insertion +insertional +insertions +inserts +inset +insets +insetted +insetter +insetters +insetting +insheath +insheathed +insheathing +insheaths +inshore +inshrine +inshrined +inshrines +inshrining inside +insider +insiders +insides +insidious +insidiously +insidiousness +insidiousnesses +insight +insightful +insightfully +insights +insigne +insignia +insignias +insignificance +insignificances +insignificancies +insignificancy +insignificant +insignificantly +insincere +insincerely +insincerities +insincerity +insinuate +insinuated +insinuates +insinuating +insinuatingly +insinuation +insinuations +insinuative +insinuator +insinuators +insipid +insipidities +insipidity +insipidly insist +insisted +insistence +insistences +insistencies +insistency +insistent +insistently +insister +insisters +insisting +insists +insnare +insnared +insnarer +insnarers +insnares +insnaring +insobrieties +insobriety +insociabilities +insociability +insociable +insociably +insofar +insolate +insolated +insolates +insolating +insolation +insolations +insole +insolence +insolences +insolent +insolently +insolents +insoles +insolubilities +insolubility +insolubilization +insolubilizations +insolubilize +insolubilized +insolubilizes +insolubilizing +insoluble +insolubleness +insolublenesses +insolubles +insolubly +insolvable +insolvably +insolvencies +insolvency +insolvent +insolvents +insomnia +insomniac +insomniacs +insomnias +insomuch +insouciance +insouciances +insouciant +insouciantly +insoul +insouled +insouling +insouls +inspan +inspanned +inspanning +inspans inspect +inspected +inspecting +inspection +inspections +inspective +inspector +inspectorate +inspectorates +inspectors +inspectorship +inspectorships +inspects +insphere +insphered +inspheres +insphering +inspiration +inspirational +inspirationally +inspirations +inspirator +inspirators +inspiratory inspire +inspired +inspirer +inspirers +inspires +inspiring +inspiringly +inspirit +inspirited +inspiriting +inspiritingly +inspirits +inspissate +inspissated +inspissates +inspissating +inspissation +inspissations +inspissator +inspissators +instabilities +instability +instable +instal +install +installation +installations +installed +installer +installers +installing +installment +installments +installs +instalment +instalments +instals +instance +instanced +instances +instancies +instancing +instancy instant +instantaneities +instantaneity +instantaneous +instantaneously +instantaneousness +instantaneousnesses +instanter +instantiate +instantiated +instantiates +instantiating +instantiation +instantiations +instantly +instantness +instantnesses +instants +instar +instarred +instarring +instars +instate +instated +instates +instating +instauration +instaurations instead +instep +insteps +instigate +instigated +instigates +instigating +instigation +instigations +instigative +instigator +instigators +instil +instill +instillation +instillations +instilled +instiller +instillers +instilling +instillment +instillments +instills +instils +instinct +instinctive +instinctively +instincts +instinctual +instinctually institute +instituted +instituter +instituters +institutes +instituting institution +institutional +institutionalise +institutionalised +institutionalises +institutionalising +institutionalism +institutionalisms +institutionalist +institutionalists +institutionalization +institutionalizations +institutionalize +institutionalized +institutionalizes +institutionalizing +institutionally +institutions +institutor +institutors +instroke +instrokes instruct +instructed +instructing instruction +instructional +instructions +instructive +instructively +instructiveness +instructivenesses +instructor +instructors +instructorship +instructorships +instructress +instructresses +instructs instrument +instrumental +instrumentalism +instrumentalisms +instrumentalist +instrumentalists +instrumentalities +instrumentality +instrumentally +instrumentals +instrumentation +instrumentations +instrumented +instrumenting +instruments +insubordinate +insubordinately +insubordinates +insubordination +insubordinations +insubstantial +insubstantialities +insubstantiality +insufferable +insufferableness +insufferablenesses +insufferably +insufficiencies +insufficiency +insufficient +insufficiently +insufflate +insufflated +insufflates +insufflating +insufflation +insufflations +insufflator +insufflators +insulant +insulants +insular +insularism +insularisms +insularities +insularity +insularly +insulars +insulate +insulated +insulates +insulating +insulation +insulations +insulator +insulators +insulin +insulins +insult +insulted +insulter +insulters +insulting +insultingly +insults +insuperable +insuperably +insupportable +insupportably +insuppressible +insurabilities +insurability +insurable insurance +insurances +insurant +insurants insure +insured +insureds +insurer +insurers +insures +insurgence +insurgences +insurgencies +insurgency +insurgent +insurgently +insurgents +insuring +insurmountable +insurmountably +insurrection +insurrectional +insurrectionaries +insurrectionary +insurrectionist +insurrectionists +insurrections +insusceptibilities +insusceptibility +insusceptible +insusceptibly +inswathe +inswathed +inswathes +inswathing +inswept +intact +intactness +intactnesses +intagli +intaglio +intaglioed +intaglioing +intaglios +intake +intakes +intangibilities +intangibility +intangible +intangibleness +intangiblenesses +intangibles +intangibly +intarsia +intarsias +integer +integers +integrabilities +integrability +integrable +integral +integralities +integrality +integrally +integrals +integrand +integrands +integrate +integrated +integrates +integrating +integration +integrationist +integrationists +integrations +integrative +integrator +integrators +integrities +integrity +integument +integumentary +integuments +intellect +intellection +intellections +intellective +intellectively +intellects +intellectual +intellectualism +intellectualisms +intellectualist +intellectualistic +intellectualists +intellectualities +intellectuality +intellectualization +intellectualizations +intellectualize +intellectualized +intellectualizer +intellectualizers +intellectualizes +intellectualizing +intellectually +intellectualness +intellectualnesses +intellectuals intelligence +intelligencer +intelligencers +intelligences +intelligent +intelligential +intelligently +intelligentsia +intelligentsias +intelligibilities +intelligibility +intelligible +intelligibleness +intelligiblenesses +intelligibly +intemperance +intemperances +intemperate +intemperately +intemperateness +intemperatenesses intend +intendance +intendances +intendant +intendants +intended +intendedly +intendeds +intender +intenders +intending +intendment +intendments +intends +intenerate +intenerated +intenerates +intenerating +inteneration +intenerations +intense +intensely +intenseness +intensenesses +intenser +intensest +intensification +intensifications +intensified +intensifier +intensifiers +intensifies +intensify +intensifying +intension +intensional +intensionalities +intensionality +intensionally +intensions +intensities +intensity +intensive +intensively +intensiveness +intensivenesses +intensives +intent intention +intentional +intentionalities +intentionality +intentionally +intentions +intently +intentness +intentnesses +intents +inter +interabang +interabangs +interact +interactant +interactants +interacted +interacting +interaction +interactional +interactions +interactive +interactively +interacts +interage +interagency +interallelic +interallied +interanimation +interanimations +interannual +interassociation +interassociations +interatomic +interavailabilities +interavailability +interbank +interbasin +interbed +interbedded +interbedding +interbeds +interbehavior +interbehavioral +interbehaviors +interborough +interboroughs +interbranch +interbred +interbreed +interbreeding +interbreeds +intercalary +intercalate +intercalated +intercalates +intercalating +intercalation +intercalations +intercalibration +intercalibrations +intercampus +intercaste +intercede +interceded +interceder +interceders +intercedes +interceding +intercell +intercellular +intercensal +intercept +intercepted +intercepter +intercepters +intercepting +interception +interceptions +interceptor +interceptors +intercepts +intercession +intercessional +intercessions +intercessor +intercessors +intercessory +interchain +interchained +interchaining +interchains +interchange +interchangeabilities +interchangeability +interchangeable +interchangeableness +interchangeablenesses +interchangeably +interchanged +interchanger +interchangers +interchanges +interchanging +interchannel +interchromosomal +interchurch +intercity +interclan +interclass +interclub +intercluster +intercoastal +intercollegiate +intercolonial +intercolumniation +intercolumniations +intercom +intercommunal +intercommunicate +intercommunicated +intercommunicates +intercommunicating +intercommunication +intercommunications +intercommunion +intercommunions +intercommunities +intercommunity +intercompany +intercompare +intercompared +intercompares +intercomparing +intercomparison +intercomparisons +intercomprehensibilities +intercomprehensibility +intercoms +interconnect +interconnected +interconnectedness +interconnectednesses +interconnecting +interconnection +interconnections +interconnects +intercontinental +interconversion +interconversions +interconvert +interconverted +interconvertibilities +interconvertibility +interconvertible +interconverting +interconverts +intercooler +intercoolers +intercorporate +intercorrelate +intercorrelated +intercorrelates +intercorrelating +intercorrelation +intercorrelations +intercortical +intercostal +intercostals +intercountry +intercounty +intercouple +intercourse +intercourses +intercrater +intercrop +intercropped +intercropping +intercrops +intercross +intercrossed +intercrosses +intercrossing +intercrystalline +intercultural +interculturally +interculture +intercultures +intercurrent +intercut +intercuts +intercutting +interdealer +interdealers +interdenominational +interdental +interdentally +interdepartmental +interdepartmentally +interdepend +interdepended +interdependence +interdependences +interdependencies +interdependency +interdependent +interdependently +interdepending +interdepends +interdialectal +interdict +interdicted +interdicting +interdiction +interdictions +interdictive +interdictor +interdictors +interdictory +interdicts +interdiffuse +interdiffused +interdiffuses +interdiffusing +interdiffusion +interdiffusions +interdigitate +interdigitated +interdigitates +interdigitating +interdigitation +interdigitations +interdisciplinary +interdistrict +interdivisional +interdominion +interelectrode +interelectrodes +interelectron +interelectronic +interepidemic interest +interested +interestedly interesting +interestingly +interestingness +interestingnesses +interests +interethnic +interface +interfaced +interfaces +interfacial +interfacing +interfacings +interfaculties +interfaculty +interfaith +interfamilial +interfamily +interfere +interfered +interference +interferences +interferential +interferer +interferers +interferes +interfering +interferogram +interferograms +interferometer +interferometers +interferometric +interferometrically +interferometries +interferometry +interferon +interferons +interfertile +interfertilities +interfertility +interfiber +interfile +interfiled +interfiles +interfiling +interfirm +interflow +interfluve +interfluves +interfluvial +interfold +interfolded +interfolding +interfolds +interfraternity +interfuse +interfused +interfuses +interfusing +interfusion +interfusions +intergalactic +intergang +intergeneration +intergenerational +intergenerations +intergeneric +interglacial +interglacials +intergovernmental +intergradation +intergradational +intergradations +intergrade +intergraded +intergrades +intergrading +intergraft +intergrafted +intergrafting +intergrafts +intergranular +intergroup +intergrowth +intergrowths +interhemispheric +interim +interims +interindividual +interindustry +interinfluence +interinfluenced +interinfluences +interinfluencing +interinstitutional +interinvolve +interinvolved +interinvolves +interinvolving +interionic +interior +interiorise +interiorised +interiorises +interiorising +interiorities +interiority +interiorization +interiorizations +interiorize +interiorized +interiorizes +interiorizing +interiorly +interiors +interisland +interject +interjected +interjecting +interjection +interjectional +interjectionally +interjections +interjector +interjectors +interjectory +interjects +interjurisdictional +interknit +interknits +interknitted +interknitting +interlace +interlaced +interlacement +interlacements +interlaces +interlacing +interlacustrine +interlaid +interlaminar +interlap +interlapped +interlapping +interlaps +interlard +interlarded +interlarding +interlards +interlay +interlayer +interlayered +interlayering +interlayers +interlaying +interlays +interleave +interleaved +interleaves +interleaving +interlend +interlending +interlends +interlent +interleukin +interleukins +interlibrary +interline +interlinear +interlinearly +interlinears +interlineation +interlineations +interlined +interliner +interliners +interlines +interlining +interlinings +interlink +interlinked +interlinking +interlinks +interlobular +interlocal +interlock +interlocked +interlocking +interlocks +interlocutor +interlocutors +interlocutory +interlope +interloped +interloper +interlopers +interlopes +interloping +interlude +interludes +interlunar +interlunary +intermale +intermarginal +intermarriage +intermarriages +intermarried +intermarries +intermarry +intermarrying +intermeddle +intermeddled +intermeddler +intermeddlers +intermeddles +intermeddling +intermediacies +intermediacy +intermediaries +intermediary +intermediate +intermediated +intermediately +intermediateness +intermediatenesses +intermediates +intermediating +intermediation +intermediations +intermedin +intermedins +intermembrane +intermenstrual +interment +interments +intermesh +intermeshed +intermeshes +intermeshing +intermetallic +intermetallics +intermezzi +intermezzo +intermezzos +interminable +interminableness +interminablenesses +interminably +intermingle +intermingled +intermingles +intermingling +interministerial +intermission +intermissionless +intermissions +intermit +intermitotic +intermits +intermitted +intermittence +intermittences +intermittencies +intermittency +intermittent +intermittently +intermitter +intermitters +intermitting +intermix +intermixed +intermixes +intermixing +intermixture +intermixtures +intermodal +intermodulation +intermodulations +intermolecular +intermolecularly +intermont +intermontane +intermountain +intermural +intern +internal +internalise +internalised +internalises +internalising +internalities +internality +internalization +internalizations +internalize +internalized +internalizes +internalizing +internally +internals international -internet +internationalise +internationalised +internationalises +internationalising +internationalism +internationalisms +internationalist +internationalists +internationalities +internationality +internationalization +internationalizations +internationalize +internationalized +internationalizes +internationalizing +internationally +internationals +interne +internecine +interned +internee +internees +internes +interneuron +interneuronal +interneurons +interning +internist +internists +internment +internments +internodal +internode +internodes +interns +internship +internships +internuclear +internucleon +internucleonic +internucleotide +internuncial +internuncio +internuncios +interobserver +interobservers +interocean +interoceanic +interoceptive +interoceptor +interoceptors +interoffice +interoperabilities +interoperability +interoperable +interoperative +interoperatives +interorbital +interorgan +interorganizational +interpandemic +interparish +interparochial +interparoxysmal +interparticle +interparty +interpellate +interpellated +interpellates +interpellating +interpellation +interpellations +interpellator +interpellators +interpenetrate +interpenetrated +interpenetrates +interpenetrating +interpenetration +interpenetrations +interperceptual +interpermeate +interpermeated +interpermeates +interpermeating +interpersonal +interpersonally +interphalangeal +interphase +interphases +interplanetary +interplant +interplanted +interplanting +interplants +interplay +interplayed +interplaying +interplays +interplead +interpleaded +interpleader +interpleaders +interpleading +interpleads +interpled +interpluvial +interpoint +interpoints +interpolate +interpolated +interpolates +interpolating +interpolation +interpolations +interpolative +interpolator +interpolators +interpopulation +interpopulational +interpose +interposed +interposer +interposers +interposes +interposing +interposition +interpositions +interpret +interpretabilities +interpretability +interpretable +interpretation +interpretational +interpretations +interpretative +interpretatively +interpreted +interpreter +interpreters +interpreting +interpretive +interpretively +interprets +interprofessional +interprovincial +interproximal +interpsychic +interpupillary +interracial +interracially +interred +interreges +interregional +interregna +interregnum +interregnums +interrelate +interrelated +interrelatedly +interrelatedness +interrelatednesses +interrelates +interrelating +interrelation +interrelations +interrelationship +interrelationships +interreligious +interrenal +interrex +interring +interrobang +interrobangs +interrogate +interrogated +interrogatee +interrogatees +interrogates +interrogating +interrogation +interrogational +interrogations +interrogative +interrogatively +interrogatives +interrogator +interrogatories +interrogators +interrogatory +interrogee +interrogees +interrow interrupt +interrupted +interrupter +interrupters +interruptible +interrupting +interruption +interruptions +interruptive +interruptor +interruptors +interrupts +inters +interscholastic +interschool +interschools +intersect +intersected +intersecting +intersection +intersectional +intersections +intersects +intersegment +intersegmental +intersegments +intersensory +interservice +intersession +intersessions +intersex +intersexes +intersexual +intersexualities +intersexuality +intersexually +intersocietal +intersociety +interspace +interspaced +interspaces +interspacing +interspecies +interspecific +intersperse +interspersed +intersperses +interspersing +interspersion +interspersions +interstadial +interstadials +interstage +interstate +interstates +interstation +interstellar +intersterile +intersterilities +intersterility +interstice +interstices +interstimulation +interstimulations +interstimuli +interstimulus +interstitial +interstitially +interstrain +interstrains +interstrand +interstrands +interstratification +interstratifications +interstratified +interstratifies +interstratify +interstratifying +intersubjective +intersubjectively +intersubjectivities +intersubjectivity +intersubstitutabilities +intersubstitutability +intersubstitutable +intersystem +interterm +interterminal +interterritorial +intertestamental +intertidal +intertidally +intertie +interties +intertill +intertillage +intertillages +intertilled +intertilling +intertills +intertranslatable +intertrial +intertribal +intertroop +intertropical +intertwine +intertwined +intertwinement +intertwinements +intertwines +intertwining +intertwist +intertwisted +intertwisting +intertwists +interunion +interunions +interunit +interuniversity +interurban +interurbans interval +intervale +intervales +intervalley +intervalleys +intervallic +intervalometer +intervalometers +intervals +intervene +intervened +intervener +interveners +intervenes +intervening +intervenor +intervenors +intervention +interventionism +interventionisms +interventionist +interventionists +interventions +interventricular +intervertebral interview +interviewed +interviewee +interviewees +interviewer +interviewers +interviewing +interviews +intervillage +intervisibilities +intervisibility +intervisible +intervisitation +intervisitations +intervocalic +intervocalically +interwar +interweave +interweaved +interweaves +interweaving +interwork +interworked +interworking +interworkings +interworks +interwove +interwoven +interwrought +interzonal +interzone +intestacies +intestacy +intestate +intestates +intestinal +intestinally +intestine +intestines +inthral +inthrall +inthralled +inthralling +inthralls +inthrals +inthrone +inthroned +inthrones +inthroning +inti +intima +intimacies +intimacy +intimae +intimal +intimas +intimate +intimated +intimately +intimateness +intimatenesses +intimater +intimaters +intimates +intimating +intimation +intimations +intime +intimidate +intimidated +intimidates +intimidating +intimidatingly +intimidation +intimidations +intimidator +intimidators +intimidatory +intimist +intimists +intinction +intinctions +intine +intines +intis +intitle +intitled +intitles +intitling +intitule +intituled +intitules +intituling into +intolerabilities +intolerability +intolerable +intolerableness +intolerablenesses +intolerably +intolerance +intolerances +intolerant +intolerantly +intolerantness +intolerantnesses +intomb +intombed +intombing +intombs +intonate +intonated +intonates +intonating +intonation +intonational +intonations +intone +intoned +intoner +intoners +intones +intoning +intort +intorted +intorting +intorts +intown +intoxicant +intoxicants +intoxicate +intoxicated +intoxicatedly +intoxicates +intoxicating +intoxication +intoxications +intracardiac +intracardial +intracardially +intracellular +intracellularly +intracerebral +intracerebrally +intracompany +intracranial +intracranially +intractabilities +intractability +intractable +intractably +intracutaneous +intracutaneously +intraday +intradermal +intradermally +intrados +intradoses +intragalactic +intragenic +intramolecular +intramolecularly +intramural +intramurally +intramuscular +intramuscularly +intranasal +intranasally +intransigeance +intransigeances +intransigeant +intransigeantly +intransigeants +intransigence +intransigences +intransigent +intransigently +intransigents +intransitive +intransitively +intransitiveness +intransitivenesses +intransitivities +intransitivity +intrant +intrants +intraocular +intraocularly +intraperitoneal +intraperitoneally +intrapersonal +intraplate +intrapopulation +intrapreneur +intrapreneurial +intrapreneurs +intrapsychic +intrapsychically +intraspecies +intraspecific +intrastate +intrathecal +intrathecally +intrathoracic +intrathoracically +intrauterine +intravascular +intravascularly +intravenous +intravenouses +intravenously +intraventricular +intraventricularly +intravital +intravitally +intravitam +intrazonal +intreat +intreated +intreating +intreats +intrench +intrenched +intrenches +intrenching +intrepid +intrepidities +intrepidity +intrepidly +intrepidness +intrepidnesses +intricacies +intricacy +intricate +intricately +intricateness +intricatenesses +intrigant +intrigants +intriguant +intriguants +intrigue +intrigued +intriguer +intriguers +intrigues +intriguing +intriguingly +intrinsic +intrinsical +intrinsically +intro introduce +introduced +introducer +introducers +introduces +introducing introduction +introductions +introductorily +introductory +introfied +introfies +introfy +introfying +introgressant +introgressants +introgression +introgressions +introgressive +introit +introits +introject +introjected +introjecting +introjection +introjections +introjects +intromission +intromissions +intromit +intromits +intromitted +intromittent +intromitter +intromitters +intromitting +intron +introns +introrse +intros +introspect +introspected +introspecting +introspection +introspectional +introspectionism +introspectionisms +introspectionist +introspectionistic +introspectionists +introspections +introspective +introspectively +introspectiveness +introspectivenesses +introspects +introversion +introversions +introversive +introversively +introvert +introverted +introverting +introverts +intrude +intruded +intruder +intruders +intrudes +intruding +intrusion +intrusions +intrusive +intrusively +intrusiveness +intrusivenesses +intrusives +intrust +intrusted +intrusting +intrusts +intubate +intubated +intubates +intubating +intubation +intubations +intuit +intuitable +intuited +intuiting +intuition +intuitional +intuitionism +intuitionisms +intuitionist +intuitionists +intuitions +intuitive +intuitively +intuitiveness +intuitivenesses +intuits +intumescence +intumescences +intumescent +inturn +inturned +inturns +intussuscept +intussuscepted +intussuscepting +intussusception +intussusceptions +intussusceptive +intussuscepts +intwine +intwined +intwines +intwining +intwist +intwisted +intwisting +intwists +inulase +inulases +inulin +inulins +inunction +inunctions +inundant +inundate +inundated +inundates +inundating +inundation +inundations +inundator +inundators +inundatory +inurbane +inure +inured +inurement +inurements +inures +inuring +inurn +inurned +inurning +inurns +inutile +inutilities +inutility +invade +invaded +invader +invaders +invades +invading +invaginate +invaginated +invaginates +invaginating +invagination +invaginations +invalid +invalidate +invalidated +invalidates +invalidating +invalidation +invalidations +invalidator +invalidators +invalided +invaliding +invalidism +invalidisms +invalidities +invalidity +invalidly +invalids +invaluable +invaluableness +invaluablenesses +invaluably +invar +invariabilities +invariability +invariable +invariables +invariably +invariance +invariances +invariant +invariants +invars +invasion +invasions +invasive +invasively +invasiveness +invasivenesses +invected +invective +invectively +invectiveness +invectivenesses +invectives +inveigh +inveighed +inveigher +inveighers +inveighing +inveighs +inveigle +inveigled +inveiglement +inveiglements +inveigler +inveiglers +inveigles +inveigling invent +invented +inventer +inventers +inventing invention +inventions +inventive +inventively +inventiveness +inventivenesses +inventor +inventorial +inventorially +inventoried +inventories +inventors +inventory +inventorying +inventress +inventresses +invents +inverities +inverity +inverness +invernesses +inverse +inversely +inverses +inversion +inversions +inversive +invert +invertase +invertases +invertebrate +invertebrates +inverted +inverter +inverters +invertible +inverting +invertor +invertors +inverts +invest +investable +invested +investigate +investigated +investigates +investigating +investigation +investigational +investigations +investigative +investigator +investigators +investigatory +investing +investiture +investitures +investment +investments +investor +investors +invests +inveteracies +inveteracy +inveterate +inveterately +inviabilities +inviability +inviable +inviably +invidious +invidiously +invidiousness +invidiousnesses +invigilate +invigilated +invigilates +invigilating +invigilation +invigilations +invigilator +invigilators +invigorate +invigorated +invigorates +invigorating +invigoratingly +invigoration +invigorations +invigorator +invigorators +invincibilities +invincibility +invincible +invincibleness +invinciblenesses +invincibly +inviolabilities +inviolability +inviolable +inviolableness +inviolablenesses +inviolably +inviolacies +inviolacy +inviolate +inviolately +inviolateness +inviolatenesses +invirile +inviscid +invisibilities +invisibility +invisible +invisibleness +invisiblenesses +invisibles +invisibly +invital invitation +invitational +invitationals +invitations +invitatories +invitatory invite +invited +invitee +invitees +inviter +inviters +invites +inviting +invitingly +invocate +invocated +invocates +invocating +invocation +invocational +invocations +invocatory +invoice +invoiced +invoices +invoicing +invoke +invoked +invoker +invokers +invokes +invoking +involucra +involucral +involucrate +involucre +involucres +involucrum +involuntarily +involuntariness +involuntarinesses +involuntary +involute +involuted +involutes +involuting +involution +involutional +involutions +involve +involved +involvedly +involvement +involvements +involver +involvers +involves +involving +invulnerabilities +invulnerability +invulnerable +invulnerableness +invulnerablenesses +invulnerably +inwall +inwalled +inwalling +inwalls +inward +inwardly +inwardness +inwardnesses +inwards +inweave +inweaved +inweaves +inweaving +inwind +inwinding +inwinds +inwound +inwove +inwoven +inwrap +inwrapped +inwrapping +inwraps +iodate +iodated +iodates +iodating +iodation +iodations +iodic +iodid +iodide +iodides +iodids +iodin +iodinate +iodinated +iodinates +iodinating +iodination +iodinations +iodine +iodines +iodins +iodise +iodised +iodises +iodising +iodism +iodisms +iodize +iodized +iodizer +iodizers +iodizes +iodizing +iodoform +iodoforms +iodophor +iodophors +iodopsin +iodopsins +iodous +iolite +iolites +ion +ionic +ionicities +ionicity +ionics +ionise +ionised +ionises +ionising +ionium +ioniums +ionizable +ionization +ionizations +ionize +ionized +ionizer +ionizers +ionizes +ionizing +ionogen +ionogens +ionomer +ionomers +ionone +ionones +ionophore +ionophores +ionosphere +ionospheres +ionospheric +ionospherically +ions +iontophoreses +iontophoresis +iontophoretic +iontophoretically +iota +iotacism +iotacisms +iotas +ipecac +ipecacs +ipecacuanha +ipecacuanhas +ipomoea +ipomoeas +iproniazid +iproniazids +ipsilateral +ipsilaterally +iracund +irade +irades +irascibilities +irascibility +irascible +irascibleness +irasciblenesses +irascibly +irate +irately +irateness +iratenesses +irater +iratest +ire +ired +ireful +irefully +ireless +irenic +irenical +irenically +irenics +ires +irid +irides +iridescence +iridescences +iridescent +iridescently +iridic +iridium +iridiums +iridologies +iridologist +iridologists +iridology +iridosmine +iridosmines +irids +iring +iris +irised +irises +irising +iritic +iritis +iritises +irk +irked +irking +irks +irksome +irksomely +irksomeness +irksomenesses +iroko +irokos iron +ironbark +ironbarks +ironbound +ironclad +ironclads +irone +ironed +ironer +ironers +irones +ironfisted +ironhanded +ironhearted +ironic +ironical +ironically +ironicalness +ironicalnesses +ironies +ironing +ironings +ironist +ironists +ironize +ironized +ironizes +ironizing +ironlike +ironmaster +ironmasters +ironmonger +ironmongeries +ironmongers +ironmongery +ironness +ironnesses +irons +ironside +ironsides +ironstone +ironstones +ironware +ironwares +ironweed +ironweeds +ironwood +ironwoods +ironwork +ironworker +ironworkers +ironworks +irony +irradiance +irradiances +irradiate +irradiated +irradiates +irradiating +irradiation +irradiations +irradiative +irradiator +irradiators +irradicable +irradicably +irrational +irrationalism +irrationalisms +irrationalist +irrationalistic +irrationalists +irrationalities +irrationality +irrationally +irrationals +irreal +irrealities +irreality +irreclaimable +irreclaimably +irreconcilabilities +irreconcilability +irreconcilable +irreconcilableness +irreconcilablenesses +irreconcilables +irreconcilably +irrecoverable +irrecoverableness +irrecoverablenesses +irrecoverably +irrecusable +irrecusably +irredeemable +irredeemably +irredenta +irredentas +irredentism +irredentisms +irredentist +irredentists +irreducibilities +irreducibility +irreducible +irreducibly +irreflexive +irreformabilities +irreformability +irreformable +irrefragabilities +irrefragability +irrefragable +irrefragably +irrefutabilities +irrefutability +irrefutable +irrefutably +irregardless +irregular +irregularities +irregularity +irregularly +irregulars +irrelative +irrelatively +irrelevance +irrelevances +irrelevancies +irrelevancy +irrelevant +irrelevantly +irreligion +irreligionist +irreligionists +irreligions +irreligious +irreligiously +irremeable +irremediable +irremediableness +irremediablenesses +irremediably +irremovabilities +irremovability +irremovable +irremovably +irreparable +irreparableness +irreparablenesses +irreparably +irrepealabilities +irrepealability +irrepealable +irreplaceabilities +irreplaceability +irreplaceable +irreplaceableness +irreplaceablenesses +irreplaceably +irrepressibilities +irrepressibility +irrepressible +irrepressibly +irreproachabilities +irreproachability +irreproachable +irreproachableness +irreproachablenesses +irreproachably +irreproducibilities +irreproducibility +irreproducible +irresistibilities +irresistibility +irresistible +irresistibleness +irresistiblenesses +irresistibly +irresoluble +irresolute +irresolutely +irresoluteness +irresolutenesses +irresolution +irresolutions +irresolvable +irrespective +irresponsibilities +irresponsibility +irresponsible +irresponsibleness +irresponsiblenesses +irresponsibles +irresponsibly +irresponsive +irresponsiveness +irresponsivenesses +irretrievabilities +irretrievability +irretrievable +irretrievably +irreverence +irreverences +irreverent +irreverently +irreversibilities +irreversibility +irreversible +irreversibly +irrevocabilities +irrevocability +irrevocable +irrevocableness +irrevocablenesses +irrevocably +irridenta +irridentas +irrigate +irrigated +irrigates +irrigating irrigation +irrigations +irrigator +irrigators +irritabilities +irritability +irritable +irritableness +irritablenesses +irritably +irritant +irritants +irritate +irritated +irritates +irritating +irritatingly +irritation +irritations +irritative +irrotational +irrupt +irrupted +irrupting +irruption +irruptions +irruptive +irruptively +irrupts is +isagoge +isagoges +isagogic +isagogics +isallobar +isallobaric +isallobars +isarithm +isarithms +isatin +isatine +isatines +isatinic +isatins +isba +isbas +ischaemia +ischaemias +ischemia +ischemias +ischemic +ischia +ischial +ischium +isentropic +isentropically +isinglass +isinglasses island +islanded +islander +islanders +islanding +islands +isle +isled +isleless +isles +islet +islets +isling +ism +isms +isoagglutinin +isoagglutinins +isoalloxazine +isoalloxazines +isoantibodies +isoantibody +isoantigen +isoantigenic +isoantigens +isobar +isobare +isobares +isobaric +isobars +isobath +isobaths +isobutane +isobutanes +isobutylene +isobutylenes +isocaloric +isocarboxazid +isocarboxazids +isocheim +isocheims +isochime +isochimes +isochor +isochore +isochores +isochors +isochromosome +isochromosomes +isochron +isochronal +isochronally +isochrone +isochrones +isochronism +isochronisms +isochronous +isochronously +isochrons +isocline +isoclines +isocracies +isocracy +isocyanate +isocyanates +isocyclic +isodiametric +isodose +isoelectric +isoelectronic +isoelectronically +isoenzymatic +isoenzyme +isoenzymes +isoenzymic +isogamete +isogametes +isogametic +isogamies +isogamous +isogamy +isogeneic +isogenic +isogenies +isogeny +isogloss +isoglossal +isoglosses +isoglossic +isogon +isogonal +isogonals +isogone +isogones +isogonic +isogonics +isogonies +isogons +isogony +isograft +isografted +isografting +isografts +isogram +isograms +isograph +isographs +isogriv +isogrivs +isohel +isohels +isohyet +isohyetal +isohyets +isolable +isolatable +isolate +isolated +isolates +isolating +isolation +isolationism +isolationisms +isolationist +isolationists +isolations +isolator +isolators +isolead +isoleads +isoleucine +isoleucines +isoline +isolines +isolog +isologs +isologue +isologues +isomer +isomerase +isomerases +isomeric +isomerism +isomerisms +isomerization +isomerizations +isomerize +isomerized +isomerizes +isomerizing +isomers +isometric +isometrically +isometrics +isometries +isometry +isomorph +isomorphic +isomorphically +isomorphism +isomorphisms +isomorphous +isomorphs +isoniazid +isoniazids +isonomic +isonomies +isonomy +isooctane +isooctanes +isopach +isopachs +isophotal +isophote +isophotes +isopiestic +isopleth +isoplethic +isopleths +isopod +isopodan +isopodans +isopods +isoprenaline +isoprenalines +isoprene +isoprenes +isoprenoid +isopropyl +isopropyls +isoproterenol +isoproterenols +isopycnic +isosceles +isosmotic +isosmotically +isospin +isospins +isospories +isospory +isostasies +isostasy +isostatic +isostatically +isotach +isotachs +isotactic +isothere +isotheres +isotherm +isothermal +isothermally +isotherms +isotone +isotones +isotonic +isotonically +isotonicities +isotonicity +isotope +isotopes +isotopic +isotopically +isotopies +isotopy +isotropic +isotropies +isotropy +isotype +isotypes +isotypic +isozyme +isozymes +isozymic +issei +isseis +issuable +issuably +issuance +issuances +issuant +issue +issued +issueless +issuer +issuers +issues +issuing +isthmi +isthmian +isthmians +isthmic +isthmoid +isthmus +isthmuses +istle +istles it +italianate +italianated +italianates +italianating +italianise +italianised +italianises +italianising +italianize +italianized +italianizes +italianizing +italic +italicise +italicised +italicises +italicising +italicization +italicizations +italicize +italicized +italicizes +italicizing +italics +itch +itched +itches +itchier +itchiest +itchily +itchiness +itchinesses +itching +itchings +itchy +item +itemed +iteming +itemise +itemised +itemises +itemising +itemization +itemizations +itemize +itemized +itemizer +itemizers +itemizes +itemizing +items +iterance +iterances +iterant +iterate +iterated +iterates +iterating +iteration +iterations +iterative +iteratively +iterum +ither +ithyphallic +itinerancies +itinerancy +itinerant +itinerantly +itinerants +itineraries +itinerary +itinerate +itinerated +itinerates +itinerating +itineration +itinerations its itself +ivermectin +ivermectins +ivied +ivies +ivories +ivory +ivorybill +ivorybills +ivy +ivylike +iwis +ixia +ixias +ixodid +ixodids +ixora +ixoras +ixtle +ixtles +izar +izars +izzard +izzards +jab +jabbed +jabber +jabbered +jabberer +jabberers +jabbering +jabbers +jabberwockies +jabberwocky +jabbing +jabiru +jabirus +jaborandi +jaborandis +jabot +jaboticaba +jaboticabas +jabots +jabs +jacal +jacales +jacals +jacamar +jacamars +jacana +jacanas +jacaranda +jacarandas +jacinth +jacinthe +jacinthes +jacinths +jack +jackal +jackals +jackanapes +jackanapeses +jackaroo +jackaroos +jackass +jackasseries +jackassery +jackasses +jackboot +jackbooted +jackboots +jackdaw +jackdaws +jacked +jacker +jackeroo +jackeroos +jackers jacket +jacketed +jacketing +jacketless +jackets +jackfish +jackfishes +jackfruit +jackfruits +jackhammer +jackhammered +jackhammering +jackhammers +jackies +jacking +jackknife +jackknifed +jackknifes +jackknifing +jackknives +jackleg +jacklegs +jacklight +jacklights +jackpot +jackpots +jackrabbit +jackrabbits +jackroll +jackrolled +jackrolling +jackrolls +jacks +jackscrew +jackscrews +jacksmelt +jacksmelts +jackstay +jackstays +jackstraw +jackstraws +jacky +jacobin +jacobins +jacobus +jacobuses +jaconet +jaconets +jacquard +jacquards +jacquerie +jacqueries +jactitation +jactitations +jaculate +jaculated +jaculates +jaculating +jade +jaded +jadedly +jadedness +jadednesses +jadeite +jadeites +jades +jading +jadish +jadishly +jaditic +jaeger +jaegers +jag +jager +jagers +jagg +jaggaries +jaggary +jagged +jaggeder +jaggedest +jaggedly +jaggedness +jaggednesses +jagger +jaggeries +jaggers +jaggery +jaggheries +jagghery +jaggier +jaggiest +jagging +jaggs +jaggy +jagless +jagra +jagras +jags +jaguar +jaguarondi +jaguarondis +jaguars +jaguarundi +jaguarundis +jail +jailbait +jailbird +jailbirds +jailbreak +jailbreaks +jailed +jailer +jailers +jailhouse +jailhouses +jailing +jailor +jailors +jails +jake +jakes +jalap +jalapeno +jalapenos +jalapic +jalapin +jalapins +jalaps +jalop +jalopies +jaloppies +jaloppy +jalops +jalopy +jalousie +jalousies jam +jamb +jambalaya +jambalayas +jambe +jambeau +jambeaux +jambed +jambes +jambing +jamboree +jamborees +jambs +jammed +jammer +jammers +jammier +jammies +jammiest +jamming +jammy +jams +jane +janes +jangle +jangled +jangler +janglers +jangles +janglier +jangliest +jangling +jangly +janiform +janisaries +janisary +janissaries +janissary +janitor +janitorial +janitors +janizaries +janizary +janty +japan +japanize +japanized +japanizes +japanizing +japanned +japanner +japanners +japanning +japans +jape +japed +japer +japeries +japers +japery +japes +japing +japingly +japonaiserie +japonaiseries +japonica +japonicas jar +jardiniere +jardinieres +jarful +jarfuls +jargon +jargoned +jargonel +jargonels +jargoning +jargonish +jargonistic +jargonize +jargonized +jargonizes +jargonizing +jargons +jargoon +jargoons +jarhead +jarheads +jarina +jarinas +jarl +jarldom +jarldoms +jarls +jarosite +jarosites +jarovize +jarovized +jarovizes +jarovizing +jarrah +jarrahs +jarred +jarring +jarringly +jars +jarsful +jarvey +jarveys +jasmin +jasmine +jasmines +jasmins +jasper +jaspers +jasperware +jasperwares +jaspery +jassid +jassids +jato +jatos +jauk +jauked +jauking +jauks +jaunce +jaunced +jaunces +jauncing +jaundice +jaundiced +jaundices +jaundicing +jaunt +jaunted +jauntier +jauntiest +jauntily +jauntiness +jauntinesses +jaunting +jaunts +jaunty +jaup +jauped +jauping +jaups +java +javas +javelin +javelina +javelinas +javelined +javelining +javelins jaw +jawan +jawans +jawbone +jawboned +jawboner +jawboners +jawbones +jawboning +jawbonings +jawbreaker +jawbreakers +jawed +jawing +jawlike +jawline +jawlines +jaws +jay +jaybird +jaybirds +jaygee +jaygees +jayhawker +jayhawkers +jays +jayvee +jayvees +jaywalk +jaywalked +jaywalker +jaywalkers +jaywalking +jaywalks jazz +jazzed +jazzer +jazzers +jazzes +jazzier +jazziest +jazzily +jazziness +jazzinesses +jazzing +jazzlike +jazzman +jazzmen +jazzy +jealous +jealousies +jealously +jealousness +jealousnesses +jealousy +jean jeans +jebel +jebels +jee +jeed +jeeing jeep +jeeped +jeepers +jeeping +jeepney +jeepneys +jeeps +jeer +jeered +jeerer +jeerers +jeering +jeeringly +jeers +jees +jeez +jefe +jefes +jehad +jehads +jehu +jehus +jejuna +jejunal +jejune +jejunely +jejuneness +jejunenesses +jejunities +jejunity +jejunum +jell +jellaba +jellabas +jelled +jellied +jellies +jellified +jellifies +jellify +jellifying +jelling +jells +jelly +jellybean +jellybeans +jellyfish +jellyfishes +jellying +jellylike +jelutong +jelutongs +jemadar +jemadars +jemidar +jemidars +jemmied +jemmies +jemmy +jemmying +jennet +jennets +jennies +jenny +jeon +jeopard +jeoparded +jeopardies +jeoparding +jeopardise +jeopardised +jeopardises +jeopardising +jeopardize +jeopardized +jeopardizes +jeopardizing +jeopards +jeopardy +jerboa +jerboas +jereed +jereeds +jeremiad +jeremiads +jerid +jerids +jerk +jerked +jerker +jerkers +jerkier +jerkies +jerkiest +jerkily +jerkin +jerkiness +jerkinesses +jerking +jerkins +jerks +jerkwater +jerky +jeroboam +jeroboams +jerreed +jerreeds +jerrican +jerricans +jerrid +jerrids +jerries +jerry +jerrycan +jerrycans +jersey +jerseyed +jerseys +jess +jessamine +jessamines +jessant +jesse +jessed +jesses +jessing +jest +jested +jester +jesters +jestful +jesting +jestings +jests +jesuit +jesuitic +jesuitical +jesuitically +jesuitism +jesuitisms +jesuitries +jesuitry +jesuits jet +jetbead +jetbeads +jete +jetes +jetlike +jetliner +jetliners +jeton +jetons +jetport +jetports +jets +jetsam +jetsams +jetsom +jetsoms +jetted +jettied +jettier +jetties +jettiest +jetting +jettison +jettisonable +jettisoned +jettisoning +jettisons +jetton +jettons +jetty +jettying +jeu +jeux +jew +jewed +jewel +jeweled +jeweler +jewelers +jeweling +jewelled +jeweller +jewelleries +jewellers jewellery +jewellike +jewelling +jewelries jewelry +jewels +jewelweed +jewelweeds +jewfish +jewfishes +jewing +jews +jezail +jezails +jezebel +jezebels +jiao +jib +jibb +jibbed +jibber +jibbers +jibbing +jibboom +jibbooms +jibbs +jibe +jibed +jiber +jibers +jibes +jibing +jibingly +jibs +jicama +jicamas +jiff +jiffies +jiffs +jiffy +jig +jigaboo +jigaboos +jigged +jigger +jiggered +jiggering +jiggers +jigging +jiggle +jiggled +jiggles +jigglier +jiggliest +jiggling +jiggly +jigs +jigsaw +jigsawed +jigsawing +jigsawn +jigsaws +jihad +jihads +jill +jillion +jillions +jills +jilt +jilted +jilter +jilters +jilting +jilts +jiminy +jimjams +jimmied +jimmies +jimminy +jimmy +jimmying +jimp +jimper +jimpest +jimply +jimpy +jimsonweed +jimsonweeds +jin +jingal +jingall +jingalls +jingals +jingko +jingkoes +jingle +jingled +jingler +jinglers +jingles +jinglier +jingliest +jingling +jingly +jingo +jingoes +jingoish +jingoism +jingoisms +jingoist +jingoistic +jingoistically +jingoists +jink +jinked +jinker +jinkers +jinking +jinks +jinn +jinnee +jinni +jinns +jinricksha +jinrickshas +jinrikisha +jinrikishas +jins +jinx +jinxed +jinxes +jinxing +jipijapa +jipijapas +jism +jisms +jitney +jitneys +jitter +jitterbug +jitterbugged +jitterbugging +jitterbugs +jittered +jitterier +jitteriest +jitteriness +jitterinesses +jittering +jitters +jittery +jiujitsu +jiujitsus +jiujutsu +jiujutsus +jive +jiveass +jived +jiver +jivers +jives +jivey +jivier +jiviest +jiving +jnana +jnanas +jo +joannes job +jobbed +jobber +jobberies +jobbers +jobbery +jobbing +jobholder +jobholders +jobless +joblessness +joblessnesses +jobname +jobnames +jobs +jock +jockette +jockettes +jockey +jockeyed +jockeying +jockeys +jocko +jockos +jocks +jockstrap +jockstraps +jocose +jocosely +jocoseness +jocosenesses +jocosities +jocosity +jocular +jocularities +jocularity +jocularly +jocund +jocundities +jocundity +jocundly +jodhpur +jodhpurs +joe +joes +joey +joeys jog +jogged +jogger +joggers +jogging +joggings +joggle +joggled +joggler +jogglers +joggles +joggling +jogs +johannes +john +johnboat +johnboats +johnnies +johnny +johnnycake +johnnycakes +johns +johnsongrass +johnsongrasses join +joinable +joinder +joinders +joined +joiner +joineries +joiners +joinery +joining +joinings +joins +joint +jointed +jointedly +jointedness +jointednesses +jointer +jointers +jointing +jointly +jointress +jointresses +joints +jointure +jointured +jointures +jointuring +jointworm +jointworms +joist +joisted +joisting +joists +jojoba +jojobas joke +joked +joker +jokers +jokes +jokester +jokesters +jokey +jokier +jokiest +jokily +jokiness +jokinesses +joking +jokingly +joky +jole +joles +jollied +jollier +jollies +jolliest +jollification +jollifications +jollified +jollifies +jollify +jollifying +jollily +jollities +jollity +jolly +jollying +jolt +jolted +jolter +jolters +joltier +joltiest +joltily +jolting +jolts +jolty +jones +joneses +jongleur +jongleurs +jonquil +jonquils +joram +jorams +jordan +jordans +jorum +jorums +joseph +josephs +josh +joshed +josher +joshers +joshes +joshing +joss +josses +jostle +jostled +jostler +jostlers +jostles +jostling +jot +jota +jotas +jots +jotted +jotter +jotters +jotting +jottings +jotty +joual +jouals +jouk +jouked +jouking +jouks +joule +joules +jounce +jounced +jounces +jouncier +jounciest +jouncing +jouncy +journal +journalese +journaleses +journalism +journalisms journalist +journalistic +journalistically +journalists +journalize +journalized +journalizer +journalizers +journalizes +journalizing +journals journey +journeyed +journeyer +journeyers +journeying +journeyman +journeymen +journeys +journeywork +journeyworks +joust +jousted +jouster +jousters +jousting +jousts +jovial +jovialities +joviality +jovially +jovialties +jovialty +jow +jowar +jowars +jowed +jowing +jowl +jowled +jowlier +jowliest +jowls +jowly +jows joy +joyance +joyances +joyed +joyful +joyfuller +joyfullest +joyfully +joyfulness +joyfulnesses +joying +joyless +joylessly +joylessness +joylessnesses +joyous +joyously +joyousness +joyousnesses +joypop +joypopped +joypopper +joypoppers +joypopping +joypops +joyridden +joyride +joyrider +joyriders +joyrides +joyriding +joyridings +joyrode +joys +joystick +joysticks +juba +jubas +jubbah +jubbahs +jube +jubes +jubhah +jubhahs +jubilance +jubilances +jubilant +jubilantly +jubilarian +jubilarians +jubilate +jubilated +jubilates +jubilating +jubilation +jubilations +jubile +jubilee +jubilees +jubiles +judas +judases +judder +juddered +juddering +judders judge +judged judgement +judgements +judger +judgers +judges +judgeship +judgeships +judging +judgmatic +judgmatical +judgmatically judgment +judgmental +judgmentally +judgments +judicatories +judicatory +judicature +judicatures +judicial +judicially +judiciaries +judiciary +judicious +judiciously +judiciousness +judiciousnesses +judo +judoist +judoists +judoka +judokas +judos +jug +juga +jugal +jugate +jugful +jugfuls +jugged +juggernaut +juggernauts +jugging +juggle +juggled +juggler +juggleries +jugglers +jugglery +juggles +juggling +jugglings +jughead +jugheads +jugs +jugsful +jugula +jugular +jugulars +jugulate +jugulated +jugulates +jugulating +jugulum +jugum +jugums juice +juiced +juicehead +juiceheads +juiceless +juicer +juicers +juices +juicier +juiciest +juicily +juiciness +juicinesses +juicing +juicy +jujitsu +jujitsus +juju +jujube +jujubes +jujuism +jujuisms +jujuist +jujuists +jujus +jujutsu +jujutsus +juke +jukebox +jukeboxes +juked +jukes +juking +julep +juleps +julienne +julienned +juliennes +julienning +jumbal +jumbals +jumble +jumbled +jumbler +jumblers +jumbles +jumbling +jumbo +jumbos +jumbuck +jumbucks jump +jumped +jumper +jumpers +jumpier +jumpiest +jumpily +jumpiness +jumpinesses +jumping +jumpoff +jumpoffs +jumps +jumpsuit +jumpsuits +jumpy +jun +junco +juncoes +juncos +junction +junctional +junctions +junctural +juncture +junctures jungle +jungled +junglelike +jungles +junglier +jungliest +jungly junior +juniorate +juniorates +juniors +juniper +junipers +junk +junked +junker +junkers +junket +junketed +junketeer +junketeers +junketer +junketers +junketing +junkets +junkie +junkier +junkies +junkiest +junking +junkman +junkmen +junks +junky +junkyard +junkyards +junta +juntas +junto +juntos +jupe +jupes +jupon +jupons +jura +jural +jurally +jurant +jurants +jurat +juratory +jurats +jurel +jurels +juridic +juridical +juridically +juried +juries +jurisconsult +jurisconsults +jurisdiction +jurisdictional +jurisdictionally +jurisdictions +jurisprudence +jurisprudences +jurisprudent +jurisprudential +jurisprudentially +jurisprudents +jurist +juristic +juristically +jurists +juror +jurors +jury +jurying +juryman +jurymen +jus +jussive +jussives just +justed +juster +justers +justest justice +justices +justiciabilities +justiciability +justiciable +justiciar +justiciars +justifiabilities +justifiability +justifiable +justifiably +justification +justifications +justificative +justificatory +justified +justifier +justifiers +justifies +justify +justifying +justing +justle +justled +justles +justling +justly +justness +justnesses +justs +jut +jute +jutes +juts +jutted +juttied +jutties +jutting +jutty +juttying +juvenal +juvenals +juvenescence +juvenescences +juvenescent +juvenile +juveniles +juvenilia +juvenilities +juvenility +juxtapose +juxtaposed +juxtaposes +juxtaposing +juxtaposition +juxtapositional +juxtapositions +ka +kaas +kab +kabab +kababs +kabaka +kabakas +kabala +kabalas +kabar +kabars +kabaya +kabayas +kabbala +kabbalah +kabbalahs +kabbalas +kabeljou +kabeljous +kabiki +kabikis +kabob +kabobs +kabs +kabuki +kabukis +kachina +kachinas +kaddish +kaddishim +kadi +kadis +kae +kaes +kaf +kaffeeklatsch +kaffeeklatsches +kaffir +kaffirs +kaffiyeh +kaffiyehs +kafir +kafirs +kafs +kaftan +kaftans +kagu +kagus +kahuna +kahunas +kaiak +kaiaks +kaif +kaifs +kail +kails +kailyard +kailyards +kain +kainit +kainite +kainites +kainits +kains +kaiser +kaiserdom +kaiserdoms +kaiserin +kaiserins +kaiserism +kaiserisms +kaisers +kajeput +kajeputs +kaka +kakapo +kakapos +kakas +kakemono +kakemonos +kaki +kakiemon +kakiemons +kakis +kalam +kalams +kalanchoe +kalanchoes +kale +kaleidoscope +kaleidoscopes +kaleidoscopic +kaleidoscopically +kalends +kales +kalewife +kalewives +kaleyard +kaleyards +kalian +kalians +kalif +kalifate +kalifates +kalifs +kalimba +kalimbas +kaliph +kaliphs +kalium +kaliums +kallidin +kallidins +kallikrein +kallikreins +kalmia +kalmias +kalong +kalongs +kalpa +kalpak +kalpaks +kalpas +kalyptra +kalyptras +kamaaina +kamaainas +kamacite +kamacites +kamala +kamalas +kame +kames +kami +kamik +kamikaze +kamikazes +kamiks +kampong +kampongs +kamseen +kamseens +kamsin +kamsins +kana +kanamycin +kanamycins +kanas +kanban +kanbans +kane +kanes kangaroo +kangaroos +kanji +kanjis +kantar +kantars +kantele +kanteles +kaoliang +kaoliangs +kaolin +kaoline +kaolines +kaolinic +kaolinite +kaolinites +kaolinitic +kaolins +kaon +kaons +kapa +kapas +kapellmeister +kapellmeisters +kaph +kaphs +kapok +kapoks +kappa +kappas +kaput +kaputt +karabiner +karabiners +karakul +karakuls +karaoke +karaokes +karat +karate +karateist +karateists +karates +karats +karma +karmas +karmic +karn +karns +karoo +karoos +kaross +karosses +karroo +karroos +karst +karstic +karsts +kart +karting +kartings +karts +karyogamies +karyogamy +karyokineses +karyokinesis +karyokinetic +karyologic +karyological +karyologies +karyology +karyolymph +karyolymphs +karyosome +karyosomes +karyotin +karyotins +karyotype +karyotyped +karyotypes +karyotypic +karyotypically +karyotyping +kas +kasbah +kasbahs +kasha +kashas +kasher +kashered +kashering +kashers +kashmir +kashmirs +kashrut +kashruth +kashruths +kashruts +kat +kata +katabatic +katakana +katakanas +katas +katchina +katchinas +katcina +katcinas +katharses +katharsis +kathodal +kathode +kathodes +kathodic +kation +kations +kats +katydid +katydids +katzenjammer +katzenjammers +kauri +kauries +kauris +kaury +kava +kavakava +kavakavas +kavas +kavass +kavasses +kay +kayak +kayaked +kayaker +kayakers +kayaking +kayakings +kayaks +kayles +kayo +kayoed +kayoes +kayoing +kayos +kays +kazachki +kazachok +kazatski +kazatskies +kazatsky +kazoo +kazoos +kbar +kbars +kea +keas +kebab +kebabs +kebar +kebars +kebbie +kebbies +kebbock +kebbocks +kebbuck +kebbucks +keblah +keblahs +kebob +kebobs +keck +kecked +kecking +keckle +keckled +keckles +keckling +kecks +keddah +keddahs +kedge +kedged +kedgeree +kedgerees +kedges +kedging +keef +keefs +keek +keeked +keeking +keeks +keel +keelage +keelages +keelboat +keelboats +keeled +keelhale +keelhaled +keelhales +keelhaling +keelhaul +keelhauled +keelhauling +keelhauls +keeling +keelless +keels +keelson +keelsons +keen +keened +keener +keeners +keenest +keening +keenly +keenness +keennesses +keens keep +keepable +keeper +keepers +keeping +keepings +keeps +keepsake +keepsakes +keeshond +keeshonden +keeshonds +keester +keesters +keet +keets +keeve +keeves +kef +keffiyeh +keffiyehs +kefir +kefirs +kefs +keg +kegeler +kegelers +kegler +keglers +kegling +keglings +kegs +keir +keirs +keister +keisters +keitloa +keitloas +kelep +keleps +kelim +kelims +kellies +kelly +keloid +keloidal +keloids +kelp +kelped +kelpie +kelpies +kelping +kelps +kelpy +kelson +kelsons +kelter +kelters +kelvin +kelvins +kemp +kemps +kempt +ken +kenaf +kenafs +kench +kenches +kendo +kendos +kenned +kennel +kenneled +kenneling +kennelled +kennelling +kennels +kenning +kennings +keno +kenos +kenosis +kenosises +kenotic +kenotron +kenotrons +kens +kenspeckle +kent +kentledge +kentledges +kep +kephalin +kephalins +kepi +kepis +kepped +keppen +kepping +keps +kept +keramic +keramics +keratin +keratinization +keratinizations +keratinize +keratinized +keratinizes +keratinizing +keratinophilic +keratinous +keratins +keratitides +keratitis +keratoconjunctivites +keratoconjunctivitides +keratoconjunctivitis +keratoconjunctivitises +keratoid +keratoma +keratomas +keratomata +keratoplasties +keratoplasty +keratose +keratoses +keratosis +keratotic +keratotomies +keratotomy +kerb +kerbed +kerbing +kerbs +kerchief +kerchiefed +kerchiefs +kerchieves +kerchoo +kerf +kerfed +kerfing +kerfs +kerfuffle +kerfuffles +kermes +kermess +kermesse +kermesses +kermis +kermises +kern +kerne +kerned +kernel +kerneled +kerneling +kernelled +kernelling +kernels +kernes +kerning +kernite +kernites +kerns +kerogen +kerogens +kerosene +kerosenes +kerosine +kerosines +kerplunk +kerplunked +kerplunking +kerplunks +kerria +kerrias +kerries +kerry +kersey +kerseymere +kerseymeres +kerseys +kerygma +kerygmata +kerygmatic +kestrel +kestrels +ketch +ketches +ketchup +ketchups +ketene +ketenes +keto +ketogeneses +ketogenesis +ketogenic +ketol +ketols +ketone +ketones +ketonic +ketose +ketoses +ketosis +ketosteroid +ketosteroids +ketotic kettle +kettledrum +kettledrums +kettles +kevel +kevels +kevil +kevils +kex +kexes key keyboard +keyboarded +keyboarder +keyboarders +keyboarding +keyboardist +keyboardists +keyboards +keybutton +keybuttons +keycard +keycards +keyed +keyhole +keyholes +keying +keyless +keynote +keynoted +keynoter +keynoters +keynotes +keynoting +keypad +keypads +keypunch +keypunched +keypuncher +keypunchers +keypunches +keypunching +keys +keyset +keysets +keyster +keysters +keystone +keystones +keystroke +keystroked +keystrokes +keystroking +keyway +keyways +keyword +keywords +khaddar +khaddars +khadi +khadis +khaf +khafs +khaki +khakis +khalif +khalifa +khalifas +khalifs +khamseen +khamseens +khamsin +khamsins +khan +khanate +khanates +khans +khaph +khaphs +khat +khats +khazen +khazenim +khazens +kheda +khedah +khedahs +khedas +khedival +khedive +khedives +khedivial +khet +kheth +kheths +khets +khi +khirkah +khirkahs +khis +khoum +khoums +kiang +kiangs +kiaugh +kiaughs +kibbe +kibbeh +kibbehs +kibbes +kibbi +kibbis +kibbitz +kibbitzed +kibbitzer +kibbitzers +kibbitzes +kibbitzing +kibble +kibbled +kibbles +kibbling +kibbutz +kibbutzim +kibbutznik +kibbutzniks +kibe +kibei +kibeis +kibes +kibitz +kibitzed +kibitzer +kibitzers +kibitzes +kibitzing +kibla +kiblah +kiblahs +kiblas +kibosh +kiboshed +kiboshes +kiboshing kick +kickable +kickback +kickbacks +kickball +kickballs +kickboard +kickboards +kickboxer +kickboxers +kickboxing +kickboxings +kicked +kicker +kickers +kickier +kickiest +kicking +kickoff +kickoffs +kicks +kickshaw +kickshaws +kickstand +kickstands +kickup +kickups +kicky kid +kidded +kidder +kidders +kiddie +kiddies +kidding +kiddingly +kiddish +kiddo +kiddoes +kiddos +kiddush +kiddushes +kiddy +kidlike +kidnap +kidnaped +kidnapee +kidnapees +kidnaper +kidnapers +kidnaping +kidnapped +kidnappee +kidnappees +kidnapper +kidnappers +kidnapping +kidnaps +kidney +kidneys +kids +kidskin +kidskins +kidvid +kidvids +kief +kiefs +kielbasa +kielbasas +kielbasi +kielbasy +kier +kiers +kieselguhr +kieselguhrs +kieserite +kieserites +kiester +kiesters +kif +kifs +kike +kikes +kilderkin +kilderkins +kilim +kilims kill +killdee +killdeer +killdeers +killdees +killed +killer +killers +killick +killicks +killie +killies +killifish +killifishes +killing +killingly +killings +killjoy +killjoys +killock +killocks +kills +kiln +kilned +kilning +kilns kilo +kilobar +kilobars +kilobase +kilobases +kilobaud +kilobauds +kilobit +kilobits +kilobyte +kilobytes +kilocalorie +kilocalories +kilocycle +kilocycles +kilogauss +kilogausses +kilogram +kilograms +kilohertz +kilojoule +kilojoules +kiloliter +kiloliters kilometer +kilometers +kilomole +kilomoles +kiloparsec +kiloparsecs +kilopascal +kilopascals +kilorad +kilorads +kilos +kiloton +kilotons +kilovolt +kilovolts +kilowatt +kilowatts +kilt +kilted +kilter +kilters +kiltie +kilties +kilting +kiltings +kilts +kilty +kimberlite +kimberlites +kimchee +kimchees +kimchi +kimchis +kimono +kimonoed +kimonos +kin +kina +kinas +kinase +kinases kind +kinder kindergarten +kindergartener +kindergarteners +kindergartens +kindergartner +kindergartners +kindest +kindhearted +kindheartedly +kindheartedness +kindheartednesses +kindle +kindled +kindler +kindlers +kindles +kindless +kindlessly +kindlier +kindliest +kindliness +kindlinesses +kindling +kindlings +kindly kindness +kindnesses +kindred +kindreds +kinds +kine +kinema +kinemas +kinematic +kinematical +kinematically +kinematics +kines +kinescope +kinescoped +kinescopes +kinescoping +kineses +kinesic +kinesics +kinesiologies +kinesiology +kinesis +kinestheses +kinesthesia +kinesthesias +kinesthesis +kinesthetic +kinesthetically +kinetic +kinetically +kineticist +kineticists +kinetics +kinetin +kinetins +kinetochore +kinetochores +kinetoplast +kinetoplasts +kinetoscope +kinetoscopes +kinetosome +kinetosomes +kinfolk +kinfolks king +kingbird +kingbirds +kingbolt +kingbolts +kingcraft +kingcrafts +kingcup +kingcups kingdom +kingdoms +kinged +kingfish +kingfisher +kingfishers +kingfishes +kinghood +kinghoods +kinging +kingless +kinglet +kinglets +kinglier +kingliest +kinglike +kingliness +kinglinesses +kingly +kingmaker +kingmakers +kingpin +kingpins +kingpost +kingposts +kings +kingship +kingships +kingside +kingsides +kingwood +kingwoods +kinin +kinins +kink +kinkajou +kinkajous +kinked +kinkier +kinkiest +kinkily +kinkiness +kinkinesses +kinking +kinks +kinky +kinnikinnick +kinnikinnicks +kino +kinos +kins +kinsfolk +kinship +kinships +kinsman +kinsmen +kinswoman +kinswomen +kiosk +kiosks +kip +kipped +kippen +kipper +kippered +kipperer +kipperers +kippering +kippers +kipping +kips +kipskin +kipskins +kir +kirigami +kirigamis +kirk +kirkman +kirkmen +kirks +kirmess +kirmesses +kirn +kirned +kirning +kirns +kirs +kirsch +kirsches +kirtle +kirtled +kirtles +kishka +kishkas +kishke +kishkes +kismat +kismats +kismet +kismetic +kismets kiss +kissable +kissably +kissed +kisser +kissers +kisses +kissing +kissy +kist +kistful +kistfuls +kists +kit kitchen +kitchenette +kitchenettes +kitchens +kitchenware +kitchenwares kite +kited +kitelike +kiter +kiters +kites +kith +kithara +kitharas +kithe +kithed +kithes +kithing +kiths +kiting +kitling +kitlings +kits +kitsch +kitsches +kitschy +kitted +kittel +kitten +kittened +kittening +kittenish +kittenishly +kittenishness +kittenishnesses +kittens +kitties +kitting +kittiwake +kittiwakes +kittle +kittled +kittler +kittles +kittlest +kittling +kitty +kiva +kivas +kiwi +kiwifruit +kiwifruits +kiwis +klatch +klatches +klatsch +klatsches +klavern +klaverns +klaxon +klaxons +kleagle +kleagles +klebsiella +klebsiellas +klepht +klephtic +klephts +kleptomania +kleptomaniac +kleptomaniacs +kleptomanias +klezmer +klezmorim +klister +klisters +klong +klongs +kloof +kloofs +kludge +kludges +kluge +kluges +klutz +klutzes +klutzier +klutziest +klutziness +klutzinesses +klutzy +klystron +klystrons +knack +knacked +knacker +knackered +knackeries +knackers +knackery +knacking +knacks +knackwurst +knackwursts +knap +knapped +knapper +knappers +knapping +knaps +knapsack +knapsacked +knapsacks +knapweed +knapweeds +knar +knarred +knarry +knars +knaur +knaurs +knave +knaveries +knavery +knaves +knavish +knavishly +knawel +knawels +knead +kneadable +kneaded +kneader +kneaders +kneading +kneads knee +kneecap +kneecapped +kneecapping +kneecappings +kneecaps +kneed +kneehole +kneeholes +kneeing +kneel +kneeled +kneeler +kneelers +kneeling +kneels +kneepad +kneepads +kneepan +kneepans +knees +kneesock +kneesocks +knell +knelled +knelling +knells +knelt +knesset +knessets +knew +knickerbocker +knickerbockers +knickers +knickknack +knickknacks knife +knifed +knifelike +knifepoint +knifepoints +knifer +knifers +knifes +knifing +knight +knighted +knighthood +knighthoods +knighting +knightliness +knightlinesses +knightly +knights +knish +knishes +knit +knits +knitted +knitter +knitters +knitting +knittings +knitwear +knives +knob +knobbed +knobbier +knobbiest +knobblier +knobbliest +knobbly +knobby +knobkerrie +knobkerries +knoblike +knobs knock +knockabout +knockabouts +knockdown +knockdowns +knocked +knocker +knockers +knocking +knockoff +knockoffs +knockout +knockouts +knocks +knockwurst +knockwursts +knoll +knolled +knoller +knollers +knolling +knolls +knolly +knop +knopped +knops +knosp +knosps +knot +knotgrass +knotgrasses +knothole +knotholes +knotless +knotlike +knots +knotted +knotter +knotters +knottier +knottiest +knottily +knottiness +knottinesses +knotting +knottings +knotty +knotweed +knotweeds +knout +knouted +knouting +knouts know +knowable +knower +knowers +knowing +knowinger +knowingest +knowingly +knowingness +knowingnesses +knowings knowledge +knowledgeabilities +knowledgeability +knowledgeable +knowledgeableness +knowledgeablenesses +knowledgeably +knowledges +known +knowns +knows +knubbier +knubbiest +knubby +knuckle +knuckleball +knuckleballer +knuckleballers +knuckleballs +knucklebone +knucklebones +knuckled +knucklehead +knuckleheaded +knuckleheads +knuckler +knucklers +knuckles +knucklier +knuckliest +knuckling +knuckly +knur +knurl +knurled +knurlier +knurliest +knurling +knurls +knurly +knurs +koa +koala +koalas +koan +koans +koas +kob +kobo +kobold +kobolds +kobs +koel +koels +kohl +kohlrabi +kohlrabies +kohls +koi +koine +koines +kokanee +kokanees +kola +kolacky +kolas +kolbasi +kolbasis +kolbassi +kolbassis +kolhoz +kolhozes +kolhozy +kolinski +kolinskies +kolinsky +kolkhos +kolkhoses +kolkhosy +kolkhoz +kolkhozes +kolkhoznik +kolkhozniki +kolkhozniks +kolkhozy +kolkoz +kolkozes +kolkozy +kolo +kolos +komatik +komatiks +komondor +komondorock +komondorok +komondors +konk +konked +konking +konks +koodoo +koodoos +kook +kookaburra +kookaburras +kookie +kookier +kookiest +kookiness +kookinesses +kooks +kooky +kop +kopeck +kopecks +kopek +kopeks +koph +kophs +kopje +kopjes +koppa +koppas +koppie +koppies +kops +kor +korai +korat +korats +kore +kors +korun +koruna +korunas +koruny +kos +kosher +koshered +koshering +koshers +koss +koto +kotos +kotow +kotowed +kotower +kotowers +kotowing +kotows +koumis +koumises +koumiss +koumisses +koumys +koumyses +koumyss +koumysses +kouprey +koupreys +kouroi +kouros +kousso +koussos +kowtow +kowtowed +kowtower +kowtowers +kowtowing +kowtows +kraal +kraaled +kraaling +kraals +kraft +krafts +krait +kraits +kraken +krakens +krater +kraters +kraut +krauts +kreep +kreeps +kremlin +kremlinologies +kremlinologist +kremlinologists +kremlinology +kremlins +kreplach +kreutzer +kreutzers +kreuzer +kreuzers +krill +krills +krimmer +krimmers +kris +krises +krona +krone +kronen +kroner +kronor +kronur +kroon +krooni +kroons +krubi +krubis +krubut +krubuts +kruller +krullers +krumhorn +krumhorns +krummholz +krummhorn +krummhorns +kryolite +kryolites +kryolith +kryoliths +krypton +kryptons +kuchen +kudo +kudos +kudu +kudus +kudzu +kudzus +kue +kues +kugel +kugels +kukri +kukris +kulak +kulaki +kulaks +kultur +kulturs +kumiss +kumisses +kummel +kummels +kumquat +kumquats +kumys +kumyses +kundalini +kundalinis +kunzite +kunzites +kurbash +kurbashed +kurbashes +kurbashing +kurgan +kurgans +kurrajong +kurrajongs +kurta +kurtas +kurtosis +kurtosises +kuru +kurus +kusso +kussos +kuvasz +kuvaszok +kvas +kvases +kvass +kvasses +kvetch +kvetched +kvetches +kvetchier +kvetchiest +kvetching +kvetchy +kwacha +kwanza +kwanzas +kwashiorkor +kwashiorkors +kyack +kyacks +kyak +kyaks +kyanise +kyanised +kyanises +kyanising +kyanite +kyanites +kyanize +kyanized +kyanizes +kyanizing +kyar +kyars +kyat +kyats +kybosh +kyboshed +kyboshes +kyboshing +kylikes +kylix +kymogram +kymograms +kymograph +kymographic +kymographies +kymographs +kymography +kyphoses +kyphosis +kyphotic +kyrie +kyries +kyte +kytes +kythe +kythed +kythes +kything +la +laager +laagered +laagering +laagers +laari lab +labanotation +labanotations +labara +labarum +labarums +labdanum +labdanums +label +labelable +labeled +labeler +labelers +labeling +labella +labelled +labeller +labellers +labelling +labellum +labels +labia +labial +labialization +labializations +labialize +labialized +labializes +labializing +labially +labials +labiate +labiated +labiates +labile +labilities +lability +labiodental +labiodentals +labiovelar +labiovelars +labium labor +laboratories laboratory +labored +laborer +laborers +laboring +laborious +laboriously +laboriousness +laboriousnesses +laborite +laborites +labors +laborsaving labour +laboured +labourer +labourers +labouring +labours +labra +labrador +labradorite +labradorites +labradors +labret +labrets +labroid +labroids +labrum +labrums +labrusca +labs +laburnum +laburnums +labyrinth +labyrinthian +labyrinthine +labyrinthodont +labyrinthodonts +labyrinths +lac +laccolith +laccolithic +laccoliths +lace +laced +laceless +lacelike +lacer +lacerate +lacerated +lacerates +lacerating +laceration +lacerations +lacerative +lacers +lacertid +lacertids +laces +lacewing +lacewings +lacewood +lacewoods +lacework +laceworks +lacey +laches +lachrymal +lachrymator +lachrymators +lachrymose +lachrymosely +lachrymosities +lachrymosity +lacier +laciest +lacily +laciness +lacinesses +lacing +lacings +laciniate +laciniation +laciniations lack +lackadaisical +lackadaisically +lackaday +lacked +lacker +lackered +lackering +lackers +lackey +lackeyed +lackeying +lackeys +lacking +lackluster +lacklusters +lacks +laconic +laconically +laconism +laconisms +lacquer +lacquered +lacquerer +lacquerers +lacquering +lacquers +lacquerware +lacquerwares +lacquerwork +lacquerworks +lacquey +lacqueyed +lacqueying +lacqueys +lacrimal +lacrimals +lacrimation +lacrimations +lacrimator +lacrimators +lacrosse +lacrosses +lacs +lactalbumin +lactalbumins +lactam +lactams +lactary +lactase +lactases +lactate +lactated +lactates +lactating +lactation +lactational +lactations +lacteal +lacteals +lactean +lacteous +lactic +lactiferous +lactobacilli +lactobacillus +lactogenic +lactoglobulin +lactoglobulins +lactone +lactones +lactonic +lactose +lactoses +lacuna +lacunae +lacunal +lacunar +lacunaria +lacunars +lacunary +lacunas +lacunate +lacune +lacunes +lacunose +lacustrine +lacy +lad +ladanum +ladanums +ladder +laddered +laddering +ladderlike +ladders +laddie +laddies +lade +laded +laden +ladened +ladening +ladens +lader +laders +lades +ladies +lading +ladings +ladino +ladinos +ladle +ladled +ladleful +ladlefuls +ladler +ladlers +ladles +ladling +ladron +ladrone +ladrones +ladrons +lads lady +ladybird +ladybirds +ladybug +ladybugs +ladyfinger +ladyfingers +ladyfish +ladyfishes +ladyhood +ladyhoods +ladyish +ladykin +ladykins +ladylike +ladylove +ladyloves +ladypalm +ladypalms +ladyship +ladyships +laetrile +laetriles +laevo +lag +lagan +lagans +lagend +lagends +lager +lagered +lagering +lagers +laggard +laggardly +laggardness +laggardnesses +laggards +lagged +lagger +laggers +lagging +laggings +lagnappe +lagnappes +lagniappe +lagniappes +lagomorph +lagomorphs +lagoon +lagoonal +lagoons +lags +laguna +lagunas +lagune +lagunes +lahar +lahars +laic +laical +laically +laich +laichs +laicise +laicised +laicises +laicising +laicism +laicisms +laicization +laicizations +laicize +laicized +laicizes +laicizing +laics +laid +laigh +laighs +lain +lair +laird +lairdly +lairds +laired +lairing +lairs +laitance +laitances +laith +laithly +laities +laity lake +laked +lakefront +lakefronts +lakelike +lakeport +lakeports +laker +lakers +lakes +lakeshore +lakeshores +lakeside +lakesides +lakh +lakhs +lakier +lakiest +laking +lakings +laky +lall +lallan +lalland +lallands +lallans +lalled +lalling +lalls +lallygag +lallygagged +lallygagging +lallygags +lam +lama +lamas +lamaseries +lamasery lamb +lambast +lambaste +lambasted +lambastes +lambasting +lambasts +lambda +lambdas +lambdoid +lambed +lambencies +lambency +lambent +lambently +lamber +lambers +lambert +lamberts +lambie +lambier +lambies +lambiest +lambing +lambkill +lambkills +lambkin +lambkins +lamblike +lambrequin +lambrequins +lambs +lambskin +lambskins +lamby lame +lamebrain +lamebrained +lamebrains +lamed +lamedh +lamedhs +lameds +lamella +lamellae +lamellar +lamellas +lamellate +lamellately +lamellibranch +lamellibranchs +lamellicorn +lamellicorns +lamelliform +lamely +lameness +lamenesses +lament +lamentable +lamentableness +lamentablenesses +lamentably +lamentation +lamentations +lamented +lamentedly +lamenter +lamenters +lamenting +laments +lamer +lames +lamest +lamia +lamiae +lamias +lamina +laminae +laminal +laminar +laminaria +laminarian +laminarians +laminarias +laminarin +laminarins +laminary +laminas +laminate +laminated +laminates +laminating +lamination +laminations +laminator +laminators +laming +laminitis +laminitises +laminose +laminous +lamister +lamisters +lammed +lammergeier +lammergeiers +lammergeyer +lammergeyers +lamming lamp +lampad +lampads +lampas +lampases +lampblack +lampblacks +lamped +lampers +lamperses +lamping +lampion +lampions +lamplight +lamplighter +lamplighters +lamplights +lampoon +lampooned +lampooner +lampooneries +lampooners +lampoonery +lampooning +lampoons +lamppost +lampposts +lamprey +lampreys +lamps +lampshell +lampshells +lampyrid +lampyrids +lams +lamster +lamsters +lanai +lanais +lanate +lanated +lance +lanced +lancelet +lancelets +lanceolate +lancer +lancers +lances +lancet +lanceted +lancets +lancewood +lancewoods +lanciers +lancinating +lancing land +landau +landaulet +landaulets +landaus +landed +lander +landers +landfall +landfalls +landfill +landfills +landform +landforms +landgrab +landgrabs +landholder +landholders +landholding +landholdings +landing +landings +landladies +landlady +landler +landlers +landless +landlessness +landlessnesses +landline +landlines +landlocked +landlord +landlordism +landlordisms +landlords +landlubber +landlubberliness +landlubberlinesses +landlubberly +landlubbers +landlubbing +landman +landmark +landmarks +landmass +landmasses +landmen +landowner +landowners +landownership +landownerships +landowning +landownings +lands +landscape +landscaped +landscaper +landscapers +landscapes +landscaping +landscapist +landscapists +landside +landsides +landskip +landskips +landsleit +landslid +landslide +landslides +landsliding +landslip +landslips +landsman +landsmen +landward +lane +lanely +lanes +laneway +laneways +lang +langbeinite +langbeinites +langlauf +langlaufer +langlaufers +langlaufs +langley +langleys +langostino +langostinos +langouste +langoustes +langoustine +langoustines +langrage +langrages +langrel +langrels +langshan +langshans +langsyne +langsynes language +languages +langue +langues +languet +languets +languid +languidly +languidness +languidnesses +languish +languished +languisher +languishers +languishes +languishing +languishingly +languishment +languishments +languor +languorous +languorously +languors +langur +langurs +laniard +laniards +laniaries +laniary +lanital +lanitals +lank +lanker +lankest +lankier +lankiest +lankily +lankiness +lankinesses +lankly +lankness +lanknesses +lanky +lanner +lanneret +lannerets +lanners +lanolin +lanoline +lanolines +lanolins +lanose +lanosities +lanosity +lantana +lantanas lantern +lanterns +lanthanide +lanthanides +lanthanum +lanthanums +lanthorn +lanthorns +lanuginous +lanugo +lanugos +lanyard +lanyards lap +laparoscope +laparoscopes +laparoscopic +laparoscopies +laparoscopist +laparoscopists +laparoscopy +laparotomies +laparotomy +lapboard +lapboards +lapdog +lapdogs +lapel +lapeled +lapelled +lapels +lapful +lapfuls +lapidarian +lapidaries +lapidary +lapidate +lapidated +lapidates +lapidating +lapides +lapidified +lapidifies +lapidify +lapidifying +lapidist +lapidists +lapilli +lapillus +lapin +lapins +lapis +lapises +lapped +lapper +lappered +lappering +lappers +lappet +lappeted +lappets +lapping +laps +lapsable +lapse +lapsed +lapser +lapsers +lapses +lapsible +lapsing +lapstrake +lapsus +laptop +laptops +lapwing +lapwings +lar +larboard +larboards +larcener +larceners +larcenies +larcenist +larcenists +larcenous +larcenously +larceny +larch +larches +lard +larded +larder +larders +lardier +lardiest +larding +lardlike +lardon +lardons +lardoon +lardoons +lards +lardy +laree +larees +lares +largando large +largehearted +largeheartedness +largeheartednesses +largely +largemouth +largemouths +largeness +largenesses +larger +larges +largess +largesse +largesses +largest +larghetto +larghettos +largish +largo +largos +lari +lariat +lariated +lariating +lariats +larine +laris +lark +larked +larker +larkers +larkier +larkiest +larkiness +larkinesses +larking +larkish +larks +larksome +larkspur +larkspurs +larky +larrigan +larrigans +larrikin +larrikins +larrup +larruped +larruper +larrupers +larruping +larrups +lars +larum +larums +larva +larvae +larval +larvas +larvicidal +larvicide +larvicides +laryngal +laryngals +laryngeal +laryngeals +laryngectomee +laryngectomees +laryngectomies +laryngectomized +laryngectomy +larynges +laryngites +laryngitic +laryngitides +laryngitis +laryngitises +laryngologies +laryngology +laryngoscope +laryngoscopes +laryngoscopies +laryngoscopy +larynx +larynxes +las +lasagna +lasagnas +lasagne +lasagnes +lascar +lascars +lascivious +lasciviously +lasciviousness +lasciviousnesses +lase +lased +laser +lasers +lases +lash +lashed +lasher +lashers +lashes +lashing +lashings +lashins +lashkar +lashkars +lasing +lass +lasses +lassie +lassies +lassitude +lassitudes +lasso +lassoed +lassoer +lassoers +lassoes +lassoing +lassos last +lasted +laster +lasters +lasting +lastingly +lastingness +lastingnesses +lastings +lastly +lasts +lat +latakia +latakias +latch +latched +latches +latchet +latchets +latching +latchkey +latchkeys +latchstring +latchstrings late +latecomer +latecomers +lated +lateen +lateener +lateeners +lateens +lately +laten +latencies +latency +latened +lateness +latenesses +latening +latens +latensification +latensifications +latent +latently +latents +later +laterad +lateral +lateraled +lateraling +lateralization +lateralizations +lateralize +lateralized +lateralizes +lateralizing +laterally +laterals +laterite +laterites +lateritic +laterization +laterizations +laterize +laterized +laterizes +laterizing +latest +latests +latewood +latewoods +latex +latexes +lath +lathe +lathed +lather +lathered +latherer +latherers +lathering +lathers +lathery +lathes +lathi +lathier +lathiest +lathing +lathings +lathis +laths +lathwork +lathworks +lathy +lathyrism +lathyrisms +lathyritic +lati +latices +laticifer +laticifers +latifundia +latifundio +latifundios +latifundium +latigo +latigoes +latigos +latinities +latinity +latinization +latinizations +latinize +latinized +latinizes +latinizing +latino +latinos +latish +latitude +latitudes +latitudinal +latitudinally +latitudinarian +latitudinarianism +latitudinarianisms +latitudinarians +latke +latkes +latosol +latosolic +latosols +latria +latrias +latrine +latrines +lats +latte +latten +lattens latter +latterly +lattes +lattice +latticed +lattices +latticework +latticeworks +latticing +lattin +lattins +lauan +lauans +laud +laudable +laudableness +laudablenesses +laudably +laudanum +laudanums +laudation +laudations +laudative +laudator +laudators +laudatory +lauded +lauder +lauders +lauding +lauds laugh +laughable +laughableness +laughablenesses +laughably +laughed +laugher +laughers +laughing +laughingly +laughings +laughingstock +laughingstocks +laughs laughter +laughters +launce +launces +launch +launched +launcher +launchers +launches +launching +launchpad +launchpads +launder +laundered +launderer +launderers +launderette +launderettes +laundering +launders +laundress +laundresses +laundrette +laundrettes +laundries laundry +laundryman +laundrymen +laura +laurae +lauras +laureate +laureated +laureates +laureateship +laureateships +laureating +laureation +laureations +laurel +laureled +laureling +laurelled +laurelling +laurels +lauwine +lauwines +lav +lava +lavabo +lavaboes +lavabos +lavage +lavages +lavalava +lavalavas +lavalier +lavaliere +lavalieres +lavaliers +lavalike +lavalliere +lavallieres +lavas +lavation +lavations +lavatories +lavatory +lave +laved +laveer +laveered +laveering +laveers +lavender +lavendered +lavendering +lavenders +laver +laverock +laverocks +lavers +laves +laving +lavish +lavished +lavisher +lavishers +lavishes +lavishest +lavishing +lavishly +lavishness +lavishnesses +lavrock +lavrocks +lavs law +lawbook +lawbooks +lawbreaker +lawbreakers +lawbreaking +lawbreakings +lawed +lawful +lawfully +lawfulness +lawfulnesses +lawgiver +lawgivers +lawine +lawines +lawing +lawings +lawless +lawlessly +lawlessness +lawlessnesses +lawlike +lawmaker +lawmakers +lawmaking +lawmakings +lawman +lawmen +lawn +lawnmower +lawnmowers +lawns +lawny +lawrencium +lawrenciums +laws +lawsuit +lawsuits lawyer +lawyered +lawyering +lawyerings +lawyerlike +lawyerly +lawyers +lax +laxation +laxations +laxative +laxatives +laxer +laxest +laxities +laxity +laxly +laxness +laxnesses lay +layabout +layabouts +layaway +layaways +layed +layer +layerage +layerages +layered +layering +layerings +layers +layette +layettes +laying +layman +laymen +layoff +layoffs +layout +layouts +layover +layovers +laypeople +layperson +laypersons +lays +layup +layups +laywoman +laywomen +lazar +lazaret +lazarets +lazarette +lazarettes +lazaretto +lazarettos +lazars +laze +lazed +lazes +lazied +lazier +lazies +laziest +lazily +laziness +lazinesses +lazing +lazuli +lazulis +lazulite +lazulites +lazurite +lazurites lazy +lazybones +lazying +lazyish +lea +leach +leachabilities +leachability +leachable +leachate +leachates +leached +leacher +leachers +leaches +leachier +leachiest +leaching +leachy lead +leaded +leaden +leadenly +leadenness +leadennesses leader +leaderless +leaders +leadership +leaderships +leadier +leadiest +leading +leadings +leadless +leadman +leadmen +leadoff +leadoffs +leadplant +leadplants +leads +leadscrew +leadscrews +leadsman +leadsmen +leadwork +leadworks +leadwort +leadworts +leady leaf +leafage +leafages +leafed +leafhopper +leafhoppers +leafier +leafiest +leafing +leafless +leaflet +leafleted +leafleteer +leafleteers +leafleting +leaflets +leafletted +leafletting +leaflike +leafs +leafstalk +leafstalks +leafworm +leafworms +leafy league +leagued +leaguer +leaguered +leaguering +leaguers +leagues +leaguing leak +leakage +leakages +leaked +leaker +leakers +leakier +leakiest +leakily +leakiness +leakinesses +leaking +leakless +leakproof +leaks +leaky +leal +leally +lealties +lealty +lean +leaned +leaner +leaners +leanest +leaning +leanings +leanly +leanness +leannesses +leans +leant +leap +leaped +leaper +leapers +leapfrog +leapfrogged +leapfrogging +leapfrogs +leaping +leaps +leapt +lear +learier +leariest learn +learnable +learned +learnedly +learnedness +learnednesses +learner +learners +learning +learnings +learns +learnt +lears +leary +leas +leasable +lease +leaseback +leasebacks +leased +leasehold +leaseholder +leaseholders +leaseholds +leaser +leasers +leases +leash +leashed +leashes +leashing +leasing +leasings least +leasts +leastways +leastwise leather +leatherback +leatherbacks +leathered +leatherette +leatherettes +leathering +leatherleaf +leatherleaves +leatherlike +leathern +leatherneck +leathernecks +leathers +leatherwood +leatherwoods +leathery leave +leaved +leaven +leavened +leavening +leavenings +leavens +leaver +leavers +leaves +leavier +leaviest +leaving +leavings +leavy +leben +lebens +lebensraum +lebensraums +lech +lechayim +lechayims +leched +lecher +lechered +lecheries +lechering +lecherous +lecherously +lecherousness +lecherousnesses +lechers +lechery +leches +leching +lechwe +lechwes +lecithin +lecithinase +lecithinases +lecithins +lectern +lecterns +lectin +lectins +lection +lectionaries +lectionary +lections +lector +lectors +lectotype +lectotypes lecture +lectured +lecturer +lecturers +lectures +lectureship +lectureships +lecturing +lecythi +lecythis +lecythus +led +lederhosen +ledge +ledger +ledgers +ledges +ledgier +ledgiest +ledgy +lee +leeboard +leeboards +leech +leeched +leeches +leeching +leechlike +leek +leeks +leer +leered +leerier +leeriest +leerily +leering +leeringly +leers +leery +lees +leet +leets +leeward +leewards +leeway +leeways left +lefter +leftest +lefties +leftish +leftism +leftisms +leftist +leftists +leftover +leftovers +lefts +leftward +leftwing +lefty leg +legacies +legacy legal +legalese +legaleses +legalise +legalised +legalises +legalising +legalism +legalisms +legalist +legalistic +legalistically +legalists +legalities +legality +legalization +legalizations +legalize +legalized +legalizer +legalizers +legalizes +legalizing +legally +legals +legate +legated +legatee +legatees +legates +legateship +legateships +legatine +legating +legation +legations +legato +legator +legators +legatos +legend +legendarily +legendary +legendries +legendry +legends +leger +legerdemain +legerdemains +legerities +legerity +legers +leges +legged +leggier +leggiero +leggiest +leggin +legginess +legginesses +legging +leggings +leggins +leggy +leghorn +leghorns +legibilities +legibility +legible +legibly +legion +legionaries +legionary +legionnaire +legionnaires +legions +legislate +legislated +legislates +legislating +legislation +legislations +legislative +legislatively +legislatives +legislator +legislatorial +legislators +legislatorship +legislatorships +legislature +legislatures +legist +legists +legit +legitimacies +legitimacy +legitimate +legitimated +legitimately +legitimates +legitimating +legitimation +legitimations +legitimatize +legitimatized +legitimatizes +legitimatizing +legitimator +legitimators +legitimise +legitimised +legitimises +legitimising +legitimism +legitimisms +legitimist +legitimists +legitimization +legitimizations +legitimize +legitimized +legitimizer +legitimizers +legitimizes +legitimizing +legits +legless +leglike +legman +legmen +legong +legongs +legroom +legrooms +legs +legume +legumes +legumin +leguminous +legumins +legwork +legworks +lehayim +lehayims +lehr +lehrs +lehua +lehuas +lei +leis +leishmania +leishmanial +leishmanias +leishmaniases +leishmaniasis +leister +leistered +leistering +leisters +leisure +leisured +leisureliness +leisurelinesses +leisurely +leisures +leitmotif +leitmotifs +leitmotiv +leitmotivs +lek +leke +leks +leku +lekvar +lekvars +lekythi +lekythoi +lekythos +lekythus +leman +lemans +lemma +lemmas +lemmata +lemming +lemminglike +lemmings +lemniscal +lemniscate +lemniscates +lemnisci +lemniscus lemon lemonade +lemonades +lemongrass +lemongrasses +lemonish +lemons +lemony +lempira +lempiras +lemur +lemures +lemurine +lemuroid +lemuroids +lemurs lend +lendable +lender +lenders +lending +lends +lenes length +lengthen +lengthened +lengthener +lengtheners +lengthening +lengthens +lengthier +lengthiest +lengthily +lengthiness +lengthinesses +lengths +lengthways +lengthwise +lengthy +lenience +leniences +leniencies +leniency +lenient +leniently +lenis +lenities +lenition +lenitions +lenitive +lenitively +lenitives +lenity +leno +lenos +lens +lense +lensed +lenses +lensing +lensless +lensman +lensmen +lent +lentamente +lentando +lenten +lentic +lenticel +lenticels +lenticular +lenticule +lenticules +lentigines +lentigo +lentil +lentils +lentisk +lentisks +lentissimo +lentivirus +lentiviruses +lento +lentoid +lentos +leone +leones +leonine +leopard +leopardess +leopardesses +leopards +leotard +leotarded +leotards +leper +lepers +lepidolite +lepidolites +lepidoptera +lepidopteran +lepidopterans +lepidopterist +lepidopterists +lepidopterological +lepidopterologies +lepidopterologist +lepidopterologists +lepidopterology +lepidopterous +lepidote +lepidotes +leporid +leporidae +leporids +leporine +leprechaun +leprechaunish +leprechauns +lepromatous +leprosaria +leprosarium +leprosariums +leprose +leprosies +leprosy +leprotic +leprous +leprously +lept +lepta +leptocephali +leptocephalus +lepton +leptonic +leptons +leptosome +leptosomes +leptospiral +leptospire +leptospires +leptospiroses +leptospirosis +leptotene +leptotenes +lesbian +lesbianism +lesbianisms +lesbians +lesion +lesioned +lesions +lespedeza +lespedezas +less +lessee +lessees +lessen +lessened +lessening +lessens +lesser lesson +lessoned +lessoning +lessons +lessor +lessors +lest let +letch +letched +letches +letching +letdown +letdowns +lethal +lethalities +lethality +lethally +lethals +lethargic +lethargically +lethargies +lethargy +lethe +lethean +lethes +lets +letted letter +letterboxed +letterboxing +letterboxings +lettered +letterer +letterers +letterform +letterforms +letterhead +letterheads +lettering +letterings +letterman +lettermen +letterpress +letterpresses +letters +letterspace +letterspaces +letterspacing +letterspacings +letting +lettuce +lettuces +letup +letups +leu +leucemia +leucemias +leucemic +leucin +leucine +leucines +leucins +leucite +leucites +leucitic +leucocidin +leucocidins +leucoma +leucomas +leucoplast +leucoplasts +leud +leudes +leuds +leukaemia +leukaemias +leukaemogeneses +leukaemogenesis +leukemia +leukemias +leukemic +leukemics +leukemogeneses +leukemogenesis +leukemogenic +leukemoid +leukocyte +leukocytes +leukocytic +leukocytoses +leukocytosis +leukocytosises +leukodystrophies +leukodystrophy +leukoma +leukomas +leukon +leukons +leukopenia +leukopenias +leukopenic +leukoplakia +leukoplakias +leukoplakic +leukopoieses +leukopoiesis +leukopoietic +leukorrhea +leukorrheal +leukorrheas +leukoses +leukosis +leukotic +leukotomies +leukotomy +leukotriene +leukotrienes +lev +leva +levant +levanted +levanter +levanters +levanting +levants +levator +levatores +levators +levee +leveed +leveeing +levees level +leveled +leveler +levelers +levelheaded +levelheadedness +levelheadednesses +leveling +levelled +leveller +levellers +levelling +levelly +levelness +levelnesses +levels +lever +leverage +leveraged +leverages +leveraging +levered +leveret +leverets +levering +levers +leviable +leviathan +leviathans +levied +levier +leviers +levies +levigate +levigated +levigates +levigating +levigation +levigations +levin +levins +levirate +levirates +leviratic +levitate +levitated +levitates +levitating +levitation +levitational +levitations +levities +levity +levo +levodopa +levodopas +levogyre +levorotary +levorotatory +levulin +levulins +levulose +levuloses +levy +levying +lewd +lewder +lewdest +lewdly +lewdness +lewdnesses +lewis +lewises +lewisite +lewisites +lewisson +lewissons +lex +lexeme +lexemes +lexemic +lexes +lexica +lexical +lexicalisation +lexicalisations +lexicalities +lexicality +lexicalization +lexicalizations +lexicalize +lexicalized +lexicalizes +lexicalizing +lexically +lexicographer +lexicographers +lexicographic +lexicographical +lexicographically +lexicographies +lexicography +lexicologies +lexicologist +lexicologists +lexicology +lexicon +lexicons +lexis +ley +leys +lez +lezzes +lezzie +lezzies +lezzy +li +liabilities +liability +liable +liaise +liaised +liaises +liaising +liaison +liaisons +liana +lianas +liane +lianes +liang +liangs +lianoid +liar +liard +liards +liars +lib +libation +libationary +libations +libber +libbers +libecchio +libecchios +libeccio +libeccios +libel +libelant +libelants +libeled +libelee +libelees +libeler +libelers +libeling +libelist +libelists +libellant +libellants +libelled +libellee +libellees +libeller +libellers +libelling +libellous +libelous +libels +liber +liberal +liberalise +liberalised +liberalises +liberalising +liberalism +liberalisms +liberalist +liberalistic +liberalists +liberalities +liberality +liberalization +liberalizations +liberalize +liberalized +liberalizer +liberalizers +liberalizes +liberalizing +liberally +liberalness +liberalnesses +liberals +liberate +liberated +liberates +liberating liberation +liberationist +liberationists +liberations +liberator +liberators +libers +libertarian +libertarianism +libertarianisms +libertarians +liberties +libertinage +libertinages +libertine +libertines +libertinism +libertinisms liberty +libidinal +libidinally +libidinous +libidinously +libidinousness +libidinousnesses +libido +libidos +liblab +liblabs +libra +librae librarian +librarians +librarianship +librarianships +libraries library +libras +librate +librated +librates +librating +libration +librational +librations +libratory +libretti +librettist +librettists +libretto +librettos +libri +libriform +libs +lice +licence +licenced +licencee +licencees +licencer +licencers +licences +licencing +licensable license +licensed +licensee +licensees +licenser +licensers +licenses +licensing +licensor +licensors +licensure +licensures +licente +licentiate +licentiates +licentious +licentiously +licentiousness +licentiousnesses +lich +lichee +lichees +lichen +lichened +lichenin +lichening +lichenins +lichenological +lichenologies +lichenologist +lichenologists +lichenology +lichenous +lichens +liches +lichi +lichis +licht +lichted +lichting +lichtly +lichts +licit +licitly +lick +licked +licker +lickerish +lickerishly +lickerishness +lickerishnesses +lickers +licking +lickings +licks +lickspit +lickspits +lickspittle +lickspittles +licorice +licorices +lictor +lictors lid +lidar +lidars +lidded +lidding +lidless +lido +lidocaine +lidocaines +lidos +lids lie +liebfraumilch +liebfraumilchs +lied +lieder +lief +liefer +liefest +liefly +liege +liegeman +liegemen +lieges +lien +lienable +lienal +liens +lienteries +lientery +lier +lierne +liernes +liers +lies +lieu +lieus +lieutenancies +lieutenancy +lieutenant +lieutenants +lieve +liever +lievest life +lifeblood +lifebloods +lifeboat +lifeboats +lifeful +lifeguard +lifeguarded +lifeguarding +lifeguards +lifeless +lifelessly +lifelessness +lifelessnesses +lifelike +lifelikeness +lifelikenesses +lifeline +lifelines +lifelong +lifemanship +lifemanships +lifer +lifers +lifesaver +lifesavers +lifesaving +lifesavings +lifestyle +lifestyles +lifetime +lifetimes +lifeway +lifeways +lifework +lifeworks lift +liftable +lifted +lifter +lifters +liftgate +liftgates +lifting +liftman +liftmen +liftoff +liftoffs +lifts +ligament +ligamentous +ligaments +ligan +ligand +ligands +ligans +ligase +ligases +ligate +ligated +ligates +ligating +ligation +ligations +ligative +ligature +ligatured +ligatures +ligaturing +liger +ligers light +lightbulb +lightbulbs +lighted +lighten +lightened +lightener +lighteners +lightening +lightens +lighter +lighterage +lighterages +lightered +lightering +lighters +lightest +lightface +lightfaced +lightfaces +lightfast +lightfastness +lightfastnesses +lightful +lightheaded +lighthearted +lightheartedly +lightheartedness +lightheartednesses +lighthouse +lighthouses +lighting +lightings +lightish +lightless +lightly +lightness +lightnesses lightning +lightninged +lightnings +lightplane +lightplanes +lightproof +lights +lightship +lightships +lightsome +lightsomely +lightsomeness +lightsomenesses +lighttight +lightweight +lightweights +lightwood +lightwoods +ligneous +lignification +lignifications +lignified +lignifies +lignify +lignifying +lignin +lignins +lignite +lignites +lignitic +lignocellulose +lignocelluloses +lignocellulosic +lignosulfonate +lignosulfonates +ligroin +ligroine +ligroines +ligroins +ligula +ligulae +ligular +ligulas +ligulate +ligule +ligules +liguloid +ligure +ligures +likabilities +likability +likable +likableness +likablenesses like +likeable +liked +likelier +likeliest +likelihood +likelihoods likely +liken +likened +likeness +likenesses +likening +likens +liker +likers +likes +likest +likewise +liking +likings +likuta +lilac +lilacs +lilangeni +lilied +lilies +lilliput +lilliputian +lilliputians +lilliputs +lilt +lilted +lilting +liltingly +liltingness +liltingnesses +lilts +lily +lilylike +lima +limacine +limacon +limacons +liman +limans +limas +limb +limba +limbas +limbate +limbeck +limbecks +limbed +limber +limbered +limberer +limberest +limbering +limberly +limberness +limbernesses +limbers +limbi +limbic +limbier +limbiest +limbing +limbless +limbo +limbos +limbs +limbus +limbuses +limby +lime +limeade +limeades +limed +limekiln +limekilns +limeless +limelight +limelighted +limelighting +limelights +limen +limens +limerick +limericks +limes +limestone +limestones +limewater +limewaters +limey +limeys +limier +limiest +limina +liminal +liminess +liminesses +liming limit +limitable +limitary +limitation +limitational +limitations +limitative +limited +limitedly +limitedness +limitednesses +limiteds +limiter +limiters +limites +limiting +limitingly +limitless +limitlessly +limitlessness +limitlessnesses +limitrophe +limits +limmer +limmers +limn +limned +limner +limners +limnetic +limnic +limning +limnologic +limnological +limnologies +limnologist +limnologists +limnology +limns +limo +limonene +limonenes +limonite +limonites +limonitic +limos +limousine +limousines +limp +limpa +limpas +limped +limper +limpers +limpest +limpet +limpets +limpid +limpidities +limpidity +limpidly +limpidness +limpidnesses +limping +limpkin +limpkins +limply +limpness +limpnesses +limps +limpsey +limpsier +limpsiest +limpsy +limuli +limuloid +limuloids +limulus +limy +lin +linable +linac +linacs +linage +linages +linalol +linalols +linalool +linalools +linchpin +linchpins +lincomycin +lincomycins +lindane +lindanes +linden +lindens +lindies +lindy line +lineable +lineage +lineages +lineal +linealities +lineality +lineally +lineament +lineamental +lineaments +linear +linearise +linearised +linearises +linearising +linearities +linearity +linearization +linearizations +linearize +linearized +linearizes +linearizing +linearly +lineate +lineated +lineation +lineations +linebacker +linebackers +linebacking +linebackings +linebred +linebreeding +linebreedings +linecaster +linecasters +linecasting +linecastings +linecut +linecuts +lined +lineless +linelike +lineman +linemen +linen +linens +lineny +liner +linerboard +linerboards +linerless +liners +lines +linesman +linesmen +lineup +lineups +liney +ling +linga +lingam +lingams +lingas +lingcod +lingcods +linger +lingered +lingerer +lingerers +lingerie +lingeries +lingering +lingeringly +lingers +lingier +lingiest +lingo +lingoes +lingonberries +lingonberry +lings +lingua +linguae +lingual +lingually +linguals +linguine +linguines +linguini +linguinis +linguist +linguistic +linguistical +linguistically +linguistician +linguisticians +linguistics +linguists +lingy +linier +liniest +liniment +liniments +linin +lining +linings +linins link +linkable +linkage +linkages +linkboy +linkboys +linked +linker +linkers +linking +linkman +linkmen +links +linksman +linksmen +linkup +linkups +linkwork +linkworks +linky +linn +linnet +linnets +linns +lino +linocut +linocuts +linoleate +linoleates +linoleum +linoleums +linos +lins +linsang +linsangs +linseed +linseeds +linsey +linseys +linstock +linstocks +lint +lintel +lintels +linter +linters +lintier +lintiest +lintless +lintol +lintols +lints +lintwhite +lintwhites +linty +linum +linums +linuron +linurons +liny lion +lioness +lionesses +lionfish +lionfishes +lionhearted +lionise +lionised +lioniser +lionisers +lionises +lionising +lionization +lionizations +lionize +lionized +lionizer +lionizers +lionizes +lionizing +lionlike +lions lip +lipase +lipases +lipid +lipide +lipides +lipidic +lipids +lipin +lipins +lipless +liplike +lipocyte +lipocytes +lipogeneses +lipogenesis +lipoid +lipoidal +lipoids +lipolyses +lipolysis +lipolytic +lipoma +lipomas +lipomata +lipomatous +lipophilic +lipopolysaccharide +lipopolysaccharides +lipoprotein +lipoproteins +liposomal +liposome +liposomes +liposuction +liposuctions +lipotropic +lipotropin +lipotropins +lipped +lippen +lippened +lippening +lippens +lipper +lippered +lippering +lippers +lippier +lippiest +lipping +lippings +lippy +lipreading +lipreadings +lips +lipstick +lipsticked +lipsticks +liquate +liquated +liquates +liquating +liquation +liquations +liquefaction +liquefactions +liquefied +liquefier +liquefiers +liquefies +liquefy +liquefying +liquescent +liqueur +liqueurs liquid +liquidambar +liquidambars +liquidate +liquidated +liquidates +liquidating +liquidation +liquidations +liquidator +liquidators +liquidities +liquidity +liquidize +liquidized +liquidizes +liquidizing +liquidly +liquidness +liquidnesses +liquids +liquified +liquifies +liquify +liquifying +liquor +liquored +liquorice +liquorices +liquoring +liquors +lira +liras +lire +liri +liripipe +liripipes +lirot +liroth +lis +lisente +lisle +lisles +lisp +lisped +lisper +lispers +lisping +lisps +lissom +lissome +lissomely +lissomeness +lissomenesses +lissomly list +listable +listed +listee +listees +listel +listels listen +listenable +listened +listener +listeners +listenership +listenerships +listening +listens +lister +listerioses +listeriosis +listers +listing +listings +listless +listlessly +listlessness +listlessnesses +lists +lit +litai +litanies +litany +litas +litchi +litchis +lite liter +literacies +literacy +literal +literalism +literalisms +literalist +literalistic +literalists +literalities +literality +literalization +literalizations +literalize +literalized +literalizes +literalizing +literally +literalness +literalnesses +literals +literarily +literariness +literarinesses literary +literate +literately +literateness +literatenesses +literates +literati +literatim +literation +literations +literator +literators literature +literatures +literatus +liters +litharge +litharges +lithe +lithely +lithemia +lithemias +lithemic +litheness +lithenesses +lither +lithesome +lithest +lithia +lithias +lithiases +lithiasis +lithic +lithification +lithifications +lithified +lithifies +lithify +lithifying +lithium +lithiums +litho +lithoed +lithograph +lithographed +lithographer +lithographers +lithographic +lithographically +lithographies +lithographing +lithographs +lithography +lithoid +lithoing +lithologic +lithological +lithologically +lithologies +lithology +lithophane +lithophanes +lithophyte +lithophytes +lithopone +lithopones +lithos +lithosol +lithosols +lithosphere +lithospheres +lithospheric +lithotomies +lithotomy +lithotripsies +lithotripsy +lithotripter +lithotripters +lithotriptor +lithotriptors +litigable +litigant +litigants +litigate +litigated +litigates +litigating +litigation +litigations +litigator +litigators +litigious +litigiously +litigiousness +litigiousnesses +litmus +litmuses +litoral +litotes +litotic litre +litres +lits +litten +litter +litterateur +litterateurs +litterbag +litterbags +litterbug +litterbugs +littered +litterer +litterers +littering +littermate +littermates +litters +littery little +littleneck +littlenecks +littleness +littlenesses +littler +littles +littlest +littlish +littoral +littorals +litu +liturgic +liturgical +liturgically +liturgics +liturgies +liturgiologies +liturgiologist +liturgiologists +liturgiology +liturgist +liturgists +liturgy +livabilities +livability +livable +livableness +livablenesses live +liveabilities +liveability +liveable +lived +livelier +liveliest +livelihood +livelihoods +livelily +liveliness +livelinesses +livelong lively +liven +livened +livener +liveners +liveness +livenesses +livening +livens +liver +liveried +liveries +liverish +liverishness +liverishnesses +livers +liverwort +liverworts +liverwurst +liverwursts +livery +liveryman +liverymen +lives +livest +livestock +livestocks +livetrap +livetrapped +livetrapping +livetraps +livid +lividities +lividity +lividly +lividness +lividnesses +livier +liviers +living +livingly +livingness +livingnesses +livings +livre +livres +livyer +livyers +lixivia +lixivial +lixiviate +lixiviated +lixiviates +lixiviating +lixiviation +lixiviations +lixivium +lixiviums +lizard +lizards +llama +llamas +llano +llanos +lo +loach +loaches load +loaded +loader +loaders +loading +loadings +loadmaster +loadmasters +loads +loadstar +loadstars +loadstone +loadstones loaf +loafed +loafer +loafers +loafing +loafs +loam +loamed +loamier +loamiest +loaming +loamless +loams +loamy +loan +loanable +loaned +loaner +loaners +loaning +loanings +loans +loanword +loanwords +loath +loathe +loathed +loather +loathers +loathes +loathful +loathing +loathings +loathly +loathness +loathnesses +loathsome +loathsomely +loathsomeness +loathsomenesses +loaves +lob +lobar +lobate +lobated +lobately +lobation +lobations +lobbed +lobber +lobbers +lobbied +lobbies +lobbing +lobby +lobbyer +lobbyers +lobbygow +lobbygows +lobbying +lobbyism +lobbyisms +lobbyist +lobbyists +lobe +lobectomies +lobectomy +lobed +lobefin +lobefins +lobelia +lobelias +lobeline +lobelines +lobes +loblollies +loblolly +lobo +lobos +lobotomies +lobotomise +lobotomised +lobotomises +lobotomising +lobotomize +lobotomized +lobotomizes +lobotomizing +lobotomy +lobs +lobscouse +lobscouses +lobster +lobstered +lobstering +lobsterings +lobsterlike +lobsterman +lobstermen +lobsters +lobstick +lobsticks +lobular +lobulate +lobulated +lobulation +lobulations +lobule +lobules +lobulose +lobworm +lobworms +loca local +locale +locales +localise +localised +localises +localising +localism +localisms +localist +localists +localite +localites +localities +locality +localizabilities +localizability +localizable +localization +localizations +localize +localized +localizes +localizing +locally +locals +locatable +locate +located +locater +locaters +locates +locating +location +locational +locationally +locations +locative +locatives +locator +locators +loch +lochan +lochans +lochia +lochial +lochs +loci lock +lockable +lockage +lockages +lockbox +lockboxes +lockdown +lockdowns +locked +locker +lockers +locket +lockets +locking +lockjaw +lockjaws +lockkeeper +lockkeepers +locknut +locknuts +lockout +lockouts +lockram +lockrams +locks +locksmith +locksmithing +locksmithings +locksmiths +lockstep +locksteps +lockstitch +lockstitched +lockstitches +lockstitching +lockup +lockups +loco +locoed +locoes +locofoco +locofocos +locoing +locoism +locoisms +locomote +locomoted +locomotes +locomoting +locomotion +locomotions +locomotive +locomotives +locomotor +locomotory +locos +locoweed +locoweeds +locular +loculate +locule +loculed +locules +loculi +loculicidal +loculus +locum +locums +locus +locust +locusta +locustae +locustal +locusts +locution +locutions +locutories +locutory +lode +loden +lodens +lodes +lodestar +lodestars +lodestone +lodestones +lodge +lodged +lodgement +lodgements +lodger +lodgers +lodges +lodging +lodgings +lodgment +lodgments +lodicule +lodicules +loess +loessal +loesses +loessial +loft +lofted +lofter +lofters +loftier +loftiest +loftily +loftiness +loftinesses +lofting +loftless +loftlike +lofts +lofty +log +logan +loganberries +loganberry +logania +logans +logaoedic +logaoedics +logarithm +logarithmic +logarithmically +logarithms +logbook +logbooks +loge +loges +loggats +logged +logger +loggerhead +loggerheads +loggers +loggets +loggia +loggias +loggie +loggier +loggiest +logging +loggings +loggy +logia +logic +logical +logicalities +logicality +logically +logicalness +logicalnesses +logician +logicians +logicise +logicised +logicises +logicising +logicize +logicized +logicizes +logicizing +logics +logier +logiest +logily +loginess +loginesses +logion +logions +logistic +logistical +logistically +logistician +logisticians +logistics +logjam +logjams +lognormal +lognormalities +lognormality +lognormally +logo +logogram +logogrammatic +logograms +logograph +logographic +logographically +logographs +logogriph +logogriphs +logoi +logomach +logomachies +logomachs +logomachy +logorrhea +logorrheas +logorrheic +logos +logotype +logotypes +logotypies +logotypy +logroll +logrolled +logroller +logrollers +logrolling +logrollings +logrolls +logs +logway +logways +logwood +logwoods +logy +loin +loincloth +loincloths +loins +loiter +loitered +loiterer +loiterers +loitering +loiters +loll +lollapalooza +lollapaloozas +lolled +loller +lollers +lollies +lolling +lollipop +lollipops +lollop +lolloped +lolloping +lollops +lolls +lolly +lollygag +lollygagged +lollygagging +lollygags +lollypop +lollypops +lomein +lomeins +loment +lomenta +loments +lomentum +lomentums +lone +lonelier +loneliest +lonelily +loneliness +lonelinesses lonely +loneness +lonenesses +loner +loners +lonesome +lonesomely +lonesomeness +lonesomenesses +lonesomes long +longan +longanimities +longanimity +longans +longboat +longboats +longbow +longbowman +longbowmen +longbows +longe +longed +longeing +longer +longeron +longerons +longers +longes +longest +longevities +longevity +longevous +longhair +longhaired +longhairs +longhand +longhands +longhead +longheaded +longheadedness +longheadednesses +longheads +longhorn +longhorns +longhouse +longhouses +longicorn +longicorns +longies +longing +longingly +longings +longish +longitude +longitudes +longitudinal +longitudinally +longleaf +longleaves +longline +longlines +longly +longness +longnesses +longs +longship +longships +longshoreman +longshoremen +longshoring +longshorings +longsighted +longsightedness +longsightednesses +longsome +longsomely +longsomeness +longsomenesses +longspur +longspurs +longtime +longueur +longueurs +longways +longwise +loo +loobies +looby +looed +looey +looeys +loof +loofa +loofah +loofahs +loofas +loofs +looie +looies +looing look +lookalike +lookalikes +lookdown +lookdowns +looked +looker +lookers +looking +lookout +lookouts +looks +lookup +lookups +loom +loomed +looming +looms +loon +looney +looneys +loonier +loonies +looniest +looniness +looninesses +loons +loony +loop +looped +looper +loopers +loophole +loopholed +loopholes +loopholing +loopier +loopiest +looping +loops +loopy +loos loose +loosed +loosely +loosen +loosened +loosener +looseners +looseness +loosenesses +loosening +loosens +looser +looses +loosest +loosestrife +loosestrifes +loosing +loot +looted +looter +looters +looting +loots +lop +lope +loped +loper +lopers +lopes +lophophore +lophophores +loping +lopped +lopper +loppered +loppering +loppers +loppier +loppiest +lopping +loppy +lops +lopsided +lopsidedly +lopsidedness +lopsidednesses +lopstick +lopsticks +loquacious +loquaciously +loquaciousness +loquaciousnesses +loquacities +loquacity +loquat +loquats +loral +loran +lorans +lord +lorded +lording +lordings +lordless +lordlier +lordliest +lordlike +lordliness +lordlinesses +lordling +lordlings +lordly +lordoma +lordomas +lordoses +lordosis +lordotic +lords +lordship +lordships +lore +loreal +lores +lorgnette +lorgnettes +lorgnon +lorgnons +lorica +loricae +loricate +loricates +lories +lorikeet +lorikeets +lorimer +lorimers +loriner +loriners +loris +lorises +lorn +lornness +lornnesses +lorries lorry +lory +losable +losableness +losablenesses lose +losel +losels +loser +losers +loses +losing +losingly +losings loss +losses +lossy +lost +lostness +lostnesses lot +lota +lotah +lotahs +lotas +loth +lothario +lotharios +lothsome +loti +lotic +lotion +lotions +lotos +lotoses +lots +lotte +lotted +lotteries +lottery +lottes +lotting +lotto +lottos +lotus +lotuses +lotusland +lotuslands +louche loud +louden +loudened +loudening +loudens +louder +loudest +loudish +loudlier +loudliest +loudly +loudmouth +loudmouthed +loudmouths +loudness +loudnesses +loudspeaker +loudspeakers +lough +loughs +louie +louies +louis lounge +lounged +lounger +loungers +lounges +loungewear +lounging +loungy +loup +loupe +louped +loupen +loupes +louping +loups +lour +loured +louring +lours +loury +louse +loused +louses +lousewort +louseworts +lousier +lousiest +lousily +lousiness +lousinesses +lousing +lousy +lout +louted +louting +loutish +loutishly +loutishness +loutishnesses +louts +louver +louvered +louvers +louvre +louvred +louvres +lovabilities +lovability +lovable +lovableness +lovablenesses +lovably +lovage +lovages +lovastatin +lovastatins +lovat +lovats love +loveable +loveably +lovebird +lovebirds +lovebug +lovebugs +loved +loveless +lovelessly +lovelessness +lovelessnesses +lovelier +lovelies +loveliest +lovelily +loveliness +lovelinesses +lovelock +lovelocks +lovelorn +lovelornness +lovelornnesses lovely +lovemaking +lovemakings +lover +loverly +lovers +loves +lovesick +lovesickness +lovesicknesses +lovesome +lovevine +lovevines +loving +lovingly +lovingness +lovingnesses low +lowball +lowballed +lowballing +lowballs +lowborn +lowboy +lowboys +lowbred +lowbrow +lowbrows +lowdown +lowdowns +lowe +lowed +lower +lowercase +lowercased +lowercases +lowercasing +lowerclassman +lowerclassmen +lowered +lowering +lowermost +lowers +lowery +lowes +lowest +lowing +lowings +lowish +lowland +lowlander +lowlanders +lowlands +lowlier +lowliest +lowlife +lowlifer +lowlifers +lowlifes +lowlight +lowlights +lowlihead +lowliheads +lowliness +lowlinesses +lowlives +lowly +lown +lowness +lownesses +lowrider +lowriders +lows +lowse +lox +loxed +loxes +loxing +loxodrome +loxodromes +loyal +loyaler +loyalest +loyalism +loyalisms +loyalist +loyalists +loyally +loyalties +loyalty +lozenge +lozenges +luau +luaus +lubber +lubberliness +lubberlinesses +lubberly +lubbers +lube +lubes +lubric +lubrical +lubricant +lubricants +lubricate +lubricated +lubricates +lubricating +lubrication +lubrications +lubricative +lubricator +lubricators +lubricious +lubriciously +lubricities +lubricity +lubricous +lucarne +lucarnes +luce +lucence +lucences +lucencies +lucency +lucent +lucently +lucern +lucerne +lucernes +lucerns +luces +lucid +lucidities +lucidity +lucidly +lucidness +lucidnesses +lucifer +luciferase +luciferases +luciferin +luciferins +luciferous +lucifers luck +lucked +luckie +luckier +luckies +luckiest +luckily +luckiness +luckinesses +lucking +luckless +lucks lucky +lucrative +lucratively +lucrativeness +lucrativenesses +lucre +lucres +lucubration +lucubrations +luculent +luculently +lude +ludes +ludic +ludicrous +ludicrously +ludicrousness +ludicrousnesses +lues +luetic +luetics +luff +luffa +luffas +luffed +luffing +luffs +luftmensch +luftmenschen +lug +luge +luged +lugeing +luger +lugers +luges luggage +luggages +lugged +lugger +luggers +luggie +luggies +lugging +lugs +lugsail +lugsails +lugubrious +lugubriously +lugubriousness +lugubriousnesses +lugworm +lugworms +lukewarm +lukewarmly +lukewarmness +lukewarmnesses +lull +lullabied +lullabies +lullaby +lullabying +lulled +lulling +lulls +lulu +lulus +lum +lumbago +lumbagos +lumbar +lumbars +lumber +lumbered +lumberer +lumberers +lumbering +lumberjack +lumberjacks +lumberman +lumbermen +lumbers +lumberyard +lumberyards +lumbosacral +lumen +lumenal +lumens +lumina +luminaire +luminaires +luminal +luminance +luminances +luminaria +luminarias +luminaries +luminary +luminesce +luminesced +luminescence +luminescences +luminescent +luminesces +luminescing +luminiferous +luminism +luminisms +luminist +luminists +luminosities +luminosity +luminous +luminously +luminousness +luminousnesses +lummox +lummoxes +lump +lumpectomies +lumpectomy +lumped +lumpen +lumpenproletariat +lumpenproletariats +lumpens +lumper +lumpers +lumpfish +lumpfishes +lumpier +lumpiest +lumpily +lumpiness +lumpinesses +lumping +lumpish +lumpishly +lumpishness +lumpishnesses +lumps +lumpy +lums +luna +lunacies +lunacy +lunar +lunarian +lunarians +lunars +lunas +lunate +lunated +lunately +lunatic +lunatics +lunation +lunations lunch +lunched +luncheon +luncheonette +luncheonettes +luncheons +luncher +lunchers +lunches +lunching +lunchmeat +lunchmeats +lunchroom +lunchrooms +lunchtime +lunchtimes +lune +lunes +lunet +lunets +lunette +lunettes lung +lungan +lungans +lunge +lunged +lungee +lungees +lunger +lungers +lunges +lungfish +lungfishes +lungful +lungfuls +lungi +lunging +lungis +lungs +lungworm +lungworms +lungwort +lungworts +lungyi +lungyis +lunier +lunies +luniest +lunisolar +lunk +lunker +lunkers +lunkhead +lunkheaded +lunkheads +lunks +lunt +lunted +lunting +lunts +lunula +lunulae +lunular +lunulate +lunule +lunules +luny +lupanar +lupanars +lupin +lupine +lupines +lupins +lupous +lupulin +lupulins +lupus +lupuses +lurch +lurched +lurcher +lurchers +lurches +lurching +lurdan +lurdane +lurdanes +lurdans +lure +lured +lurer +lurers +lures +lurid +luridly +luridness +luridnesses +luring +lurk +lurked +lurker +lurkers +lurking +lurks +luscious +lusciously +lusciousness +lusciousnesses +lush +lushed +lusher +lushes +lushest +lushing +lushly +lushness +lushnesses +lust +lusted +luster +lustered +lustering +lusterless +lusters +lusterware +lusterwares +lustful +lustfully +lustfulness +lustfulnesses +lustier +lustiest +lustihood +lustihoods +lustily +lustiness +lustinesses +lusting +lustra +lustral +lustrate +lustrated +lustrates +lustrating +lustration +lustrations +lustre +lustred +lustres +lustring +lustrings +lustrous +lustrously +lustrousness +lustrousnesses +lustrum +lustrums +lusts +lusty +lusus +lususes +lutanist +lutanists +lute +lutea +luteal +lutecium +luteciums +luted +lutefisk +lutefisks +lutein +luteinization +luteinizations +luteinize +luteinized +luteinizes +luteinizing +luteins +lutenist +lutenists +luteolin +luteolins +luteotrophic +luteotrophin +luteotrophins +luteotropic +luteotropin +luteotropins +luteous +lutes +lutestring +lutestrings +lutetium +lutetiums +luteum +luthern +lutherns +luthier +luthiers +luting +lutings +lutist +lutists +lutz +lutzes +luv +luvs +lux +luxate +luxated +luxates +luxating +luxation +luxations +luxe +luxes +luxuriance +luxuriances +luxuriant +luxuriantly +luxuriate +luxuriated +luxuriates +luxuriating +luxuries +luxurious +luxuriously +luxuriousness +luxuriousnesses +luxury +lwei +lweis +lyard +lyart +lyase +lyases +lycanthrope +lycanthropes +lycanthropic +lycanthropies +lycanthropy +lycea +lycee +lycees +lyceum +lyceums +lychee +lychees +lychnis +lychnises +lycopene +lycopenes +lycopod +lycopodium +lycopodiums +lycopods +lyddite +lyddites +lye +lyes +lying +lyingly +lyings +lymph +lymphadenitis +lymphadenitises +lymphadenopathies +lymphadenopathy +lymphangiogram +lymphangiograms +lymphangiographic +lymphangiographies +lymphangiography +lymphatic +lymphatically +lymphatics +lymphoblast +lymphoblastic +lymphoblasts +lymphocyte +lymphocytes +lymphocytic +lymphocytoses +lymphocytosis +lymphocytosises +lymphogram +lymphograms +lymphogranuloma +lymphogranulomas +lymphogranulomata +lymphogranulomatoses +lymphogranulomatosis +lymphographic +lymphographies +lymphography +lymphoid +lymphokine +lymphokines +lymphoma +lymphomas +lymphomata +lymphomatoses +lymphomatosis +lymphomatous +lymphosarcoma +lymphosarcomas +lymphosarcomata +lymphs +lyncean +lynch +lynched +lyncher +lynchers +lynches +lynching +lynchings +lynchpin +lynchpins +lynx +lynxes +lyonnaise +lyophile +lyophiled +lyophilic +lyophilise +lyophilised +lyophilises +lyophilising +lyophilization +lyophilizations +lyophilize +lyophilized +lyophilizer +lyophilizers +lyophilizes +lyophilizing +lyophobic +lyrate +lyrated +lyrately +lyre +lyrebird +lyrebirds +lyres +lyric +lyrical +lyrically +lyricalness +lyricalnesses +lyricise +lyricised +lyricises +lyricising +lyricism +lyricisms +lyricist +lyricists +lyricize +lyricized +lyricizes +lyricizing +lyrics +lyriform +lyrism +lyrisms +lyrist +lyrists +lysate +lysates +lyse +lysed +lyses +lysimeter +lysimeters +lysimetric +lysin +lysine +lysines +lysing +lysins +lysis +lysogen +lysogenic +lysogenicities +lysogenicity +lysogenies +lysogenise +lysogenised +lysogenises +lysogenising +lysogenization +lysogenizations +lysogenize +lysogenized +lysogenizes +lysogenizing +lysogens +lysogeny +lysolecithin +lysolecithins +lysosomal +lysosome +lysosomes +lysozyme +lysozymes +lyssa +lyssas +lytic +lytically +lytta +lyttae +lyttas +ma +maar +maars +mabe +mabes +mac +macaber +macabre +macaco +macacos +macadam +macadamia +macadamias +macadamize +macadamized +macadamizes +macadamizing +macadams +macaque +macaques +macaroni +macaronic +macaronics +macaronies +macaronis +macaroon +macaroons +macaw +macaws +maccabaw +maccabaws +maccaboy +maccaboys +macchia +macchie +maccoboy +maccoboys +mace +maced +macedoine +macedoines +macer +macerate +macerated +macerates +macerating +maceration +macerations +macerator +macerators +macers +maces +mach +mache +maches +machete +machetes +machicolated +machicolation +machicolations +machinabilities +machinability +machinable +machinate +machinated +machinates +machinating +machination +machinations +machinator +machinators machine +machineabilities +machineability +machineable +machined +machinelike +machineries +machinery +machines +machining +machinist +machinists +machismo +machismos +macho +machos +machree +machrees +machs +machzor +machzorim +machzors +macing +macintosh +macintoshes +mack +mackerel +mackerels +mackinaw +mackinaws +mackintosh +mackintoshes +mackle +mackled +mackles +mackling +macks +macle +macled +macles +macon +macons +macrame +macrames +macro +macroaggregate +macroaggregated +macroaggregates +macrobiotic +macrocosm +macrocosmic +macrocosmically +macrocosms +macrocyclic +macrocyte +macrocytes +macrocytic +macrocytoses +macrocytosis +macroeconomic +macroeconomics +macroevolution +macroevolutionary +macroevolutions +macrofossil +macrofossils +macrogamete +macrogametes +macroglobulin +macroglobulinemia +macroglobulinemias +macroglobulinemic +macroglobulins +macroinstruction +macroinstructions +macrolepidoptera +macromere +macromeres +macromolecular +macromolecule +macromolecules +macron +macrons +macronuclear +macronuclei +macronucleus +macronucleuses +macronutrient +macronutrients +macrophage +macrophages +macrophagic +macrophotograph +macrophotographies +macrophotographs +macrophotography +macrophyte +macrophytes +macrophytic +macropterous +macros +macroscale +macroscales +macroscopic +macroscopically +macrostructural +macrostructure +macrostructures +macrural +macruran +macrurans +macs +macula +maculae +macular +maculas +maculate +maculated +maculates +maculating +maculation +maculations +macule +maculed +macules +maculing +macumba +macumbas mad madam madame +madames +madams +madcap +madcaps +madded +madden +maddened +maddening +maddeningly +maddens +madder +madders +maddest +madding +maddish +made +madeira +madeiras +madeleine +madeleines +mademoiselle +mademoiselles +madhouse +madhouses +madly +madman +madmen +madness +madnesses +madonna +madonnas +madras +madrases +madre +madrepore +madrepores +madreporian +madreporians +madreporic +madreporite +madreporites +madres +madrigal +madrigalian +madrigalist +madrigalists +madrigals +madrilene +madrilenes +madrona +madronas +madrone +madrones +madrono +madronos +mads +maduro +maduros +madwoman +madwomen +madwort +madworts +madzoon +madzoons +mae +maelstrom +maelstroms +maenad +maenades +maenadic +maenads +maes +maestoso +maestosos +maestri +maestro +maestros +maffia +maffias +maffick +mafficked +mafficking +mafficks +mafia +mafias +mafic +mafiosi +mafioso +maftir +maftirs +mag magazine +magazines +magazinist +magazinists +magdalen +magdalene +magdalenes +magdalens +mage +magenta +magentas +mages +maggot +maggots +maggoty +magi +magian +magians magic +magical +magically +magician +magicians +magicked +magicking +magics +magilp +magilps +magister +magisterial +magisterially +magisterium +magisteriums +magisters +magistracies +magistracy +magistral +magistrally +magistrate +magistrates +magistratical +magistratically +magistrature +magistratures +maglev +maglevs +magma +magmas +magmata +magmatic +magnanimities +magnanimity +magnanimous +magnanimously +magnanimousness +magnanimousnesses +magnate +magnates +magnesia +magnesian +magnesias +magnesic +magnesite +magnesites +magnesium +magnesiums +magnet +magnetic +magnetically +magnetics +magnetise +magnetised +magnetises +magnetising +magnetism +magnetisms +magnetite +magnetites +magnetizable +magnetization +magnetizations +magnetize +magnetized +magnetizer +magnetizers +magnetizes +magnetizing +magneto +magnetoelectric +magnetofluiddynamics +magnetograph +magnetographs +magnetohydrodynamic +magnetohydrodynamics +magnetometer +magnetometers +magnetometric +magnetometries +magnetometry +magneton +magnetons +magnetopause +magnetopauses +magnetoresistance +magnetoresistances +magnetos +magnetosphere +magnetospheres +magnetospheric +magnetostatic +magnetostriction +magnetostrictions +magnetostrictive +magnetostrictively +magnetron +magnetrons +magnets +magnific +magnifical +magnifically +magnificat +magnification +magnifications +magnificats +magnificence +magnificences +magnificent +magnificently +magnifico +magnificoes +magnificos +magnified +magnifier +magnifiers +magnifies +magnify +magnifying +magniloquence +magniloquences +magniloquent +magniloquently +magnitude +magnitudes +magnolia +magnolias +magnum +magnums +magot +magots +magpie +magpies +mags +maguey +magueys +magus +maharaja +maharajah +maharajahs +maharajas +maharanee +maharanees +maharani +maharanis +maharishi +maharishis +mahatma +mahatmas +mahimahi +mahjong +mahjongg +mahjonggs +mahjongs +mahlstick +mahlsticks +mahoe +mahoes +mahoganies +mahogany +mahonia +mahonias +mahout +mahouts +mahuang +mahuangs +mahzor +mahzorim +mahzors maid +maiden +maidenhair +maidenhairs +maidenhead +maidenheads +maidenhood +maidenhoods +maidenliness +maidenlinesses +maidenly +maidens +maidhood +maidhoods +maidish +maids +maidservant +maidservants +maieutic +maigre +maihem +maihems mail +mailabilities +mailability +mailable +mailbag +mailbags mailbox +mailboxes +maile +mailed +mailer +mailers +mailes +mailing +mailings +maill +mailless +maillot +maillots +maills +mailman +mailmen +mails +maim +maimed +maimer +maimers +maiming +maims main +mainframe +mainframes mainland +mainlander +mainlanders +mainlands +mainline +mainlined +mainlines +mainlining +mainly +mainmast +mainmasts +mains +mainsail +mainsails +mainsheet +mainsheets +mainspring +mainsprings +mainstay +mainstays +mainstream +mainstreamed +mainstreaming +mainstreams +maintain +maintainabilities +maintainability +maintainable +maintained +maintainer +maintainers +maintaining +maintains +maintenance +maintenances +maintop +maintops +maiolica +maiolicas +mair +mairs +maisonette +maisonettes +maist +maists +maize +maizes +majagua +majaguas +majestic +majestically +majesties +majesty +majolica +majolicas major +majordomo +majordomos +majored +majorette +majorettes +majoring +majoritarian +majoritarianism +majoritarianisms +majoritarians +majorities majority +majorly +majors +majuscular +majuscule +majuscules +makable +makar +makars make +makeable +makebate +makebates +makefast +makefasts +makeover +makeovers +maker +makereadies +makeready +makers +makes +makeshift +makeshifts +makeup +makeups +makeweight +makeweights +makimono +makimonos +making +makings +mako +makos +makuta +malabsorption +malabsorptions +malacca +malaccas +malachite +malachites +malacological +malacologies +malacologist +malacologists +malacology +malacostracan +malacostracans +maladaptation +maladaptations +maladapted +maladaptive +maladies +maladjusted +maladjustive +maladjustment +maladjustments +maladminister +maladministered +maladministering +maladministers +maladministration +maladministrations +maladroit +maladroitly +maladroitness +maladroitnesses +malady +malaguena +malaguenas +malaise +malaises +malamute +malamutes +malanga +malangas +malapert +malapertly +malapertness +malapertnesses +malaperts +malapportioned +malapportionment +malapportionments +malaprop +malapropian +malapropism +malapropisms +malapropist +malapropists +malapropos +malaprops +malar +malaria +malarial +malarian +malarias +malariologies +malariologist +malariologists +malariology +malarious +malarkey +malarkeys +malarkies +malarky +malaroma +malaromas +malars +malate +malates +malathion +malathions +malcontent +malcontented +malcontentedly +malcontentedness +malcontentednesses +malcontents +maldistribution +maldistributions male +maleate +maleates +maledict +maledicted +maledicting +malediction +maledictions +maledictory +maledicts +malefaction +malefactions +malefactor +malefactors +malefic +maleficence +maleficences +maleficent +malemiut +malemiuts +malemute +malemutes +maleness +malenesses +males +malevolence +malevolences +malevolent +malevolently +malfeasance +malfeasances +malfed +malformation +malformations +malformed +malfunction +malfunctioned +malfunctioning +malfunctions +malgre +malic +malice +malices +malicious +maliciously +maliciousness +maliciousnesses +malign +malignance +malignances +malignancies +malignancy +malignant +malignantly +maligned +maligner +maligners +maligning +malignities +malignity +malignly +maligns +malihini +malihinis +maline +malines +malinger +malingered +malingerer +malingerers +malingering +malingers +malison +malisons +malkin +malkins +mall +mallard +mallards +malleabilities +malleability +malleable +malled +mallee +mallees +mallei +malleoli +malleolus +mallet +mallets +malleus +malling +mallow +mallows +malls +malm +malmier +malmiest +malms +malmsey +malmseys +malmy +malnourished +malnutrition +malnutritions +malocclusion +malocclusions +malodor +malodorous +malodorously +malodorousness +malodorousnesses +malodors +malolactic +maloti +malposed +malposition +malpositions +malpractice +malpractices +malpractitioner +malpractitioners +malt +maltase +maltases +malted +malteds +maltha +malthas +maltier +maltiest +malting +maltol +maltols +maltose +maltoses +maltreat +maltreated +maltreater +maltreaters +maltreating +maltreatment +maltreatments +maltreats +malts +maltster +maltsters +malty +malvasia +malvasias +malversation +malversations +mama +mamaliga +mamaligas +mamas +mamba +mambas +mambo +mamboed +mamboes +mamboing +mambos +mameluke +mamelukes +mamey +mameyes +mameys +mamie +mamies +mamluk +mamluks +mamma +mammae +mammal +mammalian +mammalians +mammalogies +mammalogist +mammalogists +mammalogy +mammals +mammary +mammas +mammate +mammati +mammatus +mammee +mammees +mammer +mammered +mammering +mammers +mammet +mammets +mammey +mammeys +mammie +mammies +mammilla +mammillae +mammillary +mammillated +mammitides +mammitis +mammock +mammocked +mammocking +mammocks +mammogram +mammograms +mammographic +mammographies +mammography +mammon +mammonism +mammonisms +mammonist +mammonists +mammons +mammoth +mammoths +mammy man +mana +manacle +manacled +manacles +manacling manage +manageabilities +manageability +manageable +manageableness +manageablenesses +manageably +managed +management +managemental +managements manager +manageress +manageresses +managerial +managerially +managers +managership +managerships +manages +managing +manakin +manakins +manana +mananas +manas +manatee +manatees +manatoid +manche +manches +manchet +manchets +manchineel +manchineels +manciple +manciples +mandala +mandalas +mandalic +mandamus +mandamused +mandamuses +mandamusing +mandarin +mandarinate +mandarinates +mandarinic +mandarinism +mandarinisms +mandarins +mandataries +mandatary +mandate +mandated +mandates +mandating +mandator +mandatories +mandatorily +mandators +mandatory +mandible +mandibles +mandibular +mandibulate +mandioca +mandiocas +mandola +mandolas +mandolin +mandoline +mandolines +mandolinist +mandolinists +mandolins +mandragora +mandragoras +mandrake +mandrakes +mandrel +mandrels +mandril +mandrill +mandrills +mandrils +mane +maned +manege +maneges +maneless +manes +maneuver +maneuverabilities +maneuverability +maneuverable +maneuvered +maneuverer +maneuverers +maneuvering +maneuvers +manful +manfully +manfulness +manfulnesses +mangabey +mangabeys +mangabies +mangaby +manganate +manganates +manganese +manganeses +manganesian +manganic +manganite +manganites +manganous +mange +mangel +mangels +manger +mangers +manges +mangey +mangier +mangiest +mangily +manginess +manginesses +mangle +mangled +mangler +manglers +mangles +mangling +mango +mangoes +mangold +mangolds +mangonel +mangonels +mangos +mangosteen +mangosteens +mangrove +mangroves +mangy +manhandle +manhandled +manhandles +manhandling +manhattan +manhattans +manhole +manholes +manhood +manhoods +manhunt +manhunts +mania +maniac +maniacal +maniacally +maniacs +manias +manic +manically +manicotti +manics +manicure +manicured +manicures +manicuring +manicurist +manicurists +manifest +manifestant +manifestants +manifestation +manifestations +manifested +manifester +manifesters +manifesting +manifestly +manifesto +manifestoed +manifestoes +manifestoing +manifestos +manifests +manifold +manifolded +manifolding +manifoldly +manifoldness +manifoldnesses +manifolds +manihot +manihots +manikin +manikins +manila +manilas +manilla +manillas +manille +manilles +manioc +manioca +maniocas +maniocs +maniple +maniples +manipulabilities +manipulability +manipulable +manipular +manipulatable +manipulate +manipulated +manipulates +manipulating +manipulation +manipulations +manipulative +manipulatively +manipulativeness +manipulativenesses +manipulator +manipulators +manipulatory +manito +manitos +manitou +manitous +manitu +manitus mankind +manless +manlier +manliest +manlike +manlily +manliness +manlinesses +manly +manmade +manna +mannan +mannans +mannas +manned +mannequin +mannequins manner +mannered +mannerism +mannerisms +mannerist +manneristic +mannerists +mannerless +mannerliness +mannerlinesses +mannerly +manners +mannikin +mannikins +manning +mannish +mannishly +mannishness +mannishnesses +mannite +mannites +mannitic +mannitol +mannitols +mannose +mannoses +mano +manoeuvre +manoeuvred +manoeuvres +manoeuvring +manometer +manometers +manometric +manometrically +manometries +manometry +manor +manorial +manorialism +manorialisms +manors +manos +manpack +manpower +manpowers +manque +manrope +manropes +mans +mansard +mansarded +mansards +manse +manservant +manses +mansion +mansions +manslaughter +manslaughters +manslayer +manslayers +mansuetude +mansuetudes +manta +mantas +manteau +manteaus +manteaux +mantel +mantelet +mantelets +mantelpiece +mantelpieces +mantels +mantelshelf +mantelshelves +mantes +mantic +manticore +manticores +mantid +mantids +mantilla +mantillas +mantis +mantises +mantissa +mantissas +mantle +mantled +mantles +mantlet +mantlets +mantling +mantlings +mantra +mantrap +mantraps +mantras +mantric +mantua +mantuas +manual +manually +manuals +manuary +manubria +manubrium +manubriums +manufactories +manufactory +manufacture +manufactured +manufacturer +manufacturers +manufactures +manufacturing +manufacturings +manumission +manumissions +manumit +manumits +manumitted +manumitting +manure +manured +manurer +manurers +manures +manurial +manuring +manus +manuscript +manuscripts +manward +manwards +manwise many +manyfold +manzanita +manzanitas map maple +maples +maplike +mapmaker +mapmakers +mapmaking +mapmakings +mappable +mapped +mapper +mappers +mapping +mappings +maps +maquette +maquettes +maqui +maquiladora +maquiladoras +maquillage +maquillages +maquis +mar +marabou +marabous +marabout +marabouts +maraca +maracas +maranta +marantas +marasca +marascas +maraschino +maraschinos +marasmic +marasmus +marasmuses marathon +marathoner +marathoners +marathoning +marathonings +marathons +maraud +marauded +marauder +marauders +marauding +marauds +maravedi +maravedis marble +marbled +marbleise +marbleised +marbleises +marbleising +marbleize +marbleized +marbleizes +marbleizing +marbler +marblers +marbles +marblier +marbliest +marbling +marblings +marbly +marc +marcasite +marcasites +marcato +marcel +marcelled +marcelling +marcels march +marched +marchen +marcher +marchers +marches +marchesa +marchese +marchesi +marching +marchioness +marchionesses +marchlike +marchpane +marchpanes +marcs +mare +maremma +maremme +marengo +mares +margaric +margarin +margarine +margarines +margarins +margarita +margaritas +margarite +margarites +margay +margays +marge +margent +margented +margenting +margents +marges +margin +marginal +marginalia +marginalities +marginality +marginalization +marginalizations +marginalize +marginalized +marginalizes +marginalizing +marginally +marginate +marginated +marginates +marginating +margination +marginations +margined +margining +margins +margravate +margravates +margrave +margraves +margravial +margraviate +margraviates +margravine +margravines +marguerite +marguerites +maria +mariachi +mariachis +mariculture +maricultures +mariculturist +mariculturists +marigold +marigolds +marihuana +marihuanas +marijuana +marijuanas +marimba +marimbas +marimbist +marimbists +marina +marinade +marinaded +marinades +marinading +marinara +marinaras +marinas +marinate +marinated +marinates +marinating +marination +marinations +marine +mariner +mariners +marines +marionette +marionettes +mariposa +mariposas +marish +marishes +marital +maritally +maritime +marjoram +marjorams mark +markdown +markdowns +marked +markedly +markedness +markednesses +marker +markers market +marketabilities +marketability +marketable +marketed +marketeer +marketeers +marketer +marketers +marketing +marketings +marketplace +marketplaces +markets +markhoor +markhoors +markhor +markhors +marking +markings +markka +markkaa +markkas +marks +marksman +marksmanship +marksmanships +marksmen +markswoman +markswomen +markup +markups +marl +marled +marlier +marliest +marlin +marline +marlines +marlinespike +marlinespikes +marling +marlings +marlins +marlinspike +marlinspikes +marlite +marlites +marlitic +marls +marlstone +marlstones +marly +marmalade +marmalades +marmite +marmites +marmoreal +marmoreally +marmorean +marmoset +marmosets +marmot +marmots +marocain +marocains +maroon +marooned +marooning +maroons +marplot +marplots +marque +marquee +marquees +marques +marquess +marquessate +marquessates +marquesses +marqueterie +marqueteries +marquetries +marquetry +marquis +marquisate +marquisates +marquise +marquises +marquisette +marquisettes +marram +marrams +marrano +marranos +marred +marrer +marrers marriage +marriageabilities +marriageability +marriageable +marriages +married +marrieds +marrier +marriers +marries +marring +marron +marrons +marrow +marrowbone +marrowbones +marrowed +marrowfat +marrowfats +marrowing +marrows +marrowy marry +marrying +mars +marsala +marsalas +marse +marses +marsh +marshal +marshalcies +marshalcy +marshaled +marshaling +marshall +marshalled +marshalling +marshalls +marshals +marshalship +marshalships +marshes +marshier +marshiest +marshiness +marshinesses +marshland +marshlands +marshmallow +marshmallows +marshmallowy +marshy +marsupia +marsupial +marsupials +marsupium +mart +martagon +martagons +marted +martello +martellos +marten +martens +martensite +martensites +martensitic +martensitically +martial +martially +martian +martians +martin +martinet +martinets +marting +martingale +martingales +martini +martinis +martins +martlet +martlets +marts +martyr +martyrdom +martyrdoms +martyred +martyries +martyring +martyrization +martyrizations +martyrize +martyrized +martyrizes +martyrizing +martyrly +martyrologies +martyrologist +martyrologists +martyrology +martyrs +martyry +marvel +marveled +marveling +marvelled +marvelling +marvellous +marvelous +marvelously +marvelousness +marvelousnesses +marvels +marvy +maryjane +maryjanes +marzipan +marzipans +mas +mascara +mascaraed +mascaraing +mascaras +mascarpone +mascarpones +mascon +mascons +mascot +mascots +masculine +masculinely +masculines +masculinise +masculinised +masculinises +masculinising +masculinities +masculinity +masculinization +masculinizations +masculinize +masculinized +masculinizes +masculinizing +maser +masers +mash +mashed +masher +mashers +mashes +mashie +mashies +mashing +mashy +masjid +masjids mask +maskable +masked +maskeg +maskegs +masker +maskers +masking +maskings +masklike +masks +masochism +masochisms +masochist +masochistic +masochistically +masochists +mason +masoned +masonic +masoning +masonries +masonry +masons +masque +masquer +masquerade +masqueraded +masquerader +masqueraders +masquerades +masquerading +masquers +masques mass +massa +massacre +massacred +massacrer +massacrers +massacres +massacring +massage +massaged +massager +massagers +massages +massaging +massas +massasauga +massasaugas +masscult +masscults +masse +massed +massedly +masses +masseter +masseteric +masseters +masseur +masseurs +masseuse +masseuses +massicot +massicots +massier +massiest +massif +massifs +massing +massive +massively +massiveness +massivenesses +massless +massy +mast +mastaba +mastabah +mastabahs +mastabas +mastectomies +mastectomy +masted master +mastered +masterful +masterfully +masterfulness +masterfulnesses +masteries +mastering +masterliness +masterlinesses +masterly +mastermind +masterminded +masterminding +masterminds +masterpiece +masterpieces +masters +mastership +masterships +mastersinger +mastersingers +masterstroke +masterstrokes +masterwork +masterworks +mastery +masthead +mastheaded +mastheading +mastheads +mastic +masticate +masticated +masticates +masticating +mastication +mastications +masticator +masticatories +masticators +masticatory +mastiche +mastiches +mastics +mastiff +mastiffs +mastigophoran +mastigophorans +masting +mastitic +mastitides +mastitis +mastix +mastixes +mastless +mastlike +mastodon +mastodonic +mastodons +mastodont +mastodonts +mastoid +mastoidectomies +mastoidectomy +mastoidites +mastoiditides +mastoiditis +mastoiditises +mastoids +masts +masturbate +masturbated +masturbates +masturbating +masturbation +masturbations +masturbator +masturbators +masturbatory +masurium +masuriums mat +matador +matadors +matambala match +matchable +matchboard +matchboards +matchbook +matchbooks +matchbox +matchboxes +matched +matcher +matchers +matches +matching +matchless +matchlessly +matchlock +matchlocks +matchmaker +matchmakers +matchmaking +matchmakings +matchstick +matchsticks +matchup +matchups +matchwood +matchwoods +mate +mated +mateless +matelot +matelote +matelotes +matelots +mater +materfamilias +materfamiliases material +materialise +materialised +materialises +materialising +materialism +materialisms +materialist +materialistic +materialistically +materialists +materialities +materiality +materialization +materializations +materialize +materialized +materializer +materializers +materializes +materializing +materially +materialness +materialnesses +materials +materiel +materiels +maternal +maternalism +maternalisms +maternally +maternities +maternity +maters +mates +mateship +mateships +matey +mateyness +mateynesses +mateys math +mathematic +mathematical +mathematically +mathematician +mathematicians mathematics +mathematization +mathematizations +mathematize +mathematized +mathematizes +mathematizing maths +matilda +matildas +matin +matinal +matinee +matinees +matiness +matinesses +mating +matings +matins +matless +matrass +matrasses +matres +matriarch +matriarchal +matriarchate +matriarchates +matriarchies +matriarchs +matriarchy +matrices +matricidal +matricide +matricides +matriculant +matriculants +matriculate +matriculated +matriculates +matriculating +matriculation +matriculations +matrilineal +matrilineally +matrimonial +matrimonially +matrimonies +matrimony +matrix +matrixes +matron +matronal +matronly +matrons +matronymic +matronymics +mats +matsah +matsahs +matt +matte +matted +mattedly matter +mattered +mattering +matters +mattery +mattes +mattin +matting +mattings +mattins +mattock +mattocks +mattoid +mattoids +mattrass +mattrasses +mattress +mattresses +matts +maturate +maturated +maturates +maturating +maturation +maturational +maturations mature +matured +maturely +maturer +matures +maturest +maturing +maturities +maturity +matutinal +matutinally +matza +matzah +matzahs +matzas +matzo +matzoh +matzohs +matzoon +matzoons +matzos +matzot +matzoth +maud +maudlin +mauds +mauger +maugre +maul +mauled +mauler +maulers +mauling +mauls +maulstick +maulsticks +maumet +maumetries +maumetry +maumets +maun +maund +maunder +maundered +maunderer +maunderers +maundering +maunders +maundies +maunds +maundy +mausolea +mausoleum +mausoleums +maut +mauts +mauve +mauves +maven +mavens +maverick +mavericks +mavie +mavies +mavin +mavins +mavis +mavises +mavourneen +mavourneens +maw +mawed +mawing +mawkish +mawkishly +mawkishness +mawkishnesses +mawn +maws +max +maxes +maxi +maxicoat +maxicoats +maxilla +maxillae +maxillaries +maxillary +maxillas +maxilliped +maxillipeds +maxillofacial +maxim +maxima +maximal +maximalist +maximalists +maximally +maximals +maximin +maximins +maximise +maximised +maximises +maximising +maximite +maximites +maximization +maximizations +maximize +maximized +maximizer +maximizers +maximizes +maximizing +maxims maximum +maximums +maxis +maxixe +maxixes +maxwell +maxwells may +maya +mayan +mayapple +mayapples +mayas maybe +maybes +maybush +maybushes +mayday +maydays +mayed +mayest +mayflies +mayflower +mayflowers +mayfly +mayhap +mayhem +mayhems +maying +mayings +mayo +mayonnaise +mayonnaises +mayor +mayoral +mayoralties +mayoralty +mayoress +mayoresses +mayors +mayos +maypole +maypoles +maypop +maypops +mays +mayst +mayvin +mayvins +mayweed +mayweeds +mazaedia +mazaedium +mazard +mazards +maze +mazed +mazedly +mazelike +mazer +mazers +mazes +mazier +maziest +mazily +maziness +mazinesses +mazing +mazourka +mazourkas +mazuma +mazumas +mazurka +mazurkas +mazy +mazzard +mazzards +mbira +mbiras me +mead +meadow +meadowland +meadowlands +meadowlark +meadowlarks +meadows +meadowsweet +meadowsweets +meadowy +meads +meager +meagerly +meagerness +meagernesses +meagre +meagrely meal +mealie +mealier +mealies +mealiest +mealless +meals +mealtime +mealtimes +mealworm +mealworms +mealy +mealybug +mealybugs +mealymouthed mean +meander +meandered +meandering +meanders +meandrous +meaner +meaners +meanest +meanie +meanies meaning +meaningful +meaningfully +meaningfulness +meaningfulnesses +meaningless +meaninglessly +meaninglessness +meaninglessnesses +meaningly +meanings +meanly +meanness +meannesses means +meant +meantime +meantimes meanwhile +meanwhiles +meany +measle +measled +measles +measlier +measliest +measly +measurabilities +measurability +measurable +measurably measure +measured +measuredly +measureless +measurement +measurements +measurer +measurers +measures +measuring meat +meatal +meatball +meatballs +meated +meathead +meatheads +meatier +meatiest +meatily +meatiness +meatinesses +meatless +meatloaf +meatloaves +meatman +meatmen +meatpacking +meatpackings +meats +meatus +meatuses +meaty +mecamylamine +mecamylamines +mecca +meccas +mechanic +mechanical +mechanically +mechanicals +mechanician +mechanicians +mechanics +mechanism +mechanisms +mechanist +mechanistic +mechanistically +mechanists +mechanizable +mechanization +mechanizations +mechanize +mechanized +mechanizer +mechanizers +mechanizes +mechanizing +mechanochemical +mechanochemistries +mechanochemistry +mechanoreception +mechanoreceptions +mechanoreceptive +mechanoreceptor +mechanoreceptors +meclizine +meclizines +meconium +meconiums +med +medaillon +medaillons +medaka +medakas medal +medaled +medaling +medalist +medalists +medalled +medallic +medalling +medallion +medallions +medallist +medallists +medals +meddle +meddled +meddler +meddlers +meddles +meddlesome +meddlesomeness +meddlesomenesses +meddling +medevac +medevacked +medevacking +medevacs +medflies +medfly media +mediacies +mediacy +mediad +mediae +mediaeval +mediaevals +mediagenic +medial +medially +medials +median +medianly +medians +mediant +mediants +medias +mediastina +mediastinal +mediastinum +mediate +mediated +mediately +mediates +mediating +mediation +mediational +mediations +mediative +mediator +mediators +mediatory +mediatrices +mediatrix +mediatrixes +medic +medicable +medicaid +medicaids medical +medically +medicals +medicament +medicamentous +medicaments +medicare +medicares +medicate +medicated +medicates +medicating +medication +medications +medicinable +medicinal +medicinally +medicinals medicine +medicined +medicines +medicining +medick +medicks +medico +medicolegal +medicos +medics +medieval +medievalism +medievalisms +medievalist +medievalists +medievally +medievals +medii +medina +medinas +mediocre +mediocrities +mediocrity +meditate +meditated +meditates +meditating +meditation +meditations +meditative +meditatively +meditativeness +meditativenesses +meditator +meditators +mediterranean medium +mediumistic +mediums +mediumship +mediumships +medius +medlar +medlars +medley +medleys +medulla +medullae +medullar +medullary +medullas +medullated +medulloblastoma +medulloblastomas +medulloblastomata +medusa +medusae +medusal +medusan +medusans +medusas +medusoid +medusoids +meed +meeds +meek +meeker +meekest +meekly +meekness +meeknesses +meerkat +meerkats +meerschaum +meerschaums meet +meeter +meeters meeting +meetinghouse +meetinghouses +meetings +meetly +meetness +meetnesses +meets +megabar +megabars +megabit +megabits +megabuck +megabucks +megabyte +megabytes +megacities +megacity +megacorporation +megacorporations +megacycle +megacycles +megadeal +megadeals +megadeath +megadeaths +megadose +megadoses +megadyne +megadynes +megafauna +megafaunae +megafaunal +megafaunas +megagamete +megagametes +megagametophyte +megagametophytes +megahertz +megahit +megahits +megakaryocyte +megakaryocytes +megakaryocytic +megalith +megalithic +megaliths +megaloblast +megaloblastic +megaloblasts +megalomania +megalomaniac +megalomaniacal +megalomaniacally +megalomaniacs +megalomanias +megalomanic +megalopolis +megalopolises +megalopolitan +megalopolitans +megalops +megalopses +megaparsec +megaparsecs +megaphone +megaphoned +megaphones +megaphonic +megaphoning +megapod +megapode +megapodes +megapods +megaproject +megaprojects +megascopic +megascopically +megasporangia +megasporangium +megaspore +megaspores +megasporic +megasporogeneses +megasporogenesis +megasporophyll +megasporophylls +megass +megasse +megasses +megastar +megastars +megaton +megatonnage +megatonnages +megatons +megavitamin +megavitamins +megavolt +megavolts +megawatt +megawatts +megillah +megillahs +megilp +megilph +megilphs +megilps +megohm +megohms +megrim +megrims +meikle +meinie +meinies +meiny +meioses +meiosis +meiotic +meiotically +mel +melamdim +melamed +melamine +melamines +melancholia +melancholiac +melancholiacs +melancholias +melancholic +melancholics +melancholies +melancholy +melange +melanges +melanian +melanic +melanics +melanin +melanins +melanism +melanisms +melanist +melanistic +melanists +melanite +melanites +melanitic +melanization +melanizations +melanize +melanized +melanizes +melanizing +melanoblast +melanoblasts +melanocyte +melanocytes +melanogeneses +melanogenesis +melanoid +melanoids +melanoma +melanomas +melanomata +melanophore +melanophores +melanosome +melanosomes +melanotic +melanous +melatonin +melatonins +meld +melded +melder +melders +melding +melds +melee +melees +melic +melilite +melilites +melilot +melilots +melinite +melinites +meliorate +meliorated +meliorates +meliorating +melioration +meliorations +meliorative +meliorator +meliorators +meliorism +meliorisms +meliorist +melioristic +meliorists +melisma +melismas +melismata +melismatic +mell +melled +mellific +mellifluent +mellifluently +mellifluous +mellifluously +mellifluousness +mellifluousnesses +melling +mellophone +mellophones +mellotron +mellotrons +mellow +mellowed +mellower +mellowest +mellowing +mellowly +mellowness +mellownesses +mellows +mells +melodeon +melodeons +melodia +melodias +melodic +melodica +melodically +melodicas +melodies +melodious +melodiously +melodiousness +melodiousnesses +melodise +melodised +melodises +melodising +melodist +melodists +melodize +melodized +melodizer +melodizers +melodizes +melodizing +melodrama +melodramas +melodramatic +melodramatically +melodramatics +melodramatise +melodramatised +melodramatises +melodramatising +melodramatist +melodramatists +melodramatization +melodramatizations +melodramatize +melodramatized +melodramatizes +melodramatizing +melody +meloid +meloids melon +melons +melphalan +melphalans +mels +melt +meltabilities +meltability +meltable +meltage +meltages +meltdown +meltdowns +melted +melter +melters +melting +meltingly +melton +meltons +melts +meltwater +meltwaters +mem member +membered +members +membership +memberships +membrane +membraned +membranes +membranous +membranously +memento +mementoes +mementos +memo +memoir +memoirist +memoirists +memoirs +memorabilia +memorabilities +memorability +memorable +memorableness +memorablenesses +memorably +memoranda +memorandum +memorandums memorial +memorialise +memorialised +memorialises +memorialising +memorialist +memorialists +memorialize +memorialized +memorializes +memorializing +memorially +memorials +memories +memorise +memorised +memorises +memorising +memoriter +memorizable +memorization +memorizations +memorize +memorized +memorizer +memorizers +memorizes +memorizing memory +memos +mems +memsahib +memsahibs +men +menace +menaced +menacer +menacers +menaces +menacing +menacingly +menad +menadione +menadiones +menads +menage +menagerie +menageries +menages +menarche +menarcheal +menarches +menazon +menazons mend +mendable +mendacious +mendaciously +mendaciousness +mendaciousnesses +mendacities +mendacity +mended +mendelevium +mendeleviums +mender +menders +mendicancies +mendicancy +mendicant +mendicants +mendicities +mendicity +mendigo +mendigos +mending +mendings +mends +menfolk +menfolks +menhaden +menhadens +menhir +menhirs +menial +menially +menials +meningeal +meninges +meningioma +meningiomas +meningiomata +meningitic +meningitides +meningitis +meningococcal +meningococci +meningococcic +meningococcus +meningoencephalitic +meningoencephalitides +meningoencephalitis +meninx +meniscal +menisci +meniscus +meniscuses +meno +menologies +menology +menopausal +menopause +menopauses +menorah +menorahs +menorrhagia +menorrhagias +mensa +mensae +mensal +mensas +mensch +menschen +mensches +mense +mensed +menseful +menseless +menservants +menses +mensing +menstrua +menstrual +menstruate +menstruated +menstruates +menstruating +menstruation +menstruations +menstruum +menstruums +mensurabilities +mensurability +mensurable +mensural +mensuration +mensurations +menswear +menta mental +mentalism +mentalisms +mentalist +mentalistic +mentalists +mentalities +mentality +mentally +mentation +mentations +menthene +menthenes +menthol +mentholated +menthols mention +mentionable +mentioned +mentioner +mentioners +mentioning +mentions +mentor +mentored +mentoring +mentors +mentorship +mentorships +mentum menu +menus +meou +meoued +meouing +meous +meow +meowed +meowing +meows +meperidine +meperidines +mephitic +mephitis +mephitises +meprobamate +meprobamates +merbromin +merbromins +mercantile +mercantilism +mercantilisms +mercantilist +mercantilistic +mercantilists +mercaptan +mercaptans +mercapto +mercaptopurine +mercaptopurines +mercenaries +mercenarily +mercenariness +mercenarinesses +mercenary +mercer +merceries +mercerise +mercerised +mercerises +mercerising +mercerization +mercerizations +mercerize +mercerized +mercerizes +mercerizing +mercers +mercery +merchandise +merchandised +merchandiser +merchandisers +merchandises +merchandising +merchandisings +merchandize +merchandized +merchandizes +merchandizing +merchandizings merchant +merchantabilities +merchantability +merchantable +merchanted +merchanting +merchantman +merchantmen +merchants +mercies merciful +mercifully +mercifulness +mercifulnesses +merciless +mercilessly +mercilessness +mercilessnesses +mercurate +mercurated +mercurates +mercurating +mercuration +mercurations +mercurial +mercurially +mercurialness +mercurialnesses +mercurials +mercuric +mercuries +mercurous +mercury mercy +merde +merdes +mere merely +merengue +merengues +merer +meres +merest +meretricious +meretriciously +meretriciousness +meretriciousnesses +merganser +mergansers +merge +merged +mergence +mergences +merger +mergers +merges +merging +meridian +meridians +meridional +meridionally +meridionals +meringue +meringues +merino +merinos +merises +merisis +meristem +meristematic +meristematically +meristems +meristic +meristically +merit +merited +meriting +meritocracies +meritocracy +meritocrat +meritocratic +meritocrats +meritorious +meritoriously +meritoriousness +meritoriousnesses +merits +merk +merks +merl +merle +merles +merlin +merlins +merlon +merlons +merlot +merlots +merls +mermaid +mermaids +merman +mermen +meroblastic +meroblastically +merocrine +meromorphic +meromyosin +meromyosins +meropia +meropias +meropic +merozoite +merozoites +merrier +merriest +merrily +merriment +merriments +merriness +merrinesses merry +merrymaker +merrymakers +merrymaking +merrymakings +merrythought +merrythoughts +mesa +mesalliance +mesalliances +mesally +mesarch +mesas +mescal +mescaline +mescalines +mescals +mesdames +mesdemoiselles +meseemed +meseemeth +meseems +mesembryanthemum +mesembryanthemums +mesencephala +mesencephalic +mesencephalon +mesenchymal +mesenchyme +mesenchymes +mesentera +mesenteric +mesenteries +mesenteron +mesentery +mesh +meshed +meshes +meshier +meshiest +meshing +meshuga +meshugah +meshugga +meshuggah +meshugge +meshuggener +meshuggeners +meshwork +meshworks +meshy +mesial +mesially +mesian +mesic +mesmeric +mesmerically +mesmerise +mesmerised +mesmerises +mesmerising +mesmerism +mesmerisms +mesmerist +mesmerists +mesmerize +mesmerized +mesmerizer +mesmerizers +mesmerizes +mesmerizing +mesnalties +mesnalty +mesne +mesnes +mesocarp +mesocarps +mesocyclone +mesocyclones +mesoderm +mesodermal +mesoderms +mesoglea +mesogleas +mesogloea +mesogloeas +mesomere +mesomeres +mesomorph +mesomorphic +mesomorphies +mesomorphs +mesomorphy +meson +mesonephric +mesonephroi +mesonephros +mesonic +mesons +mesopause +mesopauses +mesopelagic +mesophyl +mesophyll +mesophyllic +mesophyllous +mesophylls +mesophyls +mesophyte +mesophytes +mesophytic +mesoscale +mesosome +mesosomes +mesosphere +mesospheres +mesospheric +mesothelia +mesothelial +mesothelioma +mesotheliomas +mesotheliomata +mesothelium +mesothoraces +mesothoracic +mesothorax +mesothoraxes +mesotron +mesotrons +mesotrophic +mesquit +mesquite +mesquites +mesquits mess message +messaged +messages +messaging +messaline +messalines +messan +messans +messed +messeigneurs +messenger +messengers +messes +messiah +messiahs +messiahship +messiahships +messianic +messianism +messianisms +messier +messiest +messieurs +messily +messiness +messinesses +messing +messman +messmate +messmates +messmen +messuage +messuages messy +mestee +mestees +mesteso +mestesoes +mestesos +mestino +mestinoes +mestinos +mestiza +mestizas +mestizo +mestizoes +mestizos +mestranol +mestranols +met +meta +metabolic +metabolically +metabolism +metabolisms +metabolite +metabolites +metabolizable +metabolize +metabolized +metabolizes +metabolizing +metacarpal +metacarpals +metacarpi +metacarpus +metacenter +metacenters +metacentric +metacentrics +metacercaria +metacercariae +metacercarial +metachromatic +metaethical +metaethics +metafiction +metafictional +metafictionist +metafictionists +metafictions +metagalactic +metagalaxies +metagalaxy +metage +metageneses +metagenesis +metagenetic +metages metal +metalanguage +metalanguages +metaled +metaling +metalinguistic +metalinguistics +metalise +metalised +metalises +metalising +metalist +metalists +metalize +metalized +metalizes +metalizing +metalled +metallic +metallically +metallics +metalliferous +metalling +metallization +metallizations +metallize +metallized +metallizes +metallizing +metallographer +metallographers +metallographic +metallographically +metallographies +metallography +metalloid +metalloidal +metalloids +metallophone +metallophones +metallurgical +metallurgically +metallurgies +metallurgist +metallurgists +metallurgy +metalmark +metalmarks +metals +metalsmith +metalsmiths +metalware +metalwares +metalwork +metalworker +metalworkers +metalworking +metalworkings +metalworks +metamathematical +metamathematics +metamer +metamere +metameres +metameric +metamerically +metamerism +metamerisms +metamers +metamorphic +metamorphically +metamorphism +metamorphisms +metamorphose +metamorphosed +metamorphoses +metamorphosing +metamorphosis +metanalyses +metanalysis +metanephric +metanephroi +metanephros +metaphase +metaphases +metaphor +metaphoric +metaphorical +metaphorically +metaphors +metaphosphate +metaphosphates +metaphrase +metaphrases +metaphysic +metaphysical +metaphysically +metaphysician +metaphysicians +metaphysics +metaplasia +metaplasias +metaplastic +metapsychological +metapsychologies +metapsychology +metasequoia +metasequoias +metasomatic +metasomatism +metasomatisms +metastabilities +metastability +metastable +metastably +metastases +metastasis +metastasize +metastasized +metastasizes +metastasizing +metastatic +metastatically +metatarsal +metatarsals +metatarsi +metatarsus +metate +metates +metatheses +metathesis +metathetic +metathetical +metathetically +metathoraces +metathoracic +metathorax +metathoraxes +metaxylem +metaxylems +metazoa +metazoal +metazoan +metazoans +metazoic +metazoon +mete +meted +metempsychoses +metempsychosis +metencephala +metencephalic +metencephalon +meteor +meteoric +meteorically +meteorite +meteorites +meteoritic +meteoritical +meteoriticist +meteoriticists +meteoritics +meteoroid +meteoroidal +meteoroids +meteorologic +meteorological +meteorologically +meteorologies +meteorologist +meteorologists +meteorology +meteors +metepa +metepas meter +meterage +meterages +metered +metering +meters +meterstick +metersticks +metes +metestrus +metestruses +meth +methacrylate +methacrylates +methadon +methadone +methadones +methadons +methamphetamine +methamphetamines +methanation +methanations +methane +methanes +methanol +methanols +methaqualone +methaqualones +methedrine +methedrines +metheglin +metheglins +methemoglobin +methemoglobinemia +methemoglobinemias +methemoglobins +methenamine +methenamines +methicillin +methicillins +methinks +methionine +methionines method +methodic +methodical +methodically +methodicalness +methodicalnesses +methodise +methodised +methodises +methodising +methodism +methodisms +methodist +methodistic +methodists +methodize +methodized +methodizes +methodizing +methodological +methodologically +methodologies +methodologist +methodologists +methodology +methods +methotrexate +methotrexates +methought +methoxy +methoxychlor +methoxychlors +methoxyflurane +methoxyfluranes +methoxyl +meths +methyl +methylal +methylals +methylamine +methylamines +methylase +methylases +methylate +methylated +methylates +methylating +methylation +methylations +methylator +methylators +methylcellulose +methylcelluloses +methylcholanthrene +methylcholanthrenes +methyldopa +methyldopas +methylene +methylenes +methylic +methylmercuries +methylmercury +methylnaphthalene +methylnaphthalenes +methylphenidate +methylphenidates +methylprednisolone +methylprednisolones +methyls +methylxanthine +methylxanthines +methysergide +methysergides +meticais +metical +meticals +meticulosities +meticulosity +meticulous +meticulously +meticulousness +meticulousnesses +metier +metiers +meting +metis +metisse +metisses +metonym +metonymic +metonymical +metonymies +metonyms +metonymy +metopae +metope +metopes +metopic +metopon +metopons metre +metred +metres +metric +metrical +metrically +metrication +metrications +metricize +metricized +metricizes +metricizing +metrics +metrified +metrifies +metrify +metrifying +metring +metrist +metrists +metritis +metritises +metro +metrological +metrologies +metrologist +metrologists +metrology +metronidazole +metronidazoles +metronome +metronomes +metronomic +metronomical +metronomically +metropolis +metropolises +metropolitan +metropolitans +metrorrhagia +metrorrhagias +metros +mettle +mettled +mettles +mettlesome +metump +metumps +meuniere +mew +mewed +mewing +mewl +mewled +mewler +mewlers +mewling +mewls +mews +mezcal +mezcals +meze +mezereon +mezereons +mezereum +mezereums +mezes +mezquit +mezquite +mezquites +mezquits +mezuza +mezuzah +mezuzahs +mezuzas +mezuzot +mezuzoth +mezzanine +mezzanines +mezzo +mezzos +mezzotint +mezzotints +mho +mhos +mi +miaou +miaoued +miaouing +miaous +miaow +miaowed +miaowing +miaows +miasm +miasma +miasmal +miasmas +miasmata +miasmatic +miasmic +miasmically +miasms +miaul +miauled +miauling +miauls +mib +mibs +mica +micaceous +micas +micawber +micawbers +mice +micell +micella +micellae +micellar +micelle +micelles +micells +miche +miched +miches +miching +mick +mickey +mickeys +mickle +mickler +mickles +micklest +micks +micra +micrified +micrifies +micrify +micrifying +micro +microampere +microamperes +microanalyses +microanalysis +microanalyst +microanalysts +microanalytic +microanalytical +microanatomical +microanatomies +microanatomy +microbalance +microbalances +microbar +microbarograph +microbarographs +microbars +microbe +microbeam +microbeams +microbes +microbial +microbic +microbiologic +microbiological +microbiologically +microbiologies +microbiologist +microbiologists +microbiology +microbrew +microbrewer +microbreweries +microbrewers +microbrewery +microbrewing +microbrewings +microbrews +microburst +microbursts +microbus +microbuses +microbusses +microcalorimeter +microcalorimeters +microcalorimetric +microcalorimetries +microcalorimetry +microcapsule +microcapsules +microcassette +microcassettes +microcephalic +microcephalics +microcephalies +microcephaly +microchip +microchips +microcircuit +microcircuitries +microcircuitry +microcircuits +microcirculation +microcirculations +microcirculatory +microclimate +microclimates +microclimatic +microcline +microclines +micrococcal +micrococci +micrococcus +microcode +microcodes +microcomputer +microcomputers +microcopies +microcopy +microcosm +microcosmic +microcosmically +microcosmos +microcosmoses +microcosms +microcrystal +microcrystalline +microcrystallinities +microcrystallinity +microcrystals +microcultural +microculture +microcultures +microcurie +microcuries +microcyte +microcytes +microcytic +microdensitometer +microdensitometers +microdensitometric +microdensitometries +microdensitometry +microdissection +microdissections +microdot +microdots +microearthquake +microearthquakes +microeconomic +microeconomics +microelectrode +microelectrodes +microelectronic +microelectronically +microelectronics +microelectrophoreses +microelectrophoresis +microelectrophoretic +microelectrophoretically +microelement +microelements +microencapsulate +microencapsulated +microencapsulates +microencapsulating +microencapsulation +microencapsulations +microenvironment +microenvironmental +microenvironments +microevolution +microevolutionary +microevolutions +microfarad +microfarads +microfauna +microfaunae +microfaunal +microfaunas +microfibril +microfibrillar +microfibrils +microfiche +microfiches +microfilament +microfilaments +microfilaria +microfilariae +microfilarial +microfilm +microfilmable +microfilmed +microfilmer +microfilmers +microfilming +microfilms +microflora +microflorae +microfloral +microfloras +microform +microforms +microfossil +microfossils +microfungi +microfungus +microfunguses +microgamete +microgametes +microgametocyte +microgametocytes +microgram +micrograms +micrograph +micrographed +micrographic +micrographically +micrographics +micrographing +micrographs +microgravities +microgravity +microgroove +microgrooves +microhabitat +microhabitats +microhm +microhms +microimage +microimages +microinch +microinches +microinject +microinjected +microinjecting +microinjection +microinjections +microinjects +microinstruction +microinstructions +microlepidoptera +microlepidopterous +microliter +microliters +microlith +microlithic +microliths +microluces +microlux +microluxes +micromanage +micromanaged +micromanagement +micromanagements +micromanager +micromanagers +micromanages +micromanaging +micromanipulation +micromanipulations +micromanipulator +micromanipulators +micromere +micromeres +micrometeorite +micrometeorites +micrometeoritic +micrometeoroid +micrometeoroids +micrometeorological +micrometeorologies +micrometeorologist +micrometeorologists +micrometeorology +micrometer +micrometers +micromethod +micromethods +micromho +micromhos +micromini +microminiature +microminiaturization +microminiaturizations +microminiaturized +microminis +micromolar +micromole +micromoles +micromorphological +micromorphologies +micromorphology +micron +micronize +micronized +micronizes +micronizing +microns +micronuclei +micronucleus +micronucleuses +micronutrient +micronutrients +microorganism +microorganisms +micropaleontologic +micropaleontological +micropaleontologies +micropaleontologist +micropaleontologists +micropaleontology +microparticle +microparticles +microphage +microphages +microphone +microphones +microphonic +microphonics +microphotograph +microphotographer +microphotographers +microphotographic +microphotographies +microphotographs +microphotography +microphotometer +microphotometers +microphotometric +microphotometrically +microphotometries +microphotometry +microphyll +microphyllous +microphylls +microphysical +microphysically +microphysics +micropipet +micropipets +micropipette +micropipettes +microplankton +microplanktons +micropore +micropores +microporosities +microporosity +microporous +microprism +microprisms +microprobe +microprobes +microprocessor +microprocessors +microprogram +microprogramming +microprogrammings +microprograms +microprojection +microprojections +microprojector +microprojectors +micropublisher +micropublishers +micropublishing +micropublishings +micropulsation +micropulsations +micropuncture +micropunctures +micropylar +micropyle +micropyles +microquake +microquakes +microradiograph +microradiographic +microradiographies +microradiographs +microradiography +microreader +microreaders +microreproduction +microreproductions +micros +microscale +microscales microscope +microscopes +microscopic +microscopical +microscopically +microscopies +microscopist +microscopists +microscopy +microsecond +microseconds +microseism +microseismic +microseismicities +microseismicity +microseisms +microsomal +microsome +microsomes +microspectrophotometer +microspectrophotometers +microspectrophotometric +microspectrophotometries +microspectrophotometry +microsphere +microspheres +microspherical +microsporangia +microsporangiate +microsporangium +microspore +microspores +microsporocyte +microsporocytes +microsporogeneses +microsporogenesis +microsporophyll +microsporophylls +microsporous +microstate +microstates +microstructural +microstructure +microstructures +microsurgeries +microsurgery +microsurgical +microswitch +microswitches +microtechnic +microtechnics +microtechnique +microtechniques +microtome +microtomes +microtonal +microtonalities +microtonality +microtonally +microtone +microtones +microtubular +microtubule +microtubules +microvascular +microvasculature +microvasculatures +microvillar +microvilli +microvillous +microvillus +microvolt +microvolts +microwatt +microwatts +microwavable microwave +microwaveable +microwaved +microwaves +microwaving +microworld +microworlds +micrurgies +micrurgy +micturate +micturated +micturates +micturating +micturition +micturitions +mid +midair +midairs +midbrain +midbrains +midcourse +midcult +midcults +midday +middays +midden +middens +middies middle +middlebrow +middlebrows +middled +middleman +middlemen +middler +middlers +middles +middleweight +middleweights +middling +middlingly +middlings +middorsal +middy +midfield +midfielder +midfielders +midfields +midge +midges +midget +midgets +midgut +midguts +midi +midiron +midirons +midis +midland +midlands +midlatitude +midlatitudes +midleg +midlegs +midlife +midline +midlines +midlives +midmonth +midmonths +midmost +midmosts midnight +midnightly +midnights +midnoon +midnoons +midpoint +midpoints +midrange +midranges +midrash +midrashic +midrashim +midrashoth +midrib +midribs +midriff +midriffs +mids +midsagittal +midsection +midsections +midship +midshipman +midshipmen +midships +midsize +midsized +midsole +midsoles +midspace +midspaces +midst +midstories +midstory +midstream +midstreams +midsts +midsummer +midsummers +midterm +midterms +midtown +midtowns +midwatch +midwatches +midway +midways +midweek +midweekly +midweeks +midwestern +midwife +midwifed +midwiferies +midwifery +midwifes +midwifing +midwinter +midwinters +midwived +midwives +midwiving +midyear +midyears +mien +miens +miff +miffed +miffier +miffiest +miffing +miffs +miffy +mig +migg +miggle +miggles +miggs might +mightier +mightiest +mightily +mightiness +mightinesses +mights +mighty +mignon +mignonette +mignonettes +mignonne +mignons +migraine +migraines +migrainous +migrant +migrants +migrate +migrated +migrates +migrating +migration +migrational +migrations +migrator +migrators +migratory +migs +mihrab +mihrabs +mijnheer +mijnheers +mikado +mikados +mike +miked +mikes +miking +mikra +mikron +mikrons +mikvah +mikvahs +mikveh +mikvehs +mikvoth +mil +miladi +miladies +miladis +milady +milage +milages +milch +milchig mild +milden +mildened +mildening +mildens +milder +mildest +mildew +mildewed +mildewing +mildews +mildewy +mildly +mildness +mildnesses mile +mileage +mileages +milepost +mileposts +miler +milers +miles +milesimo +milesimos +milestone +milestones +milfoil +milfoils +milia +miliaria +miliarial +miliarias +miliary +milieu +milieus +milieux +militance +militances +militancies +militancy +militant +militantly +militantness +militantnesses +militants +militaria +militaries +militarily +militarise +militarised +militarises +militarising +militarism +militarisms +militarist +militaristic +militaristically +militarists +militarization +militarizations +militarize +militarized +militarizes +militarizing +military +militate +militated +militates +militating +militia +militiaman +militiamen +militias +milium milk +milked +milker +milkers +milkfish +milkfishes +milkier +milkiest +milkily +milkiness +milkinesses +milking +milkmaid +milkmaids +milkman +milkmen +milks +milkshed +milksheds +milksop +milksops +milkweed +milkweeds +milkwood +milkwoods +milkwort +milkworts +milky +mill +millable +millage +millages +millcake +millcakes +milldam +milldams +mille +milled +millefiori +millefioris +millefleur +millefleurs +millenarian +millenarianism +millenarianisms +millenarians +millenaries +millenary +millennia +millennial +millennialism +millennialisms +millennialist +millennialists +millennium +millenniums +milleped +millepeds +miller +millerite +millerites +millers +milles +millesimal +millesimally +millesimals +millet +millets +milliampere +milliamperes +milliard +milliards +milliare +milliares +milliaries +milliary +millibar +millibars +millicurie +millicuries +millidegree +millidegrees +millieme +milliemes +millier +milliers +milligal +milligals +milligram +milligrams +millihenries +millihenry +millihenrys +millilambert +millilamberts +milliliter +milliliters +milliluces +millilux +milliluxes +millime +millimes millimeter -millimetre +millimeters +millimho +millimhos +millimicron +millimicrons +millimolar +millimole +millimoles +milline +milliner +millineries +milliners +millinery +millines +milling +millings +milliohm +milliohms +million millionaire +millionaires +millionairess +millionairesses +millionfold +millions +millionth +millionths +milliosmol +milliosmols +milliped +millipede +millipedes +millipeds +milliradian +milliradians +millirem +millirems +milliroentgen +milliroentgens +millisecond +milliseconds +millivolt +millivolts +milliwatt +milliwatts +millpond +millponds +millrace +millraces +millrun +millruns +mills +millstone +millstones +millstream +millstreams +millwork +millworks +millwright +millwrights +milneb +milnebs +milo +milord +milords +milos +milpa +milpas +milquetoast +milquetoasts +milreis +mils +milt +milted +milter +milters +miltier +miltiest +milting +milts +milty +mim +mimbar +mimbars +mime +mimed +mimeo +mimeoed +mimeograph +mimeographed +mimeographing +mimeographs +mimeoing +mimeos +mimer +mimers +mimes +mimesis +mimesises +mimetic +mimetically +mimetite +mimetites +mimic +mimical +mimicked +mimicker +mimickers +mimicking +mimicries +mimicry +mimics +miming +mimosa +mimosas +mina +minable +minacities +minacity +minae +minaret +minarets +minas +minatory +minaudiere +minaudieres +mince +minced +mincemeat +mincemeats +mincer +mincers +minces +mincier +minciest +mincing +mincingly +mincy mind +mindblower +mindblowers +minded +mindedness +mindednesses +minder +minders +mindful +mindfully +mindfulness +mindfulnesses +minding +mindless +mindlessly +mindlessness +mindlessnesses +minds +mindset +mindsets mine +mineable +mined +minefield +minefields +minelayer +minelayers +miner mineral +mineralise +mineralised +mineralises +mineralising +mineralizable +mineralization +mineralizations +mineralize +mineralized +mineralizer +mineralizers +mineralizes +mineralizing +mineralocorticoid +mineralocorticoids +mineralogic +mineralogical +mineralogically +mineralogies +mineralogist +mineralogists +mineralogy +minerals +miners +mines +minestrone +minestrones +minesweeper +minesweepers +minesweeping +minesweepings +mingier +mingiest +mingle +mingled +mingler +minglers +mingles +mingling +mingy +mini +miniature +miniatures +miniaturist +miniaturistic +miniaturists +miniaturization +miniaturizations +miniaturize +miniaturized +miniaturizes +miniaturizing +minibike +minibiker +minibikers +minibikes minibus +minibuses +minibusses +minicab +minicabs +minicamp +minicamps +minicar +minicars +minicomputer +minicomputers +minicourse +minicourses +minified +minifies +minify +minifying +minikin +minikins +minilab +minilabs +minim +minima +minimal +minimalism +minimalisms +minimalist +minimalists +minimally +minimals +minimax +minimaxes +minimill +minimills +minimise +minimised +minimises +minimising +minimization +minimizations +minimize +minimized +minimizer +minimizers +minimizes +minimizing +minims minimum +minimums +mining +minings +minion +minions +minipark +miniparks +minis +minischool +minischools +miniscule +miniscules +miniseries +minish +minished +minishes +minishing +miniski +miniskirt +miniskirted +miniskirts +miniskis +ministate +ministates minister +ministered +ministerial +ministerially +ministering +ministers +ministrant +ministrants +ministration +ministrations +ministries ministry +minium +miniums +minivan +minivans +miniver +minivers +mink +minke +minkes +minks +minnesinger +minnesingers +minnies +minnow +minnows +minny +minor +minorca +minorcas +minored +minoring +minorities minority +minors +minoxidil +minoxidils +minster +minsters +minstrel +minstrels +minstrelsies +minstrelsy +mint +mintage +mintages +minted +minter +minters +mintier +mintiest +minting +mints +minty +minuend +minuends +minuet +minuets minus +minuscule +minuscules +minuses minute +minuted +minutely +minuteman +minutemen +minuteness +minutenesses +minuter +minutes +minutest +minutia +minutiae +minutial +minuting +minx +minxes +minxish +minyan +minyanim +minyans +mioses +miosis +miotic +miotics +miquelet +miquelets +mir +miracidia +miracidial +miracidium +miracle +miracles +miraculous +miraculously +miraculousness +miraculousnesses +mirador +miradors +mirage +mirages +mire +mired +mires +mirex +mirexes +miri +mirier +miriest +miriness +mirinesses +miring +mirk +mirker +mirkest +mirkier +mirkiest +mirkily +mirks +mirky +mirliton +mirlitons mirror +mirrored +mirroring +mirrorlike +mirrors +mirs +mirth +mirthful +mirthfully +mirthfulness +mirthfulnesses +mirthless +mirthlessly +mirths +miry +mirza +mirzas +mis +misact +misacted +misacting +misacts +misadapt +misadapted +misadapting +misadapts +misadd +misadded +misadding +misaddress +misaddressed +misaddresses +misaddressing +misadds +misadjust +misadjusted +misadjusting +misadjusts +misadministration +misadministrations +misadventure +misadventures +misadvise +misadvised +misadvises +misadvising +misagent +misagents +misaim +misaimed +misaiming +misaims +misalign +misaligned +misaligning +misalignment +misalignments +misaligns +misalliance +misalliances +misallied +misallies +misallocate +misallocated +misallocates +misallocating +misallocation +misallocations +misally +misallying +misalter +misaltered +misaltering +misalters +misanalyses +misanalysis +misandries +misandry +misanthrope +misanthropes +misanthropic +misanthropically +misanthropies +misanthropy +misapplication +misapplications +misapplied +misapplies +misapply +misapplying +misappraisal +misappraisals +misapprehend +misapprehended +misapprehending +misapprehends +misapprehension +misapprehensions +misappropriate +misappropriated +misappropriates +misappropriating +misappropriation +misappropriations +misarticulate +misarticulated +misarticulates +misarticulating +misassay +misassayed +misassaying +misassays +misassemble +misassembled +misassembles +misassembling +misassumption +misassumptions +misate +misatone +misatoned +misatones +misatoning +misattribute +misattributed +misattributes +misattributing +misattribution +misattributions +misaver +misaverred +misaverring +misavers +misaward +misawarded +misawarding +misawards +misbalance +misbalanced +misbalances +misbalancing +misbecame +misbecome +misbecomes +misbecoming +misbegan +misbegin +misbeginning +misbegins +misbegot +misbegotten +misbegun +misbehave +misbehaved +misbehaver +misbehavers +misbehaves +misbehaving +misbehavior +misbehaviors +misbelief +misbeliefs +misbelieve +misbelieved +misbeliever +misbelievers +misbelieves +misbelieving +misbias +misbiased +misbiases +misbiasing +misbiassed +misbiasses +misbiassing +misbill +misbilled +misbilling +misbills +misbind +misbinding +misbinds +misbound +misbrand +misbranded +misbranding +misbrands +misbuild +misbuilding +misbuilds +misbuilt +misbutton +misbuttoned +misbuttoning +misbuttons +miscalculate +miscalculated +miscalculates +miscalculating +miscalculation +miscalculations +miscall +miscalled +miscalling +miscalls +miscaption +miscaptioned +miscaptioning +miscaptions +miscarriage +miscarriages +miscarried +miscarries +miscarry +miscarrying +miscast +miscasting +miscasts +miscatalog +miscataloged +miscataloging +miscatalogs +miscegenation +miscegenational +miscegenations +miscellanea +miscellaneous +miscellaneously +miscellaneousness +miscellaneousnesses +miscellanies +miscellanist +miscellanists +miscellany +mischance +mischances +mischannel +mischanneled +mischanneling +mischannelled +mischannelling +mischannels +mischaracterization +mischaracterizations +mischaracterize +mischaracterized +mischaracterizes +mischaracterizing +mischarge +mischarged +mischarges +mischarging +mischief +mischiefs +mischievous +mischievously +mischievousness +mischievousnesses +mischoice +mischoices +miscibilities +miscibility +miscible +miscitation +miscitations +miscite +miscited +miscites +misciting +misclaim +misclaimed +misclaiming +misclaims +misclass +misclassed +misclasses +misclassification +misclassifications +misclassified +misclassifies +misclassify +misclassifying +misclassing +miscode +miscoded +miscodes +miscoding +miscoin +miscoined +miscoining +miscoins +miscolor +miscolored +miscoloring +miscolors +miscommunication +miscommunications +miscomprehension +miscomprehensions +miscomputation +miscomputations +miscompute +miscomputed +miscomputes +miscomputing +misconceive +misconceived +misconceiver +misconceivers +misconceives +misconceiving +misconception +misconceptions +misconduct +misconducted +misconducting +misconducts +misconnect +misconnected +misconnecting +misconnection +misconnections +misconnects +misconstruction +misconstructions +misconstrue +misconstrued +misconstrues +misconstruing +miscook +miscooked +miscooking +miscooks +miscopied +miscopies +miscopy +miscopying +miscorrelation +miscorrelations +miscount +miscounted +miscounting +miscounts +miscreant +miscreants +miscreate +miscreated +miscreates +miscreating +miscreation +miscreations +miscue +miscued +miscues +miscuing +miscut +miscuts +miscutting +misdate +misdated +misdates +misdating +misdeal +misdealing +misdeals +misdealt +misdeed +misdeeds +misdeem +misdeemed +misdeeming +misdeems +misdefine +misdefined +misdefines +misdefining +misdemeanant +misdemeanants +misdemeanor +misdemeanors +misdescribe +misdescribed +misdescribes +misdescribing +misdescription +misdescriptions +misdevelop +misdeveloped +misdeveloping +misdevelops +misdiagnose +misdiagnosed +misdiagnoses +misdiagnosing +misdiagnosis +misdial +misdialed +misdialing +misdialled +misdialling +misdials +misdid +misdirect +misdirected +misdirecting +misdirection +misdirections +misdirects +misdistribution +misdistributions +misdivision +misdivisions +misdo +misdoer +misdoers +misdoes +misdoing +misdoings +misdone +misdoubt +misdoubted +misdoubting +misdoubts +misdraw +misdrawing +misdrawn +misdraws +misdrew +misdrive +misdriven +misdrives +misdriving +misdrove +mise +misease +miseases +miseat +miseaten +miseating +miseats +misedit +misedited +misediting +misedits +miseducate +miseducated +miseducates +miseducating +miseducation +miseducations +misemphases +misemphasis +misemphasize +misemphasized +misemphasizes +misemphasizing +misemploy +misemployed +misemploying +misemployment +misemployments +misemploys +misenrol +misenroll +misenrolled +misenrolling +misenrolls +misenrols +misenter +misentered +misentering +misenters +misentries +misentry +miser +miserable +miserableness +miserablenesses +miserables +miserably +miserere +misereres +misericord +misericorde +misericordes +misericords +miseries +miserliness +miserlinesses +miserly +misers +misery +mises +misesteem +misesteemed +misesteeming +misesteems +misestimate +misestimated +misestimates +misestimating +misestimation +misestimations +misevaluate +misevaluated +misevaluates +misevaluating +misevaluation +misevaluations +misevent +misevents +misfaith +misfaiths +misfeasance +misfeasances +misfeasor +misfeasors +misfield +misfielded +misfielding +misfields +misfile +misfiled +misfiles +misfiling +misfire +misfired +misfires +misfiring +misfit +misfits +misfitted +misfitting +misfocus +misfocused +misfocuses +misfocusing +misfocussed +misfocusses +misfocussing +misform +misformed +misforming +misforms +misfortune +misfortunes +misframe +misframed +misframes +misframing +misfunction +misfunctioned +misfunctioning +misfunctions +misgauge +misgauged +misgauges +misgauging +misgave +misgive +misgiven +misgives +misgiving +misgivings +misgovern +misgoverned +misgoverning +misgovernment +misgovernments +misgoverns +misgrade +misgraded +misgrades +misgrading +misgraft +misgrafted +misgrafting +misgrafts +misgrew +misgrow +misgrowing +misgrown +misgrows +misguess +misguessed +misguesses +misguessing +misguidance +misguidances +misguide +misguided +misguidedly +misguidedness +misguidednesses +misguider +misguiders +misguides +misguiding +mishandle +mishandled +mishandles +mishandling +mishanter +mishanters +mishap +mishaps +mishear +misheard +mishearing +mishears +mishit +mishits +mishitting +mishmash +mishmashes +mishmosh +mishmoshes +misidentification +misidentifications +misidentified +misidentifies +misidentify +misidentifying +misimpression +misimpressions +misinfer +misinferred +misinferring +misinfers +misinform +misinformation +misinformations +misinformed +misinforming +misinforms +misinter +misinterpret +misinterpretation +misinterpretations +misinterpreted +misinterpreting +misinterprets +misinterred +misinterring +misinters +misjoin +misjoinder +misjoinders +misjoined +misjoining +misjoins +misjudge +misjudged +misjudges +misjudging +misjudgment +misjudgments +miskal +miskals +miskeep +miskeeping +miskeeps +miskept +miskick +miskicked +miskicking +miskicks +misknew +misknow +misknowing +misknowledge +misknowledges +misknown +misknows +mislabel +mislabeled +mislabeling +mislabelled +mislabelling +mislabels +mislabor +mislabored +mislaboring +mislabors +mislaid +mislain +mislay +mislayer +mislayers +mislaying +mislays +mislead +misleader +misleaders +misleading +misleadingly +misleads +misleared +mislearn +mislearned +mislearning +mislearns +mislearnt +misled +mislie +mislies +mislight +mislighted +mislighting +mislights +mislike +misliked +misliker +mislikers +mislikes +misliking +mislit +mislive +mislived +mislives +misliving +mislocate +mislocated +mislocates +mislocating +mislocation +mislocations +mislodge +mislodged +mislodges +mislodging +mislying +mismade +mismake +mismakes +mismaking +mismanage +mismanaged +mismanagement +mismanagements +mismanages +mismanaging +mismark +mismarked +mismarking +mismarks +mismarriage +mismarriages +mismatch +mismatched +mismatches +mismatching +mismate +mismated +mismates +mismating +mismeasurement +mismeasurements +mismeet +mismeeting +mismeets +mismet +mismove +mismoved +mismoves +mismoving +misname +misnamed +misnames +misnaming +misnomer +misnomered +misnomers +miso +misogamies +misogamist +misogamists +misogamy +misogynic +misogynies +misogynist +misogynistic +misogynists +misogyny +misologies +misology +misoneism +misoneisms +misorder +misordered +misordering +misorders +misorient +misorientation +misorientations +misoriented +misorienting +misorients +misos +mispackage +mispackaged +mispackages +mispackaging +mispage +mispaged +mispages +mispaging +mispaint +mispainted +mispainting +mispaints +misparse +misparsed +misparses +misparsing +mispart +misparted +misparting +misparts +mispatch +mispatched +mispatches +mispatching +mispen +mispenned +mispenning +mispens +misperceive +misperceived +misperceives +misperceiving +misperception +misperceptions +misplace +misplaced +misplacement +misplacements +misplaces +misplacing +misplan +misplanned +misplanning +misplans +misplant +misplanted +misplanting +misplants +misplay +misplayed +misplaying +misplays +misplead +mispleaded +mispleading +mispleads +mispled +mispoint +mispointed +mispointing +mispoints +mispoise +mispoised +mispoises +mispoising +misposition +mispositioned +mispositioning +mispositions +misprice +mispriced +misprices +mispricing +misprint +misprinted +misprinting +misprints +misprision +misprisions +misprize +misprized +misprizes +misprizing +misprogram +misprogramed +misprograming +misprogrammed +misprogramming +misprograms +mispronounce +mispronounced +mispronounces +mispronouncing +mispronunciation +mispronunciations +misquotation +misquotations +misquote +misquoted +misquotes +misquoting +misraise +misraised +misraises +misraising +misrate +misrated +misrates +misrating +misread +misreading +misreads +misreckon +misreckoned +misreckoning +misreckons +misrecollection +misrecollections +misrecord +misrecorded +misrecording +misrecords +misrefer +misreference +misreferences +misreferred +misreferring +misrefers +misregister +misregistered +misregistering +misregisters +misregistration +misregistrations +misrelate +misrelated +misrelates +misrelating +misrelied +misrelies +misrely +misrelying +misremember +misremembered +misremembering +misremembers +misrender +misrendered +misrendering +misrenders +misreport +misreported +misreporting +misreports +misrepresent +misrepresentation +misrepresentations +misrepresentative +misrepresented +misrepresenting +misrepresents +misroute +misrouted +misroutes +misrouting +misrule +misruled +misrules +misruling miss +missable +missaid +missal +missals +missay +missaying +missays +misseat +misseated +misseating +misseats +missed +missel +missels +missend +missending +missends +missense +missenses +missent +misses +misset +missets +missetting +misshape +misshaped +misshapen +misshapenly +misshapes +misshaping +misshod +missies missile +missileer +missileers +missileman +missilemen +missileries +missilery +missiles +missilries +missilry +missing +missiologies +missiology +mission +missionaries +missionary +missioned +missioner +missioners +missioning +missionization +missionizations +missionize +missionized +missionizer +missionizers +missionizes +missionizing +missions +missis +missises +missive +missives +missort +missorted +missorting +missorts +missound +missounded +missounding +missounds +missout +missouts +misspace +misspaced +misspaces +misspacing +misspeak +misspeaking +misspeaks +misspell +misspelled +misspelling +misspellings +misspells +misspelt +misspend +misspending +misspends +misspent +misspoke +misspoken +misstart +misstarted +misstarting +misstarts +misstate +misstated +misstatement +misstatements +misstates +misstating +missteer +missteered +missteering +missteers +misstep +missteps +misstop +misstopped +misstopping +misstops +misstricken +misstrike +misstrikes +misstriking +misstruck +misstyle +misstyled +misstyles +misstyling +missuit +missuited +missuiting +missuits +missus +missuses +missy mist +mistakable mistake mistaken +mistakenly +mistaker +mistakers +mistakes +mistaking +mistaught +mistbow +mistbows +misteach +misteaches +misteaching +misted +mistend +mistended +mistending +mistends +mister +misterm +mistermed +misterming +misterms +misters +misteuk +misthink +misthinking +misthinks +misthought +misthrew +misthrow +misthrowing +misthrown +misthrows +mistier +mistiest +mistily +mistime +mistimed +mistimes +mistiming +mistiness +mistinesses +misting +mistitle +mistitled +mistitles +mistitling +mistletoe +mistletoes +mistook +mistouch +mistouched +mistouches +mistouching +mistrace +mistraced +mistraces +mistracing +mistrain +mistrained +mistraining +mistrains +mistral +mistrals +mistranscribe +mistranscribed +mistranscribes +mistranscribing +mistranscription +mistranscriptions +mistranslate +mistranslated +mistranslates +mistranslating +mistranslation +mistranslations +mistreat +mistreated +mistreating +mistreatment +mistreatments +mistreats +mistress +mistresses +mistrial +mistrials +mistrust +mistrusted +mistrustful +mistrustfully +mistrustfulness +mistrustfulnesses +mistrusting +mistrusts +mistruth +mistruths +mistryst +mistrysted +mistrysting +mistrysts +mists +mistune +mistuned +mistunes +mistuning +mistutor +mistutored +mistutoring +mistutors +misty +mistype +mistyped +mistypes +mistyping misunderstand +misunderstanding +misunderstandings +misunderstands +misunderstood +misunion +misunions +misusage +misusages +misuse +misused +misuser +misusers +misuses +misusing +misutilization +misutilizations +misvalue +misvalued +misvalues +misvaluing +misvocalization +misvocalizations +misword +misworded +miswording +miswords +miswrit +miswrite +miswrites +miswriting +miswritten +miswrote +misyoke +misyoked +misyokes +misyoking +mite +miter +mitered +miterer +miterers +mitering +miters +miterwort +miterworts +mites +mither +mithers +mithridate +mithridates +miticidal +miticide +miticides +mitier +mitiest +mitigate +mitigated +mitigates +mitigating +mitigation +mitigations +mitigative +mitigator +mitigators +mitigatory +mitis +mitises +mitochondria +mitochondrial +mitochondrion +mitogen +mitogenic +mitogenicities +mitogenicity +mitogens +mitomycin +mitomycins +mitoses +mitosis +mitotic +mitotically +mitral +mitre +mitred +mitres +mitrewort +mitreworts +mitring +mitsvah +mitsvahs +mitsvoth +mitt +mitten +mittens +mittimus +mittimuses +mitts +mity +mitzvah +mitzvahs +mitzvoth mix +mixable +mixed +mixer +mixers +mixes +mixible +mixing +mixologies +mixologist +mixologists +mixology +mixt mixture +mixtures +mixup +mixups +mizen +mizens +mizzen +mizzenmast +mizzenmasts +mizzens +mizzle +mizzled +mizzles +mizzling +mizzly +mm +mnemonic +mnemonically +mnemonics +mo +moa +moan +moaned +moaner +moaners +moanful +moaning +moans +moas +moat +moated +moating +moatlike +moats +mob +mobbed +mobber +mobbers +mobbing +mobbish +mobcap +mobcaps mobile +mobiles +mobilise +mobilised +mobilises +mobilising +mobilities +mobility +mobilization +mobilizations +mobilize +mobilized +mobilizes +mobilizing +mobled +mobocracies +mobocracy +mobocrat +mobocratic +mobocrats +mobs +mobster +mobsters +moc +moccasin +moccasins +mocha +mochas +mochila +mochilas +mock +mockable +mocked +mocker +mockeries +mockers +mockery +mocking +mockingbird +mockingbirds +mockingly +mocks +mockup +mockups +mocs +mod +modal +modalities +modality +modally +mode model +modeled +modeler +modelers +modeling +modelings +modelist +modelists +modelled +modeller +modellers +modelling +models modem +modems +moderate +moderated +moderately +moderateness +moderatenesses +moderates +moderating +moderation +moderations +moderato +moderator +moderators +moderatorship +moderatorships +moderatos modern +moderne +moderner +modernest +modernisation +modernisations +modernise +modernised +modernises +modernising +modernism +modernisms +modernist +modernistic +modernists +modernities +modernity +modernization +modernizations +modernize +modernized +modernizer +modernizers +modernizes +modernizing +modernly +modernness +modernnesses +moderns +modes modest +modester +modestest +modesties +modestly +modesty +modi +modica +modicum +modicums +modifiabilities +modifiability +modifiable +modification +modifications +modified +modifier +modifiers +modifies +modify +modifying +modillion +modillions +modioli +modiolus +modish +modishly +modishness +modishnesses +modiste +modistes +mods +modulabilities +modulability +modular +modularities +modularity +modularized +modularly +modulate +modulated +modulates +modulating +modulation +modulations +modulator +modulators +modulatory +module +modules +moduli +modulo +modulus +modus +mofette +mofettes +moffette +moffettes +mog +mogged +moggie +moggies +mogging +moggy +mogs +mogul +moguls +mohair +mohairs +mohalim +mohel +mohelim +mohels +mohur +mohurs +moidore +moidores +moieties +moiety +moil +moiled +moiler +moilers +moiling +moilingly +moils +moira +moirai +moire +moires +moist +moisten +moistened +moistener +moisteners +moistening +moistens +moister +moistest +moistful +moistly +moistness +moistnesses +moisture +moistures +moisturise +moisturised +moisturises +moisturising +moisturize +moisturized +moisturizer +moisturizers +moisturizes +moisturizing +mojarra +mojarras +mojo +mojoes +mojos +moke +mokes +mol +mola +molal +molalities +molality +molar +molarities +molarity +molars +molas +molasses +molasseses +mold +moldable +moldboard +moldboards +molded +molder +moldered +moldering +molders +moldier +moldiest +moldiness +moldinesses +molding +moldings +molds +moldwarp +moldwarps +moldy +mole +molecular +molecularly +molecule +molecules +molehill +molehills +moles +moleskin +moleskins +molest +molestation +molestations +molested +molester +molesters +molesting +molests +molies +moline +moll +mollah +mollahs +mollie +mollies +mollification +mollifications +mollified +mollifies +mollify +mollifying +molls +mollusc +molluscan +molluscicidal +molluscicide +molluscicides +molluscs +mollusk +molluskan +mollusks +molly +mollycoddle +mollycoddled +mollycoddler +mollycoddlers +mollycoddles +mollycoddling +moloch +molochs +mols +molt +molted +molten +moltenly +molter +molters +molting +molto +molts +moly +molybdate +molybdates +molybdenite +molybdenites +molybdenum +molybdenums +molybdic mom +mome moment +momenta +momentarily +momentariness +momentarinesses +momentary +momently +momento +momentoes +momentos +momentous +momentously +momentousness +momentousnesses +moments +momentum +momentums +momes +momi +momism +momisms +momma +mommas +mommies mommy +moms +momser +momsers +momus +momuses +momzer +momzers +mon +monachal +monachism +monachisms +monacid +monacids +monad +monadal +monadelphous +monades +monadic +monadism +monadisms +monadnock +monadnocks +monads +monandries +monandry +monarch +monarchal +monarchial +monarchic +monarchical +monarchically +monarchies +monarchism +monarchisms +monarchist +monarchists +monarchs +monarchy +monarda +monardas +monas +monasteries +monastery +monastic +monastically +monasticism +monasticisms +monastics +monatomic +monaural +monaurally +monaxial +monaxon +monaxons +monazite +monazites +monde +mondes +mondo +mondos +monecian +monecious +monellin +monellins +moneran +monerans +monestrous +monetarily +monetarism +monetarisms +monetarist +monetarists +monetary +monetise +monetised +monetises +monetising +monetization +monetizations +monetize +monetized +monetizes +monetizing money +moneybag +moneybags +moneyed +moneyer +moneyers +moneygrubbing +moneygrubbings +moneylender +moneylenders +moneymaker +moneymakers +moneymaking +moneymakings +moneyman +moneymen +moneys +moneywort +moneyworts +mongeese +monger +mongered +mongering +mongers +mongo +mongoe +mongoes +mongol +mongolism +mongolisms +mongoloid +mongoloids +mongols +mongoose +mongooses +mongos +mongrel +mongrelization +mongrelizations +mongrelize +mongrelized +mongrelizes +mongrelizing +mongrels +mongst +monicker +monickers +monie +monied +monies +moniker +monikers +moniliases +moniliasis +moniliform +monish +monished +monishes +monishing +monism +monisms +monist +monistic +monists +monition +monitions +monitive monitor +monitored +monitorial +monitories +monitoring +monitors +monitorship +monitorships +monitory +monk +monkeries +monkery monkey +monkeyed +monkeying +monkeypod +monkeypods +monkeys +monkeyshine +monkeyshines +monkfish +monkfishes +monkhood +monkhoods +monkish +monks +monkshood +monkshoods +mono +monoacid +monoacidic +monoacids +monoamine +monoaminergic +monoamines +monobasic +monocarboxylic +monocarp +monocarpic +monocarps +monochasia +monochasial +monochasium +monochord +monochords +monochromat +monochromatic +monochromatically +monochromaticities +monochromaticity +monochromatism +monochromatisms +monochromator +monochromators +monochromats +monochrome +monochromes +monochromic +monochromist +monochromists +monocle +monocled +monocles +monocline +monoclines +monoclinic +monoclonal +monoclonals +monocoque +monocoques +monocot +monocots +monocotyledon +monocotyledonous +monocotyledons +monocracies +monocracy +monocrat +monocratic +monocrats +monocrystal +monocrystalline +monocrystals +monocular +monocularly +monoculars +monocultural +monoculture +monocultures +monocyclic +monocyte +monocytes +monocytic +monodic +monodical +monodically +monodies +monodisperse +monodist +monodists +monodrama +monodramas +monodramatic +monody +monoecies +monoecious +monoecism +monoecisms +monoecy +monoester +monoesters +monofil +monofilament +monofilaments +monofils +monofuel +monofuels +monogamic +monogamies +monogamist +monogamists +monogamous +monogamously +monogamy +monogastric +monogenean +monogeneans +monogeneses +monogenesis +monogenetic +monogenic +monogenically +monogenies +monogeny +monogerm +monoglot +monoglots +monoglyceride +monoglycerides +monogram +monogramed +monograming +monogrammatic +monogrammed +monogrammer +monogrammers +monogramming +monograms +monograph +monographed +monographic +monographing +monographs +monogynies +monogynous +monogyny +monohull +monohulls +monohybrid +monohybrids +monohydric +monohydroxy +monolayer +monolayers +monolingual +monolinguals +monolith +monolithic +monolithically +monoliths +monolog +monologies +monologist +monologists +monologs +monologue +monologues +monologuist +monologuists +monology +monomania +monomaniac +monomaniacal +monomaniacally +monomaniacs +monomanias +monomer +monomeric +monomers +monometallic +monometallism +monometallisms +monometallist +monometallists +monometer +monometers +monomial +monomials +monomolecular +monomolecularly +monomorphemic +monomorphic +monomorphism +monomorphisms +mononuclear +mononuclears +mononucleate +mononucleated +mononucleoses +mononucleosis +mononucleosises +mononucleotide +mononucleotides +monophagies +monophagous +monophagy +monophonic +monophonically +monophonies +monophony +monophthong +monophthongal +monophthongs +monophyletic +monophylies +monophyly +monoplane +monoplanes +monoploid +monoploids +monopode +monopodes +monopodial +monopodially +monopodies +monopody +monopole +monopoles +monopolies +monopolise +monopolised +monopolises +monopolising +monopolist +monopolistic +monopolistically +monopolists +monopolization +monopolizations +monopolize +monopolized +monopolizer +monopolizers +monopolizes +monopolizing +monopoly +monopropellant +monopropellants +monopsonies +monopsonistic +monopsony +monorail +monorails +monorchid +monorchidism +monorchidisms +monorchids +monorhyme +monorhymed +monorhymes +monos +monosaccharide +monosaccharides +monosome +monosomes +monosomic +monosomics +monosomies +monosomy +monospecific +monospecificities +monospecificity +monostele +monosteles +monostelic +monostelies +monostely +monosyllabic +monosyllabically +monosyllabicities +monosyllabicity +monosyllable +monosyllables +monosynaptic +monosynaptically +monoterpene +monoterpenes +monotheism +monotheisms +monotheist +monotheistic +monotheistical +monotheistically +monotheists +monotint +monotints +monotone +monotones +monotonic +monotonically +monotonicities +monotonicity +monotonies +monotonous +monotonously +monotonousness +monotonousnesses +monotony +monotreme +monotremes +monotype +monotypes +monotypic +monounsaturate +monounsaturated +monounsaturates +monovalent +monovular +monoxide +monoxides +monozygotic +mons +monseigneur +monsieur +monsignor +monsignori +monsignorial +monsignors +monsoon +monsoonal +monsoons +monster +monstera +monsteras +monsters +monstrance +monstrances +monstrosities +monstrosity +monstrous +monstrously +monstrousness +monstrousnesses +montadale +montadales +montage +montaged +montages +montaging +montagnard +montagnards +montane +montanes +monte +monteith +monteiths +montero +monteros +montes month +monthlies +monthlong +monthly +months +montmorillonite +montmorillonites +montmorillonitic monument +monumental +monumentalities +monumentality +monumentalize +monumentalized +monumentalizes +monumentalizing +monumentally +monuments +monuron +monurons +mony +monzonite +monzonites +moo +mooch +mooched +moocher +moochers +mooches +mooching +mood +moodier +moodiest +moodily +moodiness +moodinesses +moods +moody +mooed +mooing +mool +moola +moolah +moolahs +moolas +mooley +mooleys +mools moon +moonbeam +moonbeams +moonbow +moonbows +mooncalf +mooncalves +moondust +moondusts +mooned +mooneye +mooneyes +moonfaced +moonfish +moonfishes +moonflower +moonflowers +moonier +mooniest +moonily +mooning +moonish +moonishly +moonless +moonlet +moonlets +moonlight +moonlighted +moonlighter +moonlighters +moonlighting +moonlights +moonlike +moonlit +moonport +moonports +moonquake +moonquakes +moonrise +moonrises +moons +moonsail +moonsails +moonscape +moonscapes +moonseed +moonseeds +moonset +moonsets +moonshine +moonshiner +moonshiners +moonshines +moonshot +moonshots +moonstone +moonstones +moonstruck +moonwalk +moonwalks +moonward +moonwort +moonworts +moony +moor +moorage +moorages +moorcock +moorcocks +moored +moorfowl +moorfowls +moorhen +moorhens +moorier +mooriest +mooring +moorings +moorish +moorland +moorlands +moors +moorwort +moorworts +moory +moos +moose +moot +mooted +mooter +mooters +mooting +moots mop +mopboard +mopboards +mope +moped +mopeds +moper +moperies +mopers +mopery +mopes +mopey +mopier +mopiest +moping +mopingly +mopish +mopishly +mopoke +mopokes +mopped +mopper +moppers +moppet +moppets +mopping +mops +mopy +moquette +moquettes +mor +mora +morae +morainal +moraine +moraines +morainic moral +morale +morales +moralise +moralised +moralises +moralising +moralism +moralisms +moralist +moralistic +moralistically +moralists +moralities +morality +moralization +moralizations +moralize +moralized +moralizer +moralizers +moralizes +moralizing +morally +morals +moras +morass +morasses +morassy +moratoria +moratorium +moratoriums +moratory +moray +morays +morbid +morbidities +morbidity +morbidly +morbidness +morbidnesses +morbific +morbilli +morceau +morceaux +mordancies +mordancy +mordant +mordanted +mordanting +mordantly +mordants +mordent +mordents more +moreen +moreens +morel +morelle +morelles +morello +morellos +morels +moreover +mores +moresque +moresques +morgan +morganatic +morganatically +morganite +morganites +morgans +morgen +morgens +morgue +morgues +moribund +moribundities +moribundity +morion +morions +morn morning -moslem +mornings +morns +morocco +moroccos +moron +moronic +moronically +moronism +moronisms +moronities +moronity +morons +morose +morosely +moroseness +morosenesses +morosities +morosity +morph +morphactin +morphactins +morphallaxes +morphallaxis +morpheme +morphemes +morphemic +morphemically +morphemics +morphia +morphias +morphic +morphin +morphine +morphines +morphinism +morphinisms +morphins +morpho +morphogen +morphogeneses +morphogenesis +morphogenetic +morphogenetically +morphogenic +morphogens +morphologic +morphological +morphologically +morphologies +morphologist +morphologists +morphology +morphometric +morphometrically +morphometries +morphometry +morphophonemics +morphos +morphs +morrion +morrions +morris +morrises +morro +morros +morrow +morrows +mors +morse +morsel +morseled +morseling +morselled +morselling +morsels +mort +mortadella +mortadellas +mortal +mortalities +mortality +mortally +mortals +mortar +mortarboard +mortarboards +mortared +mortaring +mortarless +mortars +mortary +mortgage +mortgaged +mortgagee +mortgagees +mortgager +mortgagers +mortgages +mortgaging +mortgagor +mortgagors +mortice +morticed +mortices +mortician +morticians +morticing +mortification +mortifications +mortified +mortifies +mortify +mortifying +mortise +mortised +mortiser +mortisers +mortises +mortising +mortmain +mortmains +morts +mortuaries +mortuary +morula +morulae +morular +morulas +morulation +morulations +mos +mosaic +mosaically +mosaicism +mosaicisms +mosaicist +mosaicists +mosaicked +mosaicking +mosaiclike +mosaics +mosasaur +mosasaurs +moschate +mosey +moseyed +moseying +moseys +moshav +moshavim +mosk +mosks +mosque +mosques mosquito +mosquitoes +mosquitoey +mosquitos +moss +mossback +mossbacked +mossbacks +mossed +mosser +mossers +mosses +mossier +mossiest +mossing +mosslike +mosso +mossy +most +moste +mostest +mostests +mostly +mosts +mot +mote +motel +motels +motes +motet +motets +motey +moth +mothball +mothballed +mothballing +mothballs mother +motherboard +motherboards +mothered +motherfucker +motherfuckers +motherfucking +motherhood +motherhoods +motherhouse +motherhouses +mothering motherland +motherlands +motherless +motherlessness +motherlessnesses +motherliness +motherlinesses +motherly +mothers +mothery +mothier +mothiest +mothlike +mothproof +mothproofed +mothproofer +mothproofers +mothproofing +mothproofs +moths +mothy +motif +motific +motifs +motile +motiles +motilities +motility +motion +motional +motioned +motioner +motioners +motioning +motionless +motionlessly +motionlessness +motionlessnesses +motions +motivate +motivated +motivates +motivating motivation +motivational +motivationally +motivations +motivative +motivator +motivators +motive +motived +motiveless +motivelessly +motives +motivic +motiving +motivities +motivity +motley +motleyer +motleyest +motleys +motlier +motliest +motmot +motmots +motocross +motocrosses +motoneuron +motoneuronal +motoneurons motor +motorbike +motorbiked +motorbikes +motorbiking +motorboat +motorboater +motorboaters +motorboating +motorboatings +motorboats +motorbus +motorbuses +motorbusses +motorcade +motorcaded +motorcades +motorcading +motorcar +motorcars motorcycle +motorcycled +motorcycles +motorcycling +motorcyclist +motorcyclists +motordom +motordoms +motored +motoric +motorically +motoring +motorings +motorise +motorised +motorises +motorising +motorist +motorists +motorization +motorizations +motorize +motorized +motorizes +motorizing +motorless +motorman +motormen +motormouth +motormouths +motors +motortruck +motortrucks +motorway +motorways +mots +mott +motte +mottes +mottle +mottled +mottler +mottlers +mottles +mottling motto +mottoes +mottos +motts +mouch +mouched +mouches +mouching +mouchoir +mouchoirs +moue +moues +moufflon +moufflons +mouflon +mouflons +mouille +moujik +moujiks +moulage +moulages +mould +moulded +moulder +mouldered +mouldering +moulders +mouldier +mouldiest +moulding +mouldings +moulds +mouldy +moulin +moulins +moult +moulted +moulter +moulters +moulting +moults +mound +mounded +mounding +mounds +mount +mountable mountain +mountaineer +mountaineering +mountaineerings +mountaineers mountainous +mountainously +mountainousness +mountainousnesses +mountains +mountainside +mountainsides +mountaintop +mountaintops +mountainy +mountebank +mountebanked +mountebankeries +mountebankery +mountebanking +mountebanks +mounted +mounter +mounters +mounting +mountings +mounts mourn +mourned +mourner +mourners +mournful +mournfuller +mournfullest +mournfully +mournfulness +mournfulnesses +mourning +mourningly +mournings +mourns mouse +moused +mouser +mousers +mouses +mousetrap +mousetrapped +mousetrapping +mousetraps +mousey +mousier +mousiest +mousily +mousiness +mousinesses +mousing +mousings +moussaka +moussakas +mousse +moussed +mousseline +mousselines +mousses +moussing moustache +moustaches +moustachio +moustachios +mousy mouth +mouthbreeder +mouthbreeders +mouthed +mouther +mouthers +mouthful +mouthfuls +mouthier +mouthiest +mouthily +mouthing +mouthlike +mouthpart +mouthparts +mouthpiece +mouthpieces +mouths +mouthwash +mouthwashes +mouthwatering +mouthwateringly +mouthy +mouton +moutons +movabilities +movability +movable +movableness +movablenesses +movables +movably move +moveable +moveables +moveably +moved +moveless +movelessly +movelessness +movelessnesses movement +movements +mover +movers +moves movie -mr -mrs -ms +moviedom +moviedoms +moviegoer +moviegoers +moviegoing +moviegoings +moviemaker +moviemakers +moviemaking +moviemakings +movieola +movieolas +movies +moving +movingly +moviola +moviolas +mow +mowed +mower +mowers +mowing +mowings +mown +mows +moxa +moxas +moxie +moxies +mozetta +mozettas +mozette +mozo +mozos +mozzarella +mozzarellas +mozzetta +mozzettas +mozzette +mridanga +mridangam +mridangams +mridangas +mu much +muchacho +muchachos +muches +muchly +muchness +muchnesses +mucid +mucidities +mucidity +mucilage +mucilages +mucilaginous +mucilaginously +mucin +mucinoid +mucinous +mucins +muck +muckamuck +muckamucks +mucked +mucker +muckers +muckier +muckiest +muckily +mucking +muckle +muckles +muckluck +mucklucks +muckrake +muckraked +muckraker +muckrakers +muckrakes +muckraking +mucks +muckworm +muckworms +mucky +mucluc +muclucs +mucocutaneous +mucoid +mucoidal +mucoids +mucolytic +mucopeptide +mucopeptides +mucopolysaccharide +mucopolysaccharides +mucoprotein +mucoproteins +mucor +mucors +mucosa +mucosae +mucosal +mucosas +mucose +mucosities +mucosity +mucous +mucro +mucronate +mucrones +mucus +mucuses mud +mudcap +mudcapped +mudcapping +mudcaps +mudcat +mudcats +mudded +mudder +mudders +muddied +muddier +muddies +muddiest +muddily +muddiness +muddinesses +mudding +muddle +muddled +muddleheaded +muddleheadedly +muddleheadedness +muddleheadednesses +muddler +muddlers +muddles +muddling +muddly muddy +muddying +mudfish +mudfishes +mudflat +mudflats +mudflow +mudflows +mudguard +mudguards +mudhole +mudholes +mudlark +mudlarks +mudpack +mudpacks +mudpuppies +mudpuppy +mudra +mudras +mudrock +mudrocks +mudroom +mudrooms +muds +mudsill +mudsills +mudskipper +mudskippers +mudslide +mudslides +mudslinger +mudslingers +mudslinging +mudslingings +mudstone +mudstones +mueddin +mueddins +muenster +muensters +muesli +mueslis +muezzin +muezzins +muff +muffed +muffin +muffing +muffins +muffle +muffled +muffler +mufflered +mufflers +muffles +muffling +muffs +mufti +muftis +mug +mugful +mugfuls +mugg +muggar +muggars +mugged +muggee +muggees +mugger +muggers +muggier +muggiest +muggily +mugginess +mugginesses +mugging +muggings +muggins +muggs +muggur +muggurs +muggy +mugs +mugwort +mugworts +mugwump +mugwumps +muhlies +muhly +mujahedeen +mujahedin +mujahideen +mujik +mujiks +mukluk +mukluks +muktuk +muktuks +mulatto +mulattoes +mulattos +mulberries +mulberry +mulch +mulched +mulches +mulching +mulct +mulcted +mulcting +mulcts +mule +muled +mules +muleta +muletas +muleteer +muleteers +muley +muleys +muliebrities +muliebrity +muling +mulish +mulishly +mulishness +mulishnesses +mull +mulla +mullah +mullahism +mullahisms +mullahs +mullas +mulled +mullein +mulleins +mullen +mullens +muller +mullers +mullet +mullets +mulley +mulleys +mulligan +mulligans +mulligatawnies +mulligatawny +mulling +mullion +mullioned +mullioning +mullions +mullite +mullites +mullock +mullocks +mullocky +mulls +multiage +multiagency +multiarmed +multiatom +multiauthor +multiaxial +multiband +multibank +multibarrel +multibarreled +multibillion +multibillionaire +multibillionaires +multibillions +multibladed +multibranched +multibuilding +multicampus +multicar +multicarbon +multicausal +multicell +multicelled +multicellular +multicellularities +multicellularity +multicenter +multichain +multichambered +multichannel +multichannels +multicharacter +multicity +multiclient +multicoated +multicolor +multicolored +multicolors +multicolumn +multicomponent +multiconductor +multicopy +multicounty +multicourse +multicourses +multicultural +multiculturalism +multiculturalisms +multicurie +multicurrency +multidialectal +multidimensional +multidimensionalities +multidimensionality +multidirectional +multidisciplinary +multidiscipline +multidisciplines +multidivisional +multidomain +multidrug +multielectrode +multielement +multiemployer +multiengine +multiengines +multienzyme +multiethnic +multifaceted +multifactor +multifactorial +multifactorially +multifamily +multifarious +multifariousness +multifariousnesses +multifid +multifilament +multifilaments +multiflash +multifocal +multifold +multiform +multiformities +multiformity +multifrequency +multifunction +multifunctional +multigenerational +multigenic +multigerm +multigrade +multigrain +multigrains +multigrid +multigroup +multihandicapped +multiheaded +multihospital +multihued +multihull +multihulls +multijet +multilane +multilateral +multilateralism +multilateralisms +multilateralist +multilateralists +multilaterally +multilayer +multilayered +multilevel +multileveled +multiline +multilingual +multilingualism +multilingualisms +multilingually +multilobed +multimanned +multimedia +multimedias +multimegaton +multimegatons +multimegawatt +multimegawatts +multimember +multimetallic +multimillennial +multimillion +multimillionaire +multimillionaires +multimillions +multimodal +multimode +multimolecular +multination +multinational +multinationals +multinomial +multinomials +multinuclear +multinucleate +multinucleated +multiorgasmic +multipage +multipaned +multiparameter +multiparous +multipart +multiparticle +multipartite +multiparty +multipath +multiped +multipeds +multiphase +multiphasic +multiphoton +multipicture +multipiece +multipion +multipiston +multiplant +multiplayer +multiple +multiples +multiplet +multiplets +multiplex +multiplexed +multiplexer +multiplexers +multiplexes +multiplexing +multiplexor +multiplexors +multiplicand +multiplicands +multiplication +multiplications +multiplicative +multiplicatively +multiplicities +multiplicity +multiplied +multiplier +multipliers +multiplies multiply +multiplying +multipolar +multipolarities +multipolarity +multipole +multipotential +multipower +multiproblem +multiprocessing +multiprocessings +multiprocessor +multiprocessors +multiproduct +multiprogramming +multiprogrammings +multipronged +multipurpose +multiracial +multiracialism +multiracialisms +multirange +multiregional +multireligious +multiroom +multiscreen +multisense +multisensory +multiservice +multisided +multisite +multisize +multiskilled +multisource +multispecies +multispectral +multispeed +multisport +multistage +multistate +multistemmed +multistep +multistoried +multistory +multistranded +multisyllabic +multisystem +multitalented +multitasking +multitaskings +multiterminal +multitiered +multiton +multitone +multitowered +multitrack +multitracked +multitracking +multitracks +multitrillion +multitrillions +multitude +multitudes +multitudinous +multitudinously +multitudinousness +multitudinousnesses +multiunion +multiunit +multiuse +multiuser +multivalence +multivalences +multivalent +multivalents +multivariable +multivariate +multiversities +multiversity +multivitamin +multivitamins +multivoltine +multivolume +multiwall +multiwarhead +multiwavelength +multiyear +multure +multures mum +mumble +mumbled +mumbler +mumblers +mumbles +mumbling +mumbly +mumm +mummed +mummer +mummeries +mummers +mummery +mummichog +mummichogs +mummied +mummies +mummification +mummifications +mummified +mummifies +mummify +mummifying +mumming +mumms mummy +mummying +mump +mumped +mumper +mumpers +mumping +mumps +mums +mumu +mumus +mun +munch +munched +muncher +munchers +munches +munchies +munching +munchkin +munchkins +mundane +mundanely +mundaneness +mundanenesses +mundanities +mundanity +mundungo +mundungos +mundungus +mundunguses +mungo +mungoose +mungooses +mungos +muni +municipal +municipalities +municipality +municipalization +municipalizations +municipalize +municipalized +municipalizes +municipalizing +municipally +municipals +munificence +munificences +munificent +munificently +muniment +muniments +munis +munition +munitioned +munitioning +munitions +munnion +munnions +muns +munster +munsters +muntin +munting +muntings +muntins +muntjac +muntjacs +muntjak +muntjaks +muon +muonic +muonium +muoniums +muons +mura +muraenid +muraenids +mural +muralist +muralists +murals +muras murder +murdered +murderee +murderees +murderer +murderers +murderess +murderesses +murdering +murderous +murderously +murderousness +murderousnesses +murders +mure +mured +murein +mureins +mures +murex +murexes +muriate +muriated +muriates +muricate +murices +murid +murids +murine +murines +muring +murk +murker +murkest +murkier +murkiest +murkily +murkiness +murkinesses +murkly +murks +murky +murmur +murmured +murmurer +murmurers +murmuring +murmurous +murmurously +murmurs +murphies +murphy +murr +murra +murrain +murrains +murras +murre +murrelet +murrelets +murres +murrey +murreys +murrha +murrhas +murrhine +murries +murrine +murrs +murry +murther +murthered +murthering +murthers +mus +musca +muscadel +muscadels +muscadet +muscadets +muscadine +muscadines +muscae +muscarine +muscarines +muscarinic +muscat +muscatel +muscatels +muscats +muscid +muscids +muscle +musclebound +muscled +muscles +muscling +muscly +muscovite +muscovites +muscular +muscularities +muscularity +muscularly +musculature +musculatures +musculoskeletal +muse +mused +museful +museological +museologies +museologist +museologists +museology +muser +musers +muses +musette +musettes museum +museums +mush +mushed +musher +mushers +mushes +mushier +mushiest +mushily +mushiness +mushinesses +mushing mushroom +mushroomed +mushrooming +mushrooms +mushy music musical +musicale +musicales +musicalise +musicalised +musicalises +musicalising +musicalities +musicality +musicalization +musicalizations +musicalize +musicalized +musicalizes +musicalizing +musically +musicals musician +musicianly +musicians +musicianship +musicianships +musicological +musicologies +musicologist +musicologists +musicology +musics +musing +musingly +musings +musjid +musjids +musk +muskeg +muskegs +muskellunge +musket +musketeer +musketeers +musketries +musketry +muskets +muskie +muskier +muskies +muskiest +muskily +muskiness +muskinesses +muskit +muskits +muskmelon +muskmelons +muskrat +muskrats +musks +musky +muslin +muslins +muspike +muspikes +musquash +musquashes +muss +mussed +mussel +mussels +musses +mussier +mussiest +mussily +mussiness +mussinesses +mussing +mussy must +mustache +mustached +mustaches +mustachio +mustachioed +mustachios +mustang +mustangs mustard +mustards +mustardy +musted +mustee +mustees +muster +mustered +mustering +musters +musth +musths +mustier +mustiest +mustily +mustiness +mustinesses +musting +musts +musty +mut +mutabilities +mutability +mutable +mutably +mutagen +mutageneses +mutagenesis +mutagenic +mutagenically +mutagenicities +mutagenicity +mutagens +mutant +mutants +mutase +mutases +mutate +mutated +mutates +mutating +mutation +mutational +mutationally +mutations +mutative +mutch +mutches +mutchkin +mutchkins +mute +muted +mutedly +mutely +muteness +mutenesses +muter +mutes +mutest +muticous +mutilate +mutilated +mutilates +mutilating +mutilation +mutilations +mutilator +mutilators +mutine +mutined +mutineer +mutineered +mutineering +mutineers +mutines +muting +mutinied +mutinies +mutining +mutinous +mutinously +mutinousness +mutinousnesses +mutiny +mutinying +mutism +mutisms +muton +mutons +muts +mutt +mutter +muttered +mutterer +mutterers +muttering +mutters mutton +muttonchops +muttonfish +muttonfishes +muttons +muttony +mutts +mutual +mutualism +mutualisms +mutualist +mutualistic +mutualists +mutualities +mutuality +mutualization +mutualizations +mutualize +mutualized +mutualizes +mutualizing +mutually +mutuel +mutuels +mutular +mutule +mutules +muumuu +muumuus +muzhik +muzhiks +muzjik +muzjiks +muzzier +muzziest +muzzily +muzziness +muzzinesses +muzzle +muzzled +muzzler +muzzlers +muzzles +muzzling +muzzy my +myalgia +myalgias +myalgic +myases +myasis +myasthenia +myasthenias +myasthenic +myasthenics +mycele +myceles +mycelia +mycelial +mycelian +mycelium +myceloid +mycetoma +mycetomas +mycetomata +mycetomatous +mycetophagous +mycetozoan +mycetozoans +mycobacteria +mycobacterial +mycobacterium +mycoflora +mycoflorae +mycofloras +mycological +mycologically +mycologies +mycologist +mycologists +mycology +mycophagies +mycophagist +mycophagists +mycophagous +mycophagy +mycophile +mycophiles +mycoplasma +mycoplasmal +mycoplasmas +mycoplasmata +mycorrhiza +mycorrhizae +mycorrhizal +mycorrhizas +mycoses +mycosis +mycotic +mycotoxin +mycotoxins +mydriases +mydriasis +mydriatic +mydriatics +myelencephala +myelencephalic +myelencephalon +myelin +myelinated +myeline +myelines +myelinic +myelins +myelitides +myelitis +myeloblast +myeloblastic +myeloblasts +myelocyte +myelocytes +myelocytic +myelofibroses +myelofibrosis +myelofibrotic +myelogenous +myeloid +myeloma +myelomas +myelomata +myelomatous +myelopathic +myelopathies +myelopathy +myeloproliferative +myiases +myiasis +mylonite +mylonites +myna +mynah +mynahs +mynas +mynheer +mynheers +myoblast +myoblasts +myocardia +myocardial +myocarditis +myocarditises +myocardium +myoclonic +myoclonus +myoclonuses +myoelectric +myoelectrical +myofibril +myofibrillar +myofibrils +myofilament +myofilaments +myogenic +myoglobin +myoglobins +myograph +myographs +myoid +myoinositol +myoinositols +myologic +myologies +myology +myoma +myomas +myomata +myomatous +myoneural +myopathic +myopathies +myopathy +myope +myopes +myopia +myopias +myopic +myopically +myopies +myopy +myoscope +myoscopes +myoses +myosin +myosins +myosis +myositis +myositises +myosote +myosotes +myosotis +myosotises +myotic +myotics +myotome +myotomes +myotonia +myotonias +myotonic +myriad +myriads +myriapod +myriapods +myrica +myricas +myriopod +myriopods +myrmecological +myrmecologies +myrmecologist +myrmecologists +myrmecology +myrmecophile +myrmecophiles +myrmecophilous +myrmidon +myrmidons +myrobalan +myrobalans +myrrh +myrrhic +myrrhs +myrtle +myrtles myself +mysid +mysids +mysost +mysosts +mystagog +mystagogies +mystagogs +mystagogue +mystagogues +mystagogy +mysteries +mysterious +mysteriously +mysteriousness +mysteriousnesses +mystery +mystic +mystical +mystically +mysticism +mysticisms +mysticly +mystics +mystification +mystifications +mystified +mystifier +mystifiers +mystifies +mystify +mystifying +mystifyingly +mystique +mystiques +myth +mythic +mythical +mythically +mythicize +mythicized +mythicizer +mythicizers +mythicizes +mythicizing +mythier +mythiest +mythmaker +mythmakers +mythmaking +mythmakings +mythographer +mythographers +mythographies +mythography +mythoi +mythologer +mythologers +mythologic +mythological +mythologically +mythologies +mythologist +mythologists +mythologize +mythologized +mythologizer +mythologizers +mythologizes +mythologizing +mythology +mythomania +mythomaniac +mythomaniacs +mythomanias +mythopoeia +mythopoeias +mythopoeic +mythopoetic +mythopoetical +mythos +myths +mythy +myxedema +myxedemas +myxedematous +myxocyte +myxocytes +myxoid +myxoma +myxomas +myxomata +myxomatoses +myxomatosis +myxomatosises +myxomatous +myxomycete +myxomycetes +myxoviral +myxovirus +myxoviruses +na +naan +naans +nab +nabbed +nabber +nabbers +nabbing +nabe +nabes +nabis +nabob +naboberies +nabobery +nabobess +nabobesses +nabobish +nabobism +nabobisms +nabobs +nabs +nacelle +nacelles +nachas +naches +nacho +nachos +nacre +nacred +nacreous +nacres +nada +nadas +nadir +nadiral +nadirs +nae +naething +naethings +naevi +naevoid +naevus +nag +nagana +naganas +nagged +nagger +naggers +naggier +naggiest +nagging +naggingly +naggy +nags +nah +naiad +naiades +naiads +naif +naifs nail +nailbrush +nailbrushes +nailed +nailer +nailers +nailfold +nailfolds +nailhead +nailheads +nailing +nails +nailset +nailsets +nainsook +nainsooks +naira +naive +naively +naiveness +naivenesses +naiver +naives +naivest +naivete +naivetes +naiveties +naivety +naked +nakeder +nakedest +nakedly +nakedness +nakednesses +naled +naleds +nalorphine +nalorphines +naloxone +naloxones +naltrexone +naltrexones +nam +namable name +nameable +named +nameless +namelessly +namelessness +namelessnesses +namely +nameplate +nameplates +namer +namers +names +namesake +namesakes +nametag +nametags +naming +nan +nana +nanas +nance +nances +nancies +nancy +nandin +nandina +nandinas +nandins +nanism +nanisms +nankeen +nankeens +nankin +nankins +nannie +nannies +nannoplankton +nannoplanktons +nanny +nanogram +nanograms +nanometer +nanometers +nanosecond +nanoseconds +nanotechnologies +nanotechnology +nanotesla +nanoteslas +nanowatt +nanowatts +nans +naoi +naos +nap +napalm +napalmed +napalming +napalms +nape +naperies +napery +napes +naphtha +naphthalene +naphthalenes +naphthas +naphthene +naphthenes +naphthenic +naphthol +naphthols +naphthyl +naphthylamine +naphthylamines +naphthyls +naphtol +naphtols +napiform +napkin +napkins +napless +napoleon +napoleons +nappe +napped +napper +nappers +nappes +nappie +nappier +nappies +nappiest +napping +nappy +naprapathies +naprapathy +naps +narc +narcein +narceine +narceines +narceins +narcism +narcisms +narcissi +narcissism +narcissisms +narcissist +narcissistic +narcissists +narcissus +narcissuses +narcist +narcists +narco +narcolepsies +narcolepsy +narcoleptic +narcoleptics +narcos +narcose +narcoses +narcosis +narcotic +narcotically +narcotics +narcotize +narcotized +narcotizes +narcotizing +narcs +nard +nardine +nards +nares +narghile +narghiles +nargile +nargileh +nargilehs +nargiles +narial +naric +narine +naris +nark +narked +narking +narks +narky +narrate +narrated +narrater +narraters +narrates +narrating +narration +narrational +narrations +narrative +narratively +narratives +narratological +narratologies +narratologist +narratologists +narratology +narrator +narrators narrow +narrowband +narrowcasting +narrowcastings +narrowed +narrower +narrowest +narrowing +narrowly +narrowness +narrownesses +narrows +narthex +narthexes +narwal +narwals +narwhal +narwhale +narwhales +narwhals +nary +nasal +nasalise +nasalised +nasalises +nasalising +nasalities +nasality +nasalization +nasalizations +nasalize +nasalized +nasalizes +nasalizing +nasally +nasals +nascence +nascences +nascencies +nascency +nascent +nasial +nasion +nasions +nasogastric +nasopharyngeal +nasopharynges +nasopharynx +nasopharynxes +nastic +nastier +nasties +nastiest +nastily +nastiness +nastinesses +nasturtium +nasturtiums +nasty +natal +natalities +natality +natant +natantly +natation +natations +natatoria +natatorial +natatorium +natatoriums +natatory +natch +nates +natheless +nathless nation national +nationalise +nationalised +nationalises +nationalising +nationalism +nationalisms +nationalist +nationalistic +nationalistically +nationalists +nationalities nationality +nationalization +nationalizations +nationalize +nationalized +nationalizer +nationalizers +nationalizes +nationalizing +nationally +nationals +nationhood +nationhoods +nations nationwide native +natively +nativeness +nativenesses +natives +nativism +nativisms +nativist +nativistic +nativists +nativities +nativity +natrium +natriums +natriureses +natriuresis +natriuretic +natriuretics +natrolite +natrolites +natron +natrons +natter +nattered +nattering +natters +nattier +nattiest +nattily +nattiness +nattinesses +natty natural +naturalise +naturalised +naturalises +naturalising +naturalism +naturalisms +naturalist +naturalistic +naturalistically +naturalists +naturalization +naturalizations +naturalize +naturalized +naturalizes +naturalizing +naturally +naturalness +naturalnesses +naturals nature +natured +natures +naturism +naturisms +naturist +naturists +naturopath +naturopathic +naturopathies +naturopaths +naturopathy +naught +naughtier +naughtiest +naughtily +naughtiness +naughtinesses +naughts +naughty +naumachia +naumachiae +naumachias +naumachies +naumachy +nauplial +nauplii +nauplius +nausea +nauseant +nauseants +nauseas +nauseate +nauseated +nauseates +nauseating +nauseatingly +nauseous +nauseously +nauseousness +nauseousnesses +nautch +nautches +nautical +nautically +nautili +nautiloid +nautiloids +nautilus +nautiluses +navaid +navaids +naval +navally +navar +navars +nave +navel +navels +naves +navette +navettes +navicert +navicerts +navicular +naviculars +navies +navigabilities +navigability +navigable +navigably +navigate +navigated +navigates +navigating +navigation +navigational +navigationally +navigations +navigator +navigators +navvies +navvy navy +naw +nawab +nawabs +nay +nays +naysayer +naysayers +nazi +nazification +nazifications +nazified +nazifies +nazify +nazifying +nazis +ne +neap +neaps near nearby +neared +nearer +nearest +nearing +nearlier +nearliest nearly +nearness +nearnesses +nears +nearshore +nearside +nearsides +nearsighted +nearsightedly +nearsightedness +nearsightednesses neat +neaten +neatened +neatening +neatens +neater +neatest +neath +neatherd +neatherds +neatly +neatness +neatnesses +neats +neb +nebbish +nebbishes +nebbishy +nebenkern +nebenkerns +nebs +nebula +nebulae +nebular +nebulas +nebule +nebulise +nebulised +nebulises +nebulising +nebulization +nebulizations +nebulize +nebulized +nebulizer +nebulizers +nebulizes +nebulizing +nebulose +nebulosities +nebulosity +nebulous +nebulously +nebulousness +nebulousnesses +nebuly +necessaries +necessarily necessary +necessitarian +necessitarianism +necessitarianisms +necessitarians +necessitate +necessitated +necessitates +necessitating +necessitation +necessitations +necessities +necessitous +necessitously +necessitousness +necessitousnesses +necessity neck +neckband +neckbands +necked +necker +neckerchief +neckerchiefs +neckerchieves +neckers +necking +neckings necklace +necklaces +neckless +necklike +neckline +necklines +necks +necktie +neckties +neckwear +necrological +necrologies +necrologist +necrologists +necrology +necromancer +necromancers +necromancies +necromancy +necromantic +necromantically +necrophagous +necrophilia +necrophiliac +necrophiliacs +necrophilias +necrophilic +necrophilism +necrophilisms +necropoleis +necropoles +necropoli +necropolis +necropolises +necropsied +necropsies +necropsy +necropsying +necrose +necrosed +necroses +necrosing +necrosis +necrotic +necrotizing +nectar +nectaries +nectarine +nectarines +nectarous +nectars +nectary +nee need +needed +needer +needers +needful +needfully +needfulness +needfulnesses +needfuls +needier +neediest +needily +neediness +needinesses +needing needle +needled +needlefish +needlefishes +needlelike +needlepoint +needlepoints +needler +needlers +needles +needless +needlessly +needlessness +needlessnesses +needlewoman +needlewomen +needlework +needleworker +needleworkers +needleworks +needling +needlings +needs +needy +neem +neems +neep +neeps +nefarious +nefariously +negate +negated +negater +negaters +negates +negating +negation +negational +negations +negative +negatived +negatively +negativeness +negativenesses +negatives +negativing +negativism +negativisms +negativist +negativistic +negativists +negativities +negativity +negaton +negatons +negator +negators +negatron +negatrons +neglect +neglected +neglecter +neglecters +neglectful +neglectfully +neglectfulness +neglectfulnesses +neglecting +neglects +neglige +negligee +negligees +negligence +negligences +negligent +negligently +negliges +negligibilities +negligibility +negligible +negligibly +negotiabilities +negotiability +negotiable +negotiant +negotiants negotiate +negotiated +negotiates +negotiating +negotiation +negotiations +negotiator +negotiators +negotiatory +negritude +negritudes +negroid +negroids +negroni +negronis +negrophobe +negrophobes +negrophobia +negrophobias +negus +neguses +neif +neifs +neigh neighbor +neighbored neighborhood +neighborhoods +neighboring +neighborliness +neighborlinesses +neighborly +neighbors neighbour -neighbourhood +neighboured +neighbouring +neighbours +neighed +neighing +neighs +neist neither +nekton +nektonic +nektons +nellie +nellies +nelly +nelson +nelsons +nelumbo +nelumbos +nema +nemas +nematic +nematicidal +nematicide +nematicides +nematocidal +nematocide +nematocides +nematocyst +nematocysts +nematode +nematodes +nematological +nematologies +nematologist +nematologists +nematology +nemertean +nemerteans +nemertine +nemertines +nemeses +nemesis +nemophila +nemophilas +nene +neoclassic +neoclassical +neoclassicism +neoclassicisms +neoclassicist +neoclassicists +neocolonial +neocolonialism +neocolonialisms +neocolonialist +neocolonialists +neoconservatism +neoconservatisms +neoconservative +neoconservatives +neocortex +neocortexes +neocortical +neocortices +neodymium +neodymiums +neoliberal +neoliberalism +neoliberalisms +neoliberals +neolith +neolithic +neoliths +neologic +neologies +neologism +neologisms +neologistic +neology +neomorph +neomorphs +neomycin +neomycins +neon +neonatal +neonatally +neonate +neonates +neonatologies +neonatologist +neonatologists +neonatology +neoned +neons +neoorthodox +neoorthodoxies +neoorthodoxy +neophilia +neophiliac +neophiliacs +neophilias +neophyte +neophytes +neoplasia +neoplasias +neoplasm +neoplasms +neoplastic +neoplasticism +neoplasticisms +neoplasticist +neoplasticists +neoprene +neoprenes +neorealism +neorealisms +neorealist +neorealistic +neorealists +neostigmine +neostigmines +neotenic +neotenies +neoteny +neoteric +neoterics +neotropics +neotype +neotypes +nepenthe +nepenthean +nepenthes +nepheline +nephelines +nephelinic +nephelinite +nephelinites +nephelinitic +nephelite +nephelites +nephelometer +nephelometers +nephelometric +nephelometrically +nephelometries +nephelometry nephew +nephews +nephoscope +nephoscopes +nephrectomies +nephrectomize +nephrectomized +nephrectomizes +nephrectomizing +nephrectomy +nephric +nephridia +nephridial +nephridium +nephrism +nephrisms +nephrite +nephrites +nephritic +nephritides +nephritis +nephrologies +nephrologist +nephrologists +nephrology +nephron +nephrons +nephropathic +nephropathies +nephropathy +nephroses +nephrosis +nephrostome +nephrostomes +nephrotic +nephrotics +nephrotoxic +nephrotoxicities +nephrotoxicity +nepotic +nepotism +nepotisms +nepotist +nepotistic +nepotists +neptunium +neptuniums +nerd +nerdier +nerdiest +nerdish +nerds +nerdy +nereid +nereides +nereids +nereis +neritic +nerol +neroli +nerolis +nerols +nerts +nertz +nervate +nervation +nervations +nerve +nerved +nerveless +nervelessly +nervelessness +nervelessnesses +nerves +nervier +nerviest +nervily +nervine +nervines +nerviness +nervinesses +nerving +nervings +nervosities +nervosity nervous +nervously +nervousness +nervousnesses +nervule +nervules +nervure +nervures +nervy +nescience +nesciences +nescient +nescients +ness +nesses nest +nestable +nested +nester +nesters +nesting +nestle +nestled +nestler +nestlers +nestles +nestlike +nestling +nestlings +nestor +nestors +nests net +nether +nethermost +netherworld +netherworlds +netless +netlike +netminder +netminders +netop +netops +nets +netsuke +netsukes +nett +nettable +netted +netter +netters +nettier +nettiest +netting +nettings +nettle +nettled +nettler +nettlers +nettles +nettlesome +nettlier +nettliest +nettling +nettly +netts +netty network +networked +networking +networkings +networks +neuk +neuks +neum +neumatic +neume +neumes +neumic +neums +neural +neuralgia +neuralgias +neuralgic +neurally +neuraminidase +neuraminidases +neurasthenia +neurasthenias +neurasthenic +neurasthenically +neurasthenics +neuraxon +neuraxons +neurilemma +neurilemmal +neurilemmas +neurine +neurines +neuritic +neuritics +neuritides +neuritis +neuritises +neuroactive +neuroanatomic +neuroanatomical +neuroanatomies +neuroanatomist +neuroanatomists +neuroanatomy +neurobiological +neurobiologies +neurobiologist +neurobiologists +neurobiology +neuroblastoma +neuroblastomas +neuroblastomata +neurochemical +neurochemicals +neurochemist +neurochemistries +neurochemistry +neurochemists +neurodegenerative +neuroendocrine +neuroendocrinological +neuroendocrinologies +neuroendocrinologist +neuroendocrinologists +neuroendocrinology +neurofibril +neurofibrillary +neurofibrils +neurofibroma +neurofibromas +neurofibromata +neurofibromatoses +neurofibromatosis +neurofibromatosises +neurogenic +neurogenically +neuroglia +neuroglial +neuroglias +neurohormonal +neurohormone +neurohormones +neurohumor +neurohumoral +neurohumors +neurohypophyseal +neurohypophyses +neurohypophysial +neurohypophysis +neuroid +neuroleptic +neuroleptics +neurologic +neurological +neurologically +neurologies +neurologist +neurologists +neurology +neuroma +neuromas +neuromata +neuromuscular +neuron +neuronal +neurone +neurones +neuronic +neurons +neuropathic +neuropathically +neuropathies +neuropathologic +neuropathological +neuropathologies +neuropathologist +neuropathologists +neuropathology +neuropathy +neuropeptide +neuropeptides +neuropharmacologic +neuropharmacological +neuropharmacologies +neuropharmacologist +neuropharmacologists +neuropharmacology +neurophysiologic +neurophysiological +neurophysiologically +neurophysiologies +neurophysiologist +neurophysiologists +neurophysiology +neuropsychiatric +neuropsychiatrically +neuropsychiatries +neuropsychiatrist +neuropsychiatrists +neuropsychiatry +neuropsychological +neuropsychologies +neuropsychologist +neuropsychologists +neuropsychology +neuropteran +neuropterans +neuropterous +neuroradiological +neuroradiologies +neuroradiologist +neuroradiologists +neuroradiology +neurosal +neuroscience +neurosciences +neuroscientific +neuroscientist +neuroscientists +neurosecretion +neurosecretions +neurosecretory +neurosensory +neuroses +neurosis +neurospora +neurosporas +neurosurgeon +neurosurgeons +neurosurgeries +neurosurgery +neurosurgical +neurotic +neurotically +neuroticism +neuroticisms +neurotics +neurotoxic +neurotoxicities +neurotoxicity +neurotoxin +neurotoxins +neurotransmission +neurotransmissions +neurotransmitter +neurotransmitters +neurotropic +neurula +neurulae +neurulas +neurulation +neurulations +neuston +neustons +neuter +neutered +neutering +neuters +neutral +neutralise +neutralised +neutralises +neutralising +neutralism +neutralisms +neutralist +neutralistic +neutralists +neutralities +neutrality +neutralization +neutralizations +neutralize +neutralized +neutralizer +neutralizers +neutralizes +neutralizing +neutrally +neutralness +neutralnesses +neutrals +neutrino +neutrinoless +neutrinos +neutron +neutronic +neutrons +neutrophil +neutrophilic +neutrophils +neve never +nevermore +nevertheless +neves +nevi +nevoid +nevus new +newborn +newborns +newcomer +newcomers +newel +newels +newer +newest +newfangled +newfangledness +newfanglednesses +newfound +newie +newies +newish +newly +newlywed +newlyweds +newmarket +newmarkets +newmown +newness +newnesses news +newsagent +newsagents +newsboy +newsboys +newsbreak +newsbreaks +newscast +newscaster +newscasters +newscasts +newsdealer +newsdealers +newshawk +newshawks +newshound +newshounds +newsie +newsier +newsies +newsiest +newsiness +newsinesses +newsless +newsletter +newsletters +newsmagazine +newsmagazines +newsman +newsmen +newsmonger +newsmongers newspaper +newspapered +newspapering +newspaperman +newspapermen +newspapers +newspaperwoman +newspaperwomen +newspeak +newspeaks +newspeople +newsperson +newspersons +newsprint +newsprints +newsreader +newsreaders +newsreel +newsreels +newsroom +newsrooms +newsstand +newsstands +newsweeklies +newsweekly +newswoman +newswomen +newsworthiness +newsworthinesses +newsworthy +newswriting +newswritings +newsy +newt +newton +newtons +newts next +nextdoor +nexus +nexuses +ngultrum +ngultrums +ngwee +niacin +niacinamide +niacinamides +niacins +nialamide +nialamides +nib +nibbed +nibbing +nibble +nibbled +nibbler +nibblers +nibbles +nibbling +niblick +niblicks +niblike +nibs +nicad +nicads +niccolite +niccolites nice +nicely +niceness +nicenesses +nicer +nicest +niceties +nicety +niche +niched +niches +niching +nick +nicked +nickel +nickeled +nickelic +nickeliferous +nickeling +nickelled +nickelling +nickelodeon +nickelodeons +nickels +nicker +nickered +nickering +nickers +nicking +nickle +nickled +nickles +nickling +nicknack +nicknacks +nickname +nicknamed +nicknamer +nicknamers +nicknames +nicknaming +nicks +nicol +nicols +nicotiana +nicotianas +nicotin +nicotinamide +nicotinamides +nicotine +nicotines +nicotinic +nicotins +nictate +nictated +nictates +nictating +nictitate +nictitated +nictitates +nictitating +nidal +nide +nided +nidering +niderings +nides +nidget +nidgets +nidi +nidicolous +nidification +nidifications +nidified +nidifies +nidifugous +nidify +nidifying +niding +nidus +niduses niece +nieces +nielli +niellist +niellists +niello +nielloed +nielloing +niellos +nieve +nieves +nifedipine +nifedipines +niffer +niffered +niffering +niffers +niftier +nifties +niftiest +niftily +nifty +niggard +niggarded +niggarding +niggardliness +niggardlinesses +niggardly +niggards +nigger +niggers +niggle +niggled +niggler +nigglers +niggles +niggling +nigglingly +nigglings +nigh +nighed +nigher +nighest +nighing +nighness +nighnesses +nighs +night +nightcap +nightcaps +nightclothes +nightclub +nightclubbed +nightclubber +nightclubbers +nightclubbing +nightclubs +nightdress +nightdresses +nightfall +nightfalls +nightglow +nightglows +nightgown +nightgowns +nighthawk +nighthawks +nightie +nighties +nightingale +nightingales +nightjar +nightjars +nightless +nightlife +nightlifes +nightlong +nightly +nightmare +nightmares +nightmarish +nightmarishly +nights +nightscope +nightscopes +nightshade +nightshades +nightshirt +nightshirts +nightside +nightsides +nightspot +nightspots +nightstand +nightstands +nightstick +nightsticks +nighttime +nighttimes +nightwalker +nightwalkers +nighty +nigrified +nigrifies +nigrify +nigrifying +nigrosin +nigrosins +nihil +nihilism +nihilisms +nihilist +nihilistic +nihilists +nihilities +nihility +nihils +nil +nilgai +nilgais +nilgau +nilgaus +nilghai +nilghais +nilghau +nilghaus +nill +nilled +nilling +nills +nilpotent +nils +nim +nimbi +nimble +nimbleness +nimblenesses +nimbler +nimblest +nimbly +nimbostrati +nimbostratus +nimbus +nimbused +nimbuses +nimieties +nimiety +nimious +nimmed +nimming +nimrod +nimrods +nims +nincompoop +nincompooperies +nincompoopery +nincompoops +nine +ninebark +ninebarks +ninefold +ninepin +ninepins +nines +nineteen +nineteens +nineteenth +nineteenths +nineties +ninetieth +ninetieths +ninety +ninhydrin +ninhydrins +ninja +ninjas +ninnies +ninny +ninnyhammer +ninnyhammers +ninnyish +ninon +ninons +ninth +ninthly +ninths +niobate +niobates +niobic +niobium +niobiums +niobous +nip +nipa +nipas +nipped +nipper +nippers +nippier +nippiest +nippily +nippiness +nippinesses +nipping +nippingly +nipple +nippled +nipples +nippy +nips +nirvana +nirvanas +nirvanic +nisei +niseis +nisi +nisus +nit +nitchie +nitchies +nite +niter +niterie +niteries +niters +nitery +nites +nitid +nitinol +nitinols +niton +nitons +nitpick +nitpicked +nitpicker +nitpickers +nitpickier +nitpickiest +nitpicking +nitpicks +nitpicky +nitrate +nitrated +nitrates +nitrating +nitration +nitrations +nitrator +nitrators +nitre +nitres +nitric +nitrid +nitride +nitrided +nitrides +nitriding +nitrids +nitrification +nitrifications +nitrified +nitrifier +nitrifiers +nitrifies +nitrify +nitrifying +nitril +nitrile +nitriles +nitrils +nitrite +nitrites +nitro +nitrobenzene +nitrobenzenes +nitrocellulose +nitrocelluloses +nitrofuran +nitrofurans +nitrogen +nitrogenase +nitrogenases +nitrogenous +nitrogens +nitroglycerin +nitroglycerine +nitroglycerines +nitroglycerins +nitrolic +nitromethane +nitromethanes +nitroparaffin +nitroparaffins +nitros +nitrosamine +nitrosamines +nitroso +nitrosyl +nitrosyls +nitrous +nits +nittier +nittiest +nitty +nitwit +nitwits +nival +niveous +nix +nixe +nixed +nixes +nixie +nixies +nixing +nixy +nizam +nizamate +nizamates +nizams no +nob +nobbier +nobbiest +nobbily +nobble +nobbled +nobbler +nobblers +nobbles +nobbling +nobby +nobelium +nobeliums +nobilities +nobility noble +nobleman +noblemen +nobleness +noblenesses +nobler +nobles +noblesse +noblesses +noblest +noblewoman +noblewomen +nobly +nobodies nobody +nobs +nocent +nociceptive +nock +nocked +nocking +nocks +noctambulist +noctambulists +noctuid +noctuids +noctule +noctules +noctuoid +nocturn +nocturnal +nocturnally +nocturne +nocturnes +nocturns +nocuous +nocuously nod +nodal +nodalities +nodality +nodally +nodded +nodder +nodders +noddies +nodding +noddle +noddled +noddles +noddling +noddy +node +nodes +nodi +nodical +nodose +nodosities +nodosity +nodous +nods +nodular +nodulation +nodulations +nodule +nodules +nodulose +nodulous +nodus +noel +noels +noes +noesis +noesises +noetic +nog +nogg +nogged +noggin +nogging +noggings +noggins +noggs +nogs +noh +nohow +noil +noils +noily +noir +noirish +noirs noise +noised +noiseless +noiselessly +noisemaker +noisemakers +noisemaking +noisemakings +noises +noisette +noisettes +noisier +noisiest +noisily +noisiness +noisinesses +noising +noisome +noisomely +noisomeness +noisomenesses noisy +nolo +nolos +nom +noma +nomad +nomadic +nomadism +nomadisms +nomads +nomarch +nomarchies +nomarchs +nomarchy +nomas +nombles +nombril +nombrils +nome +nomen +nomenclator +nomenclatorial +nomenclators +nomenclatural +nomenclature +nomenclatures +nomes +nomina +nominal +nominalism +nominalisms +nominalist +nominalistic +nominalists +nominally +nominals +nominate +nominated +nominates +nominating +nomination +nominations +nominative +nominatives +nominator +nominators +nominee +nominees +nomism +nomisms +nomistic +nomogram +nomograms +nomograph +nomographic +nomographies +nomographs +nomography +nomoi +nomological +nomologies +nomology +nomos +nomothetic +noms +nona +nonabrasive +nonabsorbable +nonabsorbent +nonabsorbents +nonabsorptive +nonabstract +nonacademic +nonacademics +nonacceptance +nonacceptances +nonaccountable +nonaccredited +nonaccrual +nonachievement +nonachievements +nonacid +nonacidic +nonacids +nonacquisitive +nonacting +nonaction +nonactions +nonactivated +nonactor +nonactors +nonadaptive +nonaddict +nonaddictive +nonaddicts +nonadditive +nonadditivities +nonadditivity +nonadhesive +nonadiabatic +nonadjacent +nonadmirer +nonadmirers +nonadmission +nonadmissions +nonadult +nonadults +nonaesthetic +nonaffiliated +nonaffluent +nonage +nonagenarian +nonagenarians +nonages +nonaggression +nonaggressions +nonaggressive +nonagon +nonagons +nonagricultural +nonalcoholic +nonalcoholics +nonaligned +nonalignment +nonalignments +nonallelic +nonallergenic +nonallergic +nonalphabetic +nonaluminum +nonambiguous +nonanalytic +nonanatomic +nonanimal +nonanswer +nonanswers +nonantagonistic +nonanthropological +nonanthropologist +nonanthropologists +nonantibiotic +nonantibiotics +nonantigenic +nonappearance +nonappearances +nonaquatic +nonaqueous +nonarable +nonarbitrariness +nonarbitrarinesses +nonarbitrary +nonarchitect +nonarchitects +nonarchitecture +nonarchitectures +nonargument +nonarguments +nonaristocratic +nonaromatic +nonart +nonartist +nonartistic +nonartists +nonarts +nonas +nonascetic +nonascetics +nonaspirin +nonaspirins +nonassertive +nonassociated +nonastronomical +nonathlete +nonathletes +nonathletic +nonatomic +nonattached +nonattachment +nonattachments +nonattendance +nonattendances +nonattender +nonattenders +nonauditory +nonauthor +nonauthoritarian +nonauthors +nonautomated +nonautomatic +nonautomotive +nonautonomous +nonavailabilities +nonavailability +nonbacterial +nonbank +nonbanking +nonbanks +nonbarbiturate +nonbarbiturates +nonbasic +nonbearing +nonbehavioral +nonbeing +nonbeings +nonbelief +nonbeliefs +nonbeliever +nonbelievers +nonbelligerencies +nonbelligerency +nonbelligerent +nonbelligerents +nonbetting +nonbibliographic +nonbinary +nonbinding +nonbiodegradable +nonbiodegradables +nonbiographical +nonbiological +nonbiologically +nonbiologist +nonbiologists +nonbiting +nonblack +nonblacks +nonbodies +nonbody +nonbonded +nonbonding +nonbook +nonbooks +nonbotanist +nonbotanists +nonbrand +nonbreakable +nonbreathing +nonbreeder +nonbreeders +nonbreeding +nonbreedings +nonbroadcast +nonbroadcasts +nonbuilding +nonbuildings +nonburnable +nonbusiness +nonbuying +noncabinet +noncabinets +noncaking +noncallable +noncaloric +noncampus +noncancelable +noncancerous +noncandidacies +noncandidacy +noncandidate +noncandidates +noncannibalistic +noncapital +noncapitalist +noncapitalists +noncapitals +noncarcinogen +noncarcinogenic +noncarcinogens +noncardiac +noncareer +noncarrier +noncarriers +noncash +noncasual +noncausal +nonce +noncelebration +noncelebrations +noncelebrities +noncelebrity +noncellular +noncellulosic +noncentral +noncertificated +noncertified +nonces +nonchalance +nonchalances +nonchalant +nonchalantly +noncharacter +noncharacters +noncharismatic +nonchauvinist +nonchauvinists +nonchemical +nonchemicals +nonchromosomal +nonchronological +nonchurch +nonchurchgoer +nonchurchgoers +noncircular +noncirculating +noncitizen +noncitizens +nonclandestine +nonclass +nonclasses +nonclassical +nonclassified +nonclassroom +nonclassrooms +nonclerical +nonclericals +noncling +nonclinical +nonclogging +noncoercive +noncognitive +noncoherent +noncoincidence +noncoincidences +noncoital +noncoking +noncola +noncollector +noncollectors +noncollege +noncolleges +noncollegiate +noncollinear +noncolor +noncolored +noncolorfast +noncolors +noncom +noncombat +noncombatant +noncombatants +noncombative +noncombustible +noncombustibles +noncommercial +noncommercials +noncommitment +noncommitments +noncommittal +noncommittally +noncommitted +noncommunicating +noncommunication +noncommunications +noncommunicative +noncommunist +noncommunists +noncommunities +noncommunity +noncommutative +noncommutativities +noncommutativity +noncomparabilities +noncomparability +noncomparable +noncompatible +noncompetition +noncompetitive +noncompetitor +noncompetitors +noncomplementary +noncomplex +noncompliance +noncompliances +noncompliant +noncomplicated +noncomplying +noncomplyings +noncomposer +noncomposers +noncompound +noncompounds +noncomprehension +noncomprehensions +noncompressible +noncomputer +noncomputerized +noncoms +nonconceptual +nonconcern +nonconcerns +nonconclusion +nonconclusions +nonconcur +nonconcurred +nonconcurrence +nonconcurrences +nonconcurrent +nonconcurring +nonconcurs +noncondensable +nonconditioned +nonconducting +nonconduction +nonconductions +nonconductive +nonconductor +nonconductors +nonconference +nonconferences +nonconfidence +nonconfidences +nonconfidential +nonconflicting +nonconform +nonconformance +nonconformances +nonconformed +nonconformer +nonconformers +nonconforming +nonconformism +nonconformisms +nonconformist +nonconformists +nonconformities +nonconformity +nonconforms +nonconfrontation +nonconfrontational +nonconfrontations +noncongruent +nonconjugated +nonconnection +nonconnections +nonconscious +nonconsecutive +nonconsensual +nonconservation +nonconservations +nonconservative +nonconservatives +nonconsolidated +nonconstant +nonconstants +nonconstitutional +nonconstruction +nonconstructions +nonconstructive +nonconsumer +nonconsumers +nonconsuming +nonconsumption +nonconsumptions +nonconsumptive +noncontact +noncontacts +noncontagious +noncontemporaries +noncontemporary +noncontiguous +noncontingent +noncontinuous +noncontract +noncontractual +noncontradiction +noncontradictions +noncontradictory +noncontributory +noncontrollable +noncontrolled +noncontrolling +noncontroversial +nonconventional +nonconvertible +noncooperation +noncooperationist +noncooperationists +noncooperations +noncooperative +noncooperator +noncooperators +noncoplanar +noncorporate +noncorrelation +noncorrelations +noncorrodible +noncorroding +noncorrodings +noncorrosive +noncountries +noncountry +noncounty +noncoverage +noncoverages +noncreative +noncreativities +noncreativity +noncredentialed +noncredit +noncrime +noncrimes +noncriminal +noncriminals +noncrises +noncrisis +noncritical +noncrossover +noncrushable +noncrystalline +nonculinary +noncultivated +noncultivation +noncultivations +noncultural +noncumulative +noncurrent +noncustodial +noncustomer +noncustomers +noncyclic +noncyclical +nondairy +nondance +nondancer +nondancers +nondances +nondeceptive +nondecision +nondecisions +nondecreasing +nondeductibilities +nondeductibility +nondeductible +nondeductive +nondefense +nondeferrable +nondeforming +nondegenerate +nondegenerates +nondegradable +nondegradables +nondegree +nondelegate +nondelegates +nondeliberate +nondelinquent +nondeliveries +nondelivery +nondemanding +nondemocratic +nondenominational +nondenominationalism +nondenominationalisms +nondepartmental +nondependent +nondependents +nondepletable +nondepleting +nondeposition +nondepositions +nondepressed +nonderivative +nonderivatives +nondescript +nondescriptive +nondescripts +nondesert +nondestructive +nondestructively +nondestructiveness +nondestructivenesses +nondetachable +nondeterministic +nondevelopment +nondevelopments +nondeviant +nondeviants +nondiabetic +nondiabetics +nondialyzable +nondiapausing +nondidactic +nondiffusible +nondimensional +nondiplomatic +nondirected +nondirectional +nondirective +nondisabled +nondisableds +nondisclosure +nondisclosures +nondiscount +nondiscretionary +nondiscrimination +nondiscriminations +nondiscriminatory +nondiscursive +nondisjunction +nondisjunctional +nondisjunctions +nondispersive +nondisruptive +nondistinctive +nondiversified +nondividing +nondoctor +nondoctors +nondoctrinaire +nondocumentaries +nondocumentary +nondogmatic +nondollar +nondomestic +nondomestics +nondominant +nondominants +nondormant +nondramatic +nondrinker +nondrinkers +nondrinking +nondriver +nondrivers +nondrug +nondurable +nondurables none +nonearning +nonearnings +nonecclesiastical +noneconomic +noneconomist +noneconomists +nonedible +noneditorial +noneducation +noneducational +noneducations +noneffective +noneffectives +nonego +nonegos +nonelastic +nonelect +nonelected +nonelection +nonelections +nonelective +nonelectives +nonelectric +nonelectrical +nonelectrics +nonelectrolyte +nonelectrolytes +nonelectronic +nonelectronics +nonelementary +nonelite +nonemergencies +nonemergency +nonemotional +nonemphatic +nonempirical +nonemployee +nonemployees +nonemployment +nonemployments +nonempty +nonencapsulated +nonending +nonenergy +nonenforceabilities +nonenforceability +nonenforcement +nonenforcements +nonengagement +nonengagements +nonengineering +nonengineerings +nonentertainment +nonentertainments +nonentities +nonentity +nonentries +nonentry +nonenzymatic +nonenzymic +nonequal +nonequals +nonequilibria +nonequilibrium +nonequilibriums +nonequivalence +nonequivalences +nonequivalent +nonequivalents +nonerotic +nones +nonessential +nonessentials +nonestablished +nonestablishment +nonestablishments +nonesterified +nonesuch +nonesuches +nonet +nonetheless +nonethical +nonethnic +nonets +nonevaluative +nonevent +nonevents +nonevidence +nonevidences +nonexclusive +nonexecutive +nonexecutives +nonexempt +nonexistence +nonexistences +nonexistent +nonexistential +nonexotic +nonexpendable +nonexperimental +nonexpert +nonexperts +nonexplanatory +nonexploitation +nonexploitations +nonexploitative +nonexploitive +nonexplosive +nonexplosives +nonexposed +nonextant +nonfact +nonfactor +nonfactors +nonfacts +nonfactual +nonfaculty +nonfading +nonfamilial +nonfamilies +nonfamily +nonfan +nonfans +nonfarm +nonfarmer +nonfarmers +nonfat +nonfatal +nonfattening +nonfatty +nonfeasance +nonfeasances +nonfederal +nonfederated +nonfeminist +nonfeminists +nonferrous +nonfiction +nonfictional +nonfictions +nonfigurative +nonfilamentous +nonfilterable +nonfinal +nonfinancial +nonfinite +nonfissionable +nonflammability +nonflammable +nonflowering +nonfluencies +nonfluency +nonfluid +nonfluids +nonfluorescent +nonflying +nonfocal +nonfood +nonforfeitable +nonforfeiture +nonforfeitures +nonformal +nonfossil +nonfraternization +nonfraternizations +nonfreezing +nonfrivolous +nonfrozen +nonfuel +nonfulfillment +nonfulfillments +nonfunctional +nonfunctioning +nongame +nongaseous +nongay +nongays +nongenetic +nongenital +nongeometrical +nonghetto +nonglamorous +nonglare +nongolfer +nongolfers +nongonococcal +nongovernment +nongovernmental +nongovernments +nongraded +nongraduate +nongraduates +nongrammatical +nongranular +nongravitational +nongreasy +nongreen +nongregarious +nongrowing +nongrowth +nonguest +nonguests +nonguilt +nonguilts +nonhalogenated +nonhandicapped +nonhappening +nonhappenings +nonhardy +nonharmonic +nonhazardous +nonheme +nonhemolytic +nonhereditary +nonhero +nonheroes +nonhierarchical +nonhistone +nonhistorical +nonhome +nonhomogeneous +nonhomologous +nonhomosexual +nonhomosexuals +nonhormonal +nonhospital +nonhospitalized +nonhospitals +nonhostile +nonhousing +nonhousings +nonhuman +nonhunter +nonhunters +nonhunting +nonhygroscopic +nonhysterical +nonideal +nonidentical +nonidentities +nonidentity +nonideological +nonillion +nonillions +nonimage +nonimitative +nonimmigrant +nonimmigrants +nonimmune +nonimpact +nonimplication +nonimplications +nonimportation +nonimportations +noninclusion +noninclusions +nonincreasing +nonincumbent +nonincumbents +nonindependence +nonindependences +nonindigenous +nonindividual +noninductive +nonindustrial +nonindustrialized +nonindustry +noninfected +noninfectious +noninfective +noninfested +noninflammable +noninflammatory +noninflationary +noninflectional +noninfluence +noninfluences +noninformation +noninformations +noninitial +noninitiate +noninitiates +noninjury +noninsect +noninsecticidal +noninsects +noninstallment +noninstitutional +noninstitutionalized +noninstructional +noninstrumental +noninsurance +noninsurances +noninsured +nonintegral +nonintegrated +nonintellectual +nonintellectuals +noninteracting +noninteractive +noninterchangeable +nonintercourse +nonintercourses +noninterest +noninterests +noninterference +noninterferences +nonintersecting +nonintervention +noninterventionist +noninterventionists +noninterventions +nonintimidating +nonintoxicant +nonintoxicating +nonintrusive +nonintuitive +noninvasive +noninvolved +noninvolvement +noninvolvements +nonionic +nonionizing +noniron +nonirradiated +nonirrigated +nonirritant +nonirritating +nonissue +nonissues +nonjoinder +nonjoinders +nonjoiner +nonjoiners +nonjudgmental +nonjudicial +nonjuring +nonjuror +nonjurors +nonjury +nonjusticiable +nonkosher +nonlabor +nonlandowner +nonlandowners +nonlanguage +nonlanguages +nonlawyer +nonlawyers +nonleaded +nonleafy +nonleague +nonlegal +nonlegume +nonlegumes +nonleguminous +nonlethal +nonlexical +nonlibrarian +nonlibrarians +nonlibraries +nonlibrary +nonlife +nonlineal +nonlinear +nonlinearities +nonlinearity +nonlinguistic +nonliquid +nonliquids +nonliteral +nonliterary +nonliterate +nonliterates +nonlives +nonliving +nonlocal +nonlocals +nonlogical +nonluminous +nonmagnetic +nonmainstream +nonmajor +nonmajors +nonmalignant +nonmalleable +nonman +nonmanagement +nonmanagements +nonmanagerial +nonmanual +nonmanufacturing +nonmanufacturings +nonmarital +nonmarket +nonmaterial +nonmaterialistic +nonmathematical +nonmathematician +nonmathematicians +nonmatriculated +nonmeaningful +nonmeasurable +nonmeat +nonmechanical +nonmechanistic +nonmedical +nonmeeting +nonmeetings +nonmember +nonmembers +nonmembership +nonmemberships +nonmen +nonmental +nonmercurial +nonmetal +nonmetallic +nonmetals +nonmetameric +nonmetaphorical +nonmetric +nonmetrical +nonmetro +nonmetropolitan +nonmetropolitans +nonmicrobial +nonmigrant +nonmigrants +nonmigratory +nonmilitant +nonmilitants +nonmilitary +nonmimetic +nonminority +nonmobile +nonmodal +nonmolecular +nonmonetarist +nonmonetarists +nonmonetary +nonmoney +nonmonogamous +nonmoral +nonmotile +nonmotilities +nonmotility +nonmotorized +nonmoving +nonmunicipal +nonmusic +nonmusical +nonmusician +nonmusicians +nonmusics +nonmutant +nonmutants +nonmyelinated +nonmystical +nonnarrative +nonnarratives +nonnational +nonnationals +nonnative +nonnatives +nonnatural +nonnaval +nonnecessities +nonnecessity +nonnegative +nonnegligent +nonnegotiable +nonnetwork +nonnews +nonnitrogenous +nonnormative +nonnovel +nonnovels +nonnuclear +nonnucleated +nonnumerical +nonnumericals +nonnutritious +nonnutritive +nonobese +nonobjective +nonobjectivism +nonobjectivisms +nonobjectivist +nonobjectivists +nonobjectivities +nonobjectivity +nonobscene +nonobservance +nonobservances +nonobservant +nonobvious +nonoccupational +nonoccurrence +nonoccurrences +nonofficial +nonohmic +nonoily +nonoperatic +nonoperating +nonoperational +nonoperative +nonoptimal +nonorganic +nonorgasmic +nonorthodox +nonoverlapping +nonoverlappings +nonowner +nonowners +nonoxidizing +nonpagan +nonpagans +nonpaid +nonpapal +nonpar +nonparallel +nonparallels +nonparametric +nonparasitic +nonpareil +nonpareils +nonparticipant +nonparticipants +nonparticipating +nonparticipation +nonparticipations +nonparticipatory +nonpartisan +nonpartisans +nonpartisanship +nonpartisanships +nonparty +nonpasserine +nonpassive +nonpast +nonpasts +nonpathogenic +nonpaying +nonpayment +nonpayments +nonpeak +nonperformance +nonperformances +nonperformer +nonperformers +nonperforming +nonperishable +nonperishables +nonpermissive +nonpersistent +nonperson +nonpersonal +nonpersons +nonpetroleum +nonpetroleums +nonphilosopher +nonphilosophers +nonphilosophical +nonphonemic +nonphonetic +nonphosphate +nonphosphates +nonphotographic +nonphysical +nonphysician +nonphysicians +nonplanar +nonplastic +nonplastics +nonplay +nonplaying +nonplays +nonplus +nonplused +nonpluses +nonplusing +nonplussed +nonplusses +nonplussing +nonpoetic +nonpoint +nonpoisonous +nonpolar +nonpolarizable +nonpolice +nonpolitical +nonpolitically +nonpolitician +nonpoliticians +nonpolluting +nonpoor +nonporous +nonpossession +nonpossessions +nonpractical +nonpracticing +nonpregnant +nonprescription +nonprint +nonproblem +nonproblems +nonproducing +nonproductive +nonproductiveness +nonproductivenesses +nonprofessional +nonprofessionally +nonprofessionals +nonprofessorial +nonprofit +nonprofits +nonprogram +nonprogrammer +nonprogrammers +nonprograms +nonprogressive +nonprogressives +nonproliferation +nonproliferations +nonproprietaries +nonproprietary +nonpros +nonprossed +nonprosses +nonprossing +nonprotein +nonpsychiatric +nonpsychiatrist +nonpsychiatrists +nonpsychological +nonpsychotic +nonpublic +nonpunitive +nonpurposive +nonquantifiable +nonquantitative +nonquota +nonracial +nonracially +nonradioactive +nonrailroad +nonrandom +nonrandomness +nonrandomnesses +nonrated +nonrational +nonreactive +nonreactor +nonreactors +nonreader +nonreaders +nonreading +nonrealistic +nonreappointment +nonreappointments +nonreceipt +nonreceipts +nonreciprocal +nonreciprocals +nonrecognition +nonrecognitions +nonrecombinant +nonrecombinants +nonrecourse +nonrecurrent +nonrecurring +nonrecyclable +nonrecyclables +nonreducing +nonredundant +nonrefillable +nonreflecting +nonrefundable +nonregulated +nonregulation +nonregulations +nonrelative +nonrelatives +nonrelativistic +nonrelativistically +nonrelevant +nonreligious +nonrenewable +nonrenewal +nonrenewals +nonrepayable +nonrepresentational +nonrepresentationalism +nonrepresentationalisms +nonrepresentative +nonrepresentatives +nonreproducible +nonreproductive +nonresidence +nonresidences +nonresidencies +nonresidency +nonresident +nonresidential +nonresidents +nonresistance +nonresistances +nonresistant +nonresistants +nonresonant +nonrespondent +nonrespondents +nonresponder +nonresponders +nonresponse +nonresponses +nonresponsive +nonrestricted +nonrestrictive +nonretractile +nonretroactive +nonreturnable +nonreturnables +nonreusable +nonreusables +nonreversible +nonrevolutionaries +nonrevolutionary +nonrigid +nonrioter +nonrioters +nonrioting +nonrival +nonrivals +nonrotating +nonroutine +nonroutines +nonroyal +nonrubber +nonruling +nonruminant +nonruminants +nonrural +nonsalable +nonsaline +nonsaponifiable +nonscheduled +nonschizophrenic +nonschool +nonscience +nonsciences +nonscientific +nonscientist +nonscientists +nonseasonal +nonsecretor +nonsecretories +nonsecretors +nonsecretory +nonsectarian +nonsecure +nonsedimentable +nonsegregated +nonsegregation +nonsegregations +nonselected +nonselective +nonself +nonselves +nonsensational +nonsense +nonsenses +nonsensical +nonsensically +nonsensicalness +nonsensicalnesses +nonsensitive +nonsensuous +nonsentence +nonsentences +nonseptate +nonsequential +nonserious +nonsexist +nonsexual +nonshrink +nonshrinkable +nonsigner +nonsigners +nonsignificant +nonsignificantly +nonsimultaneous +nonsinkable +nonskater +nonskaters +nonsked +nonskeds +nonskeletal +nonskid +nonskier +nonskiers +nonslip +nonsmoker +nonsmokers +nonsmoking +nonsocial +nonsocialist +nonsocialists +nonsolar +nonsolid +nonsolids +nonsolution +nonsolutions +nonspatial +nonspeaker +nonspeakers +nonspeaking +nonspecialist +nonspecialists +nonspecific +nonspecifically +nonspectacular +nonspeculative +nonspeech +nonspherical +nonsporting +nonstandard +nonstarter +nonstarters +nonstationaries +nonstationary +nonstatistical +nonsteady +nonsteroid +nonsteroidal +nonsteroids +nonstick +nonstop +nonstories +nonstory +nonstrategic +nonstructural +nonstructured +nonstudent +nonstudents +nonstyle +nonstyles +nonsubject +nonsubjective +nonsubjects +nonsubsidized +nonsuccess +nonsuccesses +nonsuch +nonsuches +nonsugar +nonsugars +nonsuit +nonsuited +nonsuiting +nonsuits +nonsuperimposable +nonsupervisory +nonsupport +nonsupports +nonsurgical +nonswimmer +nonswimmers +nonsyllabic +nonsymbolic +nonsymmetric +nonsymmetrical +nonsynchronous +nonsystem +nonsystematic +nonsystemic +nonsystems +nontarget +nontariff +nontax +nontaxable +nontaxables +nontaxes +nonteaching +nontechnical +nontemporal +nontemporals +nontenured +nonterminal +nonterminating +nontheatrical +nontheist +nontheistic +nontheists +nontheological +nontheoretical +nontherapeutic +nonthermal +nonthinking +nonthinkings +nonthreatening +nontidal +nontitle +nontobacco +nontobaccos +nontonal +nontotalitarian +nontoxic +nontraditional +nontransferable +nontreatment +nontreatments +nontrivial +nontropical +nontrump +nontruth +nontruths +nonturbulent +nontypical +nonunanimous +nonuniform +nonuniformities +nonuniformity +nonunion +nonunionized +nonunions +nonunique +nonuniqueness +nonuniquenesses +nonuniversal +nonuniversals +nonuniversities +nonuniversity +nonuple +nonuples +nonurban +nonurgent +nonuse +nonuser +nonusers +nonuses +nonusing +nonutilitarian +nonutilitarians +nonutilities +nonutility +nonutopian +nonvalid +nonvalidities +nonvalidity +nonvanishing +nonvascular +nonvector +nonvectors +nonvegetarian +nonvegetarians +nonvenomous +nonverbal +nonverbally +nonveteran +nonveterans +nonviable +nonviewer +nonviewers +nonvintage +nonviolence +nonviolences +nonviolent +nonviolently +nonviral +nonvirgin +nonvirgins +nonviscous +nonvisual +nonvocal +nonvocational +nonvolatile +nonvolcanic +nonvoluntary +nonvoter +nonvoters +nonvoting +nonwar +nonwars +nonwhite +nonwhites +nonwinning +nonwoody +nonword +nonwords +nonwork +nonworker +nonworkers +nonworking +nonwoven +nonwovens +nonwriter +nonwriters +nonyellowing +nonyl +nonyls +nonzero +noo +noodge +noodged +noodges +noodging noodle +noodled +noodles +noodling +nook +nookies +nooklike +nooks +nooky noon +noonday +noondays +nooning +noonings +noons +noontide +noontides +noontime +noontimes +noose +noosed +nooser +noosers +nooses +noosing +noosphere +noospheres +nopal +nopals +nope nor +noradrenalin +noradrenaline +noradrenalines +noradrenalins +noradrenergic +nordic +norepinephrine +norepinephrines +norethindrone +norethindrones +nori +noria +norias +noris +norite +norites +noritic +norland +norlands +norm normal +normalcies +normalcy +normalise +normalised +normalises +normalising +normalities +normality +normalizable +normalization +normalizations +normalize +normalized +normalizer +normalizers +normalizes +normalizing +normally +normals +normande +normative +normatively +normativeness +normativenesses +normed +normless +normotensive +normotensives +normothermia +normothermias +normothermic +norms north +northbound northeast +northeaster +northeasterly +northeastern +northeasternmost +northeasters +northeasts +northeastward +northeastwards +norther +northerlies +northerly northern +northerner +northerners +northernmost +northerns +northers +northing +northings +northland +northlands +norths +northward +northwards northwest +northwester +northwesterly +northwestern +northwesternmost +northwesters +northwests +northwestward +northwestwards +nortriptyline +nortriptylines +nos nose +nosebag +nosebags +noseband +nosebands +nosebleed +nosebleeds +nosed +nosedive +nosedives +nosegay +nosegays +noseguard +noseguards +noseless +noselike +nosepiece +nosepieces +noses +nosewheel +nosewheels +nosey +nosh +noshed +nosher +noshers +noshes +noshing +nosier +nosiest +nosily +nosiness +nosinesses +nosing +nosings +nosocomial +nosologic +nosological +nosologically +nosologies +nosology +nostalgia +nostalgias +nostalgic +nostalgically +nostalgics +nostalgist +nostalgists +nostoc +nostocs +nostril +nostrils +nostrum +nostrums +nosy not +nota +notabilities +notability +notable +notableness +notablenesses +notables +notably +notal +notarial +notarially +notaries +notarization +notarizations +notarize +notarized +notarizes +notarizing +notary +notate +notated +notates +notating +notation +notational +notations +notch +notchback +notchbacks +notched +notcher +notchers +notches +notching note notebook +notebooks +notecase +notecases +noted +notedly +notedness +notednesses +noteless +notepad +notepads +notepaper +notepapers +noter +noters +notes +noteworthily +noteworthiness +noteworthinesses +noteworthy +nother nothing +nothingness +nothingnesses +nothings notice +noticeable +noticeably +noticed +noticer +noticers +notices +noticing +notifiable +notification +notifications +notified +notifier +notifiers +notifies +notify +notifying +noting +notion +notional +notionalities +notionality +notionally +notions +notochord +notochordal +notochords +notorieties +notoriety +notorious +notoriously +notornis +notturni +notturno +notum +notwithstanding +nougat +nougats +nought +noughts +noumena +noumenal +noumenon +noun +nounal +nounally +nounless +nouns +nourish +nourished +nourisher +nourishers +nourishes +nourishing +nourishment +nourishments +nous +nouses +nouveau +nouvelle +nova +novaculite +novaculites +novae +novalike +novas +novation +novations novel +novelette +novelettes +novelettish +novelise +novelised +novelises +novelising novelist +novelistic +novelistically +novelists +novelization +novelizations +novelize +novelized +novelizes +novelizing +novella +novellas +novelle +novelly +novels +novelties +novelty +novemdecillion +novemdecillions +novena +novenae +novenas +novercal +novice +novices +novitiate +novitiates +novobiocin +novobiocins +novocaine +novocaines now nowadays +noway +noways nowhere +nowheres +nowhither +nowise +nowness +nownesses +nows +nowt +nowts +noxious +noxiously +noxiousness +noxiousnesses +noyade +noyades +nozzle +nozzles +nth +nu +nuance +nuanced +nuances +nub +nubbier +nubbiest +nubbin +nubbins +nubble +nubbles +nubblier +nubbliest +nubbly +nubby +nubia +nubias +nubile +nubilities +nubility +nubilose +nubilous +nubs +nucellar +nucelli +nucellus +nucha +nuchae +nuchal +nuchals +nucleal nuclear +nuclease +nucleases +nucleate +nucleated +nucleates +nucleating +nucleation +nucleations +nucleator +nucleators +nuclei +nuclein +nucleins +nucleocapsid +nucleocapsids +nucleoid +nucleoids +nucleolar +nucleole +nucleoles +nucleoli +nucleolus +nucleon +nucleonic +nucleonics +nucleons +nucleophile +nucleophiles +nucleophilic +nucleophilically +nucleophilicities +nucleophilicity +nucleoplasm +nucleoplasmic +nucleoplasms +nucleoprotein +nucleoproteins +nucleoside +nucleosides +nucleosomal +nucleosome +nucleosomes +nucleosyntheses +nucleosynthesis +nucleosynthetic +nucleotidase +nucleotidases +nucleotide +nucleotides +nucleus +nucleuses +nuclide +nuclides +nuclidic +nude +nudely +nudeness +nudenesses +nuder +nudes +nudest +nudge +nudged +nudger +nudgers +nudges +nudging +nudibranch +nudibranchs +nudicaul +nudie +nudies +nudism +nudisms +nudist +nudists +nudities +nudity +nudnick +nudnicks +nudnik +nudniks +nudzh +nudzhed +nudzhes +nudzhing +nugatory +nugget +nuggets +nuggety +nuisance +nuisances +nuke +nuked +nukes +nuking +null +nullah +nullahs +nulled +nullification +nullificationist +nullificationists +nullifications +nullified +nullifier +nullifiers +nullifies +nullify +nullifying +nulling +nulliparous +nullities +nullity +nulls numb +numbat +numbats +numbed number +numberable +numbered +numberer +numberers +numbering +numberless +numbers +numbest +numbfish +numbfishes +numbing +numbingly +numbles +numbly +numbness +numbnesses +numbs +numbskull +numbskulls +numen +numerable +numeracies +numeracy +numeral +numerally +numerals +numerary +numerate +numerated +numerates +numerating +numeration +numerations +numerator +numerators +numeric +numerical +numerically +numerics +numerological +numerologies +numerologist +numerologists +numerology +numerous +numerously +numerousness +numerousnesses +numina +numinous +numinouses +numinousness +numinousnesses +numismatic +numismatically +numismatics +numismatist +numismatists +nummary +nummular +numskull +numskulls +nun +nunatak +nunataks +nunchaku +nunchakus +nunciature +nunciatures +nuncio +nuncios +nuncle +nuncles +nuncupative +nunlike +nunneries +nunnery +nunnish +nuns +nuptial +nuptialities +nuptiality +nuptials +nurd +nurds +nurl +nurled +nurling +nurls nurse +nursed +nursemaid +nursemaids +nurser +nurseries +nursers nursery +nurseryman +nurserymen +nurses +nursing +nursings +nursling +nurslings +nurtural +nurturance +nurturances +nurturant +nurture +nurtured +nurturer +nurturers +nurtures +nurturing +nus nut +nutant +nutate +nutated +nutates +nutating +nutation +nutational +nutations +nutbrown +nutcase +nutcases +nutcracker +nutcrackers +nutgall +nutgalls +nutgrass +nutgrasses +nuthatch +nuthatches +nuthouse +nuthouses +nutlet +nutlets +nutlike +nutmeat +nutmeats +nutmeg +nutmegs +nutpick +nutpicks +nutria +nutrias +nutrient +nutrients +nutriment +nutriments nutrition +nutritional +nutritionally +nutritionist +nutritionists +nutritions +nutritious +nutritiously +nutritiousness +nutritiousnesses +nutritive +nutritively +nuts +nutsedge +nutsedges +nutshell +nutshells +nutsier +nutsiest +nutsy +nutted +nutter +nutters +nuttier +nuttiest +nuttily +nuttiness +nuttinesses +nutting +nuttings +nutty +nutwood +nutwoods +nuzzle +nuzzled +nuzzler +nuzzlers +nuzzles +nuzzling +nyala +nyalas +nyctalopia +nyctalopias +nylghai +nylghais +nylghau +nylghaus +nylon +nylons +nymph +nympha +nymphae +nymphal +nymphalid +nymphalids +nymphean +nymphet +nymphets +nymphette +nymphettes +nympho +nympholepsies +nympholepsy +nympholept +nympholeptic +nympholepts +nymphomania +nymphomaniac +nymphomaniacal +nymphomaniacs +nymphomanias +nymphos +nymphs +nystagmic +nystagmus +nystagmuses +nystatin +nystatins +oaf +oafish +oafishly +oafishness +oafishnesses +oafs +oak +oaken +oaklike +oakmoss +oakmosses +oaks +oakum +oakums +oar +oared +oarfish +oarfishes +oaring +oarless +oarlike +oarlock +oarlocks +oars +oarsman +oarsmanship +oarsmanships +oarsmen +oarswoman +oarswomen +oases +oasis +oast +oasthouse +oasthouses +oasts +oat +oatcake +oatcakes +oaten +oater +oaters +oath +oaths +oatlike +oatmeal +oatmeals +oats +oaves +obbligati +obbligato +obbligatos +obconic +obcordate +obduracies +obduracy +obdurate +obdurately +obdurateness +obduratenesses +obe +obeah +obeahism +obeahisms +obeahs +obedience +obediences +obedient +obediently +obeisance +obeisances +obeisant +obeisantly +obeli +obelia +obelias +obelise +obelised +obelises +obelising +obelisk +obelisks +obelism +obelisms +obelize +obelized +obelizes +obelizing +obelus +obes +obese +obesely +obesities +obesity obey +obeyable +obeyed +obeyer +obeyers +obeying +obeys +obfuscate +obfuscated +obfuscates +obfuscating +obfuscation +obfuscations +obfuscatory +obi +obia +obias +obiism +obiisms +obis +obit +obits +obituaries +obituarist +obituarists +obituary object +objected +objectification +objectifications +objectified +objectifies +objectify +objectifying +objecting +objection +objectionable +objectionableness +objectionablenesses +objectionably +objections +objective +objectively +objectiveness +objectivenesses +objectives +objectivism +objectivisms +objectivist +objectivistic +objectivists +objectivities +objectivity +objectless +objectlessness +objectlessnesses +objector +objectors +objects +objet +objets +objurgate +objurgated +objurgates +objurgating +objurgation +objurgations +objurgatory +oblanceolate +oblast +oblasti +oblasts +oblate +oblately +oblateness +oblatenesses +oblates +oblation +oblations +oblatory +obligate +obligated +obligately +obligates +obligati +obligating +obligation +obligations +obligato +obligatorily +obligatory +obligatos +oblige +obliged +obligee +obligees +obliger +obligers +obliges +obliging +obligingly +obligingness +obligingnesses +obligor +obligors +oblique +obliqued +obliquely +obliqueness +obliquenesses +obliques +obliquing +obliquities +obliquity +obliterate +obliterated +obliterates +obliterating +obliteration +obliterations +obliterative +obliterator +obliterators +oblivion +oblivions +oblivious +obliviously +obliviousness +obliviousnesses +oblong +oblongly +oblongs +obloquies +obloquy +obnoxious +obnoxiously +obnoxiousness +obnoxiousnesses +obnubilate +obnubilated +obnubilates +obnubilating +obnubilation +obnubilations +oboe +oboes +oboist +oboists +obol +obole +oboles +oboli +obols +obolus +obovate +obovoid +obscene +obscenely +obscener +obscenest +obscenities +obscenity +obscurant +obscurantic +obscurantism +obscurantisms +obscurantist +obscurantists +obscurants +obscuration +obscurations +obscure +obscured +obscurely +obscureness +obscurenesses +obscurer +obscures +obscurest +obscuring +obscurities +obscurity +obsequies +obsequious +obsequiously +obsequiousness +obsequiousnesses +obsequy +observabilities +observability +observable +observables +observably +observance +observances +observant +observantly +observants +observation +observational +observationally +observations +observatories +observatory observe +observed +observer +observers +observes +observing +observingly +obsess +obsessed +obsesses +obsessing +obsession +obsessional +obsessionally +obsessions +obsessive +obsessively +obsessiveness +obsessivenesses +obsessives +obsessor +obsessors +obsidian +obsidians +obsolesce +obsolesced +obsolescence +obsolescences +obsolescent +obsolescently +obsolesces +obsolescing +obsolete +obsoleted +obsoletely +obsoleteness +obsoletenesses +obsoletes +obsoleting +obstacle +obstacles +obstetric +obstetrical +obstetrically +obstetrician +obstetricians +obstetrics +obstinacies +obstinacy +obstinate +obstinately +obstinateness +obstinatenesses +obstreperous +obstreperously +obstreperousness +obstreperousnesses +obstruct +obstructed +obstructing +obstruction +obstructionism +obstructionisms +obstructionist +obstructionistic +obstructionists +obstructions +obstructive +obstructively +obstructiveness +obstructivenesses +obstructives +obstructor +obstructors +obstructs obtain +obtainabilities +obtainability +obtainable +obtained +obtainer +obtainers +obtaining +obtainment +obtainments +obtains +obtect +obtected +obtest +obtested +obtesting +obtests +obtrude +obtruded +obtruder +obtruders +obtrudes +obtruding +obtrusion +obtrusions +obtrusive +obtrusively +obtrusiveness +obtrusivenesses +obtund +obtunded +obtunding +obtunds +obturate +obturated +obturates +obturating +obturation +obturations +obturator +obturators +obtuse +obtusely +obtuseness +obtusenesses +obtuser +obtusest +obtusities +obtusity +obverse +obversely +obverses +obvert +obverted +obverting +obverts +obviable +obviate +obviated +obviates +obviating +obviation +obviations +obviator +obviators obvious +obviously +obviousness +obviousnesses +obvolute +oca +ocarina +ocarinas +ocas +occasion +occasional +occasionally +occasioned +occasioning +occasions +occident +occidental +occidentalize +occidentalized +occidentalizes +occidentalizing +occidentally +occidents +occipita +occipital +occipitally +occipitals +occiput +occiputs +occlude +occluded +occludes +occluding +occlusal +occlusion +occlusions +occlusive +occult +occultation +occultations +occulted +occulter +occulters +occulting +occultism +occultisms +occultist +occultists +occultly +occults +occupancies +occupancy +occupant +occupants occupation +occupational +occupationally +occupations +occupied +occupier +occupiers +occupies occupy +occupying occur +occurred +occurrence +occurrences +occurrent +occurrents +occurring +occurs ocean -oceania -oclock +oceanaria +oceanarium +oceanariums +oceanaut +oceanauts +oceanfront +oceanfronts +oceangoing +oceanic +oceanographer +oceanographers +oceanographic +oceanographical +oceanographically +oceanographies +oceanography +oceanologies +oceanologist +oceanologists +oceanology +oceans +ocellar +ocellate +ocelli +ocellus +oceloid +ocelot +ocelots +ocher +ochered +ochering +ocherous +ochers +ochery +ochlocracies +ochlocracy +ochlocrat +ochlocratic +ochlocratical +ochlocrats +ochone +ochre +ochrea +ochreae +ochred +ochreous +ochres +ochring +ochroid +ochrous +ochry +ocker +ockers +ocotillo +ocotillos +ocrea +ocreae +ocreate +octad +octadic +octads +octagon +octagonal +octagonally +octagons +octahedra +octahedral +octahedrally +octahedron +octahedrons +octal +octameter +octameters +octan +octane +octanes +octangle +octangles +octanol +octanols +octans +octant +octantal +octants +octapeptide +octapeptides +octarchies +octarchy +octaval +octave +octaves +octavo +octavos +octet +octets +octette +octettes +octillion +octillions +octodecillion +octodecillions +octogenarian +octogenarians +octonaries +octonary +octopi +octoploid +octoploids +octopod +octopodes +octopods +octopus +octopuses +octoroon +octoroons +octosyllabic +octosyllabics +octosyllable +octosyllables +octothorp +octothorps +octroi +octrois +octuple +octupled +octuples +octuplet +octuplets +octuplex +octupling +octuply +octyl +octyls +ocular +ocularist +ocularists +ocularly +oculars +oculi +oculist +oculists +oculomotor +oculus +od +odalisk +odalisks +odalisque +odalisques +odd +oddball +oddballs +odder +oddest +oddish +oddities +oddity +oddly +oddment +oddments +oddness +oddnesses +odds +oddsmaker +oddsmakers +ode +odea +odeon +odeons +odes +odeum +odeums +odic +odious +odiously +odiousness +odiousnesses +odist +odists +odium +odiums +odograph +odographs +odometer +odometers +odometries +odometry +odonate +odonates +odontoblast +odontoblastic +odontoblasts +odontoglossum +odontoglossums +odontoid +odontoids +odor +odorant +odorants +odored +odorful +odoriferous +odoriferously +odoriferousness +odoriferousnesses +odorize +odorized +odorizes +odorizing +odorless +odorous +odorously +odorousness +odorousnesses +odors +odour +odourful +odours +ods +odyl +odyle +odyles +odyls +odyssey +odysseys +oe +oecologies +oecology +oecumenical +oedema +oedemas +oedemata +oedipal +oedipally +oedipean +oeillade +oeillades +oenologies +oenology +oenomel +oenomels +oenophile +oenophiles +oersted +oersteds +oes +oesophagi +oesophagus +oestrin +oestrins +oestriol +oestriols +oestrone +oestrones +oestrous +oestrum +oestrums +oestrus +oestruses +oeuvre +oeuvres of +ofay +ofays off +offal +offals +offbeat +offbeats +offcast +offcasts +offcut +offcuts +offed offence +offences +offend +offended +offender +offenders +offending +offends +offense +offenseless +offenses +offensive +offensively +offensiveness +offensivenesses +offensives offer +offered +offerer +offerers +offering +offerings +offeror +offerors +offers +offertories +offertory +offhand +offhanded +offhandedly +offhandedness +offhandednesses office +officeholder +officeholders officer +officered +officering +officers +offices official +officialdom +officialdoms +officialese +officialeses +officialism +officialisms +officially +officials +officiant +officiants +officiaries +officiary +officiate +officiated +officiates +officiating +officiation +officiations +officinal +officious +officiously +officiousness +officiousnesses +offing +offings +offish +offishly +offishness +offishnesses +offkey +offload +offloaded +offloading +offloads +offprint +offprinted +offprinting +offprints +offramp +offramps +offs +offscouring +offscourings +offscreen +offset +offsets +offsetting +offshoot +offshoots offshore +offside +offsides +offspring +offsprings +offstage +offstages +offtrack +oft often +oftener +oftenest +oftentimes +ofter +oftest +ofttimes +ogam +ogams +ogdoad +ogdoads +ogee +ogees +ogham +oghamic +oghamist +oghamists +oghams +ogival +ogive +ogives +ogle +ogled +ogler +oglers +ogles +ogling +ogre +ogreish +ogreism +ogreisms +ogres +ogress +ogresses +ogrish +ogrishly +ogrism +ogrisms oh +ohed +ohia +ohias +ohing +ohm +ohmage +ohmages +ohmic +ohmically +ohmmeter +ohmmeters +ohms +oho +ohs +oidia +oidium oil -oilfield -ok +oilbird +oilbirds +oilcamp +oilcamps +oilcan +oilcans +oilcloth +oilcloths +oilcup +oilcups +oiled +oiler +oilers +oilhole +oilholes +oilier +oiliest +oilily +oiliness +oilinesses +oiling +oilman +oilmen +oilpaper +oilpapers +oilproof +oils +oilseed +oilseeds +oilskin +oilskins +oilstone +oilstones +oiltight +oilway +oilways +oily +oink +oinked +oinking +oinks +oinologies +oinology +oinomel +oinomels +ointment +ointments +oiticica +oiticicas +oka +okapi +okapis +okas +okay +okayed +okaying +okays +oke +okeh +okehs +okes +okeydoke +okeydokey +okra +okras old -olympic -olympics +olden +older +oldest +oldfangled +oldie +oldies +oldish +oldness +oldnesses +olds +oldsquaw +oldsquaws +oldster +oldsters +oldstyle +oldstyles +oldwife +oldwives +oldy +ole +olea +oleaginous +oleaginously +oleaginousness +oleaginousnesses +oleander +oleanders +oleandomycin +oleandomycins +oleaster +oleasters +oleate +oleates +olecranon +olecranons +olefin +olefine +olefines +olefinic +olefins +oleic +olein +oleine +oleines +oleins +oleo +oleograph +oleographs +oleomargarine +oleomargarines +oleoresin +oleoresinous +oleoresins +oleos +oles +oleum +oleums +olfaction +olfactions +olfactometer +olfactometers +olfactory +olibanum +olibanums +oligarch +oligarchic +oligarchical +oligarchies +oligarchs +oligarchy +oligochaete +oligochaetes +oligoclase +oligoclases +oligodendrocyte +oligodendrocytes +oligodendroglia +oligodendroglial +oligodendroglias +oligomer +oligomeric +oligomerization +oligomerizations +oligomers +oligonucleotide +oligonucleotides +oligophagies +oligophagous +oligophagy +oligopolies +oligopolistic +oligopoly +oligopsonies +oligopsonistic +oligopsony +oligosaccharide +oligosaccharides +oligotrophic +oliguria +oligurias +olio +olios +olivaceous +olivary +olive +olivenite +olivenites +olives +olivine +olivines +olivinic +olivinitic +olla +ollas +ologies +ologist +ologists +ology +ololiuqui +ololiuquis +oloroso +olorosos +olympiad +olympiads +om +omasa +omasum +omber +ombers +ombre +ombres +ombudsman +ombudsmanship +ombudsmanships +ombudsmen +omega +omegas +omelet +omelets +omelette +omelettes +omen +omened +omening +omens +omenta +omental +omentum +omentums +omer +omers +omicron +omicrons +omikron +omikrons +ominous +ominously +ominousness +ominousnesses +omissible +omission +omissions +omissive +omit +omits +omitted +omitter +omitters +omitting +ommatidia +ommatidial +ommatidium +omniarch +omniarchs +omnibus +omnibuses +omnicompetence +omnicompetences +omnicompetent +omnidirectional +omnifarious +omnific +omnificent +omniform +omnimode +omnipotence +omnipotences +omnipotent +omnipotently +omnipotents +omnipresence +omnipresences +omnipresent +omnirange +omniranges +omniscience +omnisciences +omniscient +omnisciently +omnivora +omnivore +omnivores +omnivorous +omnivorously +omophagies +omophagy +omphali +omphalos +omphaloskepses +omphaloskepsis +oms on +onager +onagers +onagri +onanism +onanisms +onanist +onanistic +onanists +onboard once +onchocerciases +onchocerciasis +oncidium +oncidiums +oncogene +oncogenes +oncogeneses +oncogenesis +oncogenic +oncogenicities +oncogenicity +oncologic +oncological +oncologies +oncologist +oncologists +oncology +oncoming +oncomings +oncornavirus +oncornaviruses +ondogram +ondograms one +onefold +oneiric +oneirically +oneiromancies +oneiromancy +oneness +onenesses +onerier +oneriest +onerous +onerously +onerousness +onerousnesses +onery +ones oneself +onetime +ongoing +ongoingness +ongoingnesses onion +onions +onionskin +onionskins +oniony +onium +onlooker +onlookers +onlooking only +onomastic +onomastically +onomastician +onomasticians +onomastics +onomatologies +onomatologist +onomatologists +onomatology +onomatopoeia +onomatopoeias +onomatopoeic +onomatopoeically +onomatopoetic +onomatopoetically +onrush +onrushes +onrushing +ons +onset +onsets +onshore +onside +onslaught +onslaughts +onstage +onstream +ontic +ontically onto +ontogeneses +ontogenesis +ontogenetic +ontogenetically +ontogenies +ontogeny +ontological +ontologically +ontologies +ontologist +ontologists +ontology +onus +onuses +onward +onwards +onychophoran +onychophorans +onyx +onyxes +oocyst +oocysts +oocyte +oocytes +oodles +oodlins +oogamete +oogametes +oogamies +oogamous +oogamy +oogeneses +oogenesis +oogenetic +oogenies +oogeny +oogonia +oogonial +oogonium +oogoniums +ooh +oohed +oohing +oohs +oolachan +oolachans +oolite +oolites +oolith +ooliths +oolitic +oologic +oologies +oologist +oologists +oology +oolong +oolongs +oomiac +oomiack +oomiacks +oomiacs +oomiak +oomiaks +oompah +oompahed +oompahing +oompahs +oomph +oomphs +oophorectomies +oophorectomy +oophyte +oophytes +oophytic +oops +oorali +ooralis +oorie +oosperm +oosperms +oosphere +oospheres +oospore +oospores +oosporic +oot +ootheca +oothecae +oothecal +ootid +ootids +oots +ooze +oozed +oozes +oozier +ooziest +oozily +ooziness +oozinesses +oozing +oozy +op +opacified +opacifies +opacify +opacifying +opacities +opacity +opah +opahs +opal +opalesce +opalesced +opalescence +opalescences +opalescent +opalescently +opalesces +opalescing +opaline +opalines +opals +opaque +opaqued +opaquely +opaqueness +opaquenesses +opaquer +opaques +opaquest +opaquing +ope +oped open +openabilities +openability +openable +opencast +opened +opener +openers +openest +openhanded +openhandedly +openhandedness +openhandednesses +openhearted +openheartedly +openheartedness +openheartednesses opening +openings +openly +openmouthed +openmouthedly +openmouthedness +openmouthednesses +openness +opennesses +opens +openwork +openworks opera +operabilities +operability +operable +operably +operagoer +operagoers +operagoing +operagoings +operand +operands +operant +operantly +operants +operas operate +operated +operates +operatic +operatically +operatics +operating operation +operational +operationalism +operationalisms +operationalist +operationalistic +operationalists +operationally +operationism +operationisms +operationist +operationists +operations +operative +operatively +operativeness +operativenesses +operatives operator +operatorless +operators +opercele +operceles +opercula +opercular +operculars +operculate +operculated +opercule +opercules +operculum +operculums +operetta +operettas +operettist +operettists +operon +operons +operose +operosely +operoseness +operosenesses +opes +ophidian +ophidians +ophite +ophites +ophitic +ophiuroid +ophiuroids +ophthalmia +ophthalmias +ophthalmic +ophthalmologic +ophthalmological +ophthalmologically +ophthalmologies +ophthalmologist +ophthalmologists +ophthalmology +ophthalmoscope +ophthalmoscopes +ophthalmoscopic +ophthalmoscopies +ophthalmoscopy +opiate +opiated +opiates +opiating +opine +opined +opines +oping +opining opinion +opinionated +opinionatedly +opinionatedness +opinionatednesses +opinionative +opinionatively +opinionativeness +opinionativenesses +opinioned +opinions +opioid +opioids +opisthobranch +opisthobranchs +opium +opiumism +opiumisms +opiums +opossum +opossums +oppidan +oppidans +oppilant +oppilate +oppilated +oppilates +oppilating +opponent +opponents +opportune +opportunely +opportuneness +opportunenesses +opportunism +opportunisms +opportunist +opportunistic +opportunistically +opportunists +opportunities +opportunity +opposabilities +opposability +opposable oppose +opposed +opposeless +opposer +opposers +opposes +opposing opposite +oppositely +oppositeness +oppositenesses +opposites +opposition +oppositional +oppositionist +oppositionists +oppositions +oppress +oppressed +oppresses +oppressing +oppression +oppressions +oppressive +oppressively +oppressiveness +oppressivenesses +oppressor +oppressors +opprobrious +opprobriously +opprobriousness +opprobriousnesses +opprobrium +opprobriums +oppugn +oppugned +oppugner +oppugners +oppugning +oppugns +ops +opsin +opsins +opsonic +opsonified +opsonifies +opsonify +opsonifying +opsonin +opsonins +opsonize +opsonized +opsonizes +opsonizing +opt +optative +optatively +optatives +opted +optic +optical +optically +optician +opticians +opticist +opticists +optics +optima +optimal +optimalities +optimality +optimally +optime +optimes +optimisation +optimisations +optimise +optimised +optimises +optimising +optimism +optimisms +optimist optimistic +optimistically +optimists +optimization +optimizations +optimize +optimized +optimizer +optimizers +optimizes +optimizing +optimum +optimums +opting +option optional +optionalities +optionality +optionally +optionals +optioned +optionee +optionees +optioning +options +optoelectronic +optoelectronics +optokinetic +optometric +optometries +optometrist +optometrists +optometry +opts +opulence +opulences +opulencies +opulency +opulent +opulently +opuntia +opuntias +opus +opuscula +opuscule +opuscules +opusculum +opuses +oquassa +oquassas or +ora +orach +orache +oraches +oracle +oracles +oracular +oracularities +oracularity +oracularly +orad oral +oralism +oralisms +oralist +oralists +oralities +orality +orally +orals +orang orange +orangeade +orangeades +orangerie +orangeries +orangery +oranges +orangewood +orangewoods +orangey +orangier +orangiest +orangish +orangs +orangutan +orangutans +orangy +orate +orated +orates +orating +oration +orations +orator +oratorical +oratorically +oratories +oratorio +oratorios +orators +oratory +oratress +oratresses +oratrices +oratrix +orb +orbed +orbicular +orbicularly +orbiculate +orbier +orbiest +orbing orbit +orbital +orbitals +orbited +orbiter +orbiters +orbiting +orbits +orbs +orby +orc +orca +orcas +orcein +orceins +orchard +orchardist +orchardists +orchards +orchestra +orchestral +orchestrally +orchestras +orchestrate +orchestrated +orchestrater +orchestraters +orchestrates +orchestrating +orchestration +orchestrational +orchestrations +orchestrator +orchestrators +orchid +orchidaceous +orchidlike +orchids +orchil +orchils +orchis +orchises +orchitic +orchitis +orchitises +orcin +orcinol +orcinols +orcins +orcs +ordain +ordained +ordainer +ordainers +ordaining +ordainment +ordainments +ordains +ordeal +ordeals order +orderable +ordered +orderer +orderers +ordering +orderless +orderlies +orderliness +orderlinesses +orderly +orders +ordinal +ordinals +ordinance +ordinances +ordinand +ordinands +ordinarier +ordinaries +ordinariest +ordinarily +ordinariness +ordinarinesses ordinary +ordinate +ordinates +ordination +ordinations +ordines +ordnance +ordnances +ordo +ordonnance +ordonnances +ordos +ordure +ordures +ore +oread +oreads +orectic +orective +oregano +oreganos +oreide +oreides +ores +orfray +orfrays organ +organa +organdie +organdies +organdy +organelle +organelles +organic +organically +organicism +organicisms +organicist +organicists +organicities +organicity +organics organisation +organisations organise +organised +organiser +organisers +organises +organising +organism +organismal +organismic +organismically +organisms +organist +organists +organizable organization +organizational +organizationally +organizations organize +organized +organizer +organizers +organizes +organizing +organochlorine +organochlorines +organogeneses +organogenesis +organogenetic +organoleptic +organoleptically +organologies +organology +organomercurial +organomercurials +organometallic +organometallics +organon +organons +organophosphate +organophosphates +organophosphorous +organophosphorus +organophosphoruses +organs +organum +organums +organza +organzas +organzine +organzines +orgasm +orgasmic +orgasms +orgastic +orgeat +orgeats +orgiac +orgiastic +orgiastically +orgic +orgies +orgone +orgones +orgulous +orgy +oribatid +oribatids +oribi +oribis +oriel +oriels +orient +oriental +orientalism +orientalisms +orientalist +orientalists +orientalize +orientalized +orientalizes +orientalizing +orientally +orientals +orientate +orientated +orientates +orientating +orientation +orientational +orientationally +orientations +oriented +orienteer +orienteering +orienteerings +orienteers +orienting +orients +orifice +orifices +orificial +oriflamme +oriflammes +origami +origamis +origan +origans +origanum +origanums origin +original +originalities +originality +originally +originals +originate +originated +originates +originating +origination +originations +originative +originatively +originator +originators +origins +orinasal +orinasals +oriole +orioles +orismological +orismologies +orismology +orison +orisons +orle +orles +orlop +orlops +ormer +ormers +ormolu +ormolus +ornament +ornamental +ornamentally +ornamentals +ornamentation +ornamentations +ornamented +ornamenting +ornaments +ornate +ornately +ornateness +ornatenesses +ornerier +orneriest +orneriness +ornerinesses +ornery +ornis +ornithes +ornithic +ornithine +ornithines +ornithischian +ornithischians +ornithologic +ornithological +ornithologically +ornithologies +ornithologist +ornithologists +ornithology +ornithopod +ornithopods +ornithopter +ornithopters +ornithoses +ornithosis +orogeneses +orogenesis +orogenetic +orogenic +orogenies +orogeny +orographic +orographical +orographies +orography +oroide +oroides +orologies +orology +orometer +orometers +oropharyngeal +oropharynges +oropharynx +oropharynxes +orotund +orotundities +orotundity +orphan +orphanage +orphanages +orphaned +orphanhood +orphanhoods +orphaning +orphans +orphic +orphical +orphically +orphrey +orphreys +orpiment +orpiments +orpin +orpine +orpines +orpins +orra +orreries +orrery +orrice +orrices +orris +orrises +orrisroot +orrisroots +ors +ort +orthicon +orthicons +ortho +orthocenter +orthocenters +orthochromatic +orthoclase +orthoclases +orthodontia +orthodontias +orthodontic +orthodontically +orthodontics +orthodontist +orthodontists +orthodox +orthodoxes +orthodoxies +orthodoxly +orthodoxy +orthoepic +orthoepically +orthoepies +orthoepist +orthoepists +orthoepy +orthogeneses +orthogenesis +orthogenetic +orthogenetically +orthogonal +orthogonalities +orthogonality +orthogonalization +orthogonalizations +orthogonalize +orthogonalized +orthogonalizes +orthogonalizing +orthogonally +orthograde +orthographic +orthographical +orthographically +orthographies +orthography +orthomolecular +orthonormal +orthopaedic +orthopaedics +orthopedic +orthopedically +orthopedics +orthopedist +orthopedists +orthophosphate +orthophosphates +orthopsychiatric +orthopsychiatries +orthopsychiatrist +orthopsychiatrists +orthopsychiatry +orthoptera +orthopteran +orthopterans +orthopterist +orthopterists +orthopteroid +orthopteroids +orthorhombic +orthoscopic +orthoses +orthosis +orthostatic +orthotic +orthotics +orthotist +orthotists +orthotropous +ortolan +ortolans +orts +oryx +oryxes +orzo +orzos +os +osar +oscillate +oscillated +oscillates +oscillating +oscillation +oscillational +oscillations +oscillator +oscillators +oscillatory +oscillogram +oscillograms +oscillograph +oscillographic +oscillographically +oscillographies +oscillographs +oscillography +oscilloscope +oscilloscopes +oscilloscopic +oscine +oscines +oscinine +oscitant +oscula +osculant +oscular +osculate +osculated +osculates +osculating +osculation +osculations +osculatory +oscule +oscules +osculum +ose +oses +osier +osiers +osmatic +osmeteria +osmeterium +osmic +osmics +osmious +osmiridium +osmiridiums +osmium +osmiums +osmol +osmolal +osmolalities +osmolality +osmolar +osmolarities +osmolarity +osmole +osmoles +osmols +osmometer +osmometers +osmometric +osmometries +osmometry +osmoregulation +osmoregulations +osmoregulatory +osmose +osmosed +osmoses +osmosing +osmosis +osmotic +osmotically +osmous +osmund +osmunda +osmundas +osmunds +osnaburg +osnaburgs +osprey +ospreys +ossa +ossein +osseins +osseous +ossia +ossicle +ossicles +ossicular +ossific +ossification +ossifications +ossified +ossifier +ossifiers +ossifies +ossifrage +ossifrages +ossify +ossifying +ossuaries +ossuary +osteal +osteitic +osteitides +osteitis +ostensible +ostensibly +ostensive +ostensively +ostensoria +ostensorium +ostentation +ostentations +ostentatious +ostentatiously +ostentatiousness +ostentatiousnesses +osteoarthritic +osteoarthritides +osteoarthritis +osteoblast +osteoblastic +osteoblasts +osteoclast +osteoclastic +osteoclasts +osteocyte +osteocytes +osteogeneses +osteogenesis +osteogenic +osteoid +osteoids +osteological +osteologies +osteologist +osteologists +osteology +osteoma +osteomalacia +osteomalacias +osteomas +osteomata +osteomyelitides +osteomyelitis +osteopath +osteopathic +osteopathically +osteopathies +osteopaths +osteopathy +osteoplastic +osteoplasties +osteoplasty +osteoporoses +osteoporosis +osteoporotic +osteosarcoma +osteosarcomas +osteosarcomata +osteoses +osteosis +osteosises +ostia +ostiaries +ostiary +ostinato +ostinatos +ostiolar +ostiole +ostioles +ostium +ostler +ostlers +ostmark +ostmarks +ostomies +ostomy +ostoses +ostosis +ostosises +ostraca +ostracise +ostracised +ostracises +ostracising +ostracism +ostracisms +ostracize +ostracized +ostracizes +ostracizing +ostracod +ostracode +ostracoderm +ostracoderms +ostracodes +ostracods +ostracon +ostrich +ostriches +ostrichlike +otalgia +otalgias +otalgic +otalgies +otalgy other +otherguess +otherness +othernesses +others +otherwhere +otherwhile +otherwhiles otherwise +otherworld +otherworldliness +otherworldlinesses +otherworldly +otherworlds +otic +otiose +otiosely +otioseness +otiosenesses +otiosities +otiosity +otitic +otitides +otitis +otocyst +otocystic +otocysts +otolaryngological +otolaryngologies +otolaryngologist +otolaryngologists +otolaryngology +otolith +otolithic +otoliths +otologies +otology +otorhinolaryngological +otorhinolaryngologies +otorhinolaryngologist +otorhinolaryngologists +otorhinolaryngology +otoscleroses +otosclerosis +otoscope +otoscopes +otoscopies +otoscopy +ototoxic +ototoxicities +ototoxicity +ottar +ottars +ottava +ottavas +otter +otters +otto +ottoman +ottomans +ottos +ouabain +ouabains +oubliette +oubliettes +ouch +ouched +ouches +ouching +oud +ouds ought +oughted +oughting +oughts +ouguiya +ouistiti +ouistitis +ounce +ounces +ouph +ouphe +ouphes +ouphs our +ourang +ourangs +ourari +ouraris +ourebi +ourebis +ourie ours +ourself ourselves +ousel +ousels +oust +ousted +ouster +ousters +ousting +ousts out +outachieve +outachieved +outachieves +outachieving +outact +outacted +outacting +outacts +outadd +outadded +outadding +outadds +outage +outages +outargue +outargued +outargues +outarguing +outask +outasked +outasking +outasks +outate +outback +outbacks +outbake +outbaked +outbakes +outbaking +outbalance +outbalanced +outbalances +outbalancing +outbargain +outbargained +outbargaining +outbargains +outbark +outbarked +outbarking +outbarks +outbawl +outbawled +outbawling +outbawls +outbeam +outbeamed +outbeaming +outbeams +outbeg +outbegged +outbegging +outbegs +outbid +outbidden +outbidding +outbids +outbitch +outbitched +outbitches +outbitching +outblaze +outblazed +outblazes +outblazing +outbleat +outbleated +outbleating +outbleats +outbless +outblessed +outblesses +outblessing +outbloom +outbloomed +outblooming +outblooms +outbluff +outbluffed +outbluffing +outbluffs +outblush +outblushed +outblushes +outblushing +outboard +outboards +outboast +outboasted +outboasting +outboasts +outbought +outbound +outbox +outboxed +outboxes +outboxing +outbrag +outbragged +outbragging +outbrags +outbrave +outbraved +outbraves +outbraving +outbrawl +outbrawled +outbrawling +outbrawls +outbreak +outbreaks +outbred +outbreed +outbreeding +outbreedings +outbreeds +outbribe +outbribed +outbribes +outbribing +outbuild +outbuilding +outbuildings +outbuilds +outbuilt +outbulk +outbulked +outbulking +outbulks +outbullied +outbullies +outbully +outbullying +outburn +outburned +outburning +outburns +outburnt +outburst +outbursts +outbuy +outbuying +outbuys +outby +outbye +outcaper +outcapered +outcapering +outcapers +outcast +outcaste +outcastes +outcasts +outcatch +outcatches +outcatching +outcaught +outcavil +outcaviled +outcaviling +outcavilled +outcavilling +outcavils +outcharge +outcharged +outcharges +outcharging +outcharm +outcharmed +outcharming +outcharms +outcheat +outcheated +outcheating +outcheats +outchid +outchidden +outchide +outchided +outchides +outchiding +outclass +outclassed +outclasses +outclassing +outclimb +outclimbed +outclimbing +outclimbs +outclomb +outcoach +outcoached +outcoaches +outcoaching outcome +outcomes +outcompete +outcompeted +outcompetes +outcompeting +outcook +outcooked +outcooking +outcooks +outcount +outcounted +outcounting +outcounts +outcrawl +outcrawled +outcrawling +outcrawls +outcried +outcries +outcrop +outcropped +outcropping +outcroppings +outcrops +outcross +outcrossed +outcrosses +outcrossing +outcrow +outcrowed +outcrowing +outcrows +outcry +outcrying +outcurse +outcursed +outcurses +outcursing +outcurve +outcurves +outdance +outdanced +outdances +outdancing +outdare +outdared +outdares +outdaring +outdate +outdated +outdatedly +outdatedness +outdatednesses +outdates +outdating +outdazzle +outdazzled +outdazzles +outdazzling +outdebate +outdebated +outdebates +outdebating +outdeliver +outdelivered +outdelivering +outdelivers +outdesign +outdesigned +outdesigning +outdesigns +outdid +outdistance +outdistanced +outdistances +outdistancing +outdo +outdodge +outdodged +outdodges +outdodging +outdoer +outdoers +outdoes +outdoing +outdone +outdoor outdoors +outdoorsman +outdoorsmanship +outdoorsmanships +outdoorsmen +outdoorsy +outdrag +outdragged +outdragging +outdrags +outdrank +outdraw +outdrawing +outdrawn +outdraws +outdream +outdreamed +outdreaming +outdreams +outdreamt +outdress +outdressed +outdresses +outdressing +outdrew +outdrink +outdrinking +outdrinks +outdrive +outdriven +outdrives +outdriving +outdrop +outdropped +outdropping +outdrops +outdrove +outdrunk +outduel +outdueled +outdueling +outduelled +outduelling +outduels +outearn +outearned +outearning +outearns +outeat +outeaten +outeating +outeats +outecho +outechoed +outechoes +outechoing +outed outer +outercoat +outercoats +outermost +outers +outerwear +outfable +outfabled +outfables +outfabling +outface +outfaced +outfaces +outfacing +outfall +outfalls +outfast +outfasted +outfasting +outfasts +outfawn +outfawned +outfawning +outfawns +outfeast +outfeasted +outfeasting +outfeasts +outfeel +outfeeling +outfeels +outfelt +outfield +outfielder +outfielders +outfields +outfight +outfighting +outfights +outfigure +outfigured +outfigures +outfiguring +outfind +outfinding +outfinds +outfire +outfired +outfires +outfiring +outfish +outfished +outfishes +outfishing +outfit +outfits +outfitted +outfitter +outfitters +outfitting +outflank +outflanked +outflanking +outflanks +outflew +outflies +outflow +outflowed +outflowing +outflown +outflows +outfly +outflying +outfool +outfooled +outfooling +outfools +outfoot +outfooted +outfooting +outfoots +outfought +outfound +outfox +outfoxed +outfoxes +outfoxing +outfrown +outfrowned +outfrowning +outfrowns +outfumble +outfumbled +outfumbles +outfumbling +outgain +outgained +outgaining +outgains +outgas +outgassed +outgasses +outgassing +outgave +outgeneral +outgeneraled +outgeneraling +outgenerals +outgive +outgiven +outgives +outgiving +outgivings +outglare +outglared +outglares +outglaring +outglitter +outglittered +outglittering +outglitters +outglow +outglowed +outglowing +outglows +outgnaw +outgnawed +outgnawing +outgnawn +outgnaws +outgo +outgoes outgoing +outgoingness +outgoingnesses +outgoings +outgone +outgrew +outgrin +outgrinned +outgrinning +outgrins +outgross +outgrossed +outgrosses +outgrossing +outgroup +outgroups +outgrow +outgrowing +outgrown +outgrows +outgrowth +outgrowths +outguess +outguessed +outguesses +outguessing +outguide +outguided +outguides +outguiding +outgun +outgunned +outgunning +outguns +outgush +outgushes +outhaul +outhauls +outhear +outheard +outhearing +outhears +outhit +outhits +outhitting +outhomer +outhomered +outhomering +outhomers +outhouse +outhouses +outhowl +outhowled +outhowling +outhowls +outhumor +outhumored +outhumoring +outhumors +outhunt +outhunted +outhunting +outhunts +outhustle +outhustled +outhustles +outhustling outing +outings +outintrigue +outintrigued +outintrigues +outintriguing +outjinx +outjinxed +outjinxes +outjinxing +outjump +outjumped +outjumping +outjumps +outjut +outjuts +outjutted +outjutting +outkeep +outkeeping +outkeeps +outkept +outkick +outkicked +outkicking +outkicks +outkill +outkilled +outkilling +outkills +outkiss +outkissed +outkisses +outkissing +outlaid +outlain +outland +outlander +outlanders +outlandish +outlandishly +outlandishness +outlandishnesses +outlands +outlast +outlasted +outlasting +outlasts +outlaugh +outlaughed +outlaughing +outlaughs +outlaw +outlawed +outlawing +outlawries +outlawry +outlaws +outlay +outlaying +outlays +outleap +outleaped +outleaping +outleaps +outleapt +outlearn +outlearned +outlearning +outlearns +outlearnt +outlet +outlets +outlie +outlier +outliers +outlies outline +outlined +outliner +outliners +outlines +outlining +outlive +outlived +outliver +outlivers +outlives +outliving +outlook +outlooks +outlove +outloved +outloves +outloving +outlying +outman +outmaneuver +outmaneuvered +outmaneuvering +outmaneuvers +outmanipulate +outmanipulated +outmanipulates +outmanipulating +outmanned +outmanning +outmans +outmarch +outmarched +outmarches +outmarching +outmatch +outmatched +outmatches +outmatching +outmode +outmoded +outmodes +outmoding +outmost +outmove +outmoved +outmoves +outmoving +outmuscle +outmuscled +outmuscles +outmuscling +outnumber +outnumbered +outnumbering +outnumbers +outorganize +outorganized +outorganizes +outorganizing +outpace +outpaced +outpaces +outpacing +outpaint +outpainted +outpainting +outpaints +outpass +outpassed +outpasses +outpassing +outpatient +outpatients +outperform +outperformed +outperforming +outperforms +outpitch +outpitched +outpitches +outpitching +outpitied +outpities +outpity +outpitying +outplacement +outplacements +outplan +outplanned +outplanning +outplans +outplay +outplayed +outplaying +outplays +outplod +outplodded +outplodding +outplods +outplot +outplots +outplotted +outplotting +outpoint +outpointed +outpointing +outpoints +outpolitick +outpoliticked +outpoliticking +outpoliticks +outpoll +outpolled +outpolling +outpolls +outpopulate +outpopulated +outpopulates +outpopulating +outport +outports +outpost +outposts +outpour +outpoured +outpouring +outpourings +outpours +outpower +outpowered +outpowering +outpowers +outpray +outprayed +outpraying +outprays +outpreach +outpreached +outpreaches +outpreaching +outpreen +outpreened +outpreening +outpreens +outpress +outpressed +outpresses +outpressing +outprice +outpriced +outprices +outpricing +outproduce +outproduced +outproduces +outproducing +outpromise +outpromised +outpromises +outpromising +outpull +outpulled +outpulling +outpulls +outpunch +outpunched +outpunches +outpunching +outpush +outpushed +outpushes +outpushing output +outputs +outputted +outputting +outquote +outquoted +outquotes +outquoting +outrace +outraced +outraces +outracing +outrage +outraged +outrageous +outrageously +outrageousness +outrageousnesses +outrages +outraging +outraise +outraised +outraises +outraising +outran +outrance +outrances +outrang +outrange +outranged +outranges +outranging +outrank +outranked +outranking +outranks +outrate +outrated +outrates +outrating +outrave +outraved +outraves +outraving +outre +outreach +outreached +outreaches +outreaching +outread +outreading +outreads +outrebound +outrebounded +outrebounding +outrebounds +outreproduce +outreproduced +outreproduces +outreproducing +outridden +outride +outrider +outriders +outrides +outriding +outrigger +outriggers +outright +outrightly +outring +outringing +outrings +outrival +outrivaled +outrivaling +outrivalled +outrivalling +outrivals +outroar +outroared +outroaring +outroars +outrock +outrocked +outrocking +outrocks +outrode +outroll +outrolled +outrolling +outrolls +outroot +outrooted +outrooting +outroots +outrow +outrowed +outrowing +outrows +outrun +outrung +outrunning +outruns +outrush +outrushed +outrushes +outrushing +outs +outsail +outsailed +outsailing +outsails +outsang +outsat +outsavor +outsavored +outsavoring +outsavors +outsaw +outscheme +outschemed +outschemes +outscheming +outscold +outscolded +outscolding +outscolds +outscoop +outscooped +outscooping +outscoops +outscore +outscored +outscores +outscoring +outscorn +outscorned +outscorning +outscorns +outsee +outseeing +outseen +outsees +outsell +outselling +outsells +outsert +outserts +outserve +outserved +outserves +outserving +outset +outsets +outshame +outshamed +outshames +outshaming +outshine +outshined +outshines +outshining +outshone +outshoot +outshooting +outshoots +outshot +outshout +outshouted +outshouting +outshouts outside +outsider +outsiderness +outsidernesses +outsiders +outsides +outsight +outsights +outsin +outsing +outsinging +outsings +outsinned +outsinning +outsins +outsit +outsits +outsitting +outsize +outsized +outsizes +outskate +outskated +outskates +outskating +outskirt +outskirts +outsleep +outsleeping +outsleeps +outslept +outslick +outslicked +outslicking +outslicks +outsmart +outsmarted +outsmarting +outsmarts +outsmile +outsmiled +outsmiles +outsmiling +outsmoke +outsmoked +outsmokes +outsmoking +outsnore +outsnored +outsnores +outsnoring +outsoar +outsoared +outsoaring +outsoars +outsold +outsole +outsoles +outsourcing +outsourcings +outspan +outspanned +outspanning +outspans +outsparkle +outsparkled +outsparkles +outsparkling +outspeak +outspeaking +outspeaks +outsped +outspeed +outspeeded +outspeeding +outspeeds +outspell +outspelled +outspelling +outspells +outspelt +outspend +outspending +outspends +outspent +outspoke outspoken +outspokenly +outspokenness +outspokennesses +outspread +outspreading +outspreads +outsprint +outsprinted +outsprinting +outsprints +outstand outstanding +outstandingly +outstands +outstare +outstared +outstares +outstaring +outstart +outstarted +outstarting +outstarts +outstate +outstated +outstates +outstating +outstation +outstations +outstay +outstayed +outstaying +outstays +outsteer +outsteered +outsteering +outsteers +outstood +outstretch +outstretched +outstretches +outstretching +outstridden +outstride +outstrides +outstriding +outstrip +outstripped +outstripping +outstrips +outstrode +outstudied +outstudies +outstudy +outstudying +outstunt +outstunted +outstunting +outstunts +outsulk +outsulked +outsulking +outsulks +outsung +outswam +outsware +outswear +outswearing +outswears +outswim +outswimming +outswims +outswore +outsworn +outswum +outtake +outtakes +outtalk +outtalked +outtalking +outtalks +outtask +outtasked +outtasking +outtasks +outtell +outtelling +outtells +outthank +outthanked +outthanking +outthanks +outthink +outthinking +outthinks +outthought +outthrew +outthrob +outthrobbed +outthrobbing +outthrobs +outthrow +outthrowing +outthrown +outthrows +outthrust +outthrusting +outthrusts +outtold +outtower +outtowered +outtowering +outtowers +outtrade +outtraded +outtrades +outtrading +outtrick +outtricked +outtricking +outtricks +outtrot +outtrots +outtrotted +outtrotting +outtrump +outtrumped +outtrumping +outtrumps +outturn +outturns +outvalue +outvalued +outvalues +outvaluing +outvaunt +outvaunted +outvaunting +outvaunts +outvie +outvied +outvies +outvoice +outvoiced +outvoices +outvoicing +outvote +outvoted +outvotes +outvoting +outvying +outwait +outwaited +outwaiting +outwaits +outwalk +outwalked +outwalking +outwalks +outwar outward +outwardly +outwardness +outwardnesses outwards +outwarred +outwarring +outwars +outwash +outwashes +outwaste +outwasted +outwastes +outwasting +outwatch +outwatched +outwatches +outwatching +outwear +outwearied +outwearies +outwearing +outwears +outweary +outwearying +outweep +outweeping +outweeps +outweigh +outweighed +outweighing +outweighs +outwent +outwept +outwhirl +outwhirled +outwhirling +outwhirls +outwile +outwiled +outwiles +outwiling +outwill +outwilled +outwilling +outwills +outwind +outwinded +outwinding +outwinds +outwish +outwished +outwishes +outwishing +outwit +outwits +outwitted +outwitting +outwore +outwork +outworked +outworker +outworkers +outworking +outworks +outworn +outwrestle +outwrestled +outwrestles +outwrestling +outwrit +outwrite +outwrites +outwriting +outwritten +outwrote +outwrought +outyell +outyelled +outyelling +outyells +outyelp +outyelped +outyelping +outyelps +outyield +outyielded +outyielding +outyields +ouzel +ouzels +ouzo +ouzos +ova oval +ovalbumin +ovalbumins +ovalities +ovality +ovally +ovalness +ovalnesses +ovals +ovarial +ovarian +ovariectomies +ovariectomized +ovariectomy +ovaries +ovariole +ovarioles +ovariotomies +ovariotomy +ovaritides +ovaritis +ovary +ovate +ovately +ovation +ovations +oven +ovenbird +ovenbirds +ovenlike +ovenproof +ovens +ovenware +ovenwares over +overable +overabstract +overabstracted +overabstracting +overabstracts +overabundance +overabundances +overabundant +overaccentuate +overaccentuated +overaccentuates +overaccentuating +overachieve +overachieved +overachievement +overachievements +overachiever +overachievers +overachieves +overachieving +overact +overacted +overacting +overaction +overactions +overactive +overactivities +overactivity +overacts +overadjustment +overadjustments +overadvertise +overadvertised +overadvertises +overadvertising +overage +overaged +overages +overaggressive +overalert +overall +overalled +overalls +overambitious +overambitiousness +overambitiousnesses +overamplified +overanalyses +overanalysis +overanalytical +overanalyze +overanalyzed +overanalyzes +overanalyzing +overanxieties +overanxiety +overanxious +overapplication +overapplications +overapt +overarch +overarched +overarches +overarching +overarm +overarousal +overarousals +overarrange +overarranged +overarranges +overarranging +overarticulate +overarticulated +overarticulates +overarticulating +overassert +overasserted +overasserting +overassertion +overassertions +overassertive +overasserts +overassessment +overassessments +overate +overattention +overattentions +overawe +overawed +overawes +overawing +overbake +overbaked +overbakes +overbaking +overbalance +overbalanced +overbalances +overbalancing +overbear +overbearing +overbearingly +overbears +overbeat +overbeaten +overbeating +overbeats +overbed +overbejeweled +overbet +overbets +overbetted +overbetting +overbid +overbidden +overbidding +overbids +overbig +overbill +overbilled +overbilling +overbills +overbite +overbites +overbleach +overbleached +overbleaches +overbleaching +overblew +overblouse +overblouses +overblow +overblowing +overblown +overblows +overboard +overboil +overboiled +overboiling +overboils +overbold +overbook +overbooked +overbooking +overbooks +overbore +overborn +overborne +overborrow +overborrowed +overborrowing +overborrows +overbought +overbreathing +overbred +overbrief +overbright +overbroad +overbrowse +overbrowsed +overbrowses +overbrowsing +overbrutal +overbuild +overbuilding +overbuilds +overbuilt +overburden +overburdened +overburdening +overburdens +overburn +overburned +overburning +overburns +overburnt +overbusy +overbuy +overbuying +overbuys +overcall +overcalled +overcalling +overcalls +overcame +overcapacities +overcapacity +overcapitalization +overcapitalizations +overcapitalize +overcapitalized +overcapitalizes +overcapitalizing +overcareful +overcast +overcasted +overcasting +overcastings +overcasts +overcaution +overcautioned +overcautioning +overcautions +overcautious +overcentralization +overcentralizations +overcentralize +overcentralized +overcentralizes +overcentralizing +overcharge +overcharged +overcharges +overcharging +overchill +overchilled +overchilling +overchills +overcivilized +overclaim +overclaimed +overclaiming +overclaims +overclassification +overclassifications +overclassified +overclassifies +overclassify +overclassifying +overclean +overcleaned +overcleaning +overcleans +overclear +overcleared +overclearing +overclears +overcloud +overclouded +overclouding +overclouds +overcoach +overcoached +overcoaches +overcoaching overcoat +overcoats +overcold overcome +overcomer +overcomers +overcomes +overcoming +overcommercialization +overcommercializations +overcommercialize +overcommercialized +overcommercializes +overcommercializing +overcommit +overcommitment +overcommitments +overcommits +overcommitted +overcommitting +overcommunicate +overcommunicated +overcommunicates +overcommunicating +overcommunication +overcommunications +overcompensate +overcompensated +overcompensates +overcompensating +overcompensation +overcompensations +overcompensatory +overcomplex +overcompliance +overcompliances +overcomplicate +overcomplicated +overcomplicates +overcomplicating +overcompress +overcompressed +overcompresses +overcompressing +overconcentration +overconcentrations +overconcern +overconcerned +overconcerning +overconcerns +overconfidence +overconfidences +overconfident +overconfidently +overconscientious +overconscious +overconservative +overconstruct +overconstructed +overconstructing +overconstructs +overconsume +overconsumed +overconsumes +overconsuming +overconsumption +overconsumptions +overcontrol +overcontrolled +overcontrolling +overcontrols +overcook +overcooked +overcooking +overcooks +overcool +overcooled +overcooling +overcools +overcorrect +overcorrected +overcorrecting +overcorrection +overcorrections +overcorrects +overcount +overcounted +overcounting +overcounts +overcoy +overcram +overcrammed +overcramming +overcrams +overcredulous +overcritical +overcrop +overcropped +overcropping +overcrops +overcrowd +overcrowded +overcrowding +overcrowds +overcultivation +overcultivations +overcure +overcured +overcures +overcuring +overcut +overcuts +overcutting +overdare +overdared +overdares +overdaring +overdear +overdeck +overdecked +overdecking +overdecks +overdecorate +overdecorated +overdecorates +overdecorating +overdecoration +overdecorations +overdemanding +overdependence +overdependences +overdependent +overdesign +overdesigned +overdesigning +overdesigns +overdetermined +overdevelop +overdeveloped +overdeveloping +overdevelopment +overdevelopments +overdevelops +overdid +overdifferentiation +overdifferentiations +overdirect +overdirected +overdirecting +overdirects +overdiscount +overdiscounted +overdiscounting +overdiscounts +overdiversities +overdiversity +overdo +overdocument +overdocumented +overdocumenting +overdocuments +overdoer +overdoers +overdoes +overdog +overdogs +overdoing +overdominance +overdominances +overdominant +overdone +overdosage +overdosages +overdose +overdosed +overdoses +overdosing +overdraft +overdrafts +overdramatic +overdramatize +overdramatized +overdramatizes +overdramatizing +overdrank +overdraw +overdrawing +overdrawn +overdraws +overdress +overdressed +overdresses +overdressing +overdrew +overdried +overdries +overdrink +overdrinking +overdrinks +overdrive +overdriven +overdrives +overdriving +overdrove +overdrunk +overdry +overdrying +overdub +overdubbed +overdubbing +overdubs +overdue +overdye +overdyed +overdyeing +overdyes +overeager +overeagerness +overeagernesses +overearnest +overeasy +overeat +overeaten +overeater +overeaters +overeating +overeats +overed +overedit +overedited +overediting +overedits +overeducate +overeducated +overeducates +overeducating +overeducation +overeducations +overelaborate +overelaborated +overelaborates +overelaborating +overelaboration +overelaborations +overembellish +overembellished +overembellishes +overembellishing +overembellishment +overembellishments +overemote +overemoted +overemotes +overemoting +overemotional +overemphases +overemphasis +overemphasize +overemphasized +overemphasizes +overemphasizing +overemphatic +overenamored +overencourage +overencouraged +overencourages +overencouraging +overenergetic +overengineer +overengineered +overengineering +overengineers +overenrolled +overentertained +overenthusiasm +overenthusiasms +overenthusiastic +overenthusiastically +overequipped +overestimate +overestimated +overestimates +overestimating +overestimation +overestimations +overevaluation +overevaluations +overexaggerate +overexaggerated +overexaggerates +overexaggerating +overexaggeration +overexaggerations +overexcite +overexcited +overexcites +overexciting +overexercise +overexercised +overexercises +overexercising +overexert +overexerted +overexerting +overexertion +overexertions +overexerts +overexpand +overexpanded +overexpanding +overexpands +overexpansion +overexpansions +overexpectation +overexpectations +overexplain +overexplained +overexplaining +overexplains +overexplicit +overexploit +overexploitation +overexploitations +overexploited +overexploiting +overexploits +overexpose +overexposed +overexposes +overexposing +overexposure +overexposures +overextend +overextended +overextending +overextends +overextension +overextensions +overextraction +overextractions +overextrapolation +overextrapolations +overextravagant +overexuberant +overfacile +overfamiliar +overfamiliarities +overfamiliarity +overfar +overfast +overfastidious +overfat +overfatigue +overfatigued +overfatigues +overfavor +overfavored +overfavoring +overfavors +overfear +overfeared +overfearing +overfears +overfed +overfeed +overfeeding +overfeeds +overfertilization +overfertilizations +overfertilize +overfertilized +overfertilizes +overfertilizing +overfill +overfilled +overfilling +overfills +overfish +overfished +overfishes +overfishing +overflew +overflies +overflight +overflights +overflow +overflowed +overflowing +overflown +overflows +overfly +overflying +overfocus +overfocused +overfocuses +overfocusing +overfocussed +overfocusses +overfocussing +overfond +overfoul +overfree +overfulfill +overfulfilled +overfulfilling +overfulfills +overfull +overfund +overfunded +overfunding +overfunds +overfussy +overgarment +overgarments +overgeneralization +overgeneralizations +overgeneralize +overgeneralized +overgeneralizes +overgeneralizing +overgenerosities +overgenerosity +overgenerous +overgenerously +overgild +overgilded +overgilding +overgilds +overgilt +overgird +overgirded +overgirding +overgirds +overgirt +overglad +overglamorize +overglamorized +overglamorizes +overglamorizing +overglaze +overglazes +overgoad +overgoaded +overgoading +overgoads +overgovern +overgoverned +overgoverning +overgoverns +overgraze +overgrazed +overgrazes +overgrazing +overgrew +overgrow +overgrowing +overgrown +overgrows +overgrowth +overgrowths +overhand +overhanded +overhanding +overhandle +overhandled +overhandles +overhandling +overhands +overhang +overhanging +overhangs +overhard +overharvest +overharvested +overharvesting +overharvests +overhasty +overhate +overhated +overhates +overhating +overhaul +overhauled +overhauling +overhauls overhead +overheads +overheap +overheaped +overheaping +overheaps +overhear +overheard +overhearing +overhears +overheat +overheated +overheating +overheats +overheld +overhigh +overhold +overholding +overholds +overholy +overhomogenize +overhomogenized +overhomogenizes +overhomogenizing +overhope +overhoped +overhopes +overhoping +overhot +overhung +overhunt +overhunted +overhunting +overhuntings +overhunts +overhype +overhyped +overhypes +overhyping +overidealize +overidealized +overidealizes +overidealizing +overidentification +overidentifications +overidentified +overidentifies +overidentify +overidentifying +overidle +overimaginative +overimpress +overimpressed +overimpresses +overimpressing +overindebtedness +overindebtednesses +overindulge +overindulged +overindulgence +overindulgences +overindulgent +overindulges +overindulging +overindustrialize +overindustrialized +overindustrializes +overindustrializing +overinflate +overinflated +overinflates +overinflating +overinflation +overinflations +overinform +overinformed +overinforming +overinforms +overing +overingenious +overingenuities +overingenuity +overinsistent +overinsure +overinsured +overinsures +overinsuring +overintellectualization +overintellectualizations +overintellectualize +overintellectualized +overintellectualizes +overintellectualizing +overintense +overintensities +overintensity +overinterpretation +overinterpretations +overinvestment +overinvestments +overissuance +overissuances +overissue +overissued +overissues +overissuing +overjoy +overjoyed +overjoying +overjoys +overjust +overkeen +overkill +overkilled +overkilling +overkills +overkind +overlabor +overlabored +overlaboring +overlabors +overlade +overladed +overladen +overlades +overlading +overlaid +overlain +overland +overlands +overlap +overlapped +overlapping +overlaps +overlarge +overlate +overlavish +overlax +overlay +overlaying +overlays +overleaf +overleap +overleaped +overleaping +overleaps +overleapt +overlearn +overlearned +overlearning +overlearns +overlend +overlending +overlends +overlength +overlengthen +overlengthened +overlengthening +overlengthens +overlent +overlet +overlets +overletting +overlewd +overlie +overlies +overlight +overlighted +overlighting +overlights +overlit +overliteral +overliterary +overlive +overlived +overlives +overliving +overload +overloaded +overloading +overloads +overlong overlook +overlooked +overlooking +overlooks +overlord +overlorded +overlording +overlords +overlordship +overlordships +overloud +overlove +overloved +overloves +overloving +overlush +overly +overlying +overman +overmanage +overmanaged +overmanages +overmanaging +overmanned +overmannered +overmanning +overmans +overmantel +overmantels +overmany +overmaster +overmastered +overmastering +overmasters +overmatch +overmatched +overmatches +overmatching +overmature +overmaturities +overmaturity +overmedicate +overmedicated +overmedicates +overmedicating +overmedication +overmedications +overmeek +overmelt +overmelted +overmelting +overmelts +overmen +overmighty +overmild +overmilk +overmilked +overmilking +overmilks +overmine +overmined +overmines +overmining +overmix +overmixed +overmixes +overmixing +overmodest +overmodestly +overmodulated +overmuch +overmuches +overmuscled +overnear +overneat +overnew +overnice +overnight +overnighted +overnighter +overnighters +overnighting +overnights +overnourish +overnourished +overnourishes +overnourishing +overnutrition +overnutritions +overobvious +overoperate +overoperated +overoperates +overoperating +overopinionated +overoptimism +overoptimisms +overoptimist +overoptimistic +overoptimistically +overoptimists +overorchestrate +overorchestrated +overorchestrates +overorchestrating +overorganize +overorganized +overorganizes +overorganizing +overornament +overornamented +overornamenting +overornaments +overpackage +overpackaged +overpackages +overpackaging +overpaid +overparticular +overpass +overpassed +overpasses +overpassing +overpast +overpay +overpaying +overpayment +overpayments +overpays +overpedal +overpedaled +overpedaling +overpedalled +overpedalling +overpedals +overpeople +overpeopled +overpeoples +overpeopling +overpersuade +overpersuaded +overpersuades +overpersuading +overpersuasion +overpersuasions +overpert +overplaid +overplaided +overplaids +overplan +overplanned +overplanning +overplans +overplant +overplanted +overplanting +overplants +overplay +overplayed +overplaying +overplays +overplied +overplies +overplot +overplots +overplotted +overplotting +overplus +overpluses +overply +overplying +overpopulate +overpopulated +overpopulates +overpopulating +overpopulation +overpopulations +overpotent +overpower +overpowered +overpowering +overpoweringly +overpowers +overpraise +overpraised +overpraises +overpraising +overprecise +overprescribe +overprescribed +overprescribes +overprescribing +overprescription +overprescriptions +overpressure +overpressures +overprice +overpriced +overprices +overpricing +overprint +overprinted +overprinting +overprints +overprivileged +overprize +overprized +overprizes +overprizing +overprocess +overprocessed +overprocesses +overprocessing +overproduce +overproduced +overproduces +overproducing +overproduction +overproductions +overprogram +overprogramed +overprograming +overprogrammed +overprogramming +overprograms +overpromise +overpromised +overpromises +overpromising +overpromote +overpromoted +overpromotes +overpromoting +overproof +overproportion +overproportionate +overproportionately +overproportioned +overproportioning +overproportions +overprotect +overprotected +overprotecting +overprotection +overprotections +overprotective +overprotectiveness +overprotectivenesses +overprotects +overpump +overpumped +overpumping +overpumps +overqualified +overran +overrank +overrash +overrate +overrated +overrates +overrating +overreach +overreached +overreacher +overreachers +overreaches +overreaching +overreact +overreacted +overreacting +overreaction +overreactions +overreacts +overrefined +overrefinement +overrefinements +overregulate +overregulated +overregulates +overregulating +overregulation +overregulations +overreliance +overreliances +overreport +overreported +overreporting +overreports +overrepresentation +overrepresentations +overrepresented +overrespond +overresponded +overresponding +overresponds +overrich +overridden +override +overrides +overriding +overrife +overrigid +overripe +overrode +overrude +overruff +overruffed +overruffing +overruffs +overrule +overruled +overrules +overruling +overrun +overrunning +overruns +overs +oversad +oversale +oversales +oversalt +oversalted +oversalting +oversalts +oversanguine +oversaturate +oversaturated +oversaturates +oversaturating +oversaturation +oversaturations +oversauce +oversauced +oversauces +oversaucing +oversave +oversaved +oversaves +oversaving +oversaw +overscale +overscaled +overscrupulous +oversea +overseas +oversecretion +oversecretions +oversee +overseed +overseeded +overseeding +overseeds +overseeing +overseen +overseer +overseers +oversees +oversell +overselling +oversells +oversensitive +oversensitiveness +oversensitivenesses +oversensitivities +oversensitivity +overserious +overseriously +overservice +overserviced +overservices +overservicing +overset +oversets +oversetting +oversew +oversewed +oversewing +oversewn +oversews +oversexed +overshadow +overshadowed +overshadowing +overshadows +overshirt +overshirts +overshoe +overshoes +overshoot +overshooting +overshoots +overshot +overshots +oversick +overside +oversides +oversight +oversights +oversimple +oversimplification +oversimplifications +oversimplified +oversimplifies +oversimplify +oversimplifying +oversimplistic +oversimply +oversize +oversized +oversizes +overskirt +overskirts +overslaugh +overslaughed +overslaughing +overslaughs +oversleep +oversleeping +oversleeps +overslept +overslip +overslipped +overslipping +overslips +overslipt +overslow +oversmoke +oversmoked +oversmokes +oversmoking +oversoak +oversoaked +oversoaking +oversoaks +oversoft +oversold +oversolicitous +oversoon +oversophisticated +oversoul +oversouls +overspecialization +overspecializations +overspecialize +overspecialized +overspecializes +overspecializing +overspeculate +overspeculated +overspeculates +overspeculating +overspeculation +overspeculations +overspend +overspender +overspenders +overspending +overspends +overspent +overspill +overspills +overspin +overspins +overspread +overspreading +overspreads +overstabilities +overstability +overstaff +overstaffed +overstaffing +overstaffs +overstate +overstated +overstatement +overstatements +overstates +overstating +overstay +overstayed +overstaying +overstays +oversteer +oversteers +overstep +overstepped +overstepping +oversteps +overstimulate +overstimulated +overstimulates +overstimulating +overstimulation +overstimulations +overstir +overstirred +overstirring +overstirs +overstock +overstocked +overstocking +overstocks +overstories +overstory +overstrain +overstrained +overstraining +overstrains +overstress +overstressed +overstresses +overstressing +overstretch +overstretched +overstretches +overstretching +overstrew +overstrewed +overstrewing +overstrewn +overstrews +overstridden +overstride +overstrides +overstriding +overstrike +overstrikes +overstriking +overstrode +overstruck +overstructured +overstrung +overstuff +overstuffed +overstuffing +overstuffs +oversubscribe +oversubscribed +oversubscribes +oversubscribing +oversubscription +oversubscriptions +oversubtle +oversuds +oversudsed +oversudses +oversudsing +oversup +oversupped +oversupping +oversupplied +oversupplies +oversupply +oversupplying +oversups +oversure +oversuspicious +oversweet +oversweeten +oversweetened +oversweetening +oversweetens +oversweetness +oversweetnesses +overswing +overswinging +overswings +overswung +overt +overtake +overtaken +overtakes +overtaking +overtalk +overtalkative +overtalked +overtalking +overtalks +overtame +overtart +overtask +overtasked +overtasking +overtasks +overtax +overtaxation +overtaxations +overtaxed +overtaxes +overtaxing +overthin +overthink +overthinking +overthinks +overthought +overthrew +overthrow +overthrowing +overthrown +overthrows +overtighten +overtightened +overtightening +overtightens +overtime +overtimed +overtimes +overtiming +overtip +overtipped +overtipping +overtips +overtire +overtired +overtires +overtiring +overtly +overtness +overtnesses +overtoil +overtoiled +overtoiling +overtoils +overtone +overtones +overtook +overtop +overtopped +overtopping +overtops +overtrade +overtraded +overtrades +overtrading +overtrain +overtrained +overtraining +overtrains +overtreat +overtreated +overtreating +overtreatment +overtreatments +overtreats +overtrick +overtricks +overtrim +overtrimmed +overtrimming +overtrims +overtrump +overtrumped +overtrumping +overtrumps +overture +overtured +overtures +overturing +overturn +overturned +overturning +overturns +overurge +overurged +overurges +overurging +overuse +overused +overuses +overusing +overutilization +overutilizations +overutilize +overutilized +overutilizes +overutilizing +overvaluation +overvaluations +overvalue +overvalued +overvalues +overvaluing +overview +overviews +overviolent +overvivid +overvoltage +overvoltages +overvote +overvoted +overvotes +overvoting +overwarm +overwarmed +overwarming +overwarms +overwary +overwater +overwatered +overwatering +overwaters +overweak +overwear +overwearing +overwears +overweary +overween +overweened +overweening +overweeningly +overweens +overweigh +overweighed +overweighing +overweighs overweight +overweighted +overweighting +overweights +overwet +overwets +overwetted +overwetting +overwhelm +overwhelmed +overwhelming +overwhelmingly +overwhelms +overwide +overwily +overwind +overwinding +overwinds +overwinter +overwintered +overwintering +overwinters +overwise +overwithheld +overwithhold +overwithholding +overwithholds +overword +overwords +overwore +overwork +overworked +overworking +overworks +overworn +overwound +overwrite +overwrites +overwriting +overwritten +overwrote +overwrought +overzeal +overzealous +overzealously +overzealousness +overzealousnesses +overzeals +ovibos +ovicidal +ovicide +ovicides +oviducal +oviduct +oviductal +oviducts +oviform +ovine +ovines +ovipara +oviparous +oviposit +oviposited +ovipositing +oviposition +ovipositional +ovipositions +ovipositor +ovipositors +oviposits +ovisac +ovisacs +ovoid +ovoidal +ovoids +ovolactovegetarian +ovolactovegetarians +ovoli +ovolo +ovolos +ovonic +ovonics +ovotestes +ovotestis +ovoviviparous +ovoviviparously +ovoviviparousness +ovoviviparousnesses +ovular +ovulary +ovulate +ovulated +ovulates +ovulating +ovulation +ovulations +ovulatory +ovule +ovules +ovum +ow owe +owed +owes +owing +owl +owlet +owlets +owlish +owlishly +owlishness +owlishnesses +owllike +owls own +ownable +owned owner +owners ownership +ownerships +owning +owns +owse +owsen ox +oxacillin +oxacillins +oxalacetate +oxalacetates +oxalate +oxalated +oxalates +oxalating +oxalic +oxalis +oxalises +oxaloacetate +oxaloacetates +oxazepam +oxazepams +oxazine +oxazines +oxblood +oxbloods +oxbow +oxbows +oxcart +oxcarts +oxen +oxes +oxeye +oxeyes +oxford +oxfords +oxheart +oxhearts +oxid +oxidable +oxidant +oxidants +oxidase +oxidases +oxidasic +oxidate +oxidated +oxidates +oxidating +oxidation +oxidations +oxidative +oxidatively +oxide +oxides +oxidic +oxidise +oxidised +oxidiser +oxidisers +oxidises +oxidising +oxidizable +oxidize +oxidized +oxidizer +oxidizers +oxidizes +oxidizing +oxidoreductase +oxidoreductases +oxids +oxim +oxime +oximes +oxims +oxlip +oxlips +oxo +oxpecker +oxpeckers +oxtail +oxtails +oxter +oxters +oxtongue +oxtongues +oxy +oxyacetylene +oxyacid +oxyacids oxygen +oxygenate +oxygenated +oxygenates +oxygenating +oxygenation +oxygenations +oxygenator +oxygenators +oxygenic +oxygenless +oxygens +oxyhemoglobin +oxyhemoglobins +oxyhydrogen +oxymora +oxymoron +oxymoronic +oxymoronically +oxymorons +oxyphenbutazone +oxyphenbutazones +oxyphil +oxyphile +oxyphiles +oxyphilic +oxyphils +oxysalt +oxysalts +oxysome +oxysomes +oxytetracycline +oxytetracyclines +oxytocic +oxytocics +oxytocin +oxytocins +oxytone +oxytones +oxyuriases +oxyuriasis +oy +oyer +oyers +oyes +oyesses +oyez +oyster +oystercatcher +oystercatchers +oystered +oysterer +oysterers +oystering +oysterings +oysterman +oystermen +oysters +ozocerite +ozocerites +ozokerite +ozokerites +ozonate +ozonated +ozonates +ozonating +ozonation +ozonations +ozone +ozones +ozonic +ozonide +ozonides +ozonise +ozonised +ozonises +ozonising +ozonization +ozonizations +ozonize +ozonized +ozonizer +ozonizers +ozonizes +ozonizing +ozonosphere +ozonospheres +ozonous +pa +pablum +pablums +pabular +pabulum +pabulums +pac +paca +pacas pace +paced +pacemaker +pacemakers +pacemaking +pacemakings +pacer +pacers +paces +pacesetter +pacesetters +pacesetting +pacha +pachadom +pachadoms +pachalic +pachalics +pachas +pachinko +pachinkos +pachisi +pachisis +pachouli +pachoulis +pachuco +pachucos +pachyderm +pachydermatous +pachyderms +pachysandra +pachysandras +pachytene +pachytenes +pacifiable pacific +pacifically +pacification +pacifications +pacificator +pacificators +pacificism +pacificisms +pacificist +pacificists +pacified +pacifier +pacifiers +pacifies +pacifism +pacifisms +pacifist +pacifistic +pacifistically +pacifists +pacify +pacifying +pacing pack +packabilities +packability +packable package +packaged +packager +packagers +packages +packaging +packboard +packboards +packed +packer +packers packet +packeted +packeting +packets +packhorse +packhorses +packing +packinghouse +packinghouses +packings +packly +packman +packmen +packness +packnesses +packs +packsack +packsacks +packsaddle +packsaddles +packthread +packthreads +packwax +packwaxes +pacs +pact +paction +pactions +pacts +pad +padauk +padauks +padded +padder +padders +paddies +padding +paddings paddle +paddleball +paddleballs +paddleboard +paddleboards +paddleboat +paddleboats +paddled +paddlefish +paddlefishes +paddler +paddlers +paddles +paddling +paddlings +paddock +paddocked +paddocking +paddocks +paddy +padi +padis +padishah +padishahs +padle +padles +padlock +padlocked +padlocking +padlocks +padnag +padnags +padouk +padouks +padre +padres +padri +padrone +padrones +padroni +pads +padshah +padshahs +paduasoy +paduasoys +paean +paeanism +paeanisms +paeans +paediatric +paediatrician +paediatricians +paediatrics +paedogeneses +paedogenesis +paedogenetic +paedogenetically +paedogenic +paedomorphic +paedomorphism +paedomorphisms +paedomorphoses +paedomorphosis +paella +paellas +paeon +paeons +paesan +paesani +paesano +paesanos +paesans +pagan +pagandom +pagandoms +paganise +paganised +paganises +paganish +paganising +paganism +paganisms +paganist +paganists +paganize +paganized +paganizer +paganizers +paganizes +paganizing +pagans page +pageant +pageantries +pageantry +pageants +pageboy +pageboys +paged +pager +pagers +pages +paginal +paginate +paginated +paginates +paginating +pagination +paginations +paging +pagings +pagod +pagoda +pagodas +pagods +pagurian +pagurians +pagurid +pagurids +pah +pahlavi +pahlavis +pahoehoe +pahoehoes +paid +paik +paiked +paiking +paiks +pail +pailful +pailfuls +paillard +paillards +paillette +paillettes +pails +pailsful pain +painch +painches +pained painful +painfuller +painfullest +painfully +painfulness +painfulnesses +paining +painkiller +painkillers +painkilling +painless +painlessly +painlessness +painlessnesses +pains +painstaking +painstakingly +painstakings paint +paintbrush +paintbrushes +painted painter +painterliness +painterlinesses +painterly +painters +paintier +paintiest painting +paintings +paints +paintwork +paintworks +painty pair +paired +pairing +pairings +pairs +paisa +paisan +paisana +paisanas +paisano +paisanos +paisans +paisas +paise +paisley +paisleys +pajama +pajamaed +pajamas +pakeha +pakehas +pal +palabra +palabras palace +palaced +palaces +paladin +paladins +palaestra +palaestrae +palais +palanquin +palanquins +palatabilities +palatability +palatable +palatableness +palatablenesses +palatably +palatal +palatalization +palatalizations +palatalize +palatalized +palatalizes +palatalizing +palatally +palatals +palate +palates +palatial +palatially +palatialness +palatialnesses +palatinate +palatinates +palatine +palatines +palaver +palavered +palavering +palavers +palazzi +palazzo +palazzos pale +palea +paleae +paleal +paled +paleface +palefaces +palely +paleness +palenesses +paleoanthropological +paleoanthropologies +paleoanthropologist +paleoanthropologists +paleoanthropology +paleobiologic +paleobiological +paleobiologies +paleobiologist +paleobiologists +paleobiology +paleobotanic +paleobotanical +paleobotanically +paleobotanies +paleobotanist +paleobotanists +paleobotany +paleoclimatologies +paleoclimatologist +paleoclimatologists +paleoclimatology +paleoecologic +paleoecological +paleoecologies +paleoecologist +paleoecologists +paleoecology +paleogeographic +paleogeographical +paleogeographically +paleogeographies +paleogeography +paleographer +paleographers +paleographic +paleographical +paleographically +paleographies +paleography +paleomagnetic +paleomagnetically +paleomagnetism +paleomagnetisms +paleomagnetist +paleomagnetists +paleontologic +paleontological +paleontologies +paleontologist +paleontologists +paleontology +paleopathological +paleopathologies +paleopathologist +paleopathologists +paleopathology +paleosol +paleosols +paleozoological +paleozoologies +paleozoologist +paleozoologists +paleozoology +paler +pales +palest +palestra +palestrae +palestras +palet +paletot +paletots +palets +palette +palettes +paleways +palewise +palfrey +palfreys +palier +paliest +palikar +palikars +palimonies +palimony +palimpsest +palimpsests +palindrome +palindromes +palindromic +palindromist +palindromists +paling +palingeneses +palingenesis +palingenetic +palings +palinode +palinodes +palisade +palisaded +palisades +palisading +palish +pall +palladia +palladic +palladium +palladiums +palladous +pallbearer +pallbearers +palled +pallet +palletise +palletised +palletises +palletising +palletization +palletizations +palletize +palletized +palletizer +palletizers +palletizes +palletizing +pallets +pallette +pallettes +pallia +pallial +palliasse +palliasses +palliate +palliated +palliates +palliating +palliation +palliations +palliative +palliatively +palliatives +palliator +palliators +pallid +pallidly +pallidness +pallidnesses +pallier +palliest +palling +pallium +palliums +pallor +pallors +palls +pally +palm +palmar +palmary +palmate +palmated +palmately +palmation +palmations +palmed +palmer +palmers +palmerworm +palmerworms +palmette +palmettes +palmetto +palmettoes +palmettos +palmier +palmiest +palming +palmist +palmistries +palmistry +palmists +palmitate +palmitates +palmitin +palmitins +palmlike +palms +palmy +palmyra +palmyras +palomino +palominos +palooka +palookas +paloverde +paloverdes +palp +palpabilities +palpability +palpable +palpably +palpal +palpate +palpated +palpates +palpating +palpation +palpations +palpator +palpators +palpebra +palpebrae +palpebral +palpi +palpitant +palpitate +palpitated +palpitates +palpitating +palpitation +palpitations +palps +palpus +pals +palsgrave +palsgraves +palship +palships +palsied +palsies +palsy +palsying +palter +paltered +palterer +palterers +paltering +palters +paltrier +paltriest +paltrily +paltriness +paltrinesses +paltry +paludal +paludism +paludisms +paly +palynologic +palynological +palynologically +palynologies +palynologist +palynologists +palynology +pam +pampa +pampas +pampean +pampeans +pamper +pampered +pamperer +pamperers +pampering +pampero +pamperos +pampers +pamphlet +pamphleteer +pamphleteered +pamphleteering +pamphleteers +pamphlets +pams pan +panacea +panacean +panaceas +panache +panaches +panada +panadas +panama +panamas +panatela +panatelas +panbroil +panbroiled +panbroiling +panbroils pancake +pancaked +pancakes +pancaking +pancetta +pancettas +panchax +panchaxes +panchromatic +pancratium +pancratiums +pancreas +pancreases +pancreatectomies +pancreatectomized +pancreatectomy +pancreatic +pancreatin +pancreatins +pancreatitides +pancreatitis +pancreozymin +pancreozymins +pancytopenia +pancytopenias panda +pandani +pandanus +pandanuses +pandas +pandect +pandects +pandemic +pandemics +pandemonium +pandemoniums +pander +pandered +panderer +panderers +pandering +panders +pandied +pandies +pandit +pandits +pandoor +pandoors +pandora +pandoras +pandore +pandores +pandour +pandours +pandowdies +pandowdy +pandura +panduras +pandy +pandying +pane +paned +panegyric +panegyrical +panegyrically +panegyrics +panegyrist +panegyrists +panel +paneled +paneling +panelings +panelist +panelists +panelled +panelling +panellings +panels +panes +panetela +panetelas +panettone +panettones +panfish +panfishes +panfried +panfries +panfry +panfrying +panful +panfuls +pang +panga +pangas +panged +pangen +pangene +pangenes +pangeneses +pangenesis +pangenetic +pangens +panging +pangolin +pangolins +pangs +panhandle +panhandled +panhandler +panhandlers +panhandles +panhandling +panhuman panic +panicked +panickier +panickiest +panicking +panicky +panicle +panicled +panicles +panics +paniculate +panicum +panicums +panier +paniers +panjandra +panjandrum +panjandrums +panleukopenia +panleukopenias +panmictic +panmixes +panmixia +panmixias +panmixis +panmixises +panne +panned +pannes +pannier +panniers +pannikin +pannikins +panning +panocha +panochas +panoche +panoches +panoplied +panoplies +panoply +panoptic +panorama +panoramas +panoramic +panoramically +panpipe +panpipes +pans +pansexual +pansexualities +pansexuality +pansies +pansophies +pansophy +pansy +pant +pantalets +pantalettes +pantalone +pantalones +pantaloon +pantaloons +pantdress +pantdresses +pantechnicon +pantechnicons +panted +pantheism +pantheisms +pantheist +pantheistic +pantheistical +pantheistically +pantheists +pantheon +pantheons +panther +panthers +pantie +panties +pantile +pantiled +pantiles +panting +pantisocracies +pantisocracy +pantisocratic +pantisocratical +pantisocratist +pantisocratists +panto +pantofle +pantofles +pantograph +pantographic +pantographs +pantomime +pantomimed +pantomimes +pantomimic +pantomiming +pantomimist +pantomimists +pantos +pantothenate +pantothenates +pantoum +pantoums +pantries +pantropic +pantropical +pantry +pantryman +pantrymen +pants +pantsuit +pantsuited +pantsuits +panty +pantyhose +pantywaist +pantywaists +panzer +panzers +pap +papa +papacies +papacy +papain +papains +papal +papally +paparazzi +paparazzo +papas +papaverine +papaverines +papaw +papaws +papaya +papayan +papayas paper +paperback +paperbacked +paperbacks +paperboard +paperboards +paperbound +paperbounds +paperboy +paperboys +papered +paperer +paperers +paperhanger +paperhangers +paperhanging +paperhangings +paperiness +paperinesses +papering +paperless +papermaker +papermakers +papermaking +papermakings +papers +paperweight +paperweights paperwork +paperworks +papery +papeterie +papeteries +paphian +paphians +papilionaceous +papilla +papillae +papillar +papillary +papillate +papilloma +papillomas +papillomata +papillomatous +papillomavirus +papillomaviruses +papillon +papillons +papillose +papillote +papillotes +papist +papistic +papistries +papistry +papists +papoose +papooses +papovavirus +papovaviruses +pappi +pappier +pappies +pappiest +pappoose +pappooses +pappose +pappous +pappus +pappy +paprica +papricas +paprika +paprikas +paps +papula +papulae +papular +papule +papules +papulose +papyral +papyri +papyrian +papyrine +papyrologies +papyrologist +papyrologists +papyrology +papyrus +papyruses +par +para +parabioses +parabiosis +parabiotic +parabiotically +parable +parables +parabola +parabolas +parabolic +parabolically +paraboloid +paraboloidal +paraboloids +parachor +parachors +parachute +parachuted +parachutes +parachutic +parachuting +parachutist +parachutists +parade +paraded +parader +paraders +parades +paradichlorobenzene +paradichlorobenzenes +paradiddle +paradiddles +paradigm +paradigmatic +paradigmatically +paradigms +parading +paradisaic +paradisaical +paradisaically +paradisal +paradise +paradises +paradisiac +paradisiacal +paradisiacally +paradisial +paradisical +parador +paradores +paradors +parados +paradoses +paradox +paradoxes +paradoxical +paradoxicalities +paradoxicality +paradoxically +paradoxicalness +paradoxicalnesses +paradrop +paradropped +paradropping +paradrops +paraesthesia +paraesthesias +paraffin +paraffined +paraffinic +paraffining +paraffins +paraform +paraformaldehyde +paraformaldehydes +paraforms +parageneses +paragenesis +paragenetic +paragenetically +paragoge +paragoges +paragon +paragoned +paragoning +paragons paragraph +paragraphed +paragrapher +paragraphers +paragraphic +paragraphing +paragraphs +parainfluenza +parainfluenzas +parajournalism +parajournalisms +parakeet +parakeets +parakite +parakites +paralanguage +paralanguages +paraldehyde +paraldehydes +paralegal +paralegals +paralinguistic +paralinguistics +parallactic +parallax +parallaxes parallel +paralleled +parallelepiped +parallelepipeds +paralleling +parallelism +parallelisms +parallelled +parallelling +parallelogram +parallelograms +parallels +paralogism +paralogisms +paralyse +paralysed +paralyses +paralysing +paralysis +paralytic +paralytically +paralytics +paralyzation +paralyzations +paralyze +paralyzed +paralyzer +paralyzers +paralyzes +paralyzing +paralyzingly +paramagnet +paramagnetic +paramagnetically +paramagnetism +paramagnetisms +paramagnets +paramecia +paramecium +parameciums +paramedic +paramedical +paramedicals +paramedics +parament +paramenta +paraments +parameter +parameterization +parameterizations +parameterize +parameterized +parameterizes +parameterizing +parameters +parametric +parametrically +parametrization +parametrizations +parametrize +parametrized +parametrizes +parametrizing +paramilitary +paramnesia +paramnesias +paramo +paramos +paramount +paramountcies +paramountcy +paramountly +paramounts +paramour +paramours +paramylum +paramylums +paramyxovirus +paramyxoviruses +parang +parangs +paranoea +paranoeas +paranoia +paranoiac +paranoiacs +paranoias +paranoic +paranoically +paranoics +paranoid +paranoidal +paranoids +paranormal +paranormalities +paranormality +paranormally +paranormals +paranymph +paranymphs +parapet +parapeted +parapets +paraph +paraphernalia +paraphrasable +paraphrase +paraphrased +paraphraser +paraphrasers +paraphrases +paraphrasing +paraphrastic +paraphrastically +paraphs +paraphyses +paraphysis +paraplegia +paraplegias +paraplegic +paraplegics +parapodia +parapodial +parapodium +paraprofessional +paraprofessionals +parapsychological +parapsychologies +parapsychologist +parapsychologists +parapsychology +paraquat +paraquats +paraquet +paraquets +pararosaniline +pararosanilines +paras +parasailing +parasailings +parasang +parasangs +parasexual +parasexualities +parasexuality +parashah +parashioth +parashoth +parasite +parasites +parasitic +parasitical +parasitically +parasiticidal +parasiticide +parasiticides +parasitise +parasitised +parasitises +parasitising +parasitism +parasitisms +parasitization +parasitizations +parasitize +parasitized +parasitizes +parasitizing +parasitoid +parasitoids +parasitologic +parasitological +parasitologically +parasitologies +parasitologist +parasitologists +parasitology +parasitoses +parasitosis +parasol +parasols +parasympathetic +parasympathetics +parasympathomimetic +parasyntheses +parasynthesis +parasynthetic +paratactic +paratactical +paratactically +parataxes +parataxis +parathion +parathions +parathormone +parathormones +parathyroid +parathyroidectomies +parathyroidectomized +parathyroidectomy +parathyroids +paratroop +paratrooper +paratroopers +paratroops +paratyphoid +paratyphoids +paravane +paravanes +parawing +parawings +parazoan +parazoans +parboil +parboiled +parboiling +parboils +parbuckle +parbuckled +parbuckles +parbuckling parcel +parceled +parceling +parcelled +parcelling +parcels +parcenaries +parcenary +parcener +parceners +parch +parched +parches +parchesi +parchesis +parching +parchisi +parchisis +parchment +parchments +pard +pardah +pardahs +pardee +pardi +pardie +pardine +pardner +pardners pardon +pardonable +pardonableness +pardonablenesses +pardonably +pardoned +pardoner +pardoners +pardoning +pardons +pards +pardy +pare +parecism +parecisms +pared +paregoric +paregorics +pareira +pareiras +parenchyma +parenchymal +parenchymas +parenchymata +parenchymatous parent +parentage +parentages +parental +parentally +parented +parenteral +parenterally +parentheses +parenthesis +parenthesize +parenthesized +parenthesizes +parenthesizing +parenthetic +parenthetical +parenthetically +parenthood +parenthoods +parenting +parentings +parentless +parents +pareo +pareos +parer +parerga +parergon +parers +pares +pareses +paresis +paresthesia +paresthesias +paresthetic +paretic +paretics +pareu +pareus +pareve +parfait +parfaits +parfleche +parfleches +parflesh +parfleshes +parfocal +parfocalities +parfocality +parfocalize +parfocalized +parfocalizes +parfocalizing +parge +parged +parges +parget +pargeted +pargeting +pargets +pargetted +pargetting +parging +pargings +pargo +pargos +pargyline +pargylines +parhelia +parhelic +parhelion +pariah +pariahs +parian +parians +paries +parietal +parietals +parietes +parimutuel +paring +parings +paris +parises +parish +parishes +parishioner +parishioners +parities +parity park +parka +parkas +parked +parker +parkers parking +parkings +parkinsonian +parkinsonism +parkinsonisms +parkland +parklands +parklike +parks +parkway +parkways +parlance +parlances +parlando +parlante +parlay +parlayed +parlaying +parlays +parle +parled +parles +parley +parleyed +parleyer +parleyers +parleying +parleys +parliament +parliamentarian +parliamentarians +parliamentary +parliaments +parling +parlor +parlors +parlour +parlours +parlous +parlously +parmigiana +parmigiano +parochial +parochialism +parochialisms +parochially +parodic +parodied +parodies +parodist +parodistic +parodists +parodoi +parodos +parody +parodying +parol +parole +paroled +parolee +parolees +paroles +paroling +parols +paronomasia +paronomasias +paronomastic +paronym +paronymous +paronyms +paroquet +paroquets +parotic +parotid +parotids +parotitis +parotitises +parotoid +parotoids +parous +paroxysm +paroxysmal +paroxysms +parquet +parqueted +parqueting +parquetries +parquetry +parquets +parr +parrakeet +parrakeets +parral +parrals +parred +parrel +parrels +parricidal +parricide +parricides +parridge +parridges +parried +parries +parring +parritch +parritches +parroket +parrokets parrot +parroted +parroter +parroters +parroting +parrots +parroty +parrs +parry +parrying +pars +parsable +parse +parsec +parsecs +parsed +parser +parsers +parses +parsimonies +parsimonious +parsimoniously +parsimony +parsing +parsley +parsleyed +parsleys +parslied +parsnip +parsnips +parson +parsonage +parsonages +parsonic +parsons part -part-time +partake +partaken +partaker +partakers +partakes +partaking +partan +partans +parted +parterre +parterres +parthenocarpic +parthenocarpies +parthenocarpy +parthenogeneses +parthenogenesis +parthenogenetic +parthenogenetically +partial +partialities +partiality +partially +partials +partibilities +partibility +partible +participant +participants participate +participated +participates +participating +participation +participational +participations +participative +participator +participators +participatory +participial +participially +participle +participles +particle +particleboard +particleboards +particles particular +particularise +particularised +particularises +particularising +particularism +particularisms +particularist +particularistic +particularists +particularities +particularity +particularization +particularizations +particularize +particularized +particularizes +particularizing +particularly +particulars +particulate +particulates +partied +partier +partiers +parties +parting +partings +partisan +partisanly +partisans +partisanship +partisanships +partita +partitas +partite +partition +partitioned +partitioner +partitioners +partitioning +partitionist +partitionists +partitions +partitive +partitively +partizan +partizans +partlet +partlets partly partner +partnered +partnering +partnerless +partners +partnership +partnerships +parton +partons +partook +partridge +partridgeberries +partridgeberry +partridges +parts +parturient +parturients +parturition +parturitions +partway party +partyer +partyers +partying +parura +paruras +parure +parures +parve +parvenu +parvenue +parvenus +parvis +parvise +parvises +parvo +parvolin +parvolins +parvos +parvovirus +parvoviruses +pas +pascal +pascals +paschal +paschals +pase +paseo +paseos +pases +pash +pasha +pashadom +pashadoms +pashalic +pashalics +pashalik +pashaliks +pashas +pashed +pashes +pashing +pasqueflower +pasqueflowers +pasquil +pasquils +pasquinade +pasquinaded +pasquinades +pasquinading pass +passable +passably +passacaglia +passacaglias +passade +passades +passado +passadoes +passados passage +passaged +passages +passageway +passageways +passagework +passageworks +passaging +passant +passband +passbands +passbook +passbooks +passe +passed +passee +passel +passels +passementerie +passementeries passenger +passengers +passer passerby +passerine +passerines +passers +passersby +passes +passible +passim +passing +passings +passion +passional +passionate +passionately +passionateness +passionatenesses +passionflower +passionflowers +passionless +passions +passivate +passivated +passivates +passivating +passivation +passivations passive +passively +passiveness +passivenesses +passives +passivism +passivisms +passivist +passivists +passivities +passivity +passkey +passkeys +passless +passover +passovers passport +passports +passus +passuses +password +passwords past +pasta +pastas +paste +pasteboard +pasteboards +pasted +pastedown +pastedowns +pastel +pastelist +pastelists +pastellist +pastellists +pastels +paster +pastern +pasterns +pasters +pastes +pasteup +pasteups +pasteurise +pasteurised +pasteurises +pasteurising +pasteurization +pasteurizations +pasteurize +pasteurized +pasteurizer +pasteurizers +pasteurizes +pasteurizing +pasticci +pasticcio +pasticcios +pastiche +pastiches +pasticheur +pasticheurs +pastie +pastier +pasties +pastiest +pastil +pastille +pastilles +pastils +pastime +pastimes +pastina +pastinas +pastiness +pastinesses +pasting +pastis +pastises +pastless +pastness +pastnesses +pastor +pastoral +pastorale +pastorales +pastoralism +pastoralisms +pastoralist +pastoralists +pastorally +pastoralness +pastoralnesses +pastorals +pastorate +pastorates +pastored +pastoring +pastors +pastorship +pastorships +pastrami +pastramis +pastries +pastromi +pastromis +pastry +pasts +pasturage +pasturages +pastural +pasture +pastured +pastureland +pasturelands +pasturer +pasturers +pastures +pasturing +pasty +pat +pataca +patacas +patagia +patagial +patagium +patamar +patamars +patch +patchboard +patchboards +patched +patcher +patchers +patches +patchier +patchiest +patchily +patchiness +patchinesses +patching +patchouli +patchoulies +patchoulis +patchouly +patchwork +patchworks +patchy +pate +pated +patella +patellae +patellar +patellas +patelliform +paten +patencies +patency +patens patent +patentabilities +patentability +patentable +patented +patentee +patentees +patenting +patently +patentor +patentors +patents +pater +paterfamilias +paternal +paternalism +paternalisms +paternalist +paternalistic +paternalistically +paternalists +paternally +paternities +paternity +paternoster +paternosters +paters +pates path +pathbreaking +pathetic +pathetical +pathetically +pathfinder +pathfinders +pathfinding +pathfindings +pathless +pathlessness +pathlessnesses +pathobiologies +pathobiology +pathogen +pathogeneses +pathogenesis +pathogenetic +pathogenic +pathogenicities +pathogenicity +pathogens +pathognomonic +pathologic +pathological +pathologically +pathologies +pathologist +pathologists +pathology +pathophysiologic +pathophysiological +pathophysiologies +pathophysiology +pathos +pathoses +paths +pathway +pathways patience +patiences patient +patienter +patientest +patiently +patients +patin +patina +patinae +patinas +patinate +patinated +patinates +patinating +patination +patinations +patine +patined +patines +patining +patinize +patinized +patinizes +patinizing +patins +patio +patios +patisserie +patisseries +patissier +patissiers +patly +patness +patnesses +patois +patresfamilias +patriarch +patriarchal +patriarchate +patriarchates +patriarchies +patriarchs +patriarchy +patrician +patricians +patriciate +patriciates +patricidal +patricide +patricides +patrilineal +patrimonial +patrimonies +patrimony +patriot +patriotic +patriotically +patriotism +patriotisms +patriots +patristic +patristical +patristics +patrol +patrolled +patroller +patrollers +patrolling +patrolman +patrolmen +patrols +patron +patronage +patronages +patronal +patroness +patronesses +patronise +patronised +patronises +patronising +patronization +patronizations +patronize +patronized +patronizes +patronizing +patronizingly +patronly +patrons +patronymic +patronymics +patroon +patroons +pats +patsies +patsy +pattamar +pattamars +patted +pattee +patten +pattens +patter +pattered +patterer +patterers +pattering pattern +patterned +patterning +patternings +patternless +patterns +patters +pattie +patties +patting +patty +pattypan +pattypans +patulent +patulous +paty +patzer +patzers +paucities +paucity +paughty +pauldron +pauldrons +paulin +paulins +paulownia +paulownias +paunch +paunched +paunches +paunchier +paunchiest +paunchiness +paunchinesses +paunchy +pauper +paupered +paupering +pauperism +pauperisms +pauperize +pauperized +pauperizes +pauperizing +paupers +paupiette +paupiettes +pausal pause +paused +pauser +pausers +pauses +pausing +pavan +pavane +pavanes +pavans +pave +paved +paveed pavement +pavements +paver +pavers +paves +pavid +pavilion +pavilioned +pavilioning +pavilions +pavillon +pavillons +pavin +paving +pavings +pavins +pavior +paviors +paviour +paviours +pavis +pavise +paviser +pavisers +pavises +pavlova +pavlovas +pavonine +paw +pawed +pawer +pawers +pawing +pawkier +pawkiest +pawkily +pawky +pawl +pawls +pawn +pawnable +pawnage +pawnages +pawnbroker +pawnbrokers +pawnbroking +pawnbrokings +pawned +pawnee +pawnees +pawner +pawners +pawning +pawnor +pawnors +pawns +pawnshop +pawnshops +pawpaw +pawpaws +paws +pax +paxes +paxwax +paxwaxes pay -pc +payable +payables +payably +payback +paybacks +paycheck +paychecks +payday +paydays +payed +payee +payees +payer +payers +paygrade +paygrades +paying +payload +payloads +paymaster +paymasters +payment +payments +paynim +paynims +payoff +payoffs +payola +payolas +payor +payors +payout +payouts +payroll +payrolls +pays +pazazz +pazazzes pe pea peace +peaceable +peaceableness +peaceablenesses +peaceably +peaced peaceful +peacefuller +peacefullest +peacefully +peacefulness +peacefulnesses +peacekeeper +peacekeepers +peacekeeping +peacekeepings +peacemaker +peacemakers +peacemaking +peacemakings +peacenik +peaceniks +peaces +peacetime +peacetimes peach +peached +peacher +peachers +peaches +peachier +peachiest +peaching +peachy +peacing +peacoat +peacoats +peacock +peacocked +peacockier +peacockiest +peacocking +peacockish +peacocks +peacocky +peafowl +peafowls +peag +peage +peages +peags +peahen +peahens +peak +peaked +peakedness +peakednesses +peakier +peakiest +peaking +peakish +peakless +peaklike +peaks +peaky +peal +pealed +pealike +pealing +peals +pean +peans +peanut +peanuts pear +pearl +pearlash +pearlashes +pearled +pearler +pearlers +pearlescence +pearlescences +pearlescent +pearlier +pearliest +pearling +pearlite +pearlites +pearlitic +pearlized +pearls +pearly +pearmain +pearmains +pears +peart +pearter +peartest +peartly +peas +peasant +peasantries +peasantry +peasants +peascod +peascods +pease +peasecod +peasecods +peasen +peases +peashooter +peashooters +peat +peatier +peatiest +peats +peaty +peavey +peaveys +peavies +peavy +pebble +pebbled +pebbles +pebblier +pebbliest +pebbling +pebbly +pec +pecan +pecans +peccable +peccadillo +peccadilloes +peccadillos +peccancies +peccancy +peccant +peccantly +peccaries +peccary +peccavi +peccavis +pech +pechan +pechans +peched +peching +pechs +peck +pecked +pecker +peckers +peckerwood +peckerwoods +peckier +peckiest +pecking +peckish +pecks +pecky +pecorini +pecorino +pecorinos +pecs +pectase +pectases +pectate +pectates +pecten +pectens +pectic +pectin +pectinaceous +pectinate +pectination +pectinations +pectines +pectinesterase +pectinesterases +pectins +pectize +pectized +pectizes +pectizing +pectoral +pectorals +peculate +peculated +peculates +peculating +peculation +peculations +peculator +peculators +peculia +peculiar +peculiarities +peculiarity +peculiarly +peculiars +peculium +pecuniarily +pecuniary +ped +pedagog +pedagogic +pedagogical +pedagogically +pedagogics +pedagogies +pedagogs +pedagogue +pedagogues +pedagogy +pedal +pedaled +pedalfer +pedalfers +pedalier +pedaliers +pedaling +pedalled +pedalling +pedalo +pedalos +pedals +pedant +pedantic +pedantically +pedantries +pedantry +pedants +pedate +pedately +peddle +peddled +peddler +peddleries +peddlers +peddlery +peddles +peddling +pederast +pederastic +pederasties +pederasts +pederasty +pedes +pedestal +pedestaled +pedestaling +pedestalled +pedestalling +pedestals pedestrian +pedestrianism +pedestrianisms +pedestrians +pediatric +pediatrician +pediatricians +pediatrics +pediatrist +pediatrists +pedicab +pedicabs +pedicel +pedicellate +pedicels +pedicle +pedicled +pedicles +pediculate +pediculates +pediculoses +pediculosis +pediculosises +pediculous +pedicure +pedicured +pedicures +pedicuring +pedicurist +pedicurists +pediform +pedigree +pedigreed +pedigrees +pediment +pedimental +pedimented +pediments +pedipalp +pedipalps +pedlar +pedlaries +pedlars +pedlary +pedler +pedleries +pedlers +pedlery +pedocal +pedocalic +pedocals +pedogeneses +pedogenesis +pedogenetic +pedogenic +pedologic +pedological +pedologies +pedologist +pedologists +pedology +pedometer +pedometers +pedophile +pedophiles +pedophilia +pedophiliac +pedophilias +pedophilic +pedro +pedros +peds +peduncle +peduncled +peduncles +peduncular +pedunculate +pedunculated +pee +peebeen +peebeens +peed +peeing +peek +peekaboo +peekaboos +peeked +peeking +peeks +peel +peelable +peeled +peeler +peelers +peeling +peelings +peels +peen +peened +peening +peens +peep +peeped +peeper +peepers +peephole +peepholes +peeping +peeps +peepshow +peepshows +peepul +peepuls +peer +peerage +peerages +peered +peeress +peeresses +peerie +peeries +peering +peerless +peerlessly +peers +peery +pees +peesweep +peesweeps +peetweet +peetweets +peeve +peeved +peeves +peeving +peevish +peevishly +peevishness +peevishnesses +peewee +peewees +peewit +peewits +peg +pegboard +pegboards +pegbox +pegboxes +pegged +pegging +pegless +peglike +pegmatite +pegmatites +pegmatitic +pegs +peh +pehs +peignoir +peignoirs +pein +peined +peining +peins +peise +peised +peises +peising +pejorative +pejoratively +pejoratives +pekan +pekans +peke +pekes +pekin +pekins +pekoe +pekoes +pelage +pelages +pelagial +pelagic +pelargonium +pelargoniums +pele +pelecypod +pelecypods +pelerine +pelerines +peles +pelf +pelfs +pelican +pelicans +pelisse +pelisses +pelite +pelites +pelitic +pellagra +pellagras +pellagrin +pellagrins +pellagrous +pellet +pelletal +pelleted +pelleting +pelletise +pelletised +pelletises +pelletising +pelletization +pelletizations +pelletize +pelletized +pelletizer +pelletizers +pelletizes +pelletizing +pellets +pellicle +pellicles +pellitories +pellitory +pellmell +pellmells +pellucid +pellucidly +pelmet +pelmets +pelon +peloria +pelorian +pelorias +peloric +pelorus +peloruses +pelota +pelotas +pelt +peltast +peltasts +peltate +pelted +pelter +peltered +peltering +pelters +pelting +peltries +peltry +pelts +pelves +pelvic +pelvics +pelvis +pelvises +pelycosaur +pelycosaurs +pembina +pembinas +pemican +pemicans +pemmican +pemmicans +pemoline +pemolines +pemphigus +pemphiguses +pemphix +pemphixes pen +penal +penalise +penalised +penalises +penalising +penalities +penality +penalization +penalizations +penalize +penalized +penalizes +penalizing +penally +penalties +penalty +penance +penanced +penances +penancing +penang +penangs +penates pence +pencel +pencels +penchant +penchants pencil +penciled +penciler +pencilers +penciling +pencilings +pencilled +pencilling +pencillings +pencils +pend +pendant +pendants +pended +pendencies +pendency +pendent +pendentive +pendentives +pendents +pending +pends +pendular +pendulous +pendulousness +pendulousnesses +pendulum +pendulums +peneplain +peneplains +peneplane +peneplanes +penes +penetrabilities +penetrability +penetrable +penetralia +penetrance +penetrances +penetrant +penetrants +penetrate +penetrated +penetrates +penetrating +penetratingly +penetration +penetrations +penetrative +penetrometer +penetrometers +pengo +pengos +penguin +penguins +penholder +penholders +penial +penicil +penicillamine +penicillamines +penicillate +penicillia +penicillin +penicillinase +penicillinases +penicillins +penicillium +penicils +penile +peninsula +peninsular +peninsulas +penis +penises +penitence +penitences +penitent +penitential +penitentially +penitentiaries +penitentiary +penitently +penitents +penknife +penknives +penlight +penlights +penlite +penlites +penman +penmanship +penmanships +penmen +penna +pennae +penname +pennames +pennant +pennants +pennate +pennated +penne +penned +penner +penners +penni +pennia +pennies +penniless +pennine +pennines +penning +pennis +pennon +pennoncel +pennoncels +pennoned +pennons penny +pennycress +pennycresses +pennyroyal +pennyroyals +pennyweight +pennyweights +pennywhistle +pennywhistles +pennywort +pennyworth +pennyworths +pennyworts +penoche +penoches +penological +penologies +penologist +penologists +penology +penoncel +penoncels +penpoint +penpoints +pens +pensee +pensees +pensil +pensile +pensils pension +pensionable +pensionaries +pensionary +pensione +pensioned +pensioner +pensioners +pensiones +pensioning +pensionless +pensions +pensive +pensively +pensiveness +pensivenesses +penstemon +penstemons +penster +pensters +penstock +penstocks +pent +pentachlorophenol +pentachlorophenols +pentacle +pentacles +pentad +pentads +pentagon +pentagonal +pentagonally +pentagonals +pentagons +pentagram +pentagrams +pentahedra +pentahedral +pentahedron +pentahedrons +pentamerous +pentameter +pentameters +pentamidine +pentamidines +pentane +pentanes +pentangle +pentangles +pentanol +pentanols +pentapeptide +pentapeptides +pentaploid +pentaploidies +pentaploids +pentaploidy +pentarch +pentarchies +pentarchs +pentarchy +pentathlete +pentathletes +pentathlon +pentathlons +pentatonic +pentavalent +pentazocine +pentazocines +pentene +pentenes +penthouse +penthouses +pentlandite +pentlandites +pentobarbital +pentobarbitals +pentobarbitone +pentobarbitones +pentode +pentodes +pentomic +pentosan +pentosans +pentose +pentoses +pentoxide +pentoxides +pentstemon +pentstemons +pentyl +pentylenetetrazol +pentylenetetrazols +pentyls +penuche +penuches +penuchi +penuchis +penuchle +penuchles +penuckle +penuckles +penult +penultima +penultimas +penultimate +penultimately +penults +penumbra +penumbrae +penumbral +penumbras +penuries +penurious +penuriously +penuriousness +penuriousnesses +penury +peon +peonage +peonages +peones +peonies +peonism +peonisms +peons +peony people +peopled +peoplehood +peoplehoods +peopleless +peopler +peoplers +peoples +peopling +pep +peperomia +peperomias +peperoni +peperonis +pepla +peplos +peploses +peplum +peplumed +peplums +peplus +pepluses +pepo +peponida +peponidas +peponium +peponiums +pepos +pepped pepper +pepperbox +pepperboxes +peppercorn +peppercorns +peppered +pepperer +pepperers +peppergrass +peppergrasses +pepperiness +pepperinesses +peppering +peppermint +peppermints +pepperminty +pepperoni +pepperonis +peppers +peppertree +peppertrees +peppery +peppier +peppiest +peppily +peppiness +peppinesses +pepping +peppy +peps +pepsin +pepsine +pepsines +pepsinogen +pepsinogens +pepsins +peptic +peptics +peptid +peptidase +peptidases +peptide +peptides +peptidic +peptidoglycan +peptidoglycans +peptids +peptize +peptized +peptizer +peptizers +peptizes +peptizing +peptone +peptones +peptonic per +peracid +peracids +peradventure +peradventures +perambulate +perambulated +perambulates +perambulating +perambulation +perambulations +perambulator +perambulators +perambulatory +perborate +perborates +percale +percales +percaline +percalines +perceivable +perceivably +perceive +perceived +perceiver +perceivers +perceives +perceiving percent percentage +percentages +percentile +percentiles +percents +percept +perceptibilities +perceptibility +perceptible +perceptibly +perception +perceptional +perceptions +perceptive +perceptively +perceptiveness +perceptivenesses +perceptivities +perceptivity +percepts +perceptual +perceptually +perch +perchance +perched +percher +perchers +perches +perching +perchlorate +perchlorates +perchloroethylene +perchloroethylenes +percipience +percipiences +percipient +percipiently +percipients +percoid +percoids +percolate +percolated +percolates +percolating +percolation +percolations +percolator +percolators +percuss +percussed +percusses +percussing +percussion +percussionist +percussionists +percussions +percussive +percussively +percussiveness +percussivenesses +percutaneous +percutaneously +perdie +perdition +perditions +perdu +perdue +perdues +perdurabilities +perdurability +perdurable +perdurably +perdure +perdured +perdures +perduring +perdus +perdy +perea +peregrin +peregrinate +peregrinated +peregrinates +peregrinating +peregrination +peregrinations +peregrine +peregrines +peregrins +pereia +pereion +pereiopod +pereiopods +peremptorily +peremptoriness +peremptorinesses +peremptory +perennate +perennated +perennates +perennating +perennation +perennations +perennial +perennially +perennials +pereon +pereopod +pereopods +perestroika +perestroikas perfect +perfecta +perfectas +perfected +perfecter +perfecters +perfectest +perfectibilities +perfectibility +perfectible +perfecting +perfection +perfectionism +perfectionisms +perfectionist +perfectionistic +perfectionists +perfections +perfective +perfectively +perfectiveness +perfectivenesses +perfectives +perfectivities +perfectivity +perfectly +perfectness +perfectnesses +perfecto +perfectos +perfects +perfervid +perfidies +perfidious +perfidiously +perfidiousness +perfidiousnesses +perfidy +perfoliate +perforate +perforated +perforates +perforating +perforation +perforations +perforator +perforators +perforce perform +performabilities +performability +performable performance +performances +performative +performatives +performatory +performed performer +performers +performing +performs perfume +perfumed +perfumer +perfumeries +perfumers +perfumery +perfumes +perfuming +perfunctorily +perfunctoriness +perfunctorinesses +perfunctory +perfusate +perfusates +perfuse +perfused +perfuses +perfusing +perfusion +perfusionist +perfusionists +perfusions +pergola +pergolas perhaps +perhapses +peri +perianth +perianths +periapt +periapts +periblem +periblems +pericardia +pericardial +pericarditides +pericarditis +pericardium +pericarp +pericarps +perichondral +perichondria +perichondrium +pericopae +pericope +pericopes +pericrania +pericranial +pericranium +pericycle +pericycles +pericyclic +periderm +periderms +peridia +peridial +peridium +peridot +peridotic +peridotite +peridotites +peridotitic +peridots +perigeal +perigean +perigee +perigees +perigon +perigons +perigynies +perigynous +perigyny +perihelia +perihelial +perihelion +perikarya +perikaryal +perikaryon +peril +periled +periling +perilla +perillas +perilled +perilling +perilous +perilously +perilousness +perilousnesses +perils +perilune +perilunes +perilymph +perilymphs +perimeter +perimeters +perimysia +perimysium +perinatal +perinatally +perinea +perineal +perineum +perineuria +perineurium period +periodic +periodical +periodically +periodicals +periodicities +periodicity +periodid +periodids +periodization +periodizations +periodontal +periodontally +periodontics +periodontist +periodontists +periodontologies +periodontology +periods +perionychia +perionychium +periostea +periosteal +periosteum +periostites +periostitides +periostitis +periostitises +periotic +peripatetic +peripatetically +peripatetics +peripatus +peripatuses +peripeteia +peripeteias +peripeties +peripety +peripheral +peripherally +peripherals +peripheries +periphery +periphrases +periphrasis +periphrastic +periphrastically +periphytic +periphyton +periphytons +periplast +periplasts +peripter +peripters +perique +periques +peris +perisarc +perisarcs +periscope +periscopes +periscopic +perish +perishabilities +perishability +perishable +perishables +perished +perishes +perishing +perissodactyl +perissodactyls +peristalses +peristalsis +peristaltic +peristome +peristomes +peristomial +peristyle +peristyles +perithecia +perithecial +perithecium +peritonea +peritoneal +peritoneally +peritoneum +peritoneums +peritonites +peritonitides +peritonitis +peritonitises +peritrichous +peritrichously +periwig +periwigged +periwigs +periwinkle +periwinkles +perjure +perjured +perjurer +perjurers +perjures +perjuries +perjuring +perjurious +perjuriously +perjury +perk +perked +perkier +perkiest +perkily +perkiness +perkinesses +perking +perkish +perks +perky +perlite +perlites +perlitic +perm +permafrost +permafrosts +permanence +permanences +permanencies +permanency permanent +permanently +permanentness +permanentnesses +permanents +permanganate +permanganates +permeabilities +permeability +permeable +permeant +permease +permeases +permeate +permeated +permeates +permeating +permeation +permeations +permeative +permed +permethrin +permethrins +permillage +permillages +perming +permissibilities +permissibility +permissible +permissibleness +permissiblenesses +permissibly permission +permissions +permissive +permissively +permissiveness +permissivenesses permit +permits +permitted +permittee +permittees +permitter +permitters +permitting +permittivities +permittivity +perms +permutable +permutation +permutational +permutations +permute +permuted +permutes +permuting +pernicious +perniciously +perniciousness +perniciousnesses +pernickety +peroneal +peroral +perorally +perorate +perorated +perorates +perorating +peroration +perorational +perorations +perovskite +perovskites +peroxid +peroxidase +peroxidases +peroxide +peroxided +peroxides +peroxidic +peroxiding +peroxids +peroxisomal +peroxisome +peroxisomes +peroxy +perpend +perpended +perpendicular +perpendicularities +perpendicularity +perpendicularly +perpendiculars +perpending +perpends +perpent +perpents +perpetrate +perpetrated +perpetrates +perpetrating +perpetration +perpetrations +perpetrator +perpetrators +perpetual +perpetually +perpetuate +perpetuated +perpetuates +perpetuating +perpetuation +perpetuations +perpetuator +perpetuators +perpetuities +perpetuity +perphenazine +perphenazines +perplex +perplexed +perplexedly +perplexes +perplexing +perplexities +perplexity +perquisite +perquisites +perries +perron +perrons +perry +persalt +persalts +perse +persecute +persecuted +persecutee +persecutees +persecutes +persecuting +persecution +persecutions +persecutive +persecutor +persecutors +persecutory +perses +perseverance +perseverances +perseverate +perseverated +perseverates +perseverating +perseveration +perseverations +persevere +persevered +perseveres +persevering +perseveringly +persiflage +persiflages +persimmon +persimmons +persist +persisted +persistence +persistences +persistencies +persistency +persistent +persistently +persister +persisters +persisting +persists +persnicketiness +persnicketinesses +persnickety person +persona +personable +personableness +personablenesses +personae +personage +personages personal +personalise +personalised +personalises +personalising +personalism +personalisms +personalist +personalistic +personalists +personalities +personality +personalization +personalizations +personalize +personalized +personalizes +personalizing personally +personals +personalties +personalty +personas +personate +personated +personates +personating +personation +personations +personative +personator +personators +personhood +personhoods +personification +personifications +personified +personifier +personifiers +personifies +personify +personifying personnel +personnels +persons +perspectival +perspective +perspectively +perspectives +perspicacious +perspicaciously +perspicaciousness +perspicaciousnesses +perspicacities +perspicacity +perspicuities +perspicuity +perspicuous +perspicuously +perspicuousness +perspicuousnesses +perspiration +perspirations +perspiratory +perspire +perspired +perspires +perspiring +perspiry +persuadable persuade +persuaded +persuader +persuaders +persuades +persuading +persuasible +persuasion +persuasions +persuasive +persuasively +persuasiveness +persuasivenesses +pert +pertain +pertained +pertaining +pertains +perter +pertest +pertinacious +pertinaciously +pertinaciousness +pertinaciousnesses +pertinacities +pertinacity +pertinence +pertinences +pertinencies +pertinency +pertinent +pertinently +pertly +pertness +pertnesses +perturb +perturbable +perturbation +perturbational +perturbations +perturbed +perturbing +perturbs +pertussis +pertussises +peruke +peruked +perukes +perusal +perusals +peruse +perused +peruser +perusers +peruses +perusing +pervade +pervaded +pervader +pervaders +pervades +pervading +pervasion +pervasions +pervasive +pervasively +pervasiveness +pervasivenesses +perverse +perversely +perverseness +perversenesses +perversion +perversions +perversities +perversity +perversive +pervert +perverted +pervertedly +pervertedness +pervertednesses +perverter +perverters +perverting +perverts +pervious +perviousness +perviousnesses +pes +pesade +pesades +peseta +pesetas +pesewa +pesewas +peskier +peskiest +peskily +pesky +peso +pesos +pessaries +pessary +pessimism +pessimisms +pessimist +pessimistic +pessimistically +pessimists pest +pester +pestered +pesterer +pesterers +pestering +pesters +pesthole +pestholes +pesthouse +pesthouses +pesticide +pesticides +pestier +pestiest +pestiferous +pestiferously +pestiferousness +pestiferousnesses +pestilence +pestilences +pestilent +pestilential +pestilentially +pestilently +pestle +pestled +pestles +pestling +pesto +pestos +pests +pesty pet +petal +petaled +petaline +petalled +petallike +petalodies +petalody +petaloid +petalous +petals +petard +petards +petasos +petasoses +petasus +petasuses +petcock +petcocks +petechia +petechiae +petechial +peter +petered +petering +peters +petiolar +petiolate +petiole +petioled +petioles +petiolule +petiolules +petit +petite +petiteness +petitenesses +petites +petition +petitionary +petitioned +petitioner +petitioners +petitioning +petitions +petnap +petnapped +petnapping +petnaps +petrale +petrales +petrel +petrels +petrifaction +petrifactions +petrification +petrifications +petrified +petrifies +petrify +petrifying +petrochemical +petrochemicals +petrochemistries +petrochemistry +petrodollar +petrodollars +petrogeneses +petrogenesis +petrogenetic +petroglyph +petroglyphs +petrographer +petrographers +petrographic +petrographical +petrographically +petrographies +petrography petrol +petrolatum +petrolatums +petroleum +petroleums +petrolic +petrologic +petrological +petrologically +petrologies +petrologist +petrologists +petrology +petrols +petronel +petronels +petrosal +petrous +pets +petsai +petsais +petted +pettedly +petter +petters +petti +petticoat +petticoated +petticoats +pettier +pettiest +pettifog +pettifogged +pettifogger +pettifoggeries +pettifoggers +pettifoggery +pettifogging +pettifoggings +pettifogs +pettily +pettiness +pettinesses +petting +pettings +pettish +pettishly +pettishness +pettishnesses +pettitoes +pettle +pettled +pettles +pettling +petto +petty +petulance +petulances +petulancies +petulancy +petulant +petulantly +petunia +petunias +petuntse +petuntses +petuntze +petuntzes +pew +pewee +pewees +pewholder +pewholders +pewit +pewits +pews +pewter +pewterer +pewterers +pewters +peyote +peyotes +peyotl +peyotls +peytral +peytrals +peytrel +peytrels +pfennig +pfennige +pfennigs +pfft +pfui +phaeton +phaetons +phage +phages +phagocyte +phagocytes +phagocytic +phagocytize +phagocytized +phagocytizes +phagocytizing +phagocytose +phagocytosed +phagocytoses +phagocytosing +phagocytosis +phagocytotic +phalange +phalangeal +phalanger +phalangers +phalanges +phalansteries +phalanstery +phalanx +phalanxes +phalarope +phalaropes +phalli +phallic +phallically +phallicism +phallicisms +phallism +phallisms +phallist +phallists +phallocentric +phallus +phalluses +phanerogam +phanerogams +phanerophyte +phanerophytes +phantasied +phantasies +phantasm +phantasma +phantasmagoria +phantasmagorias +phantasmagoric +phantasmagorical +phantasmal +phantasmata +phantasmic +phantasms +phantast +phantasts +phantasy +phantasying +phantom +phantomlike +phantoms +pharaoh +pharaohs +pharaonic +pharisaic +pharisaical +pharisaically +pharisaicalness +pharisaicalnesses +pharisaism +pharisaisms +pharisee +pharisees +pharmaceutical +pharmaceutically +pharmaceuticals +pharmacies +pharmacist +pharmacists +pharmacodynamic +pharmacodynamically +pharmacodynamics +pharmacognosies +pharmacognostic +pharmacognostical +pharmacognosy +pharmacokinetic +pharmacokinetics +pharmacologic +pharmacological +pharmacologically +pharmacologies +pharmacologist +pharmacologists +pharmacology +pharmacopeia +pharmacopeial +pharmacopeias +pharmacopoeia +pharmacopoeial +pharmacopoeias +pharmacotherapies +pharmacotherapy +pharmacy +pharos +pharoses +pharyngeal +pharynges +pharyngitides +pharyngitis +pharynx +pharynxes +phase +phaseal +phased +phasedown +phasedowns +phaseout +phaseouts +phases +phasic +phasing +phasis +phasmid +phasmids +phat +phatic +phatically +pheasant +pheasants +phellem +phellems +phelloderm +phelloderms +phellogen +phellogens +phelonia +phelonion +phelonions +phenacaine +phenacaines +phenacetin +phenacetins +phenacite +phenacites +phenakite +phenakites +phenanthrene +phenanthrenes +phenate +phenates +phenazin +phenazine +phenazines +phenazins +phencyclidine +phencyclidines +phenetic +pheneticist +pheneticists +phenetics +phenetol +phenetols +phenix +phenixes +phenmetrazine +phenmetrazines +phenobarbital +phenobarbitals +phenobarbitone +phenobarbitones +phenocopies +phenocopy +phenocryst +phenocrystic +phenocrysts +phenol +phenolate +phenolated +phenolates +phenolic +phenolics +phenological +phenologically +phenologies +phenology +phenolphthalein +phenolphthaleins +phenols +phenom +phenomena +phenomenal +phenomenalism +phenomenalisms +phenomenalist +phenomenalistic +phenomenalistically +phenomenalists +phenomenally +phenomenas +phenomenological +phenomenologically +phenomenologies +phenomenologist +phenomenologists +phenomenology phenomenon +phenomenons +phenoms +phenothiazine +phenothiazines +phenotype +phenotypes +phenotypic +phenotypical +phenotypically +phenoxide +phenoxides +phenoxy +phentolamine +phentolamines +phenyl +phenylalanine +phenylalanines +phenylbutazone +phenylbutazones +phenylephrine +phenylephrines +phenylethylamine +phenylethylamines +phenylic +phenylketonuria +phenylketonurias +phenylketonuric +phenylketonurics +phenylpropanolamine +phenylpropanolamines +phenyls +phenylthiocarbamide +phenylthiocarbamides +phenylthiourea +phenylthioureas +phenytoin +phenytoins +pheochromocytoma +pheochromocytomas +pheochromocytomata +pheromonal +pheromone +pheromones +phew +phi +phial +phials +philabeg +philabegs +philadelphus +philadelphuses +philander +philandered +philanderer +philanderers +philandering +philanders +philanthropic +philanthropical +philanthropically +philanthropies +philanthropist +philanthropists +philanthropoid +philanthropoids +philanthropy +philatelic +philatelically +philatelies +philatelist +philatelists +philately +philharmonic +philharmonics +philhellene +philhellenes +philhellenic +philhellenism +philhellenisms +philhellenist +philhellenists +philibeg +philibegs +philippic +philippics +philistia +philistine +philistines +philistinism +philistinisms +phillumenist +phillumenists +philodendra +philodendron +philodendrons +philological +philologically +philologies +philologist +philologists +philology +philomel +philomels +philoprogenitive +philoprogenitiveness +philoprogenitivenesses +philosophe +philosopher +philosophers +philosophes +philosophic +philosophical +philosophically +philosophies +philosophise +philosophised +philosophises +philosophising +philosophize +philosophized +philosophizer +philosophizers +philosophizes +philosophizing +philosophy +philter +philtered +philtering +philters +philtra +philtre +philtred +philtres +philtring +philtrum +phimoses +phimosis +phimotic +phis +phiz +phizes +phlebitides +phlebitis +phlebogram +phlebograms +phlebographic +phlebographies +phlebography +phlebologies +phlebology +phlebotomies +phlebotomist +phlebotomists +phlebotomy +phlegm +phlegmatic +phlegmatically +phlegmier +phlegmiest +phlegms +phlegmy +phloem +phloems +phlogistic +phlogiston +phlogistons +phlogopite +phlogopites +phlox +phloxes +phobia +phobias +phobic +phobics +phocine +phoebe +phoebes +phoebus +phoebuses +phoenix +phoenixes +phoenixlike +phon +phonal +phonate +phonated +phonates +phonating +phonation +phonations +phone +phoned +phonematic +phoneme +phonemes +phonemic +phonemically +phonemicist +phonemicists +phonemics +phones +phonetic +phonetically +phonetician +phoneticians +phonetics +phoney +phoneyed +phoneying +phoneys +phonic +phonically +phonics +phonied +phonier +phonies +phoniest +phonily +phoniness +phoninesses +phoning +phono +phonocardiogram +phonocardiograms +phonocardiograph +phonocardiographic +phonocardiographies +phonocardiographs +phonocardiography +phonogram +phonogramic +phonogramically +phonogrammic +phonogrammically +phonograms +phonograph +phonographer +phonographers +phonographic +phonographically +phonographies +phonographs +phonography +phonolite +phonolites +phonologic +phonological +phonologically +phonologies +phonologist +phonologists +phonology +phonon +phonons +phonos +phonotactic +phonotactics +phons +phony +phonying +phooey +phorate +phorates +phoronid +phoronids +phosgene +phosgenes +phosphatase +phosphatases +phosphate +phosphates +phosphatic +phosphatide +phosphatides +phosphatidic +phosphatidyl +phosphatidylcholine +phosphatidylcholines +phosphatidylethanolamine +phosphatidylethanolamines +phosphatidyls +phosphatization +phosphatizations +phosphatize +phosphatized +phosphatizes +phosphatizing +phosphaturia +phosphaturias +phosphene +phosphenes +phosphid +phosphide +phosphides +phosphids +phosphin +phosphine +phosphines +phosphins +phosphite +phosphites +phosphocreatine +phosphocreatines +phosphodiesterase +phosphodiesterases +phosphoenolpyruvate +phosphoenolpyruvates +phosphofructokinase +phosphofructokinases +phosphoglucomutase +phosphoglucomutases +phosphoglyceraldehyde +phosphoglyceraldehydes +phosphoglycerate +phosphoglycerates +phosphokinase +phosphokinases +phospholipase +phospholipases +phospholipid +phospholipids +phosphomonoesterase +phosphomonoesterases +phosphonium +phosphoniums +phosphoprotein +phosphoproteins +phosphor +phosphore +phosphores +phosphoresce +phosphoresced +phosphorescence +phosphorescences +phosphorescent +phosphorescently +phosphoresces +phosphorescing +phosphoric +phosphorite +phosphorites +phosphoritic +phosphorolyses +phosphorolysis +phosphorolytic +phosphorous +phosphors +phosphorus +phosphoruses +phosphoryl +phosphorylase +phosphorylases +phosphorylate +phosphorylated +phosphorylates +phosphorylating +phosphorylation +phosphorylations +phosphorylative +phosphoryls +phot +photic +photically +photics photo +photoautotroph +photoautotrophic +photoautotrophically +photoautotrophs +photobiologic +photobiological +photobiologies +photobiologist +photobiologists +photobiology +photocathode +photocathodes +photocell +photocells +photochemical +photochemically +photochemist +photochemistries +photochemistry +photochemists +photochromic +photochromism +photochromisms +photocoagulation +photocoagulations +photocompose +photocomposed +photocomposer +photocomposers +photocomposes +photocomposing +photocomposition +photocompositions +photoconductive +photoconductivities +photoconductivity +photocopied +photocopier +photocopiers +photocopies +photocopy +photocopying +photocurrent +photocurrents +photodecomposition +photodecompositions +photodegradable +photodetector +photodetectors +photodiode +photodiodes +photodisintegrate +photodisintegrated +photodisintegrates +photodisintegrating +photodisintegration +photodisintegrations +photodissociate +photodissociated +photodissociates +photodissociating +photodissociation +photodissociations +photoduplicate +photoduplicated +photoduplicates +photoduplicating +photoduplication +photoduplications +photodynamic +photodynamically +photoed +photoelectric +photoelectrically +photoelectron +photoelectronic +photoelectrons +photoemission +photoemissions +photoemissive +photoengrave +photoengraved +photoengraver +photoengravers +photoengraves +photoengraving +photoengravings +photoexcitation +photoexcitations +photoexcited +photofinisher +photofinishers +photofinishing +photofinishings +photoflash +photoflashes +photoflood +photofloods +photofluorographies +photofluorography +photog +photogenic +photogenically +photogeologic +photogeological +photogeologies +photogeologist +photogeologists +photogeology +photogram +photogrammetric +photogrammetries +photogrammetrist +photogrammetrists +photogrammetry +photograms photograph +photographed photographer +photographers +photographic +photographically +photographies +photographing +photographs +photography +photogravure +photogravures +photogs +photoinduced +photoinduction +photoinductions +photoinductive +photoing +photointerpretation +photointerpretations +photointerpreter +photointerpreters +photoionization +photoionizations +photoionize +photoionized +photoionizes +photoionizing +photojournalism +photojournalisms +photojournalist +photojournalistic +photojournalists +photokineses +photokinesis +photokinetic +photolithograph +photolithographed +photolithographic +photolithographically +photolithographies +photolithographing +photolithographs +photolithography +photolyses +photolysis +photolytic +photolytically +photolyzable +photolyze +photolyzed +photolyzes +photolyzing +photomap +photomapped +photomapping +photomaps +photomask +photomasks +photomechanical +photomechanically +photometer +photometers +photometric +photometrically +photometries +photometry +photomicrograph +photomicrographic +photomicrographies +photomicrographs +photomicrography +photomontage +photomontages +photomorphogeneses +photomorphogenesis +photomorphogenic +photomosaic +photomosaics +photomultiplier +photomultipliers +photomural +photomurals +photon +photonegative +photonic +photonics +photons +photonuclear +photooxidation +photooxidations +photooxidative +photooxidize +photooxidized +photooxidizes +photooxidizing +photoperiod +photoperiodic +photoperiodically +photoperiodism +photoperiodisms +photoperiods +photophase +photophases +photophobia +photophobias +photophobic +photophore +photophores +photophosphorylation +photophosphorylations +photopia +photopias +photopic +photoplay +photoplays +photopolarimeter +photopolarimeters +photopolymer +photopolymers +photopositive +photoproduct +photoproduction +photoproductions +photoproducts +photoreaction +photoreactions +photoreactivating +photoreactivation +photoreactivations +photoreception +photoreceptions +photoreceptive +photoreceptor +photoreceptors +photoreconnaissance +photoreconnaissances +photoreduce +photoreduced +photoreduces +photoreducing +photoreduction +photoreductions +photoreproduction +photoreproductions +photoresist +photoresists +photorespiration +photorespirations +photos +photosensitive +photosensitivities +photosensitivity +photosensitization +photosensitizations +photosensitize +photosensitized +photosensitizer +photosensitizers +photosensitizes +photosensitizing +photoset +photosets +photosetter +photosetters +photosetting +photosphere +photospheres +photospheric +photostat +photostated +photostatic +photostating +photostats +photostatted +photostatting +photosynthate +photosynthates +photosyntheses +photosynthesis +photosynthesize +photosynthesized +photosynthesizes +photosynthesizing +photosynthetic +photosynthetically +photosystem +photosystems +phototactic +phototactically +phototaxes +phototaxis +phototelegraphies +phototelegraphy +phototoxic +phototoxicities +phototoxicity +phototropic +phototropically +phototropism +phototropisms +phototube +phototubes +phototypesetter +phototypesetters +phototypesetting +phototypesettings +photovoltaic +photovoltaics +phots +phpht +phragmoplast +phragmoplasts +phrasal +phrasally phrase +phrased +phrasemaker +phrasemakers +phrasemaking +phrasemakings +phrasemonger +phrasemongering +phrasemongerings +phrasemongers +phraseological +phraseologies +phraseologist +phraseologists +phraseology +phrases +phrasing +phrasings +phratral +phratric +phratries +phratry +phreatic +phreatophyte +phreatophytes +phreatophytic +phrenetic +phrenic +phrenological +phrenologies +phrenologist +phrenologists +phrenology +phrensied +phrensies +phrensy +phrensying +pht +phthalic +phthalin +phthalins +phthalocyanine +phthalocyanines +phthises +phthisic +phthisical +phthisics +phthisis +phut +phuts +phycocyanin +phycocyanins +phycoerythrin +phycoerythrins +phycological +phycologies +phycologist +phycologists +phycology +phycomycete +phycomycetes +phycomycetous +phyla +phylacteries +phylactery +phylae +phylar +phylaxis +phylaxises +phyle +phyleses +phylesis +phylesises +phyletic +phyletically +phylic +phyllaries +phyllary +phyllite +phyllites +phyllo +phylloclade +phylloclades +phyllode +phyllodes +phyllodia +phyllodium +phylloid +phylloids +phyllome +phyllomes +phyllos +phyllotactic +phyllotaxes +phyllotaxies +phyllotaxis +phyllotaxy +phylloxera +phylloxerae +phylloxeras +phylogenetic +phylogenetically +phylogenies +phylogeny +phylon +phylum +physed +physeds +physes +physiatrist +physiatrists +physic physical +physicalism +physicalisms +physicalist +physicalistic +physicalists +physicalities +physicality +physically +physicalness +physicalnesses +physicals physician +physicians physicist +physicists +physicked +physicking +physicochemical +physicochemically physics +physiocratic +physiognomic +physiognomical +physiognomically +physiognomies +physiognomy +physiographer +physiographers +physiographic +physiographical +physiographies +physiography +physiologic +physiological +physiologically +physiologies +physiologist +physiologists +physiology +physiopathologic +physiopathological +physiopathologies +physiopathology +physiotherapies +physiotherapist +physiotherapists +physiotherapy +physique +physiques +physis +physostigmine +physostigmines +phytane +phytanes +phytoalexin +phytoalexins +phytochemical +phytochemically +phytochemist +phytochemistries +phytochemistry +phytochemists +phytochrome +phytochromes +phytoflagellate +phytoflagellates +phytogeographer +phytogeographers +phytogeographic +phytogeographical +phytogeographically +phytogeographies +phytogeography +phytohemagglutinin +phytohemagglutinins +phytohormone +phytohormones +phytoid +phytol +phytols +phyton +phytonic +phytons +phytopathogen +phytopathogenic +phytopathogens +phytopathological +phytopathologies +phytopathology +phytophagous +phytoplankter +phytoplankters +phytoplankton +phytoplanktonic +phytoplanktons +phytosociological +phytosociologies +phytosociology +phytosterol +phytosterols +phytotoxic +phytotoxicities +phytotoxicity +pi +pia +piacular +piaffe +piaffed +piaffer +piaffers +piaffes +piaffing +pial +pian +pianic +pianism +pianisms +pianissimi +pianissimo +pianissimos pianist +pianistic +pianistically +pianists piano +pianoforte +pianofortes +pianos +pians +pias +piasaba +piasabas +piasava +piasavas +piassaba +piassabas +piassava +piassavas +piaster +piasters +piastre +piastres +piazza +piazzas +piazze +pibal +pibals +pibroch +pibrochs +pic +pica +picacho +picachos +picador +picadores +picadors +pical +picaninnies +picaninny +picara +picaras +picaresque +picaresques +picaro +picaroon +picarooned +picarooning +picaroons +picaros +picas +picayune +picayunes +picayunish +piccalilli +piccalillis +piccolo +piccoloist +piccoloists +piccolos +pice +piceous +piciform pick +pickaback +pickabacked +pickabacking +pickabacks +pickadil +pickadils +pickaninnies +pickaninny +pickaroon +pickaroons +pickax +pickaxe +pickaxed +pickaxes +pickaxing +picked +pickeer +pickeered +pickeering +pickeers +picker +pickerel +pickerels +pickerelweed +pickerelweeds +pickers +picket +picketboat +picketboats +picketed +picketer +picketers +picketing +pickets +pickier +pickiest +picking +pickings +pickle +pickled +pickles +pickling +picklock +picklocks +pickoff +pickoffs +pickpocket +pickpockets +pickproof +picks +pickthank +pickthanks +pickup +pickups +pickwick +pickwicks +picky +picloram +piclorams picnic +picnicked +picnicker +picnickers +picnicking +picnicky +picnics +picofarad +picofarads +picogram +picograms +picolin +picoline +picolines +picolins +picomole +picomoles +picornavirus +picornaviruses +picosecond +picoseconds +picot +picoted +picotee +picotees +picoting +picots +picquet +picquets +picrate +picrated +picrates +picric +picrite +picrites +picritic +picrotoxin +picrotoxins +pics +pictogram +pictograms +pictograph +pictographic +pictographies +pictographs +pictography +pictorial +pictorialism +pictorialisms +pictorialist +pictorialists +pictorialization +pictorializations +pictorialize +pictorialized +pictorializes +pictorializing +pictorially +pictorialness +pictorialnesses +pictorials picture +pictured +picturephone +picturephones +pictures +picturesque +picturesquely +picturesqueness +picturesquenesses +picturing +picturization +picturizations +picturize +picturized +picturizes +picturizing +picul +piculs +piddle +piddled +piddler +piddlers +piddles +piddling +piddly +piddock +piddocks +pidgin +pidginization +pidginizations +pidginize +pidginized +pidginizes +pidginizing +pidgins pie +piebald +piebalds piece +pieced +piecemeal +piecer +piecers +pieces +piecewise +piecework +pieceworker +pieceworkers +pieceworks +piecing +piecings +piecrust +piecrusts +pied +piedfort +piedforts +piedmont +piedmonts +piefort +pieforts +pieing +pieplant +pieplants +pier +pierce +pierced +piercer +piercers +pierces +piercing +piercingly +pierogi +pierogies +pierrot +pierrots +piers +pies +pieta +pietas +pieties +pietism +pietisms +pietist +pietistic +pietistically +pietists +piety +piezoelectric +piezoelectrically +piezoelectricities +piezoelectricity +piezometer +piezometers +piezometric +piffle +piffled +piffles +piffling pig +pigboat +pigboats +pigeon +pigeonhole +pigeonholed +pigeonholer +pigeonholers +pigeonholes +pigeonholing +pigeonite +pigeonites +pigeons +pigeonwing +pigeonwings +pigfish +pigfishes +pigged +piggeries +piggery +piggie +piggier +piggies +piggiest +piggin +pigging +piggins +piggish +piggishly +piggishness +piggishnesses +piggy +piggyback +piggybacked +piggybacking +piggybacks +pigheaded +pigheadedly +pigheadedness +pigheadednesses +piglet +piglets +piglike +pigment +pigmentary +pigmentation +pigmentations +pigmented +pigmenting +pigments +pigmies +pigmy +pignoli +pignolia +pignolias +pignolis +pignora +pignus +pignut +pignuts +pigout +pigouts +pigpen +pigpens +pigs +pigskin +pigskins +pigsney +pigsneys +pigstick +pigsticked +pigsticker +pigstickers +pigsticking +pigsticks +pigsties +pigsty +pigtail +pigtailed +pigtails +pigweed +pigweeds +piing +pika +pikake +pikakes +pikas +pike +piked +pikeman +pikemen +piker +pikers +pikes +pikestaff +pikestaffs +pikestaves +piki +piking +pikis +pilaf +pilaff +pilaffs +pilafs +pilar +pilaster +pilasters +pilau +pilaus +pilaw +pilaws +pilchard +pilchards pile +pilea +pileate +pileated +piled +pilei +pileless +pileous +piles +pileum +pileup +pileups +pileus +pilewort +pileworts +pilfer +pilferable +pilferage +pilferages +pilfered +pilferer +pilferers +pilfering +pilferproof +pilfers +pilgarlic +pilgarlics +pilgrim +pilgrimage +pilgrimaged +pilgrimages +pilgrimaging +pilgrims +pili +piliform +piling +pilings +pilis pill +pillage +pillaged +pillager +pillagers +pillages +pillaging +pillar +pillared +pillaring +pillarless +pillars +pillbox +pillboxes +pilled +pilling +pillion +pillions +pilloried +pillories +pillory +pillorying pillow +pillowcase +pillowcases +pillowed +pillowing +pillows +pillowy +pills +pilocarpine +pilocarpines +pilose +pilosities +pilosity pilot +pilotage +pilotages +piloted +pilothouse +pilothouses +piloting +pilotings +pilotless +pilots +pilous +pilsener +pilseners +pilsner +pilsners +pilular +pilule +pilules +pilus +pily +pima +pimas +pimento +pimentos +pimiento +pimientos +pimp +pimped +pimpernel +pimpernels +pimping +pimple +pimpled +pimples +pimplier +pimpliest +pimply +pimpmobile +pimpmobiles +pimps pin +pina +pinafore +pinafored +pinafores +pinang +pinangs +pinas +pinaster +pinasters +pinata +pinatas +pinball +pinballs +pinbone +pinbones +pincer +pincerlike +pincers +pinch +pinchbeck +pinchbecks +pinchbug +pinchbugs +pincheck +pinchecks +pinched +pincher +pinchers +pinches +pinching +pinchpenny +pincushion +pincushions +pinder +pinders +pindling pine +pineal +pinealectomies +pinealectomize +pinealectomized +pinealectomizes +pinealectomizing +pinealectomy +pineals pineapple -pingpong +pineapples +pinecone +pinecones +pined +pinedrops +pineland +pinelands +pinelike +pinene +pinenes +pineries +pinery +pines +pinesap +pinesaps +pineta +pinetum +pinewood +pinewoods +piney +pinfeather +pinfeathers +pinfish +pinfishes +pinfold +pinfolded +pinfolding +pinfolds +ping +pinged +pinger +pingers +pinging +pingo +pingos +pingrass +pingrasses +pings +pinguid +pinhead +pinheaded +pinheadedness +pinheadednesses +pinheads +pinhole +pinholes +pinier +piniest +pining +pinion +pinioned +pinioning +pinions +pinite +pinites +pinitol +pinitols pink +pinked +pinken +pinkened +pinkening +pinkens +pinker +pinkers +pinkest +pinkey +pinkeye +pinkeyes +pinkeys +pinkie +pinkies +pinking +pinkings +pinkish +pinkishness +pinkishnesses +pinkly +pinkness +pinknesses +pinko +pinkoes +pinkos +pinkroot +pinkroots +pinks +pinky +pinna +pinnace +pinnaces +pinnacle +pinnacled +pinnacles +pinnacling +pinnae +pinnal +pinnas +pinnate +pinnated +pinnately +pinnatifid +pinned +pinner +pinners +pinnies +pinning +pinniped +pinnipeds +pinnula +pinnulae +pinnular +pinnule +pinnules +pinny +pinochle +pinochles +pinocle +pinocles +pinocytic +pinocytoses +pinocytosis +pinocytotic +pinocytotically +pinole +pinoles +pinon +pinones +pinons +pinot +pinots +pinpoint +pinpointed +pinpointing +pinpoints +pinprick +pinpricked +pinpricking +pinpricks +pins +pinscher +pinschers +pinsetter +pinsetters +pinspotter +pinspotters +pinstripe +pinstriped +pinstripes pint +pinta +pintada +pintadas +pintado +pintadoes +pintados +pintail +pintails +pintano +pintanos +pintas +pintle +pintles +pinto +pintoes +pintos +pints +pintsize +pinup +pinups +pinwale +pinwales +pinweed +pinweeds +pinwheel +pinwheeled +pinwheeling +pinwheels +pinwork +pinworks +pinworm +pinworms +piny +pinyin +pinyon +pinyons +piolet +piolets +pion pioneer +pioneered +pioneering +pioneers +pionic +pions +piosities +piosity +pious +piously +piousness +piousnesses +pip +pipage +pipages +pipal +pipals pipe +pipeage +pipeages +piped +pipefish +pipefishes +pipeful +pipefuls +pipeless +pipelike +pipeline +pipelined +pipelines +pipelining +piper +piperazine +piperazines +piperidine +piperidines +piperine +piperines +piperonal +piperonals +pipers +pipes +pipestem +pipestems +pipestone +pipestones +pipet +pipets +pipette +pipetted +pipettes +pipetting +pipier +pipiest +pipiness +pipinesses +piping +pipingly +pipings +pipit +pipits +pipkin +pipkins +pipped +pippin +pipping +pippins +pips +pipsissewa +pipsissewas +pipsqueak +pipsqueaks +pipy +piquance +piquances +piquancies +piquancy +piquant +piquantly +piquantness +piquantnesses +pique +piqued +piques +piquet +piquets +piquing +piracies +piracy +piragua +piraguas +pirana +piranas +piranha +piranhas +pirarucu +pirarucus +pirate +pirated +pirates +piratic +piratical +piratically +pirating +piraya +pirayas +piriform +pirn +pirns +pirog +pirogen +piroghi +pirogi +pirogies +pirogue +pirogues +pirojki +piroplasm +piroplasma +piroplasmata +piroplasms +piroque +piroques +piroshki +pirouette +pirouetted +pirouettes +pirouetting +pirozhki +pirozhok +pis +piscaries +piscary +piscator +piscatorial +piscators +piscatory +pisciculture +piscicultures +piscina +piscinae +piscinal +piscinas +piscine +piscivorous +pisco +piscos +pish +pished +pishes +pishing +pishoge +pishoges +pishogue +pishogues +pisiform +pisiforms +pismire +pismires +piso +pisolite +pisolites +pisolitic +pisos +piss +pissant +pissants +pissed +pisser +pissers +pisses +pissing +pissoir +pissoirs +pistache +pistaches +pistachio +pistachios +pistareen +pistareens +piste +pistes +pistil +pistillate +pistils +pistol +pistole +pistoled +pistoleer +pistoleers +pistoles +pistoling +pistolled +pistolling +pistols +piston +pistons +pit +pita +pitapat +pitapats +pitapatted +pitapatting +pitas +pitch +pitchblende +pitchblendes +pitched +pitcher +pitcherful +pitcherfuls +pitchers +pitchersful +pitches +pitchfork +pitchforked +pitchforking +pitchforks +pitchier +pitchiest +pitchily +pitching +pitchman +pitchmen +pitchout +pitchouts +pitchpole +pitchpoled +pitchpoles +pitchpoling +pitchwoman +pitchwomen +pitchy +piteous +piteously +piteousness +piteousnesses +pitfall +pitfalls +pith +pithead +pitheads +pithecanthropi +pithecanthropine +pithecanthropines +pithecanthropus +pithed +pithier +pithiest +pithily +pithiness +pithinesses +pithing +pithless +piths +pithy +pitiable +pitiableness +pitiablenesses +pitiably +pitied +pitier +pitiers +pities +pitiful +pitifuller +pitifullest +pitifully +pitifulness +pitifulnesses +pitiless +pitilessly +pitilessness +pitilessnesses +pitman +pitmans +pitmen +piton +pitons +pits +pitsaw +pitsaws +pittance +pittances +pitted +pitting +pittings +pittosporum +pittosporums +pituitaries +pituitary pity +pitying +pityingly +pityriases +pityriasis +piu +pivot +pivotable +pivotal +pivotally +pivoted +pivoting +pivotman +pivotmen +pivots +pix +pixel +pixels +pixes +pixie +pixieish +pixies +pixilated +pixilation +pixilations +pixillated +pixiness +pixinesses +pixy +pixyish +pizazz +pizazzes +pizazzy +pizza +pizzalike +pizzas +pizzeria +pizzerias +pizzicati +pizzicato +pizzle +pizzles +placabilities +placability +placable +placably +placard +placarded +placarding +placards +placate +placated +placater +placaters +placates +placating +placatingly +placation +placations +placative +placatory place +placeable +placebo +placeboes +placebos +placed +placeholder +placeholders +placekick +placekicked +placekicker +placekickers +placekicking +placekicks +placeless +placelessly +placeman +placemen +placement +placements +placenta +placentae +placental +placentals +placentas +placentation +placentations +placer +placers +places +placet +placets +placid +placidities +placidity +placidly +placidness +placidnesses +placing +plack +placket +plackets +placks +placoid +placoids +plafond +plafonds +plagal +plage +plages +plagiaries +plagiarise +plagiarised +plagiarises +plagiarising +plagiarism +plagiarisms +plagiarist +plagiaristic +plagiarists +plagiarize +plagiarized +plagiarizer +plagiarizers +plagiarizes +plagiarizing +plagiary +plagioclase +plagioclases +plagiotropic +plague +plagued +plaguer +plaguers +plagues +plaguey +plaguily +plaguing +plaguy +plaice +plaices +plaid +plaided +plaids plain +plainchant +plainchants +plainclothes +plainclothesman +plainclothesmen +plained +plainer +plainest +plaining +plainly +plainness +plainnesses +plains +plainsman +plainsmen +plainsong +plainsongs +plainspoken +plainspokenness +plainspokennesses +plaint +plaintext +plaintexts +plaintful +plaintiff +plaintiffs +plaintive +plaintively +plaintiveness +plaintivenesses +plaints +plaister +plaistered +plaistering +plaisters +plait +plaited +plaiter +plaiters +plaiting +plaitings +plaits plan +planar +planaria +planarian +planarians +planarias +planarities +planarity +planate +planation +planations +planch +planche +planches +planchet +planchets +planchette +planchettes plane +planed +planeload +planeloads +planer +planers +planes planet +planetaria +planetarium +planetariums +planetary +planetesimal +planetesimals +planetlike +planetoid +planetoidal +planetoids +planetological +planetologies +planetologist +planetologists +planetology +planets +planetwide +planform +planforms +plangencies +plangency +plangent +plangently +planimeter +planimeters +planimetric +planimetrically +planing +planish +planished +planisher +planishers +planishes +planishing +planisphere +planispheres +planispheric +plank +planked +planking +plankings +planks +plankter +plankters +plankton +planktonic +planktons +planless +planlessly +planlessness +planlessnesses +planned +planner +planners +planning +plannings +planographic +planographies +planography +planosol +planosols +plans plant +plantable +plantain +plantains +plantar +plantation +plantations +planted +planter +planters +plantigrade +plantigrades +planting +plantings +plantlet +plantlets +plantlike +plantocracies +plantocracy +plants +plantsman +plantsmen +planula +planulae +planular +plaque +plaques +plash +plashed +plasher +plashers +plashes +plashier +plashiest +plashing +plashy +plasm +plasma +plasmagel +plasmagels +plasmagene +plasmagenes +plasmalemma +plasmalemmas +plasmaphereses +plasmapheresis +plasmas +plasmasol +plasmasols +plasmatic +plasmic +plasmid +plasmids +plasmin +plasminogen +plasminogens +plasmins +plasmodesm +plasmodesma +plasmodesmas +plasmodesmata +plasmodesms +plasmodia +plasmodium +plasmogamies +plasmogamy +plasmoid +plasmoids +plasmolyses +plasmolysis +plasmolytic +plasmolyze +plasmolyzed +plasmolyzes +plasmolyzing +plasmon +plasmons +plasms +plaster +plasterboard +plasterboards +plastered +plasterer +plasterers +plastering +plasterings +plasters +plasterwork +plasterworks +plastery plastic +plastically +plasticene +plasticenes +plasticine +plasticines +plasticities +plasticity +plasticization +plasticizations +plasticize +plasticized +plasticizer +plasticizers +plasticizes +plasticizing +plasticky +plastics +plastid +plastidial +plastids +plastisol +plastisols +plastocyanin +plastocyanins +plastoquinone +plastoquinones +plastral +plastron +plastrons +plastrum +plastrums +plat +platan +platane +platanes +platans plate +plateau +plateaued +plateauing +plateaus +plateaux +plated +plateful +platefuls +plateglass +platelet +platelets +platelike +platemaker +platemakers +platemaking +platemakings +platen +platens +plater +plateresque +platers +plates +platesful platform +platforms +platier +platies +platiest +platina +platinas +plating +platings +platinic +platinize +platinized +platinizes +platinizing +platinocyanide +platinocyanides +platinum +platinums +platitude +platitudes +platitudinal +platitudinarian +platitudinarians +platitudinize +platitudinized +platitudinizes +platitudinizing +platitudinous +platitudinously +platonic +platonically +platoon +platooned +platooning +platoons +plats +platted +platter +platterful +platterfuls +platters +plattersful +platting +platy +platyfish +platyfishes +platyhelminth +platyhelminthic +platyhelminths +platypi +platypus +platypuses +platyrrhine +platyrrhines +platys +plaudit +plaudits +plausibilities +plausibility +plausible +plausibleness +plausiblenesses +plausibly +plausive play +playa +playabilities +playability +playable +playact +playacted +playacting +playactings +playacts +playas +playback +playbacks +playbill +playbills +playbook +playbooks +playboy +playboys +playdate +playdates +playday +playdays +playdown +playdowns +played +player +players +playfellow +playfellows +playfield +playfields +playful +playfully +playfulness +playfulnesses +playgirl +playgirls +playgoer +playgoers playground +playgrounds +playhouse +playhouses +playing +playland +playlands +playless +playlet +playlets +playlike +playlist +playlists +playmaker +playmakers +playmaking +playmakings +playmate +playmates +playoff +playoffs +playpen +playpens +playroom +playrooms +plays +playsuit +playsuits +plaything +playthings +playtime +playtimes +playwear +playwright +playwrighting +playwrightings +playwrights +playwriting +playwritings +plaza +plazas +plea +pleach +pleached +pleaches +pleaching +plead +pleadable +pleaded +pleader +pleaders +pleading +pleadingly +pleadings +pleads +pleas +pleasance +pleasances pleasant +pleasanter +pleasantest +pleasantly +pleasantness +pleasantnesses +pleasantries +pleasantry please pleased +pleaser +pleasers +pleases +pleasing +pleasingly +pleasingness +pleasingnesses +pleasurabilities +pleasurability +pleasurable +pleasurableness +pleasurablenesses +pleasurably pleasure +pleasured +pleasureless +pleasures +pleasuring +pleat +pleated +pleater +pleaters +pleating +pleatless +pleats +pleb +plebe +plebeian +plebeianism +plebeianisms +plebeianly +plebeians +plebes +plebiscitary +plebiscite +plebiscites +plebs +plecopteran +plecopterans +plectra +plectron +plectrons +plectrum +plectrums +pled +pledge +pledged +pledgee +pledgees +pledgeor +pledgeors +pledger +pledgers +pledges +pledget +pledgets +pledging +pledgor +pledgors +pleiad +pleiades +pleiads +pleinairism +pleinairisms +pleinairist +pleinairists +pleiotropic +pleiotropies +pleiotropy +plena +plenary +plench +plenches +plenipotent +plenipotentiaries +plenipotentiary +plenish +plenished +plenishes +plenishing +plenism +plenisms +plenist +plenists +plenitude +plenitudes +plenitudinous +plenteous +plenteously +plenteousness +plenteousnesses +plenties +plentiful +plentifully +plentifulness +plentifulnesses +plentitude +plentitudes plenty +plenum +plenums +pleochroic +pleochroism +pleochroisms +pleomorphic +pleomorphism +pleomorphisms +pleonasm +pleonasms +pleonastic +pleonastically +pleopod +pleopods +plerocercoid +plerocercoids +plesiosaur +plesiosaurs +plessor +plessors +plethora +plethoras +plethoric +plethysmogram +plethysmograms +plethysmograph +plethysmographic +plethysmographically +plethysmographies +plethysmographs +plethysmography +pleura +pleurae +pleural +pleuras +pleurisies +pleurisy +pleuritic +pleuron +pleuropneumonia +pleuropneumonias +pleuston +pleustonic +pleustons +plew +plews +plexal +plexiform +plexor +plexors +plexus +plexuses +pliabilities +pliability +pliable +pliableness +pliablenesses +pliably +pliancies +pliancy +pliant +pliantly +pliantness +pliantnesses +plica +plicae +plical +plicate +plicated +plication +plications +plie +plied +plier +pliers +plies +plight +plighted +plighter +plighters +plighting +plights +plimsol +plimsole +plimsoles +plimsoll +plimsolls +plimsols +plink +plinked +plinker +plinkers +plinking +plinks +plinth +plinths +pliotron +pliotrons +pliskie +pliskies +plisky +plisse +plisses +plod +plodded +plodder +plodders +plodding +ploddingly +plods +ploidies +ploidy +plonk +plonked +plonking +plonks +plop +plopped +plopping +plops +plosion +plosions +plosive +plosives plot +plotless +plotlessness +plotlessnesses +plotline +plotlines +plots +plottage +plottages +plotted +plotter +plotters +plottier +plotties +plottiest +plotting +plotty +plotz +plotzed +plotzes +plotzing +plough +ploughed +plougher +ploughers +ploughing +ploughs +plover +plovers +plow +plowable +plowback +plowbacks +plowboy +plowboys +plowed +plower +plowers +plowhead +plowheads +plowing +plowland +plowlands +plowman +plowmen +plows +plowshare +plowshares +ploy +ployed +ploying +ploys +pluck +plucked +plucker +pluckers +pluckier +pluckiest +pluckily +pluckiness +pluckinesses +plucking +plucks +plucky plug +plugged +plugger +pluggers +plugging +plugless +plugola +plugolas +plugs +pluguglies +plugugly +plum +plumage +plumaged +plumages +plumate +plumb +plumbago +plumbagos +plumbed +plumber +plumberies +plumbers +plumbery +plumbic +plumbing +plumbings +plumbism +plumbisms +plumbous +plumbs +plumbum +plumbums +plume +plumed +plumelet +plumelets +plumeria +plumerias +plumes +plumier +plumiest +pluming +plumiped +plumipeds +plumlike +plummet +plummeted +plummeting +plummets +plummier +plummiest +plummy +plumose +plump +plumped +plumpen +plumpened +plumpening +plumpens +plumper +plumpers +plumpest +plumping +plumpish +plumply +plumpness +plumpnesses +plumps +plums +plumular +plumule +plumules +plumy +plunder +plundered +plunderer +plunderers +plundering +plunderous +plunders +plunge +plunged +plunger +plungers +plunges +plunging +plunk +plunked +plunker +plunkers +plunking +plunks +pluperfect +pluperfects +plural +pluralism +pluralisms +pluralist +pluralistic +pluralistically +pluralists +pluralities +plurality +pluralization +pluralizations +pluralize +pluralized +pluralizes +pluralizing +plurally +plurals +pluripotent plus -pm +pluses +plush +plusher +plushes +plushest +plushier +plushiest +plushily +plushiness +plushinesses +plushly +plushness +plushnesses +plushy +plussage +plussages +plusses +plutei +pluteus +plutocracies +plutocracy +plutocrat +plutocratic +plutocratically +plutocrats +pluton +plutonian +plutonic +plutonium +plutoniums +plutons +pluvial +pluvials +pluvian +pluviose +pluvious +ply +plyer +plyers +plying +plyingly +plywood +plywoods +pneuma +pneumas +pneumatic +pneumatically +pneumaticities +pneumaticity +pneumatologies +pneumatology +pneumatolytic +pneumatophore +pneumatophores +pneumococcal +pneumococci +pneumococcus +pneumoconioses +pneumoconiosis +pneumograph +pneumographs +pneumonectomies +pneumonectomy +pneumonia +pneumonias +pneumonic +pneumonites +pneumonitides +pneumonitis +pneumonitises +pneumothoraces +pneumothorax +pneumothoraxes +poaceous +poach +poached +poacher +poachers +poaches +poachier +poachiest +poaching +poachy +pochard +pochards +pock +pocked pocket +pocketable +pocketbook +pocketbooks +pocketed +pocketer +pocketers +pocketful +pocketfuls +pocketing +pocketknife +pocketknives +pockets +pocketsful +pockier +pockiest +pockily +pocking +pockmark +pockmarked +pockmarking +pockmarks +pocks +pocky +poco +pococurante +pococurantism +pococurantisms +pocosin +pocosins +pod +podagra +podagral +podagras +podagric +podded +podding +podesta +podestas +podgier +podgiest +podgily +podgy +podia +podiatric +podiatries +podiatrist +podiatrists +podiatry +podite +podites +poditic +podium +podiums +podlike +podocarp +podomere +podomeres +podophylli +podophyllin +podophyllins +podophyllum +podophyllums +pods +podsol +podsolic +podsolization +podsolizations +podsols +podzol +podzolic +podzolization +podzolizations +podzolize +podzolized +podzolizes +podzolizing +podzols +poechore +poechores poem +poems +poesies +poesy poet +poetaster +poetasters +poetess +poetesses +poetic +poetical +poetically +poeticalness +poeticalnesses +poeticism +poeticisms +poeticize +poeticized +poeticizes +poeticizing +poetics +poetise +poetised +poetiser +poetisers +poetises +poetising +poetize +poetized +poetizer +poetizers +poetizes +poetizing +poetless +poetlike +poetries +poetry +poets +pogey +pogeys +pogies +pogonia +pogonias +pogonip +pogonips +pogonophoran +pogonophorans +pogrom +pogromed +pogroming +pogromist +pogromists +pogroms +pogy +poh +poi +poignance +poignances +poignancies +poignancy +poignant +poignantly +poikilotherm +poikilothermic +poikilotherms +poilu +poilus +poinciana +poincianas +poind +poinded +poinding +poinds +poinsettia +poinsettias point +pointe +pointed +pointedly +pointedness +pointednesses +pointelle +pointelles +pointer +pointers +pointes +pointier +pointiest +pointillism +pointillisms +pointillist +pointillistic +pointillists +pointing +pointless +pointlessly +pointlessness +pointlessnesses +pointman +pointmen +points +pointtillist +pointy +pois +poise +poised +poiser +poisers +poises +poisha +poising poison +poisoned +poisoner +poisoners +poisoning +poisonings poisonous +poisonously +poisons +poisonwood +poisonwoods +poitrel +poitrels +poke +pokeberries +pokeberry +poked +poker +pokeroot +pokeroots +pokers +pokes +pokeweed +pokeweeds +pokey +pokeys +pokier +pokies +pokiest +pokily +pokiness +pokinesses +poking +poky +pol +polar +polarimeter +polarimeters +polarimetric +polarimetries +polarimetry +polariscope +polariscopes +polariscopic +polarise +polarised +polarises +polarising +polarities +polarity +polarizabilities +polarizability +polarizable +polarization +polarizations +polarize +polarized +polarizer +polarizers +polarizes +polarizing +polarographic +polarographically +polarographies +polarography +polaron +polarons +polars +polder +polders pole +poleax +poleaxe +poleaxed +poleaxes +poleaxing +polecat +polecats +poled +poleis +poleless +polemic +polemical +polemically +polemicist +polemicists +polemicize +polemicized +polemicizes +polemicizing +polemics +polemist +polemists +polemize +polemized +polemizes +polemizing +polemonium +polemoniums +polenta +polentas +poler +polers +poles +polestar +polestars +poleward +poleyn +poleyns police +policed policeman +policemen +polices policewoman +policewomen +policies +policing policy +policyholder +policyholders +poling +polio +poliomyelitides +poliomyelitis +polios +poliovirus +polioviruses +polis polish +polished +polisher +polishers +polishes +polishing +politburo +politburos polite +politely +politeness +politenesses +politer +politesse +politesses +politest +politic political +politicalization +politicalizations +politicalize +politicalized +politicalizes +politicalizing +politically politician +politicians +politicise +politicised +politicises +politicising +politicization +politicizations +politicize +politicized +politicizes +politicizing +politick +politicked +politicker +politickers +politicking +politicks +politico +politicoes +politicos politics +polities +polity +polka +polkaed +polkaing +polkas +poll +pollack +pollacks +pollard +pollarded +pollarding +pollards +polled +pollee +pollees +pollen +pollened +pollening +pollenizer +pollenizers +pollenoses +pollenosis +pollenosises +pollens +poller +pollers +pollex +pollical +pollices +pollinate +pollinated +pollinates +pollinating +pollination +pollinations +pollinator +pollinators +polling +pollinia +pollinic +pollinium +pollinizer +pollinizers +pollinoses +pollinosis +pollinosises +pollist +pollists +polliwog +polliwogs +pollock +pollocks +polls +pollster +pollsters +pollutant +pollutants pollute +polluted +polluter +polluters +pollutes +polluting pollution +pollutions +pollutive +pollywog +pollywogs +polo +poloist +poloists +polonaise +polonaises +polonium +poloniums +polos +pols +poltergeist +poltergeists +poltroon +poltrooneries +poltroonery +poltroons +poly +polyacrylamide +polyacrylamides +polyacrylonitrile +polyacrylonitriles +polyalcohol +polyalcohols +polyamide +polyamides +polyamine +polyamines +polyandries +polyandrous +polyandry +polyantha +polyanthas +polyanthi +polyanthus +polyanthuses +polyatomic +polybrid +polybrids +polybutadiene +polybutadienes +polycarbonate +polycarbonates +polycentric +polycentrism +polycentrisms +polychaete +polychaetes +polychotomies +polychotomous +polychotomy +polychromatic +polychromatophilia +polychromatophilias +polychromatophilic +polychrome +polychromed +polychromes +polychromies +polychroming +polychromy +polycistronic +polyclinic +polyclinics +polyclonal +polycondensation +polycondensations +polycot +polycots +polycrystal +polycrystalline +polycrystals +polycyclic +polycystic +polycythemia +polycythemias +polycythemic +polydactyl +polydactylies +polydactyly +polydipsia +polydipsias +polydipsic +polydisperse +polydispersities +polydispersity +polyelectrolyte +polyelectrolytes +polyembryonic +polyembryonies +polyembryony +polyene +polyenes +polyenic +polyester +polyesterification +polyesterifications +polyesters +polyestrous +polyethylene +polyethylenes +polygala +polygalas +polygamic +polygamies +polygamist +polygamists +polygamize +polygamized +polygamizes +polygamizing +polygamous +polygamy +polygene +polygenes +polygeneses +polygenesis +polygenetic +polygenic +polyglot +polyglotism +polyglotisms +polyglots +polyglottism +polyglottisms +polygon +polygonal +polygonally +polygonies +polygons +polygonum +polygonums +polygony +polygraph +polygrapher +polygraphers +polygraphic +polygraphist +polygraphists +polygraphs +polygynies +polygynous +polygyny +polyhedra +polyhedral +polyhedron +polyhedrons +polyhedroses +polyhedrosis +polyhistor +polyhistoric +polyhistors +polyhydroxy +polylysine +polylysines +polymath +polymathic +polymathies +polymaths +polymathy +polymer +polymerase +polymerases +polymeric +polymerisation +polymerisations +polymerise +polymerised +polymerises +polymerising +polymerism +polymerisms +polymerization +polymerizations +polymerize +polymerized +polymerizes +polymerizing +polymers +polymorph +polymorphic +polymorphically +polymorphism +polymorphisms +polymorphonuclear +polymorphonuclears +polymorphous +polymorphously +polymorphs +polymyxin +polymyxins +polyneuritides +polyneuritis +polyneuritises +polynomial +polynomials +polynuclear +polynucleotide +polynucleotides +polynya +polynyas +polynyi +polyolefin +polyolefins +polyoma +polyomas +polyonymous +polyp +polyparies +polypary +polypeptide +polypeptides +polypeptidic +polypetalous +polyphagia +polyphagias +polyphagies +polyphagous +polyphagy +polyphase +polyphasic +polyphenol +polyphenolic +polyphenols +polyphiloprogenitive +polyphone +polyphones +polyphonic +polyphonically +polyphonies +polyphonous +polyphonously +polyphony +polyphyletic +polyphyletically +polypi +polypide +polypides +polyploid +polyploidies +polyploids +polyploidy +polypnea +polypneas +polypod +polypodies +polypods +polypody +polypoid +polypore +polypores +polypous +polypropylene +polypropylenes +polyps +polyptych +polyptychs +polypus +polypuses +polyrhythm +polyrhythmic +polyrhythmically +polyrhythms +polyribonucleotide +polyribonucleotides +polyribosomal +polyribosome +polyribosomes +polys +polysaccharide +polysaccharides +polysemies +polysemous +polysemy +polysome +polysomes +polysorbate +polysorbates +polystichous +polystyrene +polystyrenes +polysulfide +polysulfides +polysyllabic +polysyllabically +polysyllable +polysyllables +polysynaptic +polysynaptically +polysyndeton +polysyndetons +polytechnic +polytechnics +polytene +polytenies +polyteny +polytheism +polytheisms +polytheist +polytheistic +polytheistical +polytheists +polythene +polythenes +polytonal +polytonalities +polytonality +polytonally +polytype +polytypes +polytypic +polyunsaturated +polyurethane +polyurethanes +polyuria +polyurias +polyuric +polyvalence +polyvalences +polyvalent +polyvinyl +polywater +polywaters +polyzoan +polyzoans +polyzoic +pom +pomace +pomaceous +pomaces +pomade +pomaded +pomades +pomading +pomander +pomanders +pomatum +pomatums +pome +pomegranate +pomegranates +pomelo +pomelos +pomes +pomfret +pomfrets +pommee +pommel +pommeled +pommeling +pommelled +pommelling +pommels +pommie +pommies +pommy +pomological +pomologies +pomologist +pomologists +pomology +pomp +pompadour +pompadoured +pompadours +pompano +pompanos +pompom +pompoms +pompon +pompons +pomposities +pomposity +pompous +pompously +pompousness +pompousnesses +pomps +poms +ponce +ponced +ponces +poncho +ponchos +poncing pond +ponded +ponder +ponderable +pondered +ponderer +ponderers +pondering +ponderosa +ponderosas +ponderous +ponderously +ponderousness +ponderousnesses +ponders +ponding +ponds +pondweed +pondweeds +pone +ponent +pones +pong +ponged +pongee +pongees +pongid +pongids +ponging +pongs +poniard +poniarded +poniarding +poniards +ponied +ponies +pons +pontes +pontifex +pontiff +pontiffs +pontific +pontifical +pontifically +pontificals +pontificate +pontificated +pontificates +pontificating +pontification +pontifications +pontificator +pontificators +pontifices +pontil +pontils +pontine +ponton +pontons +pontoon +pontoons +pony +ponying +ponytail +ponytailed +ponytails +pooch +pooched +pooches +pooching +pood +poodle +poodles +poods +poof +poofs +pooftah +pooftahs +poofter +poofters +poofy +pooh +poohed +poohing +poohs pool +pooled +poolhall +poolhalls +pooling +poolroom +poolrooms +pools +poolside +poolsides +poon +poons +poop +pooped +pooping +poops poor +poorer +poorest +poorhouse +poorhouses +poori +pooris +poorish +poorly +poorness +poornesses +poortith +poortiths +poove +pooves pop popcorn +popcorns +pope +popedom +popedoms +popeless +popelike +poperies +popery +popes +popeyed +popgun +popguns +popinjay +popinjays +popish +popishly +poplar +poplars +poplin +poplins +popliteal +poplitic +popover +popovers +poppa +poppas +popped +popper +poppers +poppet +poppets +poppied +poppies +popping +popple +poppled +popples +poppling +poppy +poppycock +poppycocks +poppyhead +poppyheads +pops +popsie +popsies +popsy +populace +populaces popular +popularise +popularised +popularises +popularising +popularities +popularity +popularization +popularizations +popularize +popularized +popularizer +popularizers +popularizes +popularizing +popularly +populate +populated +populates +populating population +populational +populations +populism +populisms +populist +populistic +populists +populous +populously +populousness +populousnesses +porbeagle +porbeagles +porcelain +porcelainize +porcelainized +porcelainizes +porcelainizing +porcelainlike +porcelains +porcelaneous +porcellaneous +porch +porches +porcine +porcini +porcino +porcupine +porcupines +pore +pored +pores +porgies +porgy +poring +porism +porisms pork +porker +porkers +porkier +porkies +porkiest +porkpie +porkpies +porks +porkwood +porkwoods +porky +porn +pornier +porniest +porno +pornographer +pornographers +pornographic +pornographically +pornographies +pornography +pornos +porns +porny +porose +porosities +porosity +porous +porously +porousness +porousnesses +porphyria +porphyrias +porphyries +porphyrin +porphyrins +porphyritic +porphyropsin +porphyropsins +porphyry +porpoise +porpoises +porrect porridge +porridges +porridgy +porringer +porringers port +portabilities +portability portable +portables +portably +portage +portaged +portages +portaging +portal +portaled +portals +portamenti +portamento +portance +portances +portapack +portapacks +portapak +portapaks +portative +portcullis +portcullises +ported +portend +portended +portending +portends +portent +portentous +portentously +portentousness +portentousnesses +portents porter +porterage +porterages +portered +porterhouse +porterhouses +portering +porters +portfolio +portfolios +porthole +portholes +portico +porticoes +porticos +portiere +portieres +porting +portion +portioned +portioning +portionless +portions +portless +portlier +portliest +portliness +portlinesses +portly +portmanteau +portmanteaus +portmanteaux +portrait +portraitist +portraitists +portraits +portraiture +portraitures +portray +portrayal +portrayals +portrayed +portrayer +portrayers +portraying +portrays +portress +portresses +ports +portulaca +portulacas +posada +posadas +pose +posed +poser +posers +poses +poseur +poseurs +posh +posher +poshest +poshly +poshness +poshnesses +posies +posing +posingly +posit +posited +positing position +positional +positionally +positioned +positioning +positions positive +positively +positiveness +positivenesses +positiver +positives +positivest +positivism +positivisms +positivist +positivistic +positivistically +positivists +positivities +positivity +positron +positronium +positroniums +positrons +posits +posologies +posology +posse +posses possess +possessed +possessedly +possessedness +possessednesses +possesses +possessing possession +possessional +possessionless +possessions +possessive +possessively +possessiveness +possessivenesses +possessives +possessor +possessors +possessory +posset +possets +possibilities possibility possible +possibler +possiblest +possibly +possum +possums post +postabortion +postaccident +postadolescent +postadolescents postage +postages +postal +postally +postals +postamputation +postanal +postapocalyptic +postarrest +postatomic +postattack +postaxial +postbaccalaureate +postbag +postbags +postbase +postbellum +postbiblical +postbourgeois +postbox +postboxes +postboy +postboys +postburn +postcapitalist postcard +postcardlike +postcards +postcava +postcavae +postcaval +postclassic +postclassical postcode +postcodes +postcoital +postcollege +postcolleges +postcollegiate +postcolonial +postconception +postconcert +postconquest +postconsonantal +postconvention +postcopulatory +postcoronary +postcoup +postcranial +postcranially +postcrash +postcrises +postcrisis +postdate +postdated +postdates +postdating +postdeadline +postdebate +postdebutante +postdebutantes +postdelivery +postdepositional +postdepression +postdevaluation +postdiluvian +postdiluvians +postdive +postdivestiture +postdivorce +postdoc +postdocs +postdoctoral +postdoctorate +postdrug +posted +postediting +posteditings +posteen +posteens +postelection +postembryonal +postembryonic +postemergence +postemergency +postencephalitic +postepileptic poster +posterior +posteriorities +posteriority +posteriorly +posteriors +posterities +posterity +postern +posterns +posterolateral +posters +posteruptive +postexercise +postexilic +postexperience +postexperimental +postexposure +postface +postfaces +postfault +postfeminist +postfire +postfix +postfixed +postfixes +postfixing +postflight +postform +postformed +postforming +postforms +postfracture +postfractures +postfreeze +postgame +postganglionic +postglacial +postgraduate +postgraduates +postgraduation +postharvest +posthaste +posthastes +postheat +postheats +posthemorrhagic +posthole +postholes +postholiday +postholocaust +posthospital +posthumous +posthumously +posthumousness +posthumousnesses +posthypnotic +postiche +postiches +postilion +postilions +postillion +postillions +postimpact +postimperial +postin +postinaugural +postindependence +postindustrial +postinfection +posting +postings +postinjection +postinoculation +postins +postique +postiques +postirradiation +postischemic +postisolation +postlanding +postlapsarian +postlaunch +postliberation +postliterate +postlude +postludes postman +postmarital +postmark +postmarked +postmarking +postmarks +postmastectomy +postmaster +postmasters +postmastership +postmasterships +postmating +postmedieval +postmen +postmenopausal +postmidnight +postmillenarian +postmillenarianism +postmillenarianisms +postmillenarians +postmillennial +postmillennialism +postmillennialisms +postmillennialist +postmillennialists +postmistress +postmistresses +postmodern +postmodernism +postmodernisms +postmodernist +postmodernists +postmortem +postmortems +postnatal +postnatally +postneonatal +postnuptial +postoperative +postoperatively +postoral +postorbital +postorgasmic +postpaid +postpartum +postpollination +postponable postpone +postponed +postponement +postponements +postponer +postponers +postpones +postponing +postposition +postpositional +postpositionally +postpositions +postpositive +postpositively +postprandial +postpresidential +postprimary +postprison +postproduction +postproductions +postpsychoanalytic +postpuberty +postpubescent +postpubescents +postrace +postrecession +postresurrection +postresurrections +postretirement +postrevolutionary +postriot +postromantic +posts +postscript +postscripts +postseason +postseasons +postsecondary +postshow +poststimulation +poststimulatory +poststimulus +poststrike +postsurgical +postsynaptic +postsynaptically +postsync +postsynced +postsyncing +postsyncs +posttax +postteen +posttension +posttensioned +posttensioning +posttensions +posttest +posttests +posttranscriptional +posttransfusion +posttranslational +posttraumatic +posttreatment +posttrial +postulancies +postulancy +postulant +postulants +postulate +postulated +postulates +postulating +postulation +postulational +postulations +postulator +postulators +postural +posture +postured +posturer +posturers +postures +posturing +posturings +postvaccinal +postvaccination +postvagotomy +postvasectomy +postvocalic +postwar +postweaning +postworkshop +posy pot +potabilities +potability +potable +potableness +potablenesses +potables +potage +potages +potamic +potash +potashes +potassic +potassium +potassiums +potation +potations potato +potatoes +potatory +potbellied +potbellies +potbelly +potboil +potboiled +potboiler +potboilers +potboiling +potboils +potboy +potboys +poteen +poteens +potence +potences +potencies +potency +potent +potentate +potentates potential +potentialities +potentiality +potentially +potentials +potentiate +potentiated +potentiates +potentiating +potentiation +potentiations +potentiator +potentiators +potentilla +potentillas +potentiometer +potentiometers +potentiometric +potently +potful +potfuls +pothead +potheads +potheen +potheens +pother +potherb +potherbs +pothered +pothering +pothers +potholder +potholders +pothole +potholed +potholes +pothook +pothooks +pothouse +pothouses +pothunter +pothunters +pothunting +pothuntings +potiche +potiches +potion +potions +potlach +potlache +potlaches +potlatch +potlatched +potlatches +potlatching +potlike +potline +potlines +potluck +potlucks +potman +potmen +potometer +potometers +potpie +potpies +potpourri +potpourris +pots +potshard +potshards +potsherd +potsherds +potshot +potshots +potshotting +potsie +potsies +potstone +potstones +potsy +pottage +pottages +potted +potteen +potteens +potter +pottered +potterer +potterers +potteries +pottering +potteringly +potters +pottery +pottier +potties +pottiest +potting +pottle +pottles +potto +pottos +potty +potzer +potzers +pouch +pouched +pouches +pouchier +pouchiest +pouching +pouchy +pouf +poufed +pouff +pouffe +pouffed +pouffes +pouffs +poufs +poulard +poularde +poulardes +poulards +poult +poulter +poulterer +poulterers +poulters +poultice +poulticed +poultices +poulticing +poultries +poultry +poultryman +poultrymen +poults +pounce +pounced +pouncer +pouncers +pounces +pouncing pound +poundage +poundages +poundal +poundals +pounded +pounder +pounders +pounding +pounds pour +pourable +pourboire +pourboires +poured +pourer +pourers +pouring +pouringly +pourparler +pourparlers +pourpoint +pourpoints +pours +poussette +poussetted +poussettes +poussetting +poussie +poussies +pout +pouted +pouter +pouters +poutful +poutier +poutiest +pouting +pouts +pouty +poverties +poverty +pow powder +powdered +powderer +powderers +powdering +powderless +powderlike +powders +powdery power +powerboat +powerboats +powerbroker +powerbrokers +powered powerful +powerfully +powerhouse +powerhouses +powering +powerless +powerlessly +powerlessness +powerlessnesses +powers +pows +powter +powters +powwow +powwowed +powwowing +powwows +pox +poxed +poxes +poxing +poxvirus +poxviruses +poyou +poyous +pozzolan +pozzolana +pozzolanas +pozzolanic +pozzolans +praam +praams +practic +practicabilities +practicability +practicable +practicableness +practicablenesses +practicably practical +practicalities +practicality +practically +practicalness +practicalnesses +practicals practice +practiced +practicer +practicers +practices +practicing +practicum +practicums practise +practised +practises +practising +practitioner +practitioners +praecipe +praecipes +praedial +praefect +praefects +praelect +praelected +praelecting +praelects +praemunire +praemunires +praenomen +praenomens +praenomina +praesidia +praesidium +praesidiums +praetor +praetorial +praetorian +praetorians +praetors +praetorship +praetorships +pragmatic +pragmatical +pragmatically +pragmaticism +pragmaticisms +pragmaticist +pragmaticists +pragmatics +pragmatism +pragmatisms +pragmatist +pragmatistic +pragmatists +prahu +prahus +prairie +prairies praise +praised +praiser +praisers +praises +praiseworthily +praiseworthiness +praiseworthinesses +praiseworthy +praising +praline +pralines +pralltriller +pralltrillers +pram +prams +prance +pranced +prancer +prancers +prances +prancing +prandial +prang +pranged +pranging +prangs +prank +pranked +pranking +prankish +prankishly +prankishness +prankishnesses +pranks +prankster +pranksters +prao +praos +prase +praseodymium +praseodymiums +prases +prat +prate +prated +prater +praters +prates +pratfall +pratfalls +pratincole +pratincoles +prating +pratingly +pratique +pratiques +prats +prattle +prattled +prattler +prattlers +prattles +prattling +prattlingly +prau +praus +prawn +prawned +prawner +prawners +prawning +prawns +praxeological +praxeologies +praxeology +praxes +praxis +praxises pray +prayed prayer +prayerful +prayerfully +prayerfulness +prayerfulnesses +prayers +praying +prays +preach +preached +preacher +preachers +preaches +preachier +preachiest +preachified +preachifies +preachify +preachifying +preachily +preachiness +preachinesses +preaching +preachingly +preachment +preachments +preachy +preact +preacted +preacting +preacts +preadapt +preadaptation +preadaptations +preadapted +preadapting +preadaptive +preadapts +preadmission +preadmissions +preadmit +preadmits +preadmitted +preadmitting +preadolescence +preadolescences +preadolescent +preadolescents +preadopt +preadopted +preadopting +preadopts +preadult +preaged +preagricultural +preallot +preallots +preallotted +preallotting +preamble +preambles +preamp +preamplifier +preamplifiers +preamps +preanal +preanesthetic +preanesthetics +preannounce +preannounced +preannounces +preannouncing +preapprove +preapproved +preapproves +preapproving +prearm +prearmed +prearming +prearms +prearrange +prearranged +prearrangement +prearrangements +prearranges +prearranging +preassembled +preassign +preassigned +preassigning +preassigns +preatomic +preaudit +preaudits +preaver +preaverred +preaverring +preavers +preaxial +prebake +prebaked +prebakes +prebaking +prebasal +prebattle +prebend +prebendal +prebendaries +prebendary +prebends +prebiblical +prebill +prebilled +prebilling +prebills +prebind +prebinding +prebinds +prebiologic +prebiological +prebiotic +prebless +preblessed +preblesses +preblessing +preboil +preboiled +preboiling +preboils +prebook +prebooked +prebooking +prebooks +preboom +prebound +prebreakfast +precalculi +precalculus +precalculuses +precancel +precanceled +precanceling +precancellation +precancellations +precancelled +precancelling +precancels +precancerous +precapitalist +precapitalists +precarious +precariously +precariousness +precariousnesses +precast +precasting +precasts +precatory +precaution +precautionary +precautioned +precautioning +precautions +precava +precavae +precaval +precede +preceded +precedence +precedences +precedencies +precedency +precedent +precedents +precedes +preceding +precensor +precensored +precensoring +precensors +precent +precented +precenting +precentor +precentorial +precentors +precentorship +precentorships +precents +precept +preceptive +preceptor +preceptorial +preceptorials +preceptories +preceptors +preceptorship +preceptorships +preceptory +precepts +precertification +precertifications +precertified +precertifies +precertify +precertifying +precess +precessed +precesses +precessing +precession +precessional +precessions +precheck +prechecked +prechecking +prechecks +prechill +prechilled +prechilling +prechills +precieuse +precieux +precinct +precincts +preciosities +preciosity precious +preciouses +preciously +preciousness +preciousnesses +precipe +precipes +precipice +precipices +precipitable +precipitance +precipitances +precipitancies +precipitancy +precipitant +precipitantly +precipitantness +precipitantnesses +precipitants +precipitate +precipitated +precipitately +precipitateness +precipitatenesses +precipitates +precipitating +precipitation +precipitations +precipitative +precipitator +precipitators +precipitin +precipitinogen +precipitinogens +precipitins +precipitous +precipitously +precipitousness +precipitousnesses +precis precise +precised +precisely +preciseness +precisenesses +preciser +precises +precisest +precisian +precisians +precising +precision +precisionist +precisionists +precisions +precited +preclean +precleaned +precleaning +precleans +preclear +preclearance +preclearances +precleared +preclearing +preclears +preclinical +preclude +precluded +precludes +precluding +preclusion +preclusions +preclusive +preclusively +precocial +precocious +precociously +precociousness +precociousnesses +precocities +precocity +precode +precoded +precodes +precoding +precognition +precognitions +precognitive +precoital +precollege +precolleges +precollegiate +precolonial +precombustion +precombustions +precommitment +precompute +precomputed +precomputer +precomputers +precomputes +precomputing +preconceive +preconceived +preconceives +preconceiving +preconception +preconceptions +preconcert +preconcerted +preconcerting +preconcerts +precondition +preconditioned +preconditioning +preconditions +preconquest +preconscious +preconsciouses +preconsciously +preconsonantal +preconstructed +precontact +preconvention +preconventions +preconviction +preconvictions +precook +precooked +precooking +precooks +precool +precooled +precooling +precools +precopulatory +precoup +precrash +precrease +precreased +precreases +precreasing +precrisis +precritical +precure +precured +precures +precuring +precursor +precursors +precursory +precut +precuts +precutting +predaceous +predaceousness +predaceousnesses +predacious +predacities +predacity +predate +predated +predates +predating +predation +predations +predator +predators +predatory +predawn +predawns +predecease +predeceased +predeceases +predeceasing +predecessor +predecessors +predefine +predefined +predefines +predefining +predeliveries +predelivery +predeparture +predepartures +predesignate +predesignated +predesignates +predesignating +predestinarian +predestinarianism +predestinarianisms +predestinarians +predestinate +predestinated +predestinates +predestinating +predestination +predestinations +predestinator +predestinators +predestine +predestined +predestines +predestining +predetermination +predeterminations +predetermine +predetermined +predeterminer +predeterminers +predetermines +predetermining +predevaluation +predevaluations +predevelopment +predevelopments +prediabetes +prediabeteses +prediabetic +prediabetics +predial +predicable +predicables +predicament +predicaments +predicate +predicated +predicates +predicating +predication +predications +predicative +predicatively +predicatory predict +predictabilities +predictability +predictable +predictably +predicted +predicting +prediction +predictions +predictive +predictively +predictor +predictors +predicts +predigest +predigested +predigesting +predigestion +predigestions +predigests +predilection +predilections +predinner +predischarge +predischarged +predischarges +predischarging +prediscoveries +prediscovery +predispose +predisposed +predisposes +predisposing +predisposition +predispositions +predive +prednisolone +prednisolones +prednisone +prednisones +predoctoral +predominance +predominances +predominancies +predominancy +predominant +predominantly +predominate +predominated +predominately +predominates +predominating +predomination +predominations +predrill +predrilled +predrilling +predrills +predusk +predusks +predynastic +pree +preeclampsia +preeclampsias +preeclamptic +preed +preedit +preedited +preediting +preedits +preeing +preelect +preelected +preelecting +preelection +preelections +preelectric +preelects +preembargo +preemergence +preemergent +preemie +preemies +preeminence +preeminences +preeminent +preeminently +preemployment +preemployments +preempt +preempted +preempting +preemption +preemptions +preemptive +preemptively +preemptor +preemptors +preemptory +preempts +preen +preenact +preenacted +preenacting +preenacts +preened +preener +preeners +preening +preenrollment +preenrollments +preens +preerect +preerected +preerecting +preerects +prees +preestablish +preestablished +preestablishes +preestablishing +preethical +preexilic +preexist +preexisted +preexistence +preexistences +preexistent +preexisting +preexists +preexperiment +preexperiments +prefab +prefabbed +prefabbing +prefabricate +prefabricated +prefabricates +prefabricating +prefabrication +prefabrications +prefabs +preface +prefaced +prefacer +prefacers +prefaces +prefacing +prefade +prefaded +prefades +prefading +prefascist +prefascists +prefatory +prefect +prefects +prefectural +prefecture +prefectures prefer +preferabilities +preferability +preferable +preferably preference +preferences +preferential +preferentially +preferment +preferments +preferred +preferrer +preferrers +preferring +prefers +prefeudal +prefight +prefiguration +prefigurations +prefigurative +prefiguratively +prefigurativeness +prefigurativenesses +prefigure +prefigured +prefigurement +prefigurements +prefigures +prefiguring +prefile +prefiled +prefiles +prefiling +prefilled +prefinance +prefinanced +prefinances +prefinancing +prefire +prefired +prefires +prefiring +prefix +prefixal +prefixed +prefixes +prefixing +preflame +preflight +prefocus +prefocused +prefocuses +prefocusing +prefocussed +prefocusses +prefocussing +preform +preformat +preformation +preformationist +preformationists +preformations +preformats +preformatted +preformatting +preformed +preforming +preforms +preformulate +preformulated +preformulates +preformulating +prefrank +prefranked +prefranking +prefranks +prefreeze +prefreezes +prefreezing +prefreshman +prefreshmen +prefrontal +prefrontals +prefroze +prefrozen +pregame +preganglionic +pregenital +preggers +pregnabilities +pregnability +pregnable +pregnancies +pregnancy pregnant +pregnantly +pregnenolone +pregnenolones +preharvest +preharvests +preheadache +preheat +preheated +preheater +preheaters +preheating +preheats +prehensile +prehensilities +prehensility +prehension +prehensions +prehiring +prehistorian +prehistorians +prehistoric +prehistorical +prehistorically +prehistories +prehistory +preholiday +prehominid +prehominids +prehuman +prehumans +preignition +preignitions +preimplantation +preinaugural +preincorporation +preincorporations +preinduction +preinductions +preindustrial +preinterview +preinterviewed +preinterviewing +preinterviews +preinvasion +prejudge +prejudged +prejudger +prejudgers +prejudges +prejudging +prejudgment +prejudgments prejudice +prejudiced +prejudices +prejudicial +prejudicially +prejudicialness +prejudicialnesses +prejudicing +prekindergarten +prekindergartens +prelacies +prelacy +prelapsarian +prelate +prelates +prelatic +prelature +prelatures +prelaunch +prelect +prelected +prelecting +prelection +prelections +prelects +prelegal +prelibation +prelibations +prelife +prelim +preliminaries +preliminarily +preliminary +prelimit +prelimited +prelimiting +prelimits +prelims +preliterary +preliterate +preliterates +prelives +prelogical +prelude +preluded +preluder +preluders +preludes +preluding +prelunch +preluncheon +prelusion +prelusions +prelusive +prelusively +premade +premalignant +preman +premanufacture +premanufactured +premanufactures +premanufacturing +premarital +premaritally +premarket +premarketing +premarketings +premarriage +premarriages +premature +prematurely +prematureness +prematurenesses +prematures +prematurities +prematurity +premaxilla +premaxillae +premaxillaries +premaxillary +premaxillas +premeal +premeasure +premeasured +premeasures +premeasuring +premed +premedic +premedical +premedics +premedieval +premeditate +premeditated +premeditatedly +premeditates +premeditating +premeditation +premeditations +premeditative +premeditator +premeditators +premeds +premeet +premeiotic +premen +premenopausal +premenstrual +premenstrually +premerger +premie premier +premiere +premiered +premieres +premiering +premiers +premiership +premierships +premies +premigration +premillenarian +premillenarianism +premillenarianisms +premillenarians +premillennial +premillennialism +premillennialisms +premillennialist +premillennialists +premillennially +premise +premised +premises +premising +premiss +premisses +premium +premiums +premix +premixed +premixes +premixing +premixt +premodern +premodification +premodifications +premodified +premodifies +premodify +premodifying +premoisten +premoistened +premoistening +premoistens +premolar +premolars +premold +premolded +premolding +premolds +premolt +premonish +premonished +premonishes +premonishing +premonition +premonitions +premonitorily +premonitory +premoral +premorse +premune +premunition +premunitions +premycotic +prename +prenames +prenatal +prenatally +prenomen +prenomens +prenomina +prenominate +prenominated +prenominates +prenominating +prenomination +prenominations +prenoon +prenotification +prenotifications +prenotified +prenotifies +prenotify +prenotifying +prenotion +prenotions +prentice +prenticed +prentices +prenticing +prenumber +prenumbered +prenumbering +prenumbers +prenuptial +preoccupancies +preoccupancy +preoccupation +preoccupations +preoccupied +preoccupies +preoccupy +preoccupying +preopening +preoperational +preoperative +preoperatively +preordain +preordained +preordaining +preordainment +preordainments +preordains +preorder +preordered +preordering +preorders +preordination +preordinations +preovulatory +prep +prepack +prepackage +prepackaged +prepackages +prepackaging +prepacked +prepacking +prepacks +prepaid preparation +preparations +preparative +preparatively +preparatives +preparator +preparatorily +preparators +preparatory prepare +prepared +preparedly +preparedness +preparednesses +preparer +preparers +prepares +preparing +prepaste +prepasted +prepastes +prepasting +prepay +prepaying +prepayment +prepayments +prepays +prepense +prepensely +preperformance +preperformances +prepill +preplace +preplaced +preplaces +preplacing +preplan +preplanned +preplanning +preplans +preplant +preplanting +preponderance +preponderances +preponderancies +preponderancy +preponderant +preponderantly +preponderate +preponderated +preponderately +preponderates +preponderating +preponderation +preponderations +preportion +preportioned +preportioning +preportions +preposition +prepositional +prepositionally +prepositions +prepositive +prepositively +prepossess +prepossessed +prepossesses +prepossessing +prepossession +prepossessions +preposterous +preposterously +preposterousness +preposterousnesses +prepotencies +prepotency +prepotent +prepotently +prepped +preppie +preppier +preppies +preppiest +preppily +preppiness +preppinesses +prepping +preppy +preprandial +prepreg +prepregs +preprepared +prepresidential +preprice +prepriced +preprices +prepricing +preprimary +preprint +preprinted +preprinting +preprints +preprocess +preprocessed +preprocesses +preprocessing +preprocessor +preprocessors +preproduction +preproductions +preprofessional +preprogram +preprogramed +preprograming +preprogrammed +preprogramming +preprograms +preps +prepsychedelic +prepuberal +prepubertal +prepuberties +prepuberty +prepubescence +prepubescences +prepubescent +prepubescents +prepublication +prepublications +prepuce +prepuces +prepunch +prepunched +prepunches +prepunching +prepupal +prepurchase +prepurchased +prepurchases +prepurchasing +preputial +prequalification +prequalifications +prequalified +prequalifies +prequalify +prequalifying +prequel +prequels +prerace +prerecession +prerecord +prerecorded +prerecording +prerecords +preregister +preregistered +preregistering +preregisters +preregistration +preregistrations +prerehearsal +prerelease +prereleases +prerenal +prerequire +prerequired +prerequires +prerequiring +prerequisite +prerequisites +preretirement +preretirements +prereturn +prereview +prerevisionist +prerevisionists +prerevolution +prerevolutionary +prerinse +prerinses +preriot +prerock +prerogative +prerogatived +prerogatives +preromantic +presa +presage +presaged +presageful +presager +presagers +presages +presaging +presale +presanctified +presbyope +presbyopes +presbyopia +presbyopias +presbyopic +presbyopics +presbyter +presbyterate +presbyterates +presbyterial +presbyterially +presbyterials +presbyterian +presbyteries +presbyters +presbytery +preschedule +prescheduled +preschedules +prescheduling +preschool +preschooler +preschoolers +preschools +prescience +presciences +prescient +prescientific +presciently +prescind +prescinded +prescinding +prescinds +prescore +prescored +prescores +prescoring +prescreen +prescreened +prescreening +prescreens +prescribe +prescribed +prescriber +prescribers +prescribes +prescribing +prescript prescription +prescriptions +prescriptive +prescriptively +prescripts +prese +preseason +preseasons +preselect +preselected +preselecting +preselection +preselections +preselects +presell +preselling +presells +presence +presences present +presentabilities +presentability +presentable +presentableness +presentablenesses +presentably presentation +presentational +presentations +presentative +presented +presentee +presentees +presentence +presentenced +presentences +presentencing +presentencings +presenter +presenters +presentient +presentiment +presentimental +presentiments +presenting +presentism +presentisms +presentist +presently +presentment +presentments +presentness +presentnesses +presents +preservabilities +preservability +preservable +preservation +preservationist +preservationists +preservations +preservative +preservatives preserve +preserved +preserver +preservers +preserves +preservice +preserving +preset +presets +presetting +presettlement +presettlements +preshape +preshaped +preshapes +preshaping +preshow +preshowed +preshowing +preshown +preshows +preshrank +preshrink +preshrinking +preshrinks +preshrunk +preshrunken +preside +presided +presidencies +presidency president +presidential +presidentially +presidents +presidentship +presidentships +presider +presiders +presides +presidia +presidial +presidiary +presiding +presidio +presidios +presidium +presidiums +presift +presifted +presifting +presifts +presignified +presignifies +presignify +presignifying +preslaughter +presleep +preslice +presliced +preslices +preslicing +presoak +presoaked +presoaking +presoaks +presold +presong +presort +presorted +presorting +presorts +prespecified +prespecifies +prespecify +prespecifying +presplit press +pressboard +pressboards +pressed +presser +pressers +presses +pressing +pressingly +pressings +pressman +pressmark +pressmarks +pressmen +pressor +pressors +pressroom +pressrooms +pressrun +pressruns pressure +pressured +pressureless +pressures +pressuring +pressurise +pressurised +pressurises +pressurising +pressurization +pressurizations +pressurize +pressurized +pressurizer +pressurizers +pressurizes +pressurizing +presswork +pressworks +prest +prestamp +prestamped +prestamping +prestamps +prester +presterilize +presterilized +presterilizes +presterilizing +presters +prestidigitation +prestidigitations +prestidigitator +prestidigitators +prestige +prestigeful +prestiges +prestigious +prestigiously +prestigiousness +prestigiousnesses +prestissimo +presto +prestorage +prestorages +prestos +prestress +prestressed +prestresses +prestressing +prestrike +prestructure +prestructured +prestructures +prestructuring +prests +presumable +presumably +presume +presumed +presumedly +presumer +presumers +presumes +presuming +presumingly +presummit +presumption +presumptions +presumptive +presumptively +presumptuous +presumptuously +presumptuousness +presumptuousnesses +presuppose +presupposed +presupposes +presupposing +presupposition +presuppositional +presuppositions +presurgery +presweeten +presweetened +presweetening +presweetens +presymptomatic +presynaptic +presynaptically +pretape +pretaped +pretapes +pretaping +pretaste +pretasted +pretastes +pretasting +pretax +pretechnological +preteen +preteens +pretelevision +pretence +pretences pretend +pretended +pretendedly +pretender +pretenders +pretending +pretends +pretense +pretenses +pretension +pretensioned +pretensioning +pretensionless +pretensions +pretentious +pretentiously +pretentiousness +pretentiousnesses +preterit +preterite +preterites +preterits +preterm +preterminal +pretermination +preterminations +pretermission +pretermissions +pretermit +pretermits +pretermitted +pretermitting +preternatural +preternaturally +preternaturalness +preternaturalnesses +pretest +pretested +pretesting +pretests +pretext +pretexted +pretexting +pretexts +pretheater +pretor +pretorian +pretorians +pretors +pretournament +pretournaments +pretrain +pretrained +pretraining +pretrains +pretravel +pretreat +pretreated +pretreating +pretreatment +pretreatments +pretreats +pretrial +pretrials +pretrim +pretrimmed +pretrimming +pretrims +prettied +prettier +pretties +prettiest +prettification +prettifications +prettified +prettifier +prettifiers +prettifies +prettify +prettifying +prettily +prettiness +prettinesses pretty +prettying +prettyish +pretype +pretyped +pretypes +pretyping +pretzel +pretzels +preunification +preunion +preunions +preunite +preunited +preunites +preuniting +preuniversity +prevail +prevailed +prevailing +prevails +prevalence +prevalences +prevalent +prevalently +prevalents +prevaricate +prevaricated +prevaricates +prevaricating +prevarication +prevarications +prevaricator +prevaricators +prevenient +preveniently prevent +preventabilities +preventability +preventable +preventative +preventatives +prevented +preventer +preventers +preventible +preventing +prevention +preventions +preventive +preventively +preventiveness +preventivenesses +preventives +prevents +preverbal +previable preview +previewed +previewer +previewers +previewing +previews +previous +previously +previousness +previousnesses +previse +prevised +previses +prevising +prevision +previsional +previsionary +previsioned +previsioning +previsions +previsor +previsors +prevocalic +prevocational +prevue +prevued +prevues +prevuing +prewar +prewarm +prewarmed +prewarming +prewarms +prewarn +prewarned +prewarning +prewarns +prewash +prewashed +prewashes +prewashing +preweaning +prework +prewrap +prewrapped +prewrapping +prewraps +prewriting +prewritings +prex +prexes +prexies +prexy +prey +preyed +preyer +preyers +preying +preys +prez +prezes +priapean +priapi +priapic +priapism +priapisms +priapus +priapuses price +priced +priceless +pricelessly +pricer +pricers +prices +pricey +pricier +priciest +pricing +prick +pricked +pricker +prickers +pricket +prickets +prickier +prickiest +pricking +prickings +prickle +prickled +prickles +pricklier +prickliest +prickliness +pricklinesses +prickling +prickly +pricks +pricky +pricy pride +prided +prideful +pridefully +pridefulness +pridefulnesses +prides +priding +pried +priedieu +priedieus +priedieux +prier +priers +pries +priest +priested +priestess +priestesses +priesthood +priesthoods +priesting +priestlier +priestliest +priestliness +priestlinesses +priestly +priests +prig +prigged +priggeries +priggery +prigging +priggish +priggishly +priggishness +priggishnesses +priggism +priggisms +prigs +prill +prilled +prilling +prills +prim +prima +primacies +primacy +primage +primages +primal +primalities +primality +primaries +primarily primary +primas +primatal +primatals +primate +primates +primateship +primateships +primatial +primatological +primatologies +primatologist +primatologists +primatology +prime +primed +primely +primeness +primenesses +primer +primero +primeros +primers +primes +primeval +primevally +primi +primine +primines +priming +primings +primipara +primiparae +primiparas +primiparous primitive +primitively +primitiveness +primitivenesses +primitives +primitivism +primitivisms +primitivist +primitivistic +primitivists +primitivities +primitivity +primly +primmed +primmer +primmest +primming +primness +primnesses +primo +primogenitor +primogenitors +primogeniture +primogenitures +primordia +primordial +primordially +primordium +primos +primp +primped +primping +primps +primrose +primroses +prims +primsie +primula +primulas +primus +primuses +prince +princedom +princedoms +princelet +princelets +princelier +princeliest +princeliness +princelinesses +princeling +princelings +princely +princes +princeship +princeships +princess +princesse +princesses +principal +principalities +principality +principally +principals +principalship +principalships +principe +principi +principia +principium principle +principled +principles +princock +princocks +princox +princoxes +prink +prinked +prinker +prinkers +prinking +prinks print +printabilities +printability +printable +printed +printer +printeries +printers +printery +printhead +printheads +printing +printings +printless +printmaker +printmakers +printmaking +printmakings +printout +printouts +prints +prion +prions +prior +priorate +priorates +prioress +prioresses +priories +priorities +prioritization +prioritizations +prioritize +prioritized +prioritizes +prioritizing +priority +priorly +priors +priorship +priorships +priory +prise +prised +prisere +priseres +prises +prising +prism +prismatic +prismatically +prismatoid +prismatoids +prismoid +prismoidal +prismoids +prisms prison +prisoned prisoner +prisoners +prisoning +prisons +priss +prissed +prisses +prissier +prissies +prissiest +prissily +prissiness +prissinesses +prissing +prissy +pristane +pristanes +pristine +pristinely +prithee +privacies +privacy +privatdocent +privatdocents +privatdozent +privatdozents private +privateer +privateered +privateering +privateers +privately +privateness +privatenesses +privater +privates +privatest +privation +privations +privatise +privatised +privatises +privatising +privatism +privatisms +privative +privatively +privatives +privatization +privatizations +privatize +privatized +privatizes +privatizing +privet +privets +privier +privies +priviest privilege +privileged +privileges +privileging +privily +privities +privity +privy prize +prized +prizefight +prizefighter +prizefighters +prizefighting +prizefightings +prizefights +prizer +prizers +prizes +prizewinner +prizewinners +prizewinning +prizing +pro +proa +proabortion +proactive +proas +probabilism +probabilisms +probabilist +probabilistic +probabilistically +probabilists +probabilities +probability +probable +probables probably +proband +probands +probang +probangs +probate +probated +probates +probating +probation +probational +probationally +probationary +probationer +probationers +probations +probative +probatory +probe +probed +probenecid +probenecids +prober +probers +probes +probing +probit +probities +probits +probity problem +problematic +problematical +problematically +problematics +problems +proboscidean +proboscideans +proboscides +proboscidian +proboscidians +proboscis +proboscises +procaine +procaines +procambia +procambial +procambium +procambiums +procarbazine +procarbazines +procarp +procarps +procaryote +procaryotes +procathedral +procathedrals +procedural +procedurally +procedurals procedure +procedures +proceed +proceeded +proceeding +proceedings +proceeds +procephalic +procercoid +procercoids process +processabilities +processability +processable +processed +processes +processibilities +processibility +processible +processing +procession +processional +processionally +processionals +processioned +processioning +processions +processor +processors +prochain +prochein +proclaim +proclaimed +proclaimer +proclaimers +proclaiming +proclaims +proclamation +proclamations +proclitic +proclitics +proclivities +proclivity +proconsul +proconsular +proconsulate +proconsulates +proconsuls +proconsulship +proconsulships +procrastinate +procrastinated +procrastinates +procrastinating +procrastination +procrastinations +procrastinator +procrastinators +procreant +procreate +procreated +procreates +procreating +procreation +procreations +procreative +procreator +procreators +procrustean +procryptic +proctodaea +proctodaeum +proctodaeums +proctologic +proctological +proctologies +proctologist +proctologists +proctology +proctor +proctored +proctorial +proctoring +proctors +proctorship +proctorships +procumbent +procurable +procural +procurals +procuration +procurations +procurator +procuratorial +procurators +procure +procured +procurement +procurements +procurer +procurers +procures +procuring +prod +prodded +prodder +prodders +prodding +prodigal +prodigalities +prodigality +prodigally +prodigals +prodigies +prodigious +prodigiously +prodigiousness +prodigiousnesses +prodigy +prodromal +prodromata +prodrome +prodromes +prods produce +produced +producer +producers +produces +producible +producing product production +productional +productions +productive +productively +productiveness +productivenesses +productivities +productivity +products +proem +proemial +proems +proenzyme +proenzymes +proestrus +proestruses +proette +proettes +prof +profanation +profanations +profanatory +profane +profaned +profanely +profaneness +profanenesses +profaner +profaners +profanes +profaning +profanities +profanity +profess +professed +professedly +professes +professing profession +professional +professionalism +professionalisms +professionalization +professionalizations +professionalize +professionalized +professionalizes +professionalizing +professionally +professionals +professions professor +professorate +professorates +professorial +professorially +professoriat +professoriate +professoriates +professoriats +professors +professorship +professorships +proffer +proffered +proffering +proffers +proficiencies +proficiency +proficient +proficiently +proficients +profile +profiled +profiler +profilers +profiles +profiling profit +profitabilities +profitability +profitable +profitableness +profitablenesses +profitably +profited +profiteer +profiteered +profiteering +profiteers +profiter +profiterole +profiteroles +profiters +profiting +profitless +profits +profitwise +profligacies +profligacy +profligate +profligately +profligates +profluent +profound +profounder +profoundest +profoundly +profoundness +profoundnesses +profounds +profs +profundities +profundity +profuse +profusely +profuseness +profusenesses +profusion +profusions +prog +progenies +progenitor +progenitors +progeny +progeria +progerias +progestational +progesterone +progesterones +progestin +progestins +progestogen +progestogenic +progestogens +progged +progger +proggers +progging +proglottid +proglottides +proglottids +proglottis +prognathism +prognathisms +prognathous +prognose +prognosed +prognoses +prognosing +prognosis +prognostic +prognosticate +prognosticated +prognosticates +prognosticating +prognostication +prognostications +prognosticative +prognosticator +prognosticators +prognostics +prograde program +programed +programer +programers +programing +programings +programmabilities +programmability +programmable +programmables +programmatic +programmatically programme +programmed +programmer +programmers +programmes +programming +programmings +programs progress +progressed +progresses +progressing +progression +progressional +progressions +progressive +progressively +progressiveness +progressivenesses +progressives +progressivism +progressivisms +progressivist +progressivistic +progressivists +progressivities +progressivity +progs prohibit +prohibited +prohibiting +prohibition +prohibitionist +prohibitionists +prohibitions +prohibitive +prohibitively +prohibitiveness +prohibitivenesses +prohibitory +prohibits +proinsulin +proinsulins project +projectable +projected +projectile +projectiles +projecting +projection +projectional +projectionist +projectionists +projections +projective +projectively +projector +projectors +projects +projet +projets +prokaryote +prokaryotes +prokaryotic +prolabor +prolactin +prolactins +prolamin +prolamine +prolamines +prolamins +prolan +prolans +prolapse +prolapsed +prolapses +prolapsing +prolate +prole +proleg +prolegomena +prolegomenon +prolegomenous +prolegs +prolepses +prolepsis +proleptic +proleptically +proles +proletarian +proletarianise +proletarianised +proletarianises +proletarianising +proletarianization +proletarianizations +proletarianize +proletarianized +proletarianizes +proletarianizing +proletarians +proletariat +proletariats +proliferate +proliferated +proliferates +proliferating +proliferation +proliferations +proliferative +prolific +prolificacies +prolificacy +prolifically +prolificities +prolificity +prolificness +prolificnesses +proline +prolines +prolix +prolixities +prolixity +prolixly +prolocutor +prolocutors +prolog +prologed +prologing +prologize +prologized +prologizes +prologizing +prologs +prologue +prologued +prologues +prologuing +prologuize +prologuized +prologuizes +prologuizing +prolong +prolongation +prolongations +prolonge +prolonged +prolonger +prolongers +prolonges +prolonging +prolongs +prolusion +prolusions +prolusory +prom +promenade +promenaded +promenader +promenaders +promenades +promenading +promethium +promethiums +promine +prominence +prominences +prominent +prominently +promines +promiscuities +promiscuity +promiscuous +promiscuously +promiscuousness +promiscuousnesses promise +promised +promisee +promisees +promiser +promisers +promises +promising +promisingly +promisor +promisors +promissory +promo +promontories +promontory +promos +promotabilities +promotability +promotable promote +promoted +promoter +promoters +promotes +promoting +promotion +promotional +promotions +promotive +promotiveness +promotivenesses +prompt +promptbook +promptbooks +prompted +prompter +prompters +promptest +prompting +promptitude +promptitudes +promptly +promptness +promptnesses +prompts +proms +promulgate +promulgated +promulgates +promulgating +promulgation +promulgations +promulgator +promulgators +promulge +promulged +promulges +promulging +pronate +pronated +pronates +pronating +pronation +pronations +pronator +pronatores +pronators +prone +pronely +proneness +pronenesses +pronephric +pronephros +pronephroses +prong +pronged +pronghorn +pronghorns +pronging +prongs +pronominal +pronominally +pronota +pronotum +pronoun pronounce +pronounceabilities +pronounceability +pronounceable +pronounced +pronouncedly +pronouncement +pronouncements +pronouncer +pronouncers +pronounces +pronouncing +pronouns +pronto +pronuclear +pronuclei +pronucleus +pronucleuses +pronunciamento +pronunciamentoes +pronunciamentos pronunciation +pronunciational +pronunciations +proof +proofed +proofer +proofers +proofing +proofread +proofreader +proofreaders +proofreading +proofreads +proofroom +proofrooms +proofs +prop +propaedeutic +propaedeutics +propagable +propaganda +propagandas +propagandist +propagandistic +propagandistically +propagandists +propagandize +propagandized +propagandizer +propagandizers +propagandizes +propagandizing +propagate +propagated +propagates +propagating +propagation +propagations +propagative +propagator +propagators +propagule +propagules +propane +propanes +propel +propellant +propellants +propelled +propellent +propellents +propeller +propellers +propelling +propellor +propellors +propels +propend +propended +propending +propends +propene +propenes +propenol +propenols +propense +propensities +propensity +propenyl proper +properdin +properdins +properer +properest properly +properness +propernesses +propers +propertied +properties +property +propertyless +propertylessness +propertylessnesses +prophage +prophages +prophase +prophases +prophasic +prophecies +prophecy +prophesied +prophesier +prophesiers +prophesies +prophesy +prophesying +prophet +prophetess +prophetesses +prophethood +prophethoods +prophetic +prophetical +prophetically +prophets +prophylactic +prophylactically +prophylactics +prophylaxes +prophylaxis +propine +propined +propines +propining +propinquities +propinquity +propionate +propionates +propitiate +propitiated +propitiates +propitiating +propitiation +propitiations +propitiator +propitiators +propitiatory +propitious +propitiously +propitiousness +propitiousnesses +propjet +propjets +proplastid +proplastids +propman +propmen +propolis +propolises +propone +proponed +proponent +proponents +propones +proponing +proportion +proportionable +proportionably +proportional +proportionalities +proportionality +proportionally +proportionals +proportionate +proportionated +proportionately +proportionates +proportionating +proportioned +proportioning +proportions +proposal +proposals +propose +proposed +proposer +proposers +proposes +proposing +propositi +proposition +propositional +propositioned +propositioning +propositions +propositus +propound +propounded +propounder +propounders +propounding +propounds +propoxyphene +propoxyphenes +propped +propping +propraetor +propraetors +propranolol +propranolols +propretor +propretors +proprietaries +proprietary +proprieties +proprietor +proprietorial +proprietors +proprietorship +proprietorships +proprietress +proprietresses +propriety +proprioception +proprioceptions +proprioceptive +proprioceptor +proprioceptors +props +proptoses +proptosis +propulsion +propulsions +propulsive +propyl +propyla +propylaea +propylaeum +propylene +propylenes +propylic +propylon +propyls +prorate +prorated +prorates +prorating +proration +prorations +prorogate +prorogated +prorogates +prorogating +prorogation +prorogations +prorogue +prorogued +prorogues +proroguing +pros +prosaic +prosaically +prosaism +prosaisms +prosaist +prosaists +prosateur +prosateurs +prosauropod +prosauropods +proscenium +prosceniums +prosciutti +prosciutto +prosciuttos +proscribe +proscribed +proscriber +proscribers +proscribes +proscribing +proscription +proscriptions +proscriptive +proscriptively +prose +prosect +prosected +prosecting +prosector +prosectors +prosects +prosecutable +prosecute +prosecuted +prosecutes +prosecuting +prosecution +prosecutions +prosecutor +prosecutorial +prosecutors +prosed +proselyte +proselyted +proselytes +proselyting +proselytise +proselytised +proselytises +proselytising +proselytism +proselytisms +proselytization +proselytizations +proselytize +proselytized +proselytizer +proselytizers +proselytizes +proselytizing +proseminar +proseminars +prosencephala +prosencephalic +prosencephalon +proser +prosers +proses +prosier +prosiest +prosily +prosimian +prosimians +prosiness +prosinesses +prosing +prosit +proso +prosobranch +prosobranchs +prosodic +prosodical +prosodically +prosodies +prosodist +prosodists +prosody +prosoma +prosomal +prosomas +prosopographical +prosopographies +prosopography +prosopopoeia +prosopopoeias +prosos +prospect +prospected +prospecting +prospective +prospectively +prospector +prospectors +prospects +prospectus +prospectuses +prosper +prospered +prospering +prosperities +prosperity +prosperous +prosperously +prosperousness +prosperousnesses +prospers +pross +prosses +prossie +prossies +prost +prostacyclin +prostacyclins +prostaglandin +prostaglandins +prostate +prostatectomies +prostatectomy +prostates +prostatic +prostatism +prostatisms +prostatites +prostatitides +prostatitis +prostatitises +prostheses +prosthesis +prosthetic +prosthetically +prosthetics +prosthetist +prosthetists +prosthodontics +prosthodontist +prosthodontists +prostie +prosties +prostitute +prostituted +prostitutes +prostituting +prostitution +prostitutions +prostitutor +prostitutors +prostomia +prostomial +prostomium +prostrate +prostrated +prostrates +prostrating +prostration +prostrations +prostyle +prostyles +prosy +protactinium +protactiniums +protagonist +protagonists +protamin +protamine +protamines +protamins +protases +protasis +protatic +protea +protean +proteans +proteas +protease +proteases protect +protectant +protectants +protected +protecting protection +protectionism +protectionisms +protectionist +protectionists +protections +protective +protectively +protectiveness +protectivenesses +protector +protectoral +protectorate +protectorates +protectories +protectors +protectorship +protectorships +protectory +protectress +protectresses +protects +protege +protegee +protegees +proteges +protei +proteid +proteide +proteides +proteids +protein +proteinaceous +proteinase +proteinases +proteins +proteinuria +proteinurias +protend +protended +protending +protends +protensive +protensively +proteoglycan +proteoglycans +proteolyses +proteolysis +proteolytic +proteolytically +proteose +proteoses +protest +protestant +protestants +protestation +protestations +protested +protester +protesters +protesting +protestor +protestors +protests +proteus +proteuses +prothalamia +prothalamion +prothalamium +prothalli +prothallia +prothallium +prothallus +prothalluses +protheses +prothesis +prothetic +prothonotarial +prothonotaries +prothonotary +prothoraces +prothoracic +prothorax +prothoraxes +prothrombin +prothrombins +protist +protistan +protistans +protists +protium +protiums +protocol +protocoled +protocoling +protocolled +protocolling +protocols +protoderm +protoderms +protogalaxies +protogalaxy +protohistorian +protohistorians +protohistoric +protohistories +protohistory +protohuman +protohumans +protolanguage +protolanguages +protomartyr +protomartyrs +proton +protonate +protonated +protonates +protonating +protonation +protonations +protonema +protonemal +protonemata +protonematal +protonic +protonotaries +protonotary +protons +protopathic +protophloem +protophloems +protoplanet +protoplanetary +protoplanets +protoplasm +protoplasmic +protoplasms +protoplast +protoplasts +protopod +protopods +protoporphyrin +protoporphyrins +protostar +protostars +protostele +protosteles +protostelic +protostome +protostomes +prototroph +prototrophic +prototrophies +prototrophs +prototrophy +prototypal +prototype +prototyped +prototypes +prototypic +prototypical +prototypically +prototyping +protoxid +protoxids +protoxylem +protoxylems +protozoa +protozoal +protozoan +protozoans +protozoologies +protozoologist +protozoologists +protozoology +protozoon +protract +protracted +protractile +protracting +protraction +protractions +protractive +protractor +protractors +protracts +protreptic +protreptics +protrude +protruded +protrudes +protruding +protrusible +protrusion +protrusions +protrusive +protrusively +protrusiveness +protrusivenesses +protuberance +protuberances +protuberant +protuberantly +protyl +protyle +protyles +protyls proud +prouder +proudest +proudful +proudhearted +proudly +prounion +proustite +proustites +provable +provableness +provablenesses +provably +provascular prove +proved +proven +provenance +provenances +provender +provenders +provenience +proveniences +provenly +proventriculi +proventriculus +prover +proverb +proverbed +proverbial +proverbially +proverbing +proverbs +provers +proves provide +provided +providence +providences +provident +providential +providentially +providently +provider +providers +provides +providing province +provinces +provincial +provincialism +provincialisms +provincialist +provincialists +provincialities +provinciality +provincialization +provincializations +provincialize +provincialized +provincializes +provincializing +provincially +provincials +proving +proviral +provirus +proviruses +provision +provisional +provisionally +provisionals +provisionary +provisioned +provisioner +provisioners +provisioning +provisions +proviso +provisoes +provisory +provisos +provitamin +provitamins +provocateur +provocateurs +provocation +provocations +provocative +provocatively +provocativeness +provocativenesses +provocatives +provoke +provoked +provoker +provokers +provokes +provoking +provokingly +provolone +provolones +provost +provosts +prow +prowar +prower +prowess +prowesses +prowest +prowl +prowled +prowler +prowlers +prowling +prowls +prows +proxemic +proxemics +proxies +proximal +proximally +proximate +proximately +proximateness +proximatenesses +proximities +proximity +proximo +proxy +prude +prudence +prudences +prudent +prudential +prudentially +prudently +pruderies +prudery +prudes +prudish +prudishly +prudishness +prudishnesses +pruinose +prunable +prune +pruned +prunella +prunellas +prunelle +prunelles +prunello +prunellos +pruner +pruners +prunes +pruning +prunus +prunuses +prurience +pruriences +pruriencies +pruriency +prurient +pruriently +prurigo +prurigos +pruritic +pruritus +prurituses +prussianise +prussianised +prussianises +prussianising +prussianization +prussianizations +prussianize +prussianized +prussianizes +prussianizing +prussic +pruta +prutah +prutot +prutoth +pry +pryer +pryers +prying +pryingly +prythee +psalm +psalmbook +psalmbooks +psalmed +psalmic +psalming +psalmist +psalmists +psalmodies +psalmody +psalms +psalter +psalteria +psalteries +psalterium +psalters +psaltery +psaltries +psaltry +psammite +psammites +psammon +psammons +pschent +pschents +psephite +psephites +psephological +psephologies +psephologist +psephologists +psephology +pseud +pseudepigraph +pseudepigrapha +pseudepigraphies +pseudepigraphon +pseudepigraphs +pseudepigraphy +pseudo +pseudoallele +pseudoalleles +pseudocholinesterase +pseudocholinesterases +pseudoclassic +pseudoclassicism +pseudoclassicisms +pseudoclassics +pseudocoel +pseudocoelomate +pseudocoelomates +pseudocoels +pseudocyeses +pseudocyesis +pseudomonad +pseudomonades +pseudomonads +pseudomonas +pseudomorph +pseudomorphic +pseudomorphism +pseudomorphisms +pseudomorphous +pseudomorphs +pseudonym +pseudonymities +pseudonymity +pseudonymous +pseudonymously +pseudonymousness +pseudonymousnesses +pseudonyms +pseudoparenchyma +pseudoparenchymas +pseudoparenchymata +pseudoparenchymatous +pseudopod +pseudopodal +pseudopodia +pseudopodial +pseudopodium +pseudopods +pseudopregnancies +pseudopregnancy +pseudopregnant +pseudorandom +pseudos +pseudoscience +pseudosciences +pseudoscientific +pseudoscientist +pseudoscientists +pseudoscorpion +pseudoscorpions +pseudosophisticated +pseudosophistication +pseudosophistications +pseudotuberculoses +pseudotuberculosis +pseuds +pshaw +pshawed +pshawing +pshaws +psi +psilocin +psilocins +psilocybin +psilocybins +psilophyte +psilophytes +psilophytic +psiloses +psilosis +psilotic +psis +psittacine +psittacines +psittacoses +psittacosis +psittacosises +psittacotic +psoae +psoai +psoas +psoatic +psocid +psocids +psoralea +psoraleas +psoralen +psoralens +psoriases +psoriasis +psoriatic +psoriatics +psst +psych +psychasthenia +psychasthenias +psychasthenic +psychasthenics +psyche +psyched +psychedelia +psychedelias +psychedelic +psychedelically +psychedelics +psyches +psychiatric +psychiatrically +psychiatries +psychiatrist +psychiatrists +psychiatry +psychic +psychical +psychically +psychics +psyching +psycho +psychoacoustic +psychoacoustics +psychoactive +psychoanalyses +psychoanalysis +psychoanalyst +psychoanalysts +psychoanalytic +psychoanalytical +psychoanalytically +psychoanalyze +psychoanalyzed +psychoanalyzes +psychoanalyzing +psychobabble +psychobabbler +psychobabblers +psychobabbles +psychobiographer +psychobiographers +psychobiographical +psychobiographies +psychobiography +psychobiologic +psychobiological +psychobiologies +psychobiologist +psychobiologists +psychobiology +psychochemical +psychochemicals +psychodrama +psychodramas +psychodramatic +psychodynamic +psychodynamically +psychodynamics +psychogeneses +psychogenesis +psychogenetic +psychogenic +psychogenically +psychograph +psychographs +psychohistorian +psychohistorians +psychohistorical +psychohistories +psychohistory +psychokineses +psychokinesis +psychokinetic +psycholinguist +psycholinguistic +psycholinguistics +psycholinguists +psychologic +psychological +psychologically +psychologies +psychologise +psychologised +psychologises +psychologising +psychologism +psychologisms +psychologist +psychologists +psychologize +psychologized +psychologizes +psychologizing psychology +psychometric +psychometrically +psychometrician +psychometricians +psychometrics +psychometries +psychometry +psychomotor +psychoneuroses +psychoneurosis +psychoneurotic +psychoneurotics +psychopath +psychopathic +psychopathically +psychopathics +psychopathies +psychopathologic +psychopathological +psychopathologically +psychopathologies +psychopathologist +psychopathologists +psychopathology +psychopaths +psychopathy +psychopharmacologic +psychopharmacological +psychopharmacologies +psychopharmacologist +psychopharmacologists +psychopharmacology +psychophysical +psychophysically +psychophysicist +psychophysicists +psychophysics +psychophysiologic +psychophysiological +psychophysiologically +psychophysiologies +psychophysiologist +psychophysiologists +psychophysiology +psychos +psychoses +psychosexual +psychosexualities +psychosexuality +psychosexually +psychosis +psychosocial +psychosocially +psychosomatic +psychosomatically +psychosomatics +psychosurgeon +psychosurgeons +psychosurgeries +psychosurgery +psychosurgical +psychosyntheses +psychosynthesis +psychotherapeutic +psychotherapeutically +psychotherapies +psychotherapist +psychotherapists +psychotherapy +psychotic +psychotically +psychotics +psychotomimetic +psychotomimetically +psychotomimetics +psychotropic +psychotropics +psychrometer +psychrometers +psychrometric +psychrometries +psychrometry +psychrophilic +psychs +psylla +psyllas +psyllid +psyllids +psyllium +psylliums +psywar +psywars +ptarmigan +ptarmigans +pteranodon +pteranodons +pteridine +pteridines +pteridological +pteridologies +pteridologist +pteridologists +pteridology +pteridophyte +pteridophytes +pteridosperm +pteridosperms +pterin +pterins +pterodactyl +pterodactyls +pteropod +pteropods +pterosaur +pterosaurs +pterygia +pterygium +pterygiums +pterygoid +pterygoids +pteryla +pterylae +ptisan +ptisans +ptomain +ptomaine +ptomaines +ptomains +ptoses +ptosis +ptotic +ptyalin +ptyalins +ptyalism +ptyalisms pub +puberal +pubertal +puberties +puberty +puberulent +pubes +pubescence +pubescences +pubescent +pubic +pubis public +publically +publican +publicans +publication +publications +publicise +publicised +publicises +publicising +publicist +publicists +publicities +publicity +publicize +publicized +publicizes +publicizing +publicly +publicness +publicnesses +publics publish +publishable +published +publisher +publishers +publishes +publishing +publishings +pubs +puccoon +puccoons +puce +puces +puck +pucka +pucker +puckered +puckerer +puckerers +puckerier +puckeriest +puckering +puckers +puckery +puckish +puckishly +puckishness +puckishnesses +pucks +pud +pudding +puddings +puddle +puddled +puddler +puddlers +puddles +puddlier +puddliest +puddling +puddlings +puddly +pudencies +pudency +pudenda +pudendal +pudendum +pudgier +pudgiest +pudgily +pudginess +pudginesses +pudgy +pudibund +pudic +puds +pueblo +pueblos +puerile +puerilely +puerilism +puerilisms +puerilities +puerility +puerperal +puerperia +puerperium +puff +puffball +puffballs +puffed +puffer +pufferies +puffers +puffery +puffier +puffiest +puffily +puffin +puffiness +puffinesses +puffing +puffins +puffs +puffy +pug +pugaree +pugarees +puggaree +puggarees +pugged +puggier +puggiest +pugging +puggish +puggree +puggrees +puggries +puggry +puggy +pugh +pugilism +pugilisms +pugilist +pugilistic +pugilists +pugmark +pugmarks +pugnacious +pugnaciously +pugnaciousness +pugnaciousnesses +pugnacities +pugnacity +pugree +pugrees +pugs +puisne +puisnes +puissance +puissances +puissant +puja +pujah +pujahs +pujas +puke +puked +pukes +puking +pukka +pul +pula +pulchritude +pulchritudes +pulchritudinous +pule +puled +puler +pulers +pules +puli +pulicene +pulicide +pulicides +pulik +puling +pulingly +pulings +pulis pull +pullback +pullbacks +pulled +puller +pullers +pullet +pullets +pulley +pulleys +pulling +pullman +pullmans +pullout +pullouts +pullover +pullovers +pulls +pullulate +pullulated +pullulates +pullulating +pullulation +pullulations +pullup +pullups +pulmonary +pulmonate +pulmonates +pulmonic +pulmotor +pulmotors +pulp +pulpal +pulpally +pulped +pulper +pulpers +pulpier +pulpiest +pulpily +pulpiness +pulpinesses +pulping +pulpit +pulpital +pulpits +pulpless +pulpous +pulps +pulpwood +pulpwoods +pulpy +pulque +pulques +puls +pulsant +pulsar +pulsars +pulsate +pulsated +pulsates +pulsatile +pulsating +pulsation +pulsations +pulsator +pulsators pulse +pulsed +pulsejet +pulsejets +pulser +pulsers +pulses +pulsing +pulsion +pulsions +pulsojet +pulsojets +pulverable +pulverise +pulverised +pulverises +pulverising +pulverizable +pulverization +pulverizations +pulverize +pulverized +pulverizer +pulverizers +pulverizes +pulverizing +pulverulent +pulvilli +pulvillus +pulvinar +pulvini +pulvinus +puma +pumas +pumelo +pumelos +pumice +pumiced +pumiceous +pumicer +pumicers +pumices +pumicing +pumicite +pumicites +pummel +pummeled +pummeling +pummelled +pummelling +pummelo +pummelos +pummels pump +pumped +pumper +pumpernickel +pumpernickels +pumpers +pumping +pumpkin +pumpkins +pumpkinseed +pumpkinseeds +pumpless +pumplike +pumps +pun +puna +punas +punch +punchball +punchballs +punchboard +punchboards +punched +puncheon +puncheons +puncher +punchers +punches +punchier +punchiest +punchily +punchinello +punchinellos +punching +punchless +punchy +punctate +punctation +punctations +punctilio +punctilios +punctilious +punctiliously +punctiliousness +punctiliousnesses punctual +punctualities +punctuality +punctually +punctuate +punctuated +punctuates +punctuating punctuation +punctuations +punctuator +punctuators +puncture +punctured +punctures +puncturing +pundit +punditic +punditries +punditry +pundits +pung +pungencies +pungency +pungent +pungently +pungle +pungled +pungles +pungling +pungs +punier +puniest +punily +puniness +puninesses punish +punishabilities +punishability +punishable +punished +punisher +punishers +punishes +punishing punishment +punishments +punition +punitions +punitive +punitively +punitiveness +punitivenesses +punitory +punk +punka +punkah +punkahs +punkas +punker +punkers +punkest +punkey +punkeys +punkie +punkier +punkies +punkiest +punkin +punkiness +punkinesses +punkins +punkish +punks +punky +punned +punner +punners +punnet +punnets +punnier +punniest +punning +punny +puns +punster +punsters +punt +punted +punter +punters +punties +punting +punto +puntos +punts +punty +puny +pup +pupa +pupae +pupal +puparia +puparial +puparium +pupas +pupate +pupated +pupates +pupating +pupation +pupations +pupfish +pupfishes pupil +pupilage +pupilages +pupilar +pupilary +pupillage +pupillages +pupillary +pupils +pupped +puppet +puppeteer +puppeteers +puppetlike +puppetries +puppetry +puppets +puppies +pupping +puppy +puppydom +puppydoms +puppyhood +puppyhoods +puppyish +puppylike +pups +pur +purana +puranas +puranic +purblind +purblindly +purblindness +purblindnesses +purchasable purchase +purchased +purchaser +purchasers +purchases +purchasing +purda +purdah +purdahs +purdas pure +pureblood +purebloods +purebred +purebreds +puree +pureed +pureeing +purees +purely +pureness +purenesses +purer +purest +purfle +purfled +purfles +purfling +purflings +purgation +purgations +purgative +purgatives +purgatorial +purgatories +purgatory +purge +purged +purger +purgers +purges +purging +purgings +puri +purification +purifications +purificator +purificators +purificatory +purified +purifier +purifiers +purifies +purify +purifying +purin +purine +purines +purins +puris +purism +purisms +purist +puristic +puristically +purists +puritan +puritanical +puritanically +puritanism +puritanisms +puritans +purities +purity +purl +purled +purlieu +purlieus +purlin +purline +purlines +purling +purlins +purloin +purloined +purloiner +purloiners +purloining +purloins +purls +puromycin +puromycins purple +purpled +purpleheart +purplehearts +purpler +purples +purplest +purpling +purplish +purply +purport +purported +purportedly +purporting +purports purpose +purposed +purposeful +purposefully +purposefulness +purposefulnesses +purposeless +purposelessly +purposelessness +purposelessnesses +purposely +purposes +purposing +purposive +purposively +purposiveness +purposivenesses +purpura +purpuras +purpure +purpures +purpuric +purpurin +purpurins +purr +purred +purring +purringly +purrs +purs purse +pursed +purselike +purser +pursers +purses +pursier +pursiest +pursily +pursiness +pursinesses +pursing +purslane +purslanes +pursuance +pursuances +pursuant +pursue +pursued +pursuer +pursuers +pursues +pursuing +pursuit +pursuits +pursuivant +pursuivants +pursy +purtenance +purtenances +purulence +purulences +purulent +purvey +purveyance +purveyances +purveyed +purveying +purveyor +purveyors +purveys +purview +purviews +pus +puses push +pushball +pushballs +pushcart +pushcarts +pushchair +pushchairs +pushdown +pushdowns +pushed +pusher +pushers +pushes +pushful +pushfulness +pushfulnesses +pushier +pushiest +pushily +pushiness +pushinesses +pushing +pushover +pushovers +pushpin +pushpins +pushrod +pushrods +pushup +pushups +pushy +pusillanimities +pusillanimity +pusillanimous +pusillanimously +pusley +pusleys +puslike +puss +pusses +pussier +pussies +pussiest +pussley +pussleys +pusslies +pusslike +pussly +pussy +pussycat +pussycats +pussyfoot +pussyfooted +pussyfooter +pussyfooters +pussyfooting +pussyfoots +pussytoes +pustulant +pustulants +pustular +pustulated +pustulation +pustulations +pustule +pustuled +pustules put +putamen +putamina +putative +putatively +putlog +putlogs +putoff +putoffs +puton +putons +putout +putouts +putrefaction +putrefactions +putrefactive +putrefied +putrefies +putrefy +putrefying +putrescence +putrescences +putrescent +putrescible +putrescine +putrescines +putrid +putridities +putridity +putridly +puts +putsch +putsches +putschist +putschists +putt +putted +puttee +puttees +putter +puttered +putterer +putterers +puttering +putters +putti +puttied +puttier +puttiers +putties +putting +putto +putts +putty +puttying +puttyless +puttylike +puttyroot +puttyroots +putz +putzed +putzes +putzing puzzle +puzzled +puzzleheaded +puzzleheadedness +puzzleheadednesses +puzzlement +puzzlements +puzzler +puzzlers +puzzles +puzzling +puzzlingly +pya +pyaemia +pyaemias +pyaemic +pyas +pycnidia +pycnidial +pycnidium +pycnogonid +pycnogonids +pycnometer +pycnometers +pycnoses +pycnosis +pycnotic +pye +pyelitic +pyelitis +pyelitises +pyelonephritic +pyelonephritides +pyelonephritis +pyemia +pyemias +pyemic +pyes +pygidia +pygidial +pygidium +pygmaean +pygmean +pygmies +pygmoid +pygmy +pygmyish +pygmyism +pygmyisms +pyic +pyin +pyins +pyjamas +pyknic +pyknics +pyknoses +pyknosis +pyknotic +pylon +pylons +pylori +pyloric +pylorus +pyloruses +pyoderma +pyodermas +pyogenic +pyoid +pyorrhea +pyorrheas +pyoses +pyosis +pyracantha +pyracanthas +pyralid +pyralids pyramid +pyramidal +pyramidally +pyramided +pyramidical +pyramiding +pyramids +pyran +pyranoid +pyranose +pyranoses +pyranoside +pyranosides +pyrans +pyrargyrite +pyrargyrites +pyre +pyrene +pyrenes +pyrenoid +pyrenoids +pyres +pyrethrin +pyrethrins +pyrethroid +pyrethroids +pyrethrum +pyrethrums +pyretic +pyrexia +pyrexial +pyrexias +pyrexic +pyrheliometer +pyrheliometers +pyrheliometric +pyric +pyridic +pyridine +pyridines +pyridoxal +pyridoxals +pyridoxamine +pyridoxamines +pyridoxine +pyridoxines +pyriform +pyrimethamine +pyrimethamines +pyrimidine +pyrimidines +pyrite +pyrites +pyritic +pyritous +pyrocatechol +pyrocatechols +pyroclastic +pyroelectric +pyroelectricities +pyroelectricity +pyrogallol +pyrogallols +pyrogen +pyrogenic +pyrogenicities +pyrogenicity +pyrogens +pyrola +pyrolas +pyrolize +pyrolized +pyrolizes +pyrolizing +pyrologies +pyrology +pyrolusite +pyrolusites +pyrolysate +pyrolysates +pyrolyses +pyrolysis +pyrolytic +pyrolytically +pyrolyzable +pyrolyzate +pyrolyzates +pyrolyze +pyrolyzed +pyrolyzer +pyrolyzers +pyrolyzes +pyrolyzing +pyromancies +pyromancy +pyromania +pyromaniac +pyromaniacal +pyromaniacs +pyromanias +pyrometallurgical +pyrometallurgies +pyrometallurgy +pyrometer +pyrometers +pyrometric +pyrometrically +pyrometries +pyrometry +pyromorphite +pyromorphites +pyrone +pyrones +pyronine +pyronines +pyroninophilic +pyrope +pyropes +pyrophoric +pyrophosphate +pyrophosphates +pyrophyllite +pyrophyllites +pyrosis +pyrosises +pyrostat +pyrostats +pyrotechnic +pyrotechnical +pyrotechnically +pyrotechnics +pyrotechnist +pyrotechnists +pyroxene +pyroxenes +pyroxenic +pyroxenite +pyroxenites +pyroxenitic +pyroxenoid +pyroxenoids +pyroxylin +pyroxylins +pyrrhic +pyrrhics +pyrrhotite +pyrrhotites +pyrrol +pyrrole +pyrroles +pyrrolic +pyrrols +pyruvate +pyruvates +python +pythoness +pythonesses +pythonic +pythons +pyuria +pyurias +pyx +pyxes +pyxides +pyxidia +pyxidium +pyxie +pyxies +pyxis +qaid +qaids +qanat +qanats +qat +qats +qindar +qindarka +qindars +qintar +qintars +qiviut +qiviuts +qoph +qophs +qua +quaalude +quaaludes +quack +quacked +quackeries +quackery +quacking +quackish +quackism +quackisms +quacks +quacksalver +quacksalvers +quad +quadded +quadding +quadplex +quadplexes +quadrangle +quadrangles +quadrangular +quadrans +quadrant +quadrantal +quadrantes +quadrants +quadraphonic +quadraphonics +quadrat +quadrate +quadrated +quadrates +quadratic +quadratically +quadratics +quadrating +quadrats +quadrature +quadratures +quadrennia +quadrennial +quadrennially +quadrennials +quadrennium +quadrenniums +quadric +quadricentennial +quadricentennials +quadriceps +quadricepses +quadrics +quadriga +quadrigae +quadrilateral +quadrilaterals +quadrille +quadrilles +quadrillion +quadrillions +quadrillionth +quadrillionths +quadripartite +quadriphonic +quadriphonics +quadriplegia +quadriplegias +quadriplegic +quadriplegics +quadrivalent +quadrivalents +quadrivia +quadrivial +quadrivium +quadriviums +quadroon +quadroons +quadrumanous +quadrumvir +quadrumvirate +quadrumvirates +quadrumvirs +quadruped +quadrupedal +quadrupeds +quadruple +quadrupled +quadruples +quadruplet +quadruplets +quadruplicate +quadruplicated +quadruplicates +quadruplicating +quadruplication +quadruplications +quadruplicities +quadruplicity +quadrupling +quadruply +quadrupole +quadrupoles +quads +quaere +quaeres +quaestor +quaestors +quaff +quaffed +quaffer +quaffers +quaffing +quaffs +quag +quagga +quaggas +quaggier +quaggiest +quaggy +quagmire +quagmires +quagmirier +quagmiriest +quagmiry +quags +quahaug +quahaugs +quahog +quahogs +quai +quaich +quaiches +quaichs +quaigh +quaighs +quail +quailed +quailing +quails +quaint +quainter +quaintest +quaintly +quaintness +quaintnesses +quais quake +quaked +quaker +quakers +quakes +quakier +quakiest +quakily +quaking +quaky +quale +qualia +qualifiable qualification +qualifications +qualified +qualifiedly +qualifier +qualifiers +qualifies +qualify +qualifying +qualitative +qualitatively +qualities quality +qualm +qualmier +qualmiest +qualmish +qualmishly +qualmishness +qualmishnesses +qualms +qualmy +quamash +quamashes +quandang +quandangs +quandaries +quandary +quandong +quandongs +quango +quangos +quant +quanta +quantal +quanted +quantic +quantics +quantifiable +quantification +quantificational +quantificationally +quantifications +quantified +quantifier +quantifiers +quantifies +quantify +quantifying +quantile +quantiles +quanting +quantitate +quantitated +quantitates +quantitating +quantitation +quantitations +quantitative +quantitatively +quantitativeness +quantitativenesses +quantities quantity +quantization +quantizations +quantize +quantized +quantizer +quantizers +quantizes +quantizing +quantong +quantongs +quants +quantum +quarantine +quarantined +quarantines +quarantining +quare +quark +quarks quarrel +quarreled +quarreler +quarrelers +quarreling +quarrelled +quarreller +quarrellers +quarrelling +quarrels +quarrelsome +quarrelsomely +quarrelsomeness +quarrelsomenesses +quarried +quarrier +quarriers +quarries +quarry +quarrying +quarryings +quarryman +quarrymen +quart +quartan +quartans +quarte quarter +quarterage +quarterages +quarterback +quarterbacked +quarterbacking +quarterbacks +quarterdeck +quarterdecks +quartered +quarterfinal +quarterfinalist +quarterfinalists +quarterfinals +quartering +quarterings +quarterlies +quarterly +quartermaster +quartermasters +quartern +quarterns +quarters +quartersawed +quartersawn +quarterstaff +quarterstaves +quartes +quartet +quartets +quartette +quartettes +quartic +quartics +quartile +quartiles +quarto +quartos +quarts +quartz +quartzes +quartzite +quartzites +quartzitic +quartzose +quasar +quasars +quash +quashed +quasher +quashers +quashes +quashing +quasi +quasiparticle +quasiparticles +quasiperiodic +quasiperiodicities +quasiperiodicity +quass +quasses +quassia +quassias +quassin +quassins +quate +quatercentenaries +quatercentenary +quaternaries +quaternary +quaternion +quaternions +quaternities +quaternity +quatorze +quatorzes +quatrain +quatrains +quatre +quatrefoil +quatrefoils +quatres +quattrocento +quattrocentos +quattuordecillion +quattuordecillions +quaver +quavered +quaverer +quaverers +quavering +quaveringly +quavers +quavery +quay +quayage +quayages +quaylike +quays +quayside +quaysides +quean +queans +queasier +queasiest +queasily +queasiness +queasinesses +queasy +queazier +queaziest +queazy +quebracho +quebrachos queen +queendom +queendoms +queened +queening +queenlier +queenliest +queenliness +queenlinesses +queenly +queens +queenship +queenships +queenside +queensides +queer +queered +queerer +queerest +queering +queerish +queerly +queerness +queernesses +queers +quell +quelled +queller +quellers +quelling +quells +quench +quenchable +quenched +quencher +quenchers +quenches +quenching +quenchless +quenelle +quenelles +quercetin +quercetins +quercine +quercitron +quercitrons +querida +queridas +queried +querier +queriers +queries +querist +querists +quern +querns +querulous +querulously +querulousness +querulousnesses +query +querying +quesadilla +quesadillas +quest +quested +quester +questers +questing question +questionable +questionableness +questionablenesses +questionably +questionaries +questionary +questioned +questioner +questioners +questioning +questionless questionnaire +questionnaires +questions +questor +questors +quests +quetzal +quetzales +quetzals queue +queued +queueing +queuer +queuers +queues +queuing +quey +queys +quezal +quezales +quezals +quibble +quibbled +quibbler +quibblers +quibbles +quibbling +quiche +quiches quick +quicken +quickened +quickener +quickeners +quickening +quickens +quicker +quickest +quickie +quickies +quicklime +quicklimes +quickly +quickness +quicknesses +quicks +quicksand +quicksands +quickset +quicksets +quicksilver +quicksilvers +quickstep +quicksteps +quid +quiddities +quiddity +quidnunc +quidnuncs +quids +quiescence +quiescences +quiescent +quiescently quiet +quieted +quieten +quietened +quietening +quietens +quieter +quieters +quietest +quieting +quietism +quietisms +quietist +quietistic +quietists +quietly +quietness +quietnesses +quiets +quietude +quietudes +quietus +quietuses +quiff +quiffs +quill +quillai +quillaia +quillaias +quillais +quillaja +quillajas +quillback +quillbacks +quilled +quillet +quillets +quilling +quillings +quills +quillwork +quillworks quilt +quilted +quilter +quilters +quilting +quiltings +quilts +quin +quinacrine +quinacrines +quinaries +quinary +quinate +quince +quincentenaries +quincentenary +quincentennial +quincentennials +quinces +quincuncial +quincunx +quincunxes +quincunxial +quindecillion +quindecillions +quinela +quinelas +quinella +quinellas +quinic +quinidine +quinidines +quiniela +quinielas +quinin +quinina +quininas +quinine +quinines +quinins +quinnat +quinnats +quinoa +quinoas +quinoid +quinoids +quinol +quinolin +quinoline +quinolines +quinolins +quinols +quinone +quinones +quinonoid +quinquennia +quinquennial +quinquennially +quinquennials +quinquennium +quinquenniums +quins +quinsies +quinsy +quint +quinta +quintain +quintains +quintal +quintals +quintan +quintans +quintar +quintars +quintas +quinte +quintes +quintessence +quintessences +quintessential +quintessentially +quintet +quintets +quintette +quintettes +quintic +quintics +quintile +quintiles +quintillion +quintillions +quintillionth +quintillionths +quintin +quintins +quints +quintuple +quintupled +quintuples +quintuplet +quintuplets +quintuplicate +quintuplicated +quintuplicates +quintuplicating +quintupling +quip +quipped +quipper +quippers +quipping +quippish +quippu +quippus +quips +quipster +quipsters +quipu +quipus +quire +quired +quires +quiring +quirk +quirked +quirkier +quirkiest +quirkily +quirkiness +quirkinesses +quirking +quirkish +quirks +quirky +quirt +quirted +quirting +quirts +quisling +quislingism +quislingisms +quislings quit +quitch +quitches +quitclaim +quitclaimed +quitclaiming +quitclaims quite +quitrent +quitrents +quits +quittance +quittances +quitted +quitter +quitters +quitting +quittor +quittors +quiver +quivered +quiverer +quiverers +quivering +quiveringly +quivers +quivery +quixote +quixotes +quixotic +quixotical +quixotically +quixotism +quixotisms +quixotries +quixotry quiz +quizmaster +quizmasters +quizzed +quizzer +quizzers +quizzes +quizzical +quizzicalities +quizzicality +quizzically +quizzing +quod +quodlibet +quodlibets +quods +quohog +quohogs +quoin +quoined +quoining +quoins +quoit +quoited +quoiting +quoits +quokka +quokkas +quomodo +quomodos +quondam +quorum +quorums +quota +quotabilities +quotability +quotable +quotably +quotas +quotation +quotations +quote +quoted +quoter +quoters +quotes +quoth +quotha +quotidian +quotidians +quotient +quotients +quoting +qursh +qurshes +qurush +qurushes +qwerty +qwertys +rabat +rabato +rabatos +rabats +rabbet +rabbeted +rabbeting +rabbets +rabbi +rabbies +rabbin +rabbinate +rabbinates +rabbinic +rabbinical +rabbinically +rabbinism +rabbinisms +rabbins +rabbis rabbit +rabbitbrush +rabbitbrushes +rabbited +rabbiter +rabbiters +rabbiting +rabbitries +rabbitry +rabbits +rabbity +rabble +rabbled +rabblement +rabblements +rabbler +rabblers +rabbles +rabbling +rabboni +rabbonis +rabic +rabid +rabidities +rabidity +rabidly +rabidness +rabidnesses +rabies +rabietic +raccoon +raccoons race +racecourse +racecourses +raced +racehorse +racehorses +racemate +racemates +raceme +racemed +racemes +racemic +racemism +racemisms +racemization +racemizations +racemize +racemized +racemizes +racemizing +racemoid +racemose +racemous +racer +racers +races +racetrack +racetracker +racetrackers +racetracks +racewalker +racewalkers +racewalking +racewalkings +raceway +raceways +rachet +rachets +rachial +rachides +rachilla +rachillae +rachis +rachises +rachitic +rachitides +rachitis racial +racialism +racialisms +racialist +racialistic +racialists +racially +racier +raciest +racily +raciness +racinesses +racing +racings +racism +racisms +racist +racists +rack +racked +racker +rackers +racket +racketed +racketeer +racketeered +racketeering +racketeers +racketier +racketiest +racketing +rackets +rackety +rackful +rackfuls +racking +rackingly +rackle +racks +rackwork +rackworks +raclette +raclettes +racon +racons +raconteur +raconteurs +racoon +racoons +racquet +racquetball +racquetballs +racquets +racy +rad +radar +radars +radarscope +radarscopes +radded +radding +raddle +raddled +raddles +raddling +radiable +radial +radiale +radialia +radially +radials +radian +radiance +radiances +radiancies +radiancy +radians +radiant +radiantly +radiants +radiate +radiated +radiately +radiates +radiating radiation +radiational +radiationless +radiations +radiative +radiator +radiators +radical +radicalise +radicalised +radicalises +radicalising +radicalism +radicalisms +radicalization +radicalizations +radicalize +radicalized +radicalizes +radicalizing +radically +radicalness +radicalnesses +radicals +radicand +radicands +radicate +radicated +radicates +radicating +radicchio +radicchios +radicel +radicels +radices +radicle +radicles +radicular +radii radio radioactive +radioactively +radioactivities +radioactivity +radioallergosorbent +radioautograph +radioautographic +radioautographies +radioautographs +radioautography +radiobiologic +radiobiological +radiobiologically +radiobiologies +radiobiologist +radiobiologists +radiobiology +radiocarbon +radiocarbons +radiochemical +radiochemically +radiochemist +radiochemistries +radiochemistry +radiochemists +radiochromatogram +radiochromatograms +radioecologies +radioecology +radioed +radioelement +radioelements +radiogenic +radiogram +radiograms +radiograph +radiographed +radiographic +radiographically +radiographies +radiographing +radiographs +radiography +radioimmunoassay +radioimmunoassayable +radioimmunoassays +radioing +radioisotope +radioisotopes +radioisotopic +radioisotopically +radiolabel +radiolabeled +radiolabeling +radiolabelled +radiolabelling +radiolabels +radiolarian +radiolarians +radiologic +radiological +radiologically +radiologies +radiologist +radiologists +radiology +radiolucencies +radiolucency +radiolucent +radiolyses +radiolysis +radiolytic +radioman +radiomen +radiometer +radiometers +radiometric +radiometrically +radiometries +radiometry +radiomimetic +radionuclide +radionuclides +radiopaque +radiopharmaceutical +radiopharmaceuticals +radiophone +radiophones +radiophoto +radiophotos +radioprotection +radioprotections +radioprotective +radios +radiosensitive +radiosensitivities +radiosensitivity +radiosonde +radiosondes +radiostrontium +radiostrontiums +radiotelegraph +radiotelegraphies +radiotelegraphs +radiotelegraphy +radiotelemetric +radiotelemetries +radiotelemetry +radiotelephone +radiotelephones +radiotelephonies +radiotelephony +radiotherapies +radiotherapist +radiotherapists +radiotherapy +radiothorium +radiothoriums +radiotracer +radiotracers +radish +radishes radium +radiums +radius +radiuses +radix +radixes +radome +radomes +radon +radons +rads +radula +radulae +radular +radulas +radwaste +radwastes +raff +raffia +raffias +raffinose +raffinoses +raffish +raffishly +raffishness +raffishnesses +raffle +raffled +raffler +rafflers +raffles +rafflesia +rafflesias +raffling +raffs +raft +rafted +rafter +raftered +rafters +rafting +rafts +raftsman +raftsmen rag +raga +ragamuffin +ragamuffins +ragas +ragbag +ragbags +rage +raged +ragee +ragees +rages +ragged +raggeder +raggedest +raggedly +raggedness +raggednesses +raggedy +raggee +raggees +raggies +ragging +raggle +raggles +raggy +ragi +raging +ragingly +ragis +raglan +raglans +ragman +ragmen +ragout +ragouted +ragouting +ragouts +ragpicker +ragpickers +rags +ragtag +ragtags +ragtime +ragtimes +ragtop +ragtops +ragweed +ragweeds +ragwort +ragworts +rah +raia +raias +raid +raided +raider +raiders +raiding +raids rail +railbird +railbirds +railbus +railbuses +railbusses +railcar +railcars +railed +railer +railers +railhead +railheads +railing +railings +railleries +raillery +railroad +railroaded +railroader +railroaders +railroading +railroadings +railroads +rails railway +railways +raiment +raiments rain +rainband +rainbands +rainbird +rainbirds rainbow +rainbowlike +rainbows raincoat +raincoats +raindrop +raindrops +rained rainfall +rainfalls +rainier +rainiest +rainily +raining +rainless +rainmaker +rainmakers +rainmaking +rainmakings +rainout +rainouts +rainproof +rains +rainspout +rainspouts +rainsquall +rainsqualls +rainstorm +rainstorms +rainwash +rainwashed +rainwashes +rainwashing +rainwater +rainwaters +rainwear rainy +raisable raise +raised +raiser +raisers +raises +raisin +raising +raisings +raisins +raisiny +raisonne +raj +raja +rajah +rajahs +rajas +rajes +rake +raked +rakee +rakees +rakehell +rakehells +rakehelly +rakeoff +rakeoffs +raker +rakers +rakes +raki +raking +rakis +rakish +rakishly +rakishness +rakishnesses +rale +rales +rallentando +rallied +rallier +ralliers +rallies +ralline +rally +rallye +rallyes +rallying +rallyings +rallyist +rallyists +ralph +ralphed +ralphing +ralphs +ram +ramate +ramble +rambled +rambler +ramblers +rambles +rambling +ramblingly +rambouillet +rambouillets +rambunctious +rambunctiously +rambunctiousness +rambunctiousnesses +rambutan +rambutans +ramee +ramees +ramekin +ramekins +ramenta +ramentum +ramequin +ramequins +ramet +ramets +rami +ramie +ramies +ramification +ramifications +ramified +ramifies +ramiform +ramify +ramifying +ramilie +ramilies +ramillie +ramillies +ramjet +ramjets +rammed +rammer +rammers +rammier +rammiest +ramming +rammish +rammy +ramose +ramosely +ramosities +ramosity +ramous +ramp +rampage +rampaged +rampageous +rampageously +rampageousness +rampageousnesses +rampager +rampagers +rampages +rampaging +rampancies +rampancy +rampant +rampantly +rampart +ramparted +ramparting +ramparts +ramped +rampike +rampikes +ramping +rampion +rampions +rampole +rampoles +ramps +ramrod +ramrodded +ramrodding +ramrods +rams +ramshackle +ramshorn +ramshorns +ramson +ramsons +ramtil +ramtils +ramulose +ramulous +ramus +ran +rance +rances +ranch +ranched +rancher +ranchero +rancheros +ranchers +ranches +ranching +ranchman +ranchmen +rancho +ranchos +rancid +rancidities +rancidity +rancidly +rancidness +rancidnesses +rancor +rancored +rancorous +rancorously +rancors +rancour +rancours +rand +randan +randans +randier +randies +randiest random +randomization +randomizations +randomize +randomized +randomizer +randomizers +randomizes +randomizing +randomly +randomness +randomnesses +randoms +rands +randy +ranee +ranees +rang range +ranged +rangeland +rangelands +ranger +rangers +ranges +rangier +rangiest +ranginess +ranginesses +ranging +rangy +rani +ranid +ranids +ranis rank +ranked +ranker +rankers +rankest +ranking +rankings +rankish +rankle +rankled +rankles +rankling +rankly +rankness +ranknesses +ranks +ranpike +ranpikes +ransack +ransacked +ransacker +ransackers +ransacking +ransacks +ransom +ransomed +ransomer +ransomers +ransoming +ransoms +rant +ranted +ranter +ranters +ranting +rantingly +rants +ranula +ranulas +ranunculi +ranunculus +ranunculuses +rap +rapacious +rapaciously +rapaciousness +rapaciousnesses +rapacities +rapacity +rape +raped +raper +rapers +rapes +rapeseed +rapeseeds +raphae +raphe +raphes +raphia +raphias +raphide +raphides +raphis rapid +rapider +rapidest +rapidities +rapidity +rapidly +rapidness +rapidnesses +rapids +rapier +rapiered +rapiers +rapine +rapines +raping +rapini +rapist +rapists +rapparee +rapparees +rapped +rappee +rappees +rappel +rappeled +rappeling +rappelled +rappelling +rappels +rappen +rapper +rappers +rapping +rappini +rapport +rapporteur +rapporteurs +rapports +rapprochement +rapprochements +raps +rapscallion +rapscallions +rapt +raptly +raptness +raptnesses +raptor +raptorial +raptors +rapture +raptured +raptures +rapturing +rapturous +rapturously +rapturousness +rapturousnesses rare +rarebit +rarebits +rared +rarefaction +rarefactional +rarefactions +rarefied +rarefier +rarefiers +rarefies +rarefy +rarefying +rarely +rareness +rarenesses +rarer +rareripe +rareripes +rares +rarest +rarified +rarifies +rarify +rarifying +raring +rarities +rarity +ras +rasbora +rasboras +rascal +rascalities +rascality +rascally +rascals +rase +rased +raser +rasers +rases +rash +rasher +rashers +rashes +rashest +rashlike +rashly +rashness +rashnesses +rasing +rasorial +rasp +raspberries +raspberry +rasped +rasper +raspers +raspier +raspiest +rasping +raspingly +raspish +rasps +raspy +rassle +rassled +rassles +rassling +raster +rasters +rasure +rasures rat +ratable +ratably +ratafee +ratafees +ratafia +ratafias +ratal +ratals +ratan +ratanies +ratans +ratany +rataplan +rataplanned +rataplanning +rataplans +ratatat +ratatats +ratatouille +ratatouilles +ratbag +ratbags +ratch +ratches +ratchet +ratcheted +ratcheting +ratchets rate +rateable +rateably +rated +ratel +ratels +ratemeter +ratemeters +ratepayer +ratepayers +rater +raters +rates +ratfink +ratfinks +ratfish +ratfishes +rath +rathe rather +rathole +ratholes +rathskeller +rathskellers +raticide +raticides +ratification +ratifications +ratified +ratifier +ratifiers +ratifies +ratify +ratifying +ratine +ratines +rating +ratings +ratio +ratiocinate +ratiocinated +ratiocinates +ratiocinating +ratiocination +ratiocinations +ratiocinative +ratiocinator +ratiocinators +ration +rational +rationale +rationales +rationalise +rationalised +rationalises +rationalising +rationalism +rationalisms +rationalist +rationalistic +rationalistically +rationalists +rationalities +rationality +rationalizable +rationalization +rationalizations +rationalize +rationalized +rationalizer +rationalizers +rationalizes +rationalizing +rationally +rationalness +rationalnesses +rationals +rationed +rationing +rations +ratios +ratite +ratites +ratlike +ratlin +ratline +ratlines +ratlins +rato +ratoon +ratooned +ratooner +ratooners +ratooning +ratoons +ratos +rats +ratsbane +ratsbanes +rattail +rattails +rattan +rattans +ratted +ratteen +ratteens +ratten +rattened +rattener +ratteners +rattening +rattens +ratter +ratters +rattier +rattiest +ratting +rattish +rattle +rattlebrain +rattlebrained +rattlebrains +rattled +rattler +rattlers +rattles +rattlesnake +rattlesnakes +rattletrap +rattletraps +rattling +rattlingly +rattlings +rattly +ratton +rattons +rattoon +rattooned +rattooning +rattoons +rattrap +rattraps +ratty +raucities +raucity +raucous +raucously +raucousness +raucousnesses +raunch +raunches +raunchier +raunchiest +raunchily +raunchiness +raunchinesses +raunchy +rauwolfia +rauwolfias +ravage +ravaged +ravagement +ravagements +ravager +ravagers +ravages +ravaging +rave +raved +ravel +raveled +raveler +ravelers +ravelin +raveling +ravelings +ravelins +ravelled +raveller +ravellers +ravelling +ravellings +ravelly +ravelment +ravelments +ravels +raven +ravened +ravener +raveners +ravening +ravenings +ravenous +ravenously +ravenousness +ravenousnesses +ravens +raver +ravers +raves +ravigote +ravigotes +ravin +ravine +ravined +ravines +raving +ravingly +ravings +ravining +ravins +ravioli +raviolis +ravish +ravished +ravisher +ravishers +ravishes +ravishing +ravishingly +ravishment +ravishments raw +rawboned +rawer +rawest +rawhide +rawhided +rawhides +rawhiding +rawin +rawins +rawinsonde +rawinsondes +rawish +rawly +rawness +rawnesses +raws +rax +raxed +raxes +raxing ray +raya +rayah +rayahs +rayas +rayed +raygrass +raygrasses +raying +rayless +raylessness +raylessnesses +raylike +rayon +rayons +rays +raze +razed +razee +razeed +razeeing +razees +razer +razers +razes +razing razor +razorback +razorbacks +razorbill +razorbills +razored +razoring +razors +razz +razzamatazz +razzamatazzes +razzed +razzes +razzing +razzmatazz +razzmatazzes +re +reabsorb +reabsorbed +reabsorbing +reabsorbs +reaccede +reacceded +reaccedes +reacceding +reaccelerate +reaccelerated +reaccelerates +reaccelerating +reaccent +reaccented +reaccenting +reaccents +reaccept +reaccepted +reaccepting +reaccepts +reaccession +reaccessions +reacclimatize +reacclimatized +reacclimatizes +reacclimatizing +reaccredit +reaccreditation +reaccreditations +reaccredited +reaccrediting +reaccredits +reaccuse +reaccused +reaccuses +reaccusing reach +reachable +reached +reacher +reachers +reaches +reaching +reacquaint +reacquainted +reacquainting +reacquaints +reacquire +reacquired +reacquires +reacquiring +reacquisition +reacquisitions react +reactance +reactances +reactant +reactants +reacted +reacting +reaction +reactionaries +reactionary +reactionaryism +reactionaryisms +reactions +reactivate +reactivated +reactivates +reactivating +reactivation +reactivations +reactive +reactively +reactiveness +reactivenesses +reactivities +reactivity +reactor +reactors +reacts read +readabilities +readability +readable +readableness +readablenesses +readably +readapt +readapted +readapting +readapts +readd +readded +readdict +readdicted +readdicting +readdicts +readding +readdress +readdressed +readdresses +readdressing +readds +reader +readerly +readers +readership +readerships +readied +readier +readies +readiest +readily +readiness +readinesses reading +readings +readjust +readjustable +readjusted +readjusting +readjustment +readjustments +readjusts +readmission +readmissions +readmit +readmits +readmitted +readmitting +readopt +readopted +readopting +readopts +readorn +readorned +readorning +readorns +readout +readouts +reads ready +readying +readymade +readymades +reaffirm +reaffirmation +reaffirmations +reaffirmed +reaffirming +reaffirms +reaffix +reaffixed +reaffixes +reaffixing +reafforest +reafforestation +reafforestations +reafforested +reafforesting +reafforests +reagent +reagents +reaggregate +reaggregated +reaggregates +reaggregating +reaggregation +reaggregations +reagin +reaginic +reagins real +realer +reales +realest +realgar +realgars +realia +realign +realigned +realigning +realignment +realignments +realigns realise +realised +realiser +realisers +realises +realising +realism +realisms +realist +realistic +realistically +realists +realities reality +realizable +realization +realizations realize +realized +realizer +realizers +realizes +realizing +reallocate +reallocated +reallocates +reallocating +reallocation +reallocations +reallot +reallots +reallotted +reallotting really +realm +realms +realness +realnesses +realpolitik +realpolitiks +reals +realter +realtered +realtering +realters +realties +realty +ream +reamed +reamer +reamers +reaming +reams +reanalyses +reanalysis +reanalyze +reanalyzed +reanalyzes +reanalyzing +reanimate +reanimated +reanimates +reanimating +reanimation +reanimations +reannex +reannexation +reannexations +reannexed +reannexes +reannexing +reanoint +reanointed +reanointing +reanoints +reap +reapable +reaped +reaper +reapers +reaphook +reaphooks +reaping +reappear +reappearance +reappearances +reappeared +reappearing +reappears +reapplication +reapplications +reapplied +reapplies +reapply +reapplying +reappoint +reappointed +reappointing +reappointment +reappointments +reappoints +reapportion +reapportioned +reapportioning +reapportionment +reapportionments +reapportions +reappraisal +reappraisals +reappraise +reappraised +reappraises +reappraising +reappropriate +reappropriated +reappropriates +reappropriating +reapprove +reapproved +reapproves +reapproving +reaps +rear +reared +rearer +rearers +rearguard +reargue +reargued +reargues +rearguing +reargument +rearguments +rearing +rearm +rearmament +rearmaments +rearmed +rearmice +rearming +rearmost +rearmouse +rearms +rearousal +rearousals +rearouse +rearoused +rearouses +rearousing +rearrange +rearranged +rearrangement +rearrangements +rearranges +rearranging +rearrest +rearrested +rearresting +rearrests +rears +rearticulate +rearticulated +rearticulates +rearticulating +rearward +rearwards +reascend +reascended +reascending +reascends +reascent +reascents reason +reasonabilities +reasonability reasonable +reasonableness +reasonablenesses +reasonably +reasoned +reasoner +reasoners +reasoning +reasonings +reasonless +reasonlessly +reasons +reassail +reassailed +reassailing +reassails +reassemblage +reassemblages +reassemble +reassembled +reassembles +reassemblies +reassembling +reassembly +reassert +reasserted +reasserting +reassertion +reassertions +reasserts +reassess +reassessed +reassesses +reassessing +reassessment +reassessments +reassign +reassigned +reassigning +reassignment +reassignments +reassigns +reassort +reassorted +reassorting +reassorts +reassume +reassumed +reassumes +reassuming +reassumption +reassumptions +reassurance +reassurances +reassure +reassured +reassures +reassuring +reassuringly +reata +reatas +reattach +reattached +reattaches +reattaching +reattachment +reattachments +reattack +reattacked +reattacking +reattacks +reattain +reattained +reattaining +reattains +reattempt +reattempted +reattempting +reattempts +reattribute +reattributed +reattributes +reattributing +reattribution +reattributions +reauthorization +reauthorizations +reauthorize +reauthorized +reauthorizes +reauthorizing +reavail +reavailed +reavailing +reavails +reave +reaved +reaver +reavers +reaves +reaving +reavow +reavowed +reavowing +reavows +reawake +reawaked +reawaken +reawakened +reawakening +reawakens +reawakes +reawaking +reawoke +reawoken +reb +rebait +rebaited +rebaiting +rebaits +rebalance +rebalanced +rebalances +rebalancing +rebaptism +rebaptisms +rebaptize +rebaptized +rebaptizes +rebaptizing +rebar +rebarbative +rebarbatively +rebars +rebate +rebated +rebater +rebaters +rebates +rebating +rebato +rebatos +rebbe +rebbes +rebec +rebeck +rebecks +rebecs +rebegan +rebegin +rebeginning +rebegins +rebegun +rebel +rebeldom +rebeldoms +rebelled +rebelling +rebellion +rebellions +rebellious +rebelliously +rebelliousness +rebelliousnesses +rebels +rebid +rebidden +rebidding +rebids +rebill +rebilled +rebilling +rebills +rebind +rebinding +rebinds +rebirth +rebirths +reblend +reblended +reblending +reblends +rebloom +rebloomed +reblooming +reblooms +reboant +reboard +reboarded +reboarding +reboards +rebodied +rebodies +rebody +rebodying +reboil +reboiled +reboiling +reboils +rebook +rebooked +rebooking +rebooks +reboot +rebooted +rebooting +reboots +rebop +rebops +rebore +rebored +rebores +reboring +reborn +rebottle +rebottled +rebottles +rebottling +rebought +rebound +rebounded +rebounder +rebounders +rebounding +rebounds +rebozo +rebozos +rebranch +rebranched +rebranches +rebranching +rebred +rebreed +rebreeding +rebreeds +rebroadcast +rebroadcasting +rebroadcasts +rebs +rebuff +rebuffed +rebuffing +rebuffs rebuild +rebuilded +rebuilding +rebuilds +rebuilt +rebuke +rebuked +rebuker +rebukers +rebukes +rebuking +reburial +reburials +reburied +reburies +rebury +reburying +rebus +rebuses +rebut +rebuts +rebuttable +rebuttal +rebuttals +rebutted +rebutter +rebutters +rebutting +rebutton +rebuttoned +rebuttoning +rebuttons +rebuy +rebuying +rebuys +rec +recalcitrance +recalcitrances +recalcitrancies +recalcitrancy +recalcitrant +recalcitrants +recalculate +recalculated +recalculates +recalculating +recalculation +recalculations +recalibrate +recalibrated +recalibrates +recalibrating +recalibration +recalibrations +recall +recallabilities +recallability +recallable +recalled +recaller +recallers +recalling +recalls +recamier +recamiers +recanalization +recanalizations +recanalize +recanalized +recanalizes +recanalizing +recane +recaned +recanes +recaning +recant +recantation +recantations +recanted +recanter +recanters +recanting +recants +recap +recapitalization +recapitalizations +recapitalize +recapitalized +recapitalizes +recapitalizing +recapitulate +recapitulated +recapitulates +recapitulating +recapitulation +recapitulations +recappable +recapped +recapping +recaps +recapture +recaptured +recaptures +recapturing +recarried +recarries +recarry +recarrying +recast +recasting +recasts +recce +recces +recede +receded +recedes +receding receipt +receipted +receipting +receipts +receivable +receivables receive +received receiver +receivers +receivership +receiverships +receives +receiving +recencies +recency +recension +recensions recent +recenter +recentest +recently +recentness +recentnesses +recentralization +recentralizations +recentrifuge +recentrifuged +recentrifuges +recentrifuging +recept +receptacle +receptacles reception receptionist +receptionists +receptions +receptive +receptively +receptiveness +receptivenesses +receptivities +receptivity +receptor +receptors +recepts +recertification +recertifications +recertified +recertifies +recertify +recertifying +recess +recessed +recesses +recessing +recession +recessional +recessionals +recessionary +recessions +recessive +recessively +recessiveness +recessivenesses +recessives +rechallenge +rechallenged +rechallenges +rechallenging +rechange +rechanged +rechanges +rechanging +rechannel +rechanneled +rechanneling +rechannelled +rechannelling +rechannels +recharge +rechargeable +recharged +recharger +rechargers +recharges +recharging +rechart +recharted +recharter +rechartered +rechartering +recharters +recharting +recharts +rechauffe +rechauffes +recheat +recheats +recheck +rechecked +rechecking +rechecks +recherche +rechew +rechewed +rechewing +rechews +rechoose +rechooses +rechoosing +rechoreograph +rechoreographed +rechoreographing +rechoreographs +rechose +rechosen +rechristen +rechristened +rechristening +rechristens +rechromatograph +rechromatographed +rechromatographies +rechromatographing +rechromatographs +rechromatography +recidivism +recidivisms +recidivist +recidivistic +recidivists recipe +recipes +recipient +recipients +reciprocal +reciprocally +reciprocals +reciprocate +reciprocated +reciprocates +reciprocating +reciprocation +reciprocations +reciprocative +reciprocator +reciprocators +reciprocities +reciprocity +recircle +recircled +recircles +recircling +recirculate +recirculated +recirculates +recirculating +recirculation +recirculations +recision +recisions +recital +recitalist +recitalists +recitals +recitation +recitations +recitative +recitatives +recitativi +recitativo +recitativos recite +recited +reciter +reciters +recites +reciting +reck +recked +recking +reckless +recklessly +recklessness +recklessnesses +reckon +reckoned +reckoner +reckoners +reckoning +reckonings +reckons +recks +reclad +reclaim +reclaimable +reclaimed +reclaiming +reclaims +reclamation +reclamations +reclame +reclames +reclasp +reclasped +reclasping +reclasps +reclassification +reclassifications +reclassified +reclassifies +reclassify +reclassifying +reclean +recleaned +recleaning +recleans +recline +reclined +recliner +recliners +reclines +reclining +reclosable +reclothe +reclothed +reclothes +reclothing +recluse +recluses +reclusion +reclusions +reclusive +reclusively +reclusiveness +reclusivenesses +recoal +recoaled +recoaling +recoals +recock +recocked +recocking +recocks +recode +recoded +recodes +recodification +recodifications +recodified +recodifies +recodify +recodifying +recoding recognise +recognised +recognises +recognising +recognition +recognitions +recognizabilities +recognizability +recognizable +recognizably +recognizance +recognizances recognize +recognized +recognizer +recognizers +recognizes +recognizing +recoil +recoiled +recoiler +recoilers +recoiling +recoilless +recoils +recoin +recoinage +recoinages +recoined +recoining +recoins +recollect +recollected +recollecting +recollection +recollections +recollects +recolonization +recolonizations +recolonize +recolonized +recolonizes +recolonizing +recolor +recolored +recoloring +recolors +recomb +recombed +recombinant +recombinants +recombination +recombinational +recombinations +recombine +recombined +recombines +recombing +recombining +recombs +recommence +recommenced +recommencement +recommencements +recommences +recommencing recommend +recommendable +recommendation +recommendations +recommendatory +recommended +recommending +recommends +recommission +recommissioned +recommissioning +recommissions +recommit +recommitment +recommitments +recommits +recommittal +recommittals +recommitted +recommitting +recompense +recompensed +recompenses +recompensing +recompilation +recompilations +recompile +recompiled +recompiles +recompiling +recompose +recomposed +recomposes +recomposing +recomposition +recompositions +recomputation +recomputations +recompute +recomputed +recomputes +recomputing +recon +reconceive +reconceived +reconceives +reconceiving +reconcentrate +reconcentrated +reconcentrates +reconcentrating +reconcentration +reconcentrations +reconception +reconceptions +reconceptualization +reconceptualizations +reconceptualize +reconceptualized +reconceptualizes +reconceptualizing +reconcilabilities +reconcilability +reconcilable +reconcile +reconciled +reconcilement +reconcilements +reconciler +reconcilers +reconciles +reconciliation +reconciliations +reconciliatory +reconciling +recondense +recondensed +recondenses +recondensing +recondite +reconditely +reconditeness +reconditenesses +recondition +reconditioned +reconditioning +reconditions +reconfigurable +reconfiguration +reconfigurations +reconfigure +reconfigured +reconfigures +reconfiguring +reconfirm +reconfirmation +reconfirmations +reconfirmed +reconfirming +reconfirms +reconnaissance +reconnaissances +reconnect +reconnected +reconnecting +reconnection +reconnections +reconnects +reconnoiter +reconnoitered +reconnoitering +reconnoiters +reconnoitre +reconnoitred +reconnoitres +reconnoitring +reconquer +reconquered +reconquering +reconquers +reconquest +reconquests +recons +reconsecrate +reconsecrated +reconsecrates +reconsecrating +reconsecration +reconsecrations +reconsider +reconsideration +reconsiderations +reconsidered +reconsidering +reconsiders +reconsolidate +reconsolidated +reconsolidates +reconsolidating +reconstitute +reconstituted +reconstitutes +reconstituting +reconstitution +reconstitutions +reconstruct +reconstructed +reconstructible +reconstructing +reconstruction +reconstructionism +reconstructionisms +reconstructionist +reconstructionists +reconstructions +reconstructive +reconstructor +reconstructors +reconstructs +recontact +recontacted +recontacting +recontacts +recontaminate +recontaminated +recontaminates +recontaminating +recontamination +recontaminations +recontextualize +recontextualized +recontextualizes +recontextualizing +recontour +recontoured +recontouring +recontours +reconvene +reconvened +reconvenes +reconvening +reconversion +reconversions +reconvert +reconverted +reconverting +reconverts +reconvey +reconveyance +reconveyances +reconveyed +reconveying +reconveys +reconvict +reconvicted +reconvicting +reconviction +reconvictions +reconvicts +reconvince +reconvinced +reconvinces +reconvincing +recook +recooked +recooking +recooks +recopied +recopies +recopy +recopying record +recordable +recordation +recordations +recorded recorder +recorders +recording +recordings +recordist +recordists +records +recork +recorked +recorking +recorks +recount +recounted +recounter +recounters +recounting +recounts +recoup +recoupable +recoupe +recouped +recouping +recouple +recoupled +recouples +recoupling +recoupment +recoupments +recoups +recourse +recourses recover +recoverabilities +recoverability +recoverable +recovered +recoverer +recoverers +recoveries +recovering +recovers +recovery +recrate +recrated +recrates +recrating +recreant +recreants +recreate +recreated +recreates +recreating recreation +recreational +recreationist +recreationists +recreations +recreative +recriminate +recriminated +recriminates +recriminating +recrimination +recriminations +recriminative +recriminatory +recross +recrossed +recrosses +recrossing +recrown +recrowned +recrowning +recrowns +recrudesce +recrudesced +recrudescence +recrudescences +recrudescent +recrudesces +recrudescing +recruit +recruited +recruiter +recruiters +recruiting +recruitment +recruitments +recruits +recrystallization +recrystallizations +recrystallize +recrystallized +recrystallizes +recrystallizing +recs +recta +rectal +rectally rectangle +rectangles +rectangular +rectangularities +rectangularity +rectangularly +recti +rectifiabilities +rectifiability +rectifiable +rectification +rectifications +rectified +rectifier +rectifiers +rectifies +rectify +rectifying +rectilinear +rectilinearly +rectitude +rectitudes +rectitudinous +recto +rector +rectorate +rectorates +rectorial +rectories +rectors +rectorship +rectorships +rectory +rectos +rectrices +rectrix +rectum +rectums +rectus +recultivate +recultivated +recultivates +recultivating +recumbencies +recumbency +recumbent +recuperate +recuperated +recuperates +recuperating +recuperation +recuperations +recuperative +recur +recurred +recurrence +recurrences +recurrent +recurrently +recurring +recurs +recursion +recursions +recursive +recursively +recursiveness +recursivenesses +recurve +recurved +recurves +recurving +recusal +recusals +recusancies +recusancy +recusant +recusants +recuse +recused +recuses +recusing +recut +recuts +recutting +recyclable +recyclables recycle +recycled +recycler +recyclers +recycles +recycling red +redact +redacted +redacting +redaction +redactional +redactions +redactor +redactors +redacts +redamage +redamaged +redamages +redamaging +redan +redans +redargue +redargued +redargues +redarguing +redate +redated +redates +redating +redbait +redbaited +redbaiting +redbaits +redbay +redbays +redbird +redbirds +redbone +redbones +redbreast +redbreasts +redbrick +redbricks +redbud +redbuds +redbug +redbugs +redcap +redcaps +redcoat +redcoats +redd +redded +redden +reddened +reddening +reddens +redder +redders +reddest +redding +reddish +reddishness +reddishnesses +reddle +reddled +reddles +reddling +redds +rede +redear +redears +redecide +redecided +redecides +redeciding +redecorate +redecorated +redecorates +redecorating +redecoration +redecorations +redecorator +redecorators +reded +rededicate +rededicated +rededicates +rededicating +rededication +rededications +redeem +redeemable +redeemed +redeemer +redeemers +redeeming +redeems +redefeat +redefeated +redefeating +redefeats +redefect +redefected +redefecting +redefects +redefied +redefies +redefine +redefined +redefines +redefining +redefinition +redefinitions +redefy +redefying +redeliver +redelivered +redeliveries +redelivering +redelivers +redelivery +redemand +redemanded +redemanding +redemands +redemption +redemptioner +redemptioners +redemptions +redemptive +redemptory +redenied +redenies +redeny +redenying +redeploy +redeployed +redeploying +redeployment +redeployments +redeploys +redeposit +redeposited +redepositing +redeposits +redes +redescribe +redescribed +redescribes +redescribing +redescription +redescriptions +redesign +redesigned +redesigning +redesigns +redetermination +redeterminations +redetermine +redetermined +redetermines +redetermining +redevelop +redeveloped +redeveloper +redevelopers +redeveloping +redevelopment +redevelopments +redevelops +redeye +redeyes +redfin +redfins +redfish +redfishes +redhead +redheaded +redheads +redhorse +redhorses +redia +rediae +redial +redialed +redialing +redialled +redialling +redials +redias +redid +redigest +redigested +redigesting +redigestion +redigestions +redigests +reding +redingote +redingotes +redintegrate +redintegrated +redintegrates +redintegrating +redintegration +redintegrations +redintegrative +redip +redipped +redipping +redips +redipt +redirect +redirected +redirecting +redirection +redirections +redirects +rediscount +rediscountable +rediscounted +rediscounting +rediscounts +rediscover +rediscovered +rediscoveries +rediscovering +rediscovers +rediscovery +rediscuss +rediscussed +rediscusses +rediscussing +redisplay +redisplayed +redisplaying +redisplays +redispose +redisposed +redisposes +redisposing +redisposition +redispositions +redissolve +redissolved +redissolves +redissolving +redistill +redistillation +redistillations +redistilled +redistilling +redistills +redistribute +redistributed +redistributes +redistributing +redistribution +redistributional +redistributionist +redistributionists +redistributions +redistributive +redistrict +redistricted +redistricting +redistricts +redivide +redivided +redivides +redividing +redivision +redivisions +redivivus +redleg +redlegs +redline +redlined +redlines +redlining +redly +redneck +rednecked +rednecks +redness +rednesses +redo +redock +redocked +redocking +redocks +redoes +redoing +redolence +redolences +redolent +redolently +redon +redone +redonned +redonning +redons +redos +redouble +redoubled +redoubles +redoubling +redoubt +redoubtable +redoubtably +redoubts +redound +redounded +redounding +redounds +redout +redouts +redowa +redowas +redox +redoxes +redpoll +redpolls +redraft +redrafted +redrafting +redrafts +redraw +redrawer +redrawers +redrawing +redrawn +redraws +redream +redreamed +redreaming +redreams +redreamt +redress +redressed +redresser +redressers +redresses +redressing +redrew +redried +redries +redrill +redrilled +redrilling +redrills +redrive +redriven +redrives +redriving +redroot +redroots +redrove +redry +redrying +reds +redshank +redshanks +redshift +redshifted +redshifts +redshirt +redshirted +redshirting +redshirts +redskin +redskins +redstart +redstarts +redtail +redtails +redtop +redtops +redub +redubbed +redubbing +redubs reduce +reduced +reducer +reducers +reduces +reducibilities +reducibility +reducible +reducibly +reducing +reductant +reductants +reductase +reductases +reduction +reductional +reductionism +reductionisms +reductionist +reductionistic +reductionists +reductions +reductive +reductively +reductiveness +reductivenesses +reductor +reductors +redundancies +redundancy +redundant +redundantly +reduplicate +reduplicated +reduplicates +reduplicating +reduplication +reduplications +reduplicative +reduplicatively +reduviid +reduviids +redux +redware +redwares +redwing +redwings +redwood +redwoods +redye +redyed +redyeing +redyes +ree +reearn +reearned +reearning +reearns +reechier +reechiest +reecho +reechoed +reechoes +reechoing +reechy +reed +reedbird +reedbirds +reedbuck +reedbucks +reeded +reedier +reediest +reedified +reedifies +reedify +reedifying +reedily +reediness +reedinesses +reeding +reedings +reedit +reedited +reediting +reedition +reeditions +reedits +reedlike +reedling +reedlings +reedman +reedmen +reeds +reeducate +reeducated +reeducates +reeducating +reeducation +reeducations +reeducative +reedy +reef +reefable +reefed +reefer +reefers +reefier +reefiest +reefing +reefs +reefy +reeject +reejected +reejecting +reejects +reek +reeked +reeker +reekers +reekier +reekiest +reeking +reeks +reeky +reel +reelable +reelect +reelected +reelecting +reelection +reelections +reelects +reeled +reeler +reelers +reeligibilities +reeligibility +reeligible +reeling +reels +reembark +reembarked +reembarking +reembarks +reembodied +reembodies +reembody +reembodying +reembroider +reembroidered +reembroidering +reembroiders +reemerge +reemerged +reemergence +reemergences +reemerges +reemerging +reemission +reemissions +reemit +reemits +reemitted +reemitting +reemphases +reemphasis +reemphasize +reemphasized +reemphasizes +reemphasizing +reemploy +reemployed +reemploying +reemployment +reemployments +reemploys +reenact +reenacted +reenacting +reenactment +reenactments +reenacts +reencounter +reencountered +reencountering +reencounters +reendow +reendowed +reendowing +reendows +reenergize +reenergized +reenergizes +reenergizing +reenforce +reenforced +reenforces +reenforcing +reengage +reengaged +reengagement +reengagements +reengages +reengaging +reengineer +reengineered +reengineering +reengineers +reengrave +reengraved +reengraves +reengraving +reenjoy +reenjoyed +reenjoying +reenjoys +reenlist +reenlisted +reenlisting +reenlistment +reenlistments +reenlists +reenroll +reenrolled +reenrolling +reenrolls +reenter +reentered +reentering +reenters +reenthrone +reenthroned +reenthrones +reenthroning +reentrance +reentrances +reentrant +reentrants +reentries +reentry +reequip +reequipment +reequipments +reequipped +reequipping +reequips +reerect +reerected +reerecting +reerects +rees +reescalate +reescalated +reescalates +reescalating +reescalation +reescalations +reest +reestablish +reestablished +reestablishes +reestablishing +reestablishment +reestablishments +reested +reestimate +reestimated +reestimates +reestimating +reesting +reests +reevaluate +reevaluated +reevaluates +reevaluating +reevaluation +reevaluations +reeve +reeved +reeves +reeving +reevoke +reevoked +reevokes +reevoking +reexamination +reexaminations +reexamine +reexamined +reexamines +reexamining +reexpel +reexpelled +reexpelling +reexpels +reexperience +reexperienced +reexperiences +reexperiencing +reexplore +reexplored +reexplores +reexploring +reexport +reexportation +reexportations +reexported +reexporting +reexports +reexpose +reexposed +reexposes +reexposing +reexposure +reexposures +reexpress +reexpressed +reexpresses +reexpressing +ref +reface +refaced +refaces +refacing +refall +refallen +refalling +refalls +refashion +refashioned +refashioning +refashions +refasten +refastened +refastening +refastens +refect +refected +refecting +refection +refections +refectories +refectory +refects +refed +refeed +refeeding +refeeds +refeel +refeeling +refeels +refel +refell +refelled +refelling +refels +refelt +refence +refenced +refences +refencing refer +referable referee +refereed +refereeing +referees reference +referenced +references +referencing +referenda +referendum +referendums +referent +referential +referentialities +referentiality +referentially +referents +referral +referrals +referred +referrer +referrers +referring +refers +reffed +reffing +refight +refighting +refights +refigure +refigured +refigures +refiguring +refile +refiled +refiles +refiling +refill +refillable +refilled +refilling +refills +refilm +refilmed +refilming +refilms +refilter +refiltered +refiltering +refilters +refinance +refinanced +refinances +refinancing +refind +refinding +refinds +refine +refined +refinement +refinements +refiner +refineries +refiners +refinery +refines +refining +refinish +refinished +refinisher +refinishers +refinishes +refinishing +refire +refired +refires +refiring +refit +refits +refitted +refitting +refix +refixed +refixes +refixing +reflate +reflated +reflates +reflating +reflation +reflationary +reflations reflect +reflectance +reflectances +reflected +reflecting +reflection +reflectional +reflections +reflective +reflectively +reflectiveness +reflectivenesses +reflectivities +reflectivity +reflectometer +reflectometers +reflectometries +reflectometry +reflector +reflectorize +reflectorized +reflectorizes +reflectorizing +reflectors +reflects +reflet +reflets +reflew +reflex +reflexed +reflexes +reflexing +reflexion +reflexions +reflexive +reflexively +reflexiveness +reflexivenesses +reflexives +reflexivities +reflexivity +reflexly +reflexologies +reflexology +reflies +refloat +refloated +refloating +refloats +reflood +reflooded +reflooding +refloods +reflow +reflowed +reflower +reflowered +reflowering +reflowers +reflowing +reflown +reflows +refluence +refluences +refluent +reflux +refluxed +refluxes +refluxing +refly +reflying +refocus +refocused +refocuses +refocusing +refocussed +refocusses +refocussing +refold +refolded +refolding +refolds +reforest +reforestation +reforestations +reforested +reforesting +reforests +reforge +reforged +reforges +reforging reform +reformabilities +reformability +reformable +reformat +reformate +reformates +reformation +reformational +reformations +reformative +reformatories +reformatory +reformats +reformatted +reformatting +reformed +reformer +reformers +reforming +reformism +reformisms +reformist +reformists +reforms +reformulate +reformulated +reformulates +reformulating +reformulation +reformulations +refortification +refortifications +refortified +refortifies +refortify +refortifying +refought +refound +refoundation +refoundations +refounded +refounding +refounds +refract +refracted +refractile +refracting +refraction +refractions +refractive +refractively +refractiveness +refractivenesses +refractivities +refractivity +refractometer +refractometers +refractometric +refractometries +refractometry +refractor +refractories +refractorily +refractoriness +refractorinesses +refractors +refractory +refracts +refrain +refrained +refraining +refrainment +refrainments +refrains +reframe +reframed +reframes +reframing +refrangibilities +refrangibility +refrangible +refrangibleness +refrangiblenesses +refreeze +refreezes +refreezing refresh +refreshed +refreshen +refreshened +refreshening +refreshens +refresher +refreshers +refreshes +refreshing +refreshingly +refreshment +refreshments +refried +refries +refrigerant +refrigerants +refrigerate +refrigerated +refrigerates +refrigerating +refrigeration +refrigerations refrigerator +refrigerators +refront +refronted +refronting +refronts +refroze +refrozen +refry +refrying +refs +reft +refuel +refueled +refueling +refuelled +refuelling +refuels +refuge +refuged +refugee +refugeeism +refugeeisms +refugees +refuges +refugia +refuging +refugium +refulgence +refulgences +refulgent +refund +refundabilities +refundability +refundable +refunded +refunder +refunders +refunding +refunds +refurbish +refurbished +refurbisher +refurbishers +refurbishes +refurbishing +refurbishment +refurbishments +refurnish +refurnished +refurnishes +refurnishing +refusal +refusals refuse +refused +refusenik +refuseniks +refuser +refusers +refuses +refusing +refusnik +refusniks +refutable +refutably +refutal +refutals +refutation +refutations +refute +refuted +refuter +refuters +refutes +refuting +reg +regain +regained +regainer +regainers +regaining +regains +regal +regale +regaled +regaler +regalers +regales +regalia +regaling +regalities +regality +regally regard +regardant +regarded +regardful +regardfully +regardfulness +regardfulnesses +regarding regardless +regardlessly +regardlessness +regardlessnesses +regards +regather +regathered +regathering +regathers +regatta +regattas +regauge +regauged +regauges +regauging +regave +regear +regeared +regearing +regears +regelate +regelated +regelates +regelating +regencies +regency +regenerable +regeneracies +regeneracy +regenerate +regenerated +regenerately +regenerateness +regeneratenesses +regenerates +regenerating +regeneration +regenerations +regenerative +regenerator +regenerators +regent +regental +regents +reges +reggae +reggaes +regicidal +regicide +regicides +regild +regilded +regilding +regilds +regilt +regime +regimen +regimens +regiment +regimental +regimentals +regimentation +regimentations +regimented +regimenting +regiments +regimes +regina +reginae +reginal +reginas +region +regional +regionalism +regionalisms +regionalist +regionalistic +regionalists +regionalization +regionalizations +regionalize +regionalized +regionalizes +regionalizing +regionally +regionals +regions +regisseur +regisseurs register +registerable +registered +registering +registers +registrable +registrant +registrants +registrar +registrars +registration +registrations +registries +registry +regius +regive +regiven +regives +regiving +reglaze +reglazed +reglazes +reglazing +reglet +reglets +regloss +reglossed +reglosses +reglossing +reglow +reglowed +reglowing +reglows +reglue +reglued +reglues +regluing +regma +regmata +regna +regnal +regnancies +regnancy +regnant +regnum +regolith +regoliths +regorge +regorged +regorges +regorging +regosol +regosols +regrade +regraded +regrades +regrading +regraft +regrafted +regrafting +regrafts +regrant +regranted +regranting +regrants +regrate +regrated +regrates +regrating +regreen +regreened +regreening +regreens +regreet +regreeted +regreeting +regreets +regress +regressed +regresses +regressing +regression +regressions +regressive +regressively +regressiveness +regressivenesses +regressivities +regressivity +regressor +regressors regret +regretful +regretfully +regretfulness +regretfulnesses +regrets +regrettable +regrettably +regretted +regretter +regretters +regretting +regrew +regrind +regrinding +regrinds +regroom +regroomed +regrooming +regrooms +regroove +regrooved +regrooves +regrooving +reground +regroup +regrouped +regrouping +regroups +regrow +regrowing +regrown +regrows +regrowth +regrowths +regs regular +regularities +regularity +regularization +regularizations +regularize +regularized +regularizes +regularizing +regularly +regulars +regulate +regulated +regulates +regulating regulation +regulations +regulative +regulator +regulators +regulatory +reguli +reguline +regulus +reguluses +regurgitate +regurgitated +regurgitates +regurgitating +regurgitation +regurgitations +rehab +rehabbed +rehabber +rehabbers +rehabbing +rehabilitant +rehabilitants +rehabilitate +rehabilitated +rehabilitates +rehabilitating +rehabilitation +rehabilitations +rehabilitative +rehabilitator +rehabilitators +rehabs +rehammer +rehammered +rehammering +rehammers +rehandle +rehandled +rehandles +rehandling +rehang +rehanged +rehanging +rehangs +reharden +rehardened +rehardening +rehardens +rehash +rehashed +rehashes +rehashing +rehear +reheard +rehearing +rehearings +rehears +rehearsal +rehearsals +rehearse +rehearsed +rehearser +rehearsers +rehearses +rehearsing +reheat +reheated +reheater +reheaters +reheating +reheats +reheel +reheeled +reheeling +reheels +rehem +rehemmed +rehemming +rehems +rehinge +rehinged +rehinges +rehinging +rehire +rehired +rehires +rehiring +rehoboam +rehoboams +rehospitalization +rehospitalizations +rehospitalize +rehospitalized +rehospitalizes +rehospitalizing +rehouse +rehoused +rehouses +rehousing +rehumanize +rehumanized +rehumanizes +rehumanizing +rehung +rehydratable +rehydrate +rehydrated +rehydrates +rehydrating +rehydration +rehydrations +rehypnotize +rehypnotized +rehypnotizes +rehypnotizing +rei +reichsmark +reichsmarks +reidentified +reidentifies +reidentify +reidentifying +reif +reification +reifications +reified +reifier +reifiers +reifies +reifs +reify +reifying +reign +reigned +reigning +reignite +reignited +reignites +reigniting +reignition +reignitions +reigns +reimage +reimaged +reimages +reimagine +reimagined +reimagines +reimaging +reimagining +reimbursable +reimburse +reimbursed +reimbursement +reimbursements +reimburses +reimbursing +reimmerse +reimmersed +reimmerses +reimmersing +reimplant +reimplantation +reimplantations +reimplanted +reimplanting +reimplants +reimport +reimportation +reimportations +reimported +reimporting +reimports +reimpose +reimposed +reimposes +reimposing +reimposition +reimpositions +reimpression +reimpressions +rein +reincarnate +reincarnated +reincarnates +reincarnating +reincarnation +reincarnations +reincite +reincited +reincites +reinciting +reincorporate +reincorporated +reincorporates +reincorporating +reincorporation +reincorporations +reincur +reincurred +reincurring +reincurs +reindeer +reindeers +reindex +reindexed +reindexes +reindexing +reindict +reindicted +reindicting +reindictment +reindictments +reindicts +reinduce +reinduced +reinduces +reinducing +reinduct +reinducted +reinducting +reinducts +reindustrialization +reindustrializations +reindustrialize +reindustrialized +reindustrializes +reindustrializing +reined +reinfect +reinfected +reinfecting +reinfection +reinfections +reinfects +reinfestation +reinfestations +reinflate +reinflated +reinflates +reinflating +reinflation +reinflations +reinforce +reinforceable +reinforced +reinforcement +reinforcements +reinforcer +reinforcers +reinforces +reinforcing +reinform +reinformed +reinforming +reinforms +reinfuse +reinfused +reinfuses +reinfusing +reinhabit +reinhabited +reinhabiting +reinhabits +reining +reinitiate +reinitiated +reinitiates +reinitiating +reinject +reinjected +reinjecting +reinjection +reinjections +reinjects +reinjure +reinjured +reinjures +reinjuries +reinjuring +reinjury +reink +reinked +reinking +reinks +reinless +reinnervate +reinnervated +reinnervates +reinnervating +reinnervation +reinnervations +reinoculate +reinoculated +reinoculates +reinoculating +reinoculation +reinoculations +reins +reinsert +reinserted +reinserting +reinsertion +reinsertions +reinserts +reinsman +reinsmen +reinspect +reinspected +reinspecting +reinspection +reinspections +reinspects +reinspire +reinspired +reinspires +reinspiring +reinstall +reinstallation +reinstallations +reinstalled +reinstalling +reinstalls +reinstate +reinstated +reinstatement +reinstatements +reinstates +reinstating +reinstitute +reinstituted +reinstitutes +reinstituting +reinstitutionalization +reinstitutionalizations +reinstitutionalize +reinstitutionalized +reinstitutionalizes +reinstitutionalizing +reinsurance +reinsurances +reinsure +reinsured +reinsurer +reinsurers +reinsures +reinsuring +reintegrate +reintegrated +reintegrates +reintegrating +reintegration +reintegrations +reintegrative +reinter +reinterpret +reinterpretation +reinterpretations +reinterpreted +reinterpreting +reinterprets +reinterred +reinterring +reinters +reinterview +reinterviewed +reinterviewing +reinterviews +reintroduce +reintroduced +reintroduces +reintroducing +reintroduction +reintroductions +reinvade +reinvaded +reinvades +reinvading +reinvasion +reinvasions +reinvent +reinvented +reinventing +reinvention +reinventions +reinvents +reinvest +reinvested +reinvestigate +reinvestigated +reinvestigates +reinvestigating +reinvestigation +reinvestigations +reinvesting +reinvestment +reinvestments +reinvests +reinvigorate +reinvigorated +reinvigorates +reinvigorating +reinvigoration +reinvigorations +reinvigorator +reinvigorators +reinvite +reinvited +reinvites +reinviting +reinvoke +reinvoked +reinvokes +reinvoking +reis +reissue +reissued +reissuer +reissuers +reissues +reissuing +reitbok +reitboks +reiterate +reiterated +reiterates +reiterating +reiteration +reiterations +reiterative +reiteratively +reive +reived +reiver +reivers +reives +reiving +rejacket +rejacketed +rejacketing +rejackets reject +rejected +rejectee +rejectees +rejecter +rejecters +rejecting +rejectingly +rejection +rejections +rejective +rejector +rejectors +rejects +rejigger +rejiggered +rejiggering +rejiggers +rejoice +rejoiced +rejoicer +rejoicers +rejoices +rejoicing +rejoicingly +rejoicings +rejoin +rejoinder +rejoinders +rejoined +rejoining +rejoins +rejudge +rejudged +rejudges +rejudging +rejuggle +rejuggled +rejuggles +rejuggling +rejuvenate +rejuvenated +rejuvenates +rejuvenating +rejuvenation +rejuvenations +rejuvenator +rejuvenators +rejuvenescence +rejuvenescences +rejuvenescent +rekey +rekeyboard +rekeyboarded +rekeyboarding +rekeyboards +rekeyed +rekeying +rekeys +rekindle +rekindled +rekindles +rekindling +reknit +reknits +reknitted +reknitting +relabel +relabeled +relabeling +relabelled +relabelling +relabels +relace +relaced +relaces +relacing +relacquer +relacquered +relacquering +relacquers +relaid +relandscape +relandscaped +relandscapes +relandscaping +relapse +relapsed +relapser +relapsers +relapses +relapsing +relatable relate +related +relatedly +relatedness +relatednesses +relater +relaters +relates +relating relation +relational +relationally +relations relationship +relationships relative +relatively +relatives +relativism +relativisms +relativist +relativistic +relativistically +relativists +relativities +relativity +relativize +relativized +relativizes +relativizing +relator +relators +relaunch +relaunched +relaunches +relaunching relax +relaxant +relaxants +relaxation +relaxations +relaxed +relaxedly +relaxedness +relaxednesses +relaxer +relaxers +relaxes +relaxin +relaxing +relaxins relay +relayed +relaying +relays +relearn +relearned +relearning +relearns +relearnt +releasable +release +released +releaser +releasers +releases +releasing +relegate +relegated +relegates +relegating +relegation +relegations +relend +relending +relends +relent +relented +relenting +relentless +relentlessly +relentlessness +relentlessnesses +relents +relet +relets +reletter +relettered +relettering +reletters +reletting +relevance +relevances +relevancies +relevancy relevant +relevantly +releve +releves +reliabilities +reliability reliable +reliableness +reliablenesses +reliables +reliably +reliance +reliances +reliant +reliantly +relic +relicense +relicensed +relicenses +relicensing +relicensure +relicensures +relics +relict +reliction +relictions +relicts +relied relief +reliefs +relier +reliers +relies +relievable +relieve +relieved +relievedly +reliever +relievers +relieves +relieving +relievo +relievos +relight +relighted +relighting +relights religion +religionist +religionists +religionless +religions +religiose +religiosities +religiosity religious +religiously +religiousness +religiousnesses +reline +relined +relines +relining +relink +relinked +relinking +relinks +relinquish +relinquished +relinquishes +relinquishing +relinquishment +relinquishments +reliquaries +reliquary +relique +reliquefied +reliquefies +reliquefy +reliquefying +reliques +reliquiae +relish +relishable +relished +relishes +relishing +relist +relisted +relisting +relists +relit +relive +relived +relives +reliving +reload +reloaded +reloader +reloaders +reloading +reloads +reloan +reloaned +reloaning +reloans +relocatable +relocate +relocated +relocatee +relocatees +relocates +relocating +relocation +relocations +relock +relocked +relocking +relocks +relook +relooked +relooking +relooks +relubricate +relubricated +relubricates +relubricating +relubrication +relubrications +relucent +reluct +reluctance +reluctances +reluctancies +reluctancy +reluctant +reluctantly +reluctate +reluctated +reluctates +reluctating +reluctation +reluctations +relucted +relucting +relucts +relume +relumed +relumes +relumine +relumined +relumines +reluming +relumining rely +relying +rem +remade +remail +remailed +remailing +remails remain +remainder +remaindered +remaindering +remainders +remained +remaining +remains +remake +remaker +remakers +remakes +remaking +reman +remand +remanded +remanding +remands +remanence +remanences +remanent +remanned +remanning +remans +remanufacture +remanufactured +remanufacturer +remanufacturers +remanufactures +remanufacturing +remap +remapped +remapping +remaps remark +remarkable +remarkableness +remarkablenesses +remarkably +remarked +remarker +remarkers +remarket +remarketed +remarketing +remarkets +remarking +remarks +remarque +remarques +remarriage +remarriages +remarried +remarries +remarry +remarrying +remaster +remastered +remastering +remasters +rematch +rematched +rematches +rematching +remate +remated +rematerialize +rematerialized +rematerializes +rematerializing +remates +remating +remeasure +remeasured +remeasurement +remeasurements +remeasures +remeasuring +remediabilities +remediability +remediable +remedial +remedially +remediate +remediated +remediates +remediating +remediation +remediations +remedied +remedies +remediless +remedy +remedying +remeet +remeeting +remeets +remelt +remelted +remelting +remelts remember +rememberabilities +rememberability +rememberable +remembered +rememberer +rememberers +remembering +remembers +remembrance +remembrancer +remembrancers +remembrances +remend +remended +remending +remends +remerge +remerged +remerges +remerging +remet +remex +remiges +remigial +remigration +remigrations +remilitarization +remilitarizations +remilitarize +remilitarized +remilitarizes +remilitarizing remind +reminded +reminder +reminders +remindful +reminding +reminds +reminisce +reminisced +reminiscence +reminiscences +reminiscent +reminiscential +reminiscently +reminiscer +reminiscers +reminisces +reminiscing +remint +reminted +reminting +remints +remise +remised +remises +remising +remiss +remissible +remissibly +remission +remissions +remissly +remissness +remissnesses +remit +remitment +remitments +remits +remittable +remittal +remittals +remittance +remittances +remitted +remittent +remitter +remitters +remitting +remittor +remittors +remix +remixed +remixes +remixing +remixt +remnant +remnants +remobilization +remobilizations +remobilize +remobilized +remobilizes +remobilizing +remodel +remodeled +remodeling +remodelled +remodelling +remodels +remodified +remodifies +remodify +remodifying +remoisten +remoistened +remoistening +remoistens +remolade +remolades +remold +remolded +remolding +remolds +remonetization +remonetizations +remonetize +remonetized +remonetizes +remonetizing +remonstrance +remonstrances +remonstrant +remonstrantly +remonstrants +remonstrate +remonstrated +remonstrates +remonstrating +remonstration +remonstrations +remonstrative +remonstratively +remonstrator +remonstrators +remora +remoras +remorid +remorse +remorseful +remorsefully +remorsefulness +remorsefulnesses +remorseless +remorselessly +remorselessness +remorselessnesses +remorses +remortgage +remortgaged +remortgages +remortgaging remote +remotely +remoteness +remotenesses +remoter +remotes +remotest +remotion +remotions +remotivate +remotivated +remotivates +remotivating +remotivation +remotivations +remount +remounted +remounting +remounts +removabilities +removability +removable +removableness +removablenesses +removably +removal +removals remove +removeable +removed +remover +removers +removes +removing +rems +remuda +remudas +remunerate +remunerated +remunerates +remunerating +remuneration +remunerations +remunerative +remuneratively +remunerativeness +remunerativenesses +remunerator +remunerators +remuneratory +remythologize +remythologized +remythologizes +remythologizing +renail +renailed +renailing +renails +renaissance +renaissances +renal +rename +renamed +renames +renaming +renascence +renascences +renascent +renationalization +renationalizations +renationalize +renationalized +renationalizes +renationalizing +renaturation +renaturations +renature +renatured +renatures +renaturing +rencontre +rencontres +rencounter +rencountered +rencountering +rencounters +rend +rended +render +renderable +rendered +renderer +renderers +rendering +renders +rendezvous +rendezvoused +rendezvouses +rendezvousing +rendible +rending +rendition +renditions +rends +rendzina +rendzinas +renegade +renegaded +renegades +renegading +renegado +renegadoes +renegados +renege +reneged +reneger +renegers +reneges +reneging +renegotiable +renegotiate +renegotiated +renegotiates +renegotiating +renegotiation +renegotiations +renest +renested +renesting +renests +renew +renewabilities +renewability +renewable +renewably +renewal +renewals +renewed +renewer +renewers +renewing +renews +reniform +renig +renigged +renigging +renigs +renin +renins +renitencies +renitency +renitent +renminbi +rennase +rennases +rennet +rennets +rennin +rennins +renogram +renograms +renographic +renographies +renography +renominate +renominated +renominates +renominating +renomination +renominations +renormalization +renormalizations +renormalize +renormalized +renormalizes +renormalizing +renotified +renotifies +renotify +renotifying +renounce +renounced +renouncement +renouncements +renouncer +renouncers +renounces +renouncing +renovascular +renovate +renovated +renovates +renovating +renovation +renovations +renovative +renovator +renovators +renown +renowned +renowning +renowns rent +rentabilities +rentability +rentable +rental +rentals +rente +rented +renter +renters +rentes +rentier +rentiers +renting +rents +renumber +renumbered +renumbering +renumbers +renunciate +renunciates +renunciation +renunciations +renunciative +renunciatory +renvoi +renvois +reobject +reobjected +reobjecting +reobjects +reobserve +reobserved +reobserves +reobserving +reobtain +reobtained +reobtaining +reobtains +reoccupation +reoccupations +reoccupied +reoccupies +reoccupy +reoccupying +reoccur +reoccurred +reoccurrence +reoccurrences +reoccurring +reoccurs +reoffer +reoffered +reoffering +reoffers +reoil +reoiled +reoiling +reoils +reopen +reopened +reopening +reopenings +reopens +reoperate +reoperated +reoperates +reoperating +reoperation +reoperations +reoppose +reopposed +reopposes +reopposing +reorchestrate +reorchestrated +reorchestrates +reorchestrating +reorchestration +reorchestrations +reordain +reordained +reordaining +reordains +reorder +reordered +reordering +reorders +reorganization +reorganizational +reorganizations +reorganize +reorganized +reorganizer +reorganizers +reorganizes +reorganizing +reorient +reorientate +reorientated +reorientates +reorientating +reorientation +reorientations +reoriented +reorienting +reorients +reoutfit +reoutfits +reoutfitted +reoutfitting +reovirus +reoviruses +reoxidation +reoxidations +reoxidize +reoxidized +reoxidizes +reoxidizing +rep +repacified +repacifies +repacify +repacifying +repack +repackage +repackaged +repackager +repackagers +repackages +repackaging +repacked +repacking +repacks +repaid +repaint +repainted +repainting +repaints repair +repairabilities +repairability +repairable +repaired +repairer +repairers +repairing +repairman +repairmen +repairs +repand +repandly +repanel +repaneled +repaneling +repanelled +repanelling +repanels +repaper +repapered +repapering +repapers +reparable +reparation +reparations +reparative +repark +reparked +reparking +reparks +repartee +repartees +repartition +repartitions +repass +repassage +repassages +repassed +repasses +repassing +repast +repasted +repasting +repasts +repatch +repatched +repatches +repatching +repatriate +repatriated +repatriates +repatriating +repatriation +repatriations +repattern +repatterned +repatterning +repatterns +repave +repaved +repaves +repaving +repay +repayable +repaying +repayment +repayments +repays +repeal +repealable +repealed +repealer +repealers +repealing +repeals repeat +repeatabilities +repeatability +repeatable +repeated +repeatedly +repeater +repeaters +repeating +repeats +repechage +repechages +repeg +repegged +repegging +repegs +repel +repellant +repellants +repelled +repellencies +repellency +repellent +repellently +repellents +repeller +repellers +repelling +repels +repent +repentance +repentances +repentant +repentantly +repented +repenter +repenters +repenting +repents +repeople +repeopled +repeoples +repeopling +repercussion +repercussions +repercussive +reperk +reperked +reperking +reperks +repertoire +repertoires +repertories +repertory +repetend +repetends +repetition +repetitional +repetitions +repetitious +repetitiously +repetitiousness +repetitiousnesses +repetitive +repetitively +repetitiveness +repetitivenesses +rephotograph +rephotographed +rephotographing +rephotographs +rephrase +rephrased +rephrases +rephrasing +repin +repine +repined +repiner +repiners +repines +repining +repinned +repinning +repins replace +replaceable +replaced +replacement +replacements +replacer +replacers +replaces +replacing +replan +replanned +replanning +replans +replant +replantation +replantations +replanted +replanting +replants +replaster +replastered +replastering +replasters +replate +replated +replates +replating +replay +replayed +replaying +replays +replead +repleaded +repleader +repleaders +repleading +repleads +repled +repledge +repledged +repledges +repledging +replenish +replenishable +replenished +replenisher +replenishers +replenishes +replenishing +replenishment +replenishments +replete +repleteness +repletenesses +repletion +repletions +repleviable +replevied +replevies +replevin +replevined +replevining +replevins +replevy +replevying +replica +replicabilities +replicability +replicable +replicas +replicase +replicases +replicate +replicated +replicates +replicating +replication +replications +replicative +replicon +replicons +replied +replier +repliers +replies +replot +replots +replotted +replotting +replumb +replumbed +replumbing +replumbs +replunge +replunged +replunges +replunging reply +replying +repo +repolarization +repolarizations +repolarize +repolarized +repolarizes +repolarizing +repolish +repolished +repolishes +repolishing +repoll +repolled +repolling +repolls +repopularize +repopularized +repopularizes +repopularizing +repopulate +repopulated +repopulates +repopulating +repopulation +repopulations report +reportable +reportage +reportages +reported +reportedly reporter +reporters +reporting +reportorial +reportorially +reports +repos +reposal +reposals +repose +reposed +reposeful +reposefully +reposefulness +reposefulnesses +reposer +reposers +reposes +reposing +reposit +reposited +repositing +reposition +repositioned +repositioning +repositions +repositories +repository +reposits +repossess +repossessed +repossesses +repossessing +repossession +repossessions +repossessor +repossessors +repot +repots +repotted +repotting +repour +repoured +repouring +repours +repousse +repousses +repower +repowered +repowering +repowers +repp +repped +repps +reprehend +reprehended +reprehending +reprehends +reprehensibilities +reprehensibility +reprehensible +reprehensibleness +reprehensiblenesses +reprehensibly +reprehension +reprehensions +reprehensive represent +representable +representation +representational +representationalism +representationalisms +representationalist +representationalists +representationally +representations representative +representatively +representativeness +representativenesses +representatives +representativities +representativity +represented +representer +representers +representing +represents +repress +repressed +represses +repressibilities +repressibility +repressible +repressing +repression +repressionist +repressions +repressive +repressively +repressiveness +repressivenesses +repressor +repressors +repressurize +repressurized +repressurizes +repressurizing +reprice +repriced +reprices +repricing +reprieval +reprievals +reprieve +reprieved +reprieves +reprieving +reprimand +reprimanded +reprimanding +reprimands +reprint +reprinted +reprinter +reprinters +reprinting +reprints +reprisal +reprisals +reprise +reprised +reprises +reprising +repristinate +repristinated +repristinates +repristinating +repristination +repristinations +reprivatization +reprivatizations +reprivatize +reprivatized +reprivatizes +reprivatizing +repro +reproach +reproachable +reproached +reproacher +reproachers +reproaches +reproachful +reproachfully +reproachfulness +reproachfulnesses +reproaching +reproachingly +reprobance +reprobances +reprobate +reprobated +reprobates +reprobating +reprobation +reprobations +reprobative +reprobatory +reprobe +reprobed +reprobes +reprobing +reprocess +reprocessed +reprocesses +reprocessing +reproduce +reproduced +reproducer +reproducers +reproduces +reproducibilities +reproducibility +reproducible +reproducibles +reproducibly +reproducing +reproduction +reproductions +reproductive +reproductively +reproductives +reprogram +reprogramed +reprograming +reprogrammable +reprogrammed +reprogramming +reprograms +reprographer +reprographers +reprographic +reprographics +reprographies +reprography +reproof +reproofs +repros +reproval +reprovals +reprove +reproved +reprover +reprovers +reproves +reproving +reprovingly +reprovision +reprovisioned +reprovisioning +reprovisions +reps +reptant +reptile +reptiles +reptilia +reptilian +reptilians +reptilium republic +republican +republicanism +republicanisms +republicanize +republicanized +republicanizes +republicanizing +republicans +republication +republications +republics +republish +republished +republisher +republishers +republishes +republishing +repudiate +repudiated +repudiates +repudiating +repudiation +repudiationist +repudiationists +repudiations +repudiator +repudiators +repugn +repugnance +repugnances +repugnancies +repugnancy +repugnant +repugnantly +repugned +repugning +repugns +repulse +repulsed +repulser +repulsers +repulses +repulsing +repulsion +repulsions +repulsive +repulsively +repulsiveness +repulsivenesses +repump +repumped +repumping +repumps +repunctuation +repunctuations +repurchase +repurchased +repurchases +repurchasing +repurified +repurifies +repurify +repurifying +repursue +repursued +repursues +repursuing +reputabilities +reputability +reputable +reputably reputation +reputational +reputations +repute +reputed +reputedly +reputes +reputing +requalification +requalifications +requalified +requalifies +requalify +requalifying request +requested +requester +requesters +requesting +requestor +requestors +requests +requiem +requiems +requiescat +requiescats +requin +requins require +required requirement +requirements +requirer +requirers +requires +requiring +requisite +requisiteness +requisitenesses +requisites +requisition +requisitioned +requisitioning +requisitions +requital +requitals +requite +requited +requiter +requiters +requites +requiting +rerack +reracked +reracking +reracks +reradiate +reradiated +reradiates +reradiating +reradiation +reradiations +reraise +reraised +reraises +reraising +reran +reread +rereading +rereadings +rereads +rerecord +rerecorded +rerecording +rerecords +reredos +reredoses +reregister +reregistered +reregistering +reregisters +reregistration +reregistrations +reregulate +reregulated +reregulates +reregulating +reregulation +reregulations +rerelease +rereleased +rereleases +rereleasing +reremice +reremind +rereminded +rereminding +rereminds +reremouse +rerepeat +rerepeated +rerepeating +rerepeats +rereview +rereviewed +rereviewing +rereviews +rereward +rerewards +rerig +rerigged +rerigging +rerigs +rerise +rerisen +rerises +rerising +reroll +rerolled +reroller +rerollers +rerolling +rerolls +reroof +reroofed +reroofing +reroofs +rerose +reroute +rerouted +reroutes +rerouting +rerun +rerunning +reruns +res +resaddle +resaddled +resaddles +resaddling +resaid +resail +resailed +resailing +resails +resalable +resale +resales +resalute +resaluted +resalutes +resaluting +resample +resampled +resamples +resampling +resaw +resawed +resawing +resawn +resaws +resay +resaying +resays +rescale +rescaled +rescales +rescaling +reschedule +rescheduled +reschedules +rescheduling +reschool +reschooled +reschooling +reschools +rescind +rescinded +rescinder +rescinders +rescinding +rescindment +rescindments +rescinds +rescission +rescissions +rescissory +rescore +rescored +rescores +rescoring +rescreen +rescreened +rescreening +rescreens +rescript +rescripts +rescuable rescue +rescued +rescuer +rescuers +rescues +rescuing +resculpt +resculpted +resculpting +resculpts +reseal +resealable +resealed +resealing +reseals research +researchable +researched +researcher +researchers +researches +researching +researchist +researchists +reseason +reseasoned +reseasoning +reseasons +reseat +reseated +reseating +reseats +reseau +reseaus +reseaux +resect +resectabilities +resectability +resectable +resected +resecting +resection +resections +resects +resecure +resecured +resecures +resecuring +reseda +resedas +resee +reseed +reseeded +reseeding +reseeds +reseeing +reseek +reseeking +reseeks +reseen +resees +resegregate +resegregated +resegregates +resegregating +resegregation +resegregations +reseize +reseized +reseizes +reseizing +resell +reseller +resellers +reselling +resells +resemblance +resemblances +resemblant resemble +resembled +resembles +resembling +resend +resending +resends +resensitize +resensitized +resensitizes +resensitizing +resent +resented +resentence +resentenced +resentences +resentencing +resentful +resentfully +resentfulness +resentfulnesses +resenting +resentment +resentments +resents +reserpine +reserpines +reservable reservation +reservationist +reservationists +reservations reserve +reserved +reservedly +reservedness +reservednesses +reserver +reservers +reserves +reservice +reserviced +reservices +reservicing +reserving +reservist +reservists +reservoir +reservoirs +reset +resets +resettable +resetter +resetters +resetting +resettle +resettled +resettlement +resettlements +resettles +resettling +resew +resewed +resewing +resewn +resews +resh +reshape +reshaped +reshaper +reshapers +reshapes +reshaping +reshave +reshaved +reshaven +reshaves +reshaving +reshes +reshine +reshined +reshines +reshingle +reshingled +reshingles +reshingling +reshining +reship +reshipped +reshipping +reships +reshod +reshoe +reshoeing +reshoes +reshone +reshoot +reshooting +reshoots +reshot +reshow +reshowed +reshowing +reshown +reshows +reshuffle +reshuffled +reshuffles +reshuffling +resid +reside +resided +residence +residences +residencies +residency +resident +residential +residentially +residents +resider +residers +resides +residing +resids +residua +residual +residually +residuals +residuary +residue +residues +residuum +residuums +resift +resifted +resifting +resifts +resight +resighted +resighting +resights resign +resignation +resignations +resigned +resignedly +resignedness +resignednesses +resigner +resigners +resigning +resigns +resile +resiled +resiles +resilience +resiliences +resiliencies +resiliency +resilient +resiliently +resiling +resilver +resilvered +resilvering +resilvers +resin +resinate +resinated +resinates +resinating +resined +resinified +resinifies +resinify +resinifying +resining +resinoid +resinoids +resinous +resins +resiny resist +resistance +resistances +resistant +resistants +resisted +resister +resisters +resistibilities +resistibility +resistible +resisting +resistive +resistively +resistiveness +resistivenesses +resistivities +resistivity +resistless +resistlessly +resistlessness +resistlessnesses +resistor +resistors +resists +resite +resited +resites +resiting +resitting +resittings +resize +resized +resizes +resizing +resketch +resketched +resketches +resketching +reslate +reslated +reslates +reslating +resmelt +resmelted +resmelting +resmelts +resmooth +resmoothed +resmoothing +resmooths +resoak +resoaked +resoaking +resoaks +resocialization +resocializations +resocialize +resocialized +resocializes +resocializing +resod +resodded +resodding +resods +resojet +resojets +resold +resolder +resoldered +resoldering +resolders +resole +resoled +resoles +resolidification +resolidifications +resolidified +resolidifies +resolidify +resolidifying +resoling +resoluble +resolute +resolutely +resoluteness +resolutenesses +resoluter +resolutes +resolutest +resolution +resolutions +resolvable +resolve +resolved +resolvent +resolvents +resolver +resolvers +resolves +resolving +resonance +resonances +resonant +resonantly +resonants +resonate +resonated +resonates +resonating +resonator +resonators +resorb +resorbed +resorbing +resorbs +resorcin +resorcinol +resorcinols +resorcins +resorption +resorptions +resorptive +resort +resorted +resorter +resorters +resorting +resorts +resought +resound +resounded +resounding +resoundingly +resounds +resource +resourceful +resourcefully +resourcefulness +resourcefulnesses +resources +resow +resowed +resowing +resown +resows +respace +respaced +respaces +respacing +respade +respaded +respades +respading +respeak +respeaking +respeaks respect +respectabilities +respectability +respectable +respectableness +respectablenesses +respectables +respectably +respected +respecter +respecters +respectful +respectfully +respectfulness +respectfulnesses +respecting +respective +respectively +respectiveness +respectivenesses +respects +respell +respelled +respelling +respellings +respells +respelt +respirable +respiration +respirations +respirator +respirators +respiratory +respire +respired +respires +respiring +respiritualize +respiritualized +respiritualizes +respiritualizing +respirometer +respirometers +respirometric +respirometries +respirometry +respite +respited +respites +respiting +resplendence +resplendences +resplendencies +resplendency +resplendent +resplendently +resplice +respliced +resplices +resplicing +resplit +resplits +resplitting +respoke +respoken respond +responded +respondent +respondents +responder +responders +responding +responds +responsa +response +responses +responsibilities responsibility +responsible +responsibleness +responsiblenesses +responsibly +responsions +responsive +responsively +responsiveness +responsivenesses +responsories +responsory +responsum +respot +respots +respotted +respotting +resprang +respray +resprayed +respraying +resprays +respread +respreading +respreads +respring +respringing +resprings +resprout +resprouted +resprouting +resprouts +resprung +ressentiment +ressentiments rest +restabilize +restabilized +restabilizes +restabilizing +restack +restacked +restacking +restacks +restaff +restaffed +restaffing +restaffs +restage +restaged +restages +restaging +restamp +restamped +restamping +restamps +restart +restartable +restarted +restarting +restarts +restate +restated +restatement +restatements +restates +restating restaurant +restauranteur +restauranteurs +restaurants +restaurateur +restaurateurs +rested +rester +resters +restful +restfuller +restfullest +restfully +restfulness +restfulnesses +restimulate +restimulated +restimulates +restimulating +restimulation +restimulations +resting +restitch +restitched +restitches +restitching +restitute +restituted +restitutes +restituting +restitution +restitutions +restive +restively +restiveness +restivenesses +restless +restlessly +restlessness +restlessnesses +restock +restocked +restocking +restocks +restoke +restoked +restokes +restoking +restorable +restoral +restorals +restoration +restorations +restorative +restoratives +restore +restored +restorer +restorers +restores +restoring +restrain +restrainable +restrained +restrainedly +restrainer +restrainers +restraining +restrains +restraint +restraints +restrengthen +restrengthened +restrengthening +restrengthens +restress +restressed +restresses +restressing +restricken +restrict +restricted +restrictedly +restricting restriction +restrictionism +restrictionisms +restrictionist +restrictionists +restrictions +restrictive +restrictively +restrictiveness +restrictivenesses +restrictives +restricts +restrike +restrikes +restriking +restring +restringing +restrings +restrive +restriven +restrives +restriving +restroom +restrooms +restrove +restruck +restructure +restructured +restructures +restructuring +restrung +rests +restudied +restudies +restudy +restudying +restuff +restuffed +restuffing +restuffs +restyle +restyled +restyles +restyling +resubmission +resubmissions +resubmit +resubmits +resubmitted +resubmitting result +resultant +resultantly +resultants +resulted +resultful +resulting +resultless +results +resume +resumed +resumer +resumers +resumes +resuming +resummon +resummoned +resummoning +resummons +resumption +resumptions +resupinate +resupine +resupplied +resupplies +resupply +resupplying +resurface +resurfaced +resurfacer +resurfacers +resurfaces +resurfacing +resurge +resurged +resurgence +resurgences +resurgent +resurges +resurging +resurrect +resurrected +resurrecting +resurrection +resurrectional +resurrectionist +resurrectionists +resurrections +resurrects +resurvey +resurveyed +resurveying +resurveys +resuscitate +resuscitated +resuscitates +resuscitating +resuscitation +resuscitations +resuscitative +resuscitator +resuscitators +resyntheses +resynthesis +resynthesize +resynthesized +resynthesizes +resynthesizing +resystematize +resystematized +resystematizes +resystematizing +ret +retable +retables +retack +retacked +retacking +retackle +retackled +retackles +retackling +retacks +retag +retagged +retagging +retags +retail +retailed +retailer +retailers +retailing +retailings +retailor +retailored +retailoring +retailors +retails +retain +retained +retainer +retainers +retaining +retains +retake +retaken +retaker +retakers +retakes +retaking +retaliate +retaliated +retaliates +retaliating +retaliation +retaliations +retaliative +retaliatory +retape +retaped +retapes +retaping +retard +retardant +retardants +retardate +retardates +retardation +retardations +retarded +retarder +retarders +retarding +retards +retarget +retargeted +retargeting +retargets +retaste +retasted +retastes +retasting +retaught +retax +retaxed +retaxes +retaxing +retch +retched +retches +retching +rete +reteach +reteaches +reteaching +reteam +reteamed +reteaming +reteams +retear +retearing +retears retell +retelling +retellings +retells +retem +retemper +retempered +retempering +retempers +retems +retene +retenes +retention +retentions +retentive +retentively +retentiveness +retentivenesses +retentivities +retentivity +retest +retested +retesting +retests +retexture +retextured +retextures +retexturing +rethink +rethinker +rethinkers +rethinking +rethinks +rethought +rethread +rethreaded +rethreading +rethreads +retia +retial +retiarii +retiarius +retiary +reticence +reticences +reticencies +reticency +reticent +reticently +reticle +reticles +reticula +reticular +reticulate +reticulated +reticulately +reticulates +reticulating +reticulation +reticulations +reticule +reticules +reticulocyte +reticulocytes +reticuloendothelial +reticulum +retie +retied +reties +retiform +retighten +retightened +retightening +retightens +retile +retiled +retiles +retiling +retime +retimed +retimes +retiming +retina +retinacula +retinaculum +retinae +retinal +retinals +retinas +retine +retinene +retinenes +retines +retinite +retinites +retinitides +retinitis +retinoblastoma +retinoblastomas +retinoblastomata +retinoid +retinoids +retinol +retinols +retinopathies +retinopathy +retinoscopies +retinoscopy +retinotectal +retint +retinted +retinting +retints +retinue +retinued +retinues +retinula +retinulae +retinular +retinulas +retirant +retirants retire +retired +retiredly +retiredness +retirednesses +retiree +retirees +retirement +retirements +retirer +retirers +retires +retiring +retiringly +retiringness +retiringnesses +retitle +retitled +retitles +retitling +retold +retook +retool +retooled +retooling +retools +retore +retorn +retort +retorted +retorter +retorters +retorting +retorts +retouch +retouched +retoucher +retouchers +retouches +retouching +retrace +retraced +retraces +retracing +retrack +retracked +retracking +retracks +retract +retractable +retracted +retractile +retractilities +retractility +retracting +retraction +retractions +retractor +retractors +retracts +retrain +retrainable +retrained +retraining +retrains +retral +retrally +retransfer +retransferred +retransferring +retransfers +retransform +retransformation +retransformations +retransformed +retransforming +retransforms +retranslate +retranslated +retranslates +retranslating +retranslation +retranslations +retransmission +retransmissions +retransmit +retransmits +retransmitted +retransmitting +retread +retreaded +retreading +retreads +retreat +retreatant +retreatants +retreated +retreater +retreaters +retreating +retreats +retrench +retrenched +retrenches +retrenching +retrenchment +retrenchments +retrial +retrials +retribution +retributions +retributive +retributively +retributory +retried +retries +retrievabilities +retrievability +retrievable +retrieval +retrievals +retrieve +retrieved +retriever +retrievers +retrieves +retrieving +retrim +retrimmed +retrimming +retrims +retro +retroact +retroacted +retroacting +retroaction +retroactions +retroactive +retroactively +retroactivities +retroactivity +retroacts +retrocede +retroceded +retrocedes +retroceding +retrocession +retrocessions +retrodict +retrodicted +retrodicting +retrodiction +retrodictions +retrodictive +retrodicts +retrofire +retrofired +retrofires +retrofiring +retrofit +retrofits +retrofitted +retrofitting +retroflection +retroflections +retroflex +retroflexion +retroflexions +retrogradation +retrogradations +retrograde +retrograded +retrogradely +retrogrades +retrograding +retrogress +retrogressed +retrogresses +retrogressing +retrogression +retrogressions +retrogressive +retrogressively +retropack +retropacks +retroperitoneal +retroperitoneally +retroreflection +retroreflections +retroreflective +retroreflector +retroreflectors +retrorse +retros +retrospect +retrospected +retrospecting +retrospection +retrospections +retrospective +retrospectively +retrospectives +retrospects +retrousse +retroversion +retroversions +retroviral +retrovirus +retroviruses +retry +retrying +rets +retsina +retsinas +retted +retting +retune +retuned +retunes +retuning return +returnable +returnables +returned +returnee +returnees +returner +returners +returning +returns +retuse +retwist +retwisted +retwisting +retwists +retying +retype +retyped +retypes +retyping +reunification +reunifications +reunified +reunifies +reunify +reunifying +reunion +reunionist +reunionistic +reunionists +reunions +reunite +reunited +reuniter +reuniters +reunites +reuniting +reupholster +reupholstered +reupholstering +reupholsters +reusabilities +reusability +reusable +reuse +reused +reuses +reusing +reutilization +reutilizations +reutilize +reutilized +reutilizes +reutilizing +reutter +reuttered +reuttering +reutters +rev +revaccinate +revaccinated +revaccinates +revaccinating +revaccination +revaccinations +revalidate +revalidated +revalidates +revalidating +revalidation +revalidations +revalorization +revalorizations +revalorize +revalorized +revalorizes +revalorizing +revaluate +revaluated +revaluates +revaluating +revaluation +revaluations +revalue +revalued +revalues +revaluing +revamp +revamped +revamper +revampers +revamping +revamps +revanche +revanches +revanchism +revanchisms +revanchist +revanchists +revascularization +revascularizations +reveal +revealable +revealed +revealer +revealers +revealing +revealingly +revealment +revealments +reveals +revegetate +revegetated +revegetates +revegetating +revegetation +revegetations +revehent +reveille +reveilles +revel +revelation +revelations +revelator +revelators +revelatory +reveled +reveler +revelers +reveling +revelled +reveller +revellers +revelling +revelries +revelry +revels +revenant +revenants +revenge +revenged +revengeful +revengefully +revengefulness +revengefulnesses +revenger +revengers +revenges +revenging +revenual +revenue +revenued +revenuer +revenuers +revenues +reverb +reverbed +reverberant +reverberantly +reverberate +reverberated +reverberates +reverberating +reverberation +reverberations +reverberative +reverberatory +reverbing +reverbs +revere +revered +reverence +reverenced +reverencer +reverencers +reverences +reverencing +reverend +reverends +reverent +reverential +reverentially +reverently +reverer +reverers +reveres +reverie +reveries +reverified +reverifies +reverify +reverifying +revering +revers +reversal +reversals +reverse +reversed +reversely +reverser +reversers +reverses +reversibilities +reversibility +reversible +reversibles +reversibly +reversing +reversion +reversional +reversionary +reversioner +reversioners +reversions +reverso +reversos +revert +revertant +revertants +reverted +reverter +reverters +revertible +reverting +reverts +revery +revest +revested +revesting +revests +revet +revetment +revetments +revets +revetted +revetting +revictual +revictualed +revictualing +revictualled +revictualling +revictuals review +reviewable +reviewal +reviewals +reviewed +reviewer +reviewers +reviewing +reviews +revile +reviled +revilement +revilements +reviler +revilers +reviles +reviling +revisable +revisal +revisals +revise +revised +reviser +revisers +revises +revising revision +revisionary +revisionism +revisionisms +revisionist +revisionists +revisions +revisit +revisited +revisiting +revisits +revisor +revisors +revisory +revisualization +revisualizations +revitalise +revitalised +revitalises +revitalising +revitalization +revitalizations +revitalize +revitalized +revitalizes +revitalizing +revivable +revival +revivalism +revivalisms +revivalist +revivalistic +revivalists +revivals +revive +revived +reviver +revivers +revives +revivification +revivifications +revivified +revivifies +revivify +revivifying +reviving +reviviscence +reviviscences +reviviscent +revocable +revocation +revocations +revoice +revoiced +revoices +revoicing +revokable +revoke +revoked +revoker +revokers +revokes +revoking +revolt +revolted +revolter +revolters +revolting +revoltingly +revolts +revolute revolution +revolutionaries +revolutionarily +revolutionariness +revolutionarinesses +revolutionary +revolutionise +revolutionised +revolutionises +revolutionising +revolutionist +revolutionists +revolutionize +revolutionized +revolutionizer +revolutionizers +revolutionizes +revolutionizing +revolutions +revolvable +revolve +revolved +revolver +revolvers +revolves +revolving +revote +revoted +revotes +revoting +revs +revue +revues +revuist +revuists +revulsed +revulsion +revulsions +revulsive +revved +revving +rewake +rewaked +rewaken +rewakened +rewakening +rewakens +rewakes +rewaking +rewan reward +rewardable +rewarded +rewarder +rewarders +rewarding +rewardingly +rewards +rewarm +rewarmed +rewarming +rewarms +rewash +rewashed +rewashes +rewashing +rewax +rewaxed +rewaxes +rewaxing +reweave +reweaved +reweaves +reweaving +rewed +rewedded +rewedding +reweds +reweigh +reweighed +reweighing +reweighs +reweld +rewelded +rewelding +rewelds +rewet +rewets +rewetted +rewetting +rewiden +rewidened +rewidening +rewidens +rewin rewind +rewinded +rewinder +rewinders +rewinding +rewinds +rewinning +rewins +rewire +rewired +rewires +rewiring +rewoke +rewoken +rewon +reword +reworded +rewording +rewords +rework +reworked +reworking +reworks +rewound +rewove +rewoven +rewrap +rewrapped +rewrapping +rewraps +rewrapt +rewrite +rewriter +rewriters +rewrites +rewriting +rewritten +rewrote +rewrought +rex +rexes +reynard +reynards +rezone +rezoned +rezones +rezoning +rhabdocoele +rhabdocoeles +rhabdom +rhabdomancer +rhabdomancers +rhabdomancies +rhabdomancy +rhabdome +rhabdomere +rhabdomeres +rhabdomes +rhabdoms +rhabdomyosarcoma +rhabdomyosarcomas +rhabdomyosarcomata +rhabdovirus +rhabdoviruses +rhachides +rhachis +rhachises +rhadamanthine +rhamnose +rhamnoses +rhamnus +rhamnuses +rhaphae +rhaphe +rhaphes +rhapsode +rhapsodes +rhapsodic +rhapsodical +rhapsodically +rhapsodies +rhapsodist +rhapsodists +rhapsodize +rhapsodized +rhapsodizes +rhapsodizing +rhapsody +rhatanies +rhatany +rhea +rheas +rhebok +rheboks +rhematic +rhenium +rheniums +rheobase +rheobases +rheological +rheologically +rheologies +rheologist +rheologists +rheology +rheometer +rheometers +rheophil +rheostat +rheostatic +rheostats +rhesus +rhesuses +rhetor +rhetoric +rhetorical +rhetorically +rhetorician +rhetoricians +rhetorics +rhetors +rheum +rheumatic +rheumatically +rheumatics +rheumatism +rheumatisms +rheumatiz +rheumatizes +rheumatoid +rheumatologies +rheumatologist +rheumatologists +rheumatology +rheumic +rheumier +rheumiest +rheums +rheumy +rhinal +rhinencephala +rhinencephalic +rhinencephalon +rhinestone +rhinestoned +rhinestones +rhinitides +rhinitis +rhino +rhinoceri +rhinoceros +rhinoceroses +rhinoplasties +rhinoplasty +rhinos +rhinoscopies +rhinoscopy +rhinovirus +rhinoviruses +rhizobia +rhizobial +rhizobium +rhizoctonia +rhizoctonias +rhizoid +rhizoidal +rhizoids +rhizoma +rhizomata +rhizomatous +rhizome +rhizomes +rhizomic +rhizopi +rhizoplane +rhizoplanes +rhizopod +rhizopods +rhizopus +rhizopuses +rhizosphere +rhizospheres +rhizotomies +rhizotomy +rho +rhodamin +rhodamine +rhodamines +rhodamins +rhodic +rhodium +rhodiums +rhodochrosite +rhodochrosites +rhododendron +rhododendrons +rhodolite +rhodolites +rhodomontade +rhodomontades +rhodonite +rhodonites +rhodopsin +rhodopsins +rhodora +rhodoras +rhomb +rhombencephala +rhombencephalon +rhombi +rhombic +rhombohedra +rhombohedral +rhombohedron +rhombohedrons +rhomboid +rhomboidal +rhomboidei +rhomboideus +rhomboids +rhombs +rhombus +rhombuses +rhonchal +rhonchi +rhonchus +rhos +rhubarb +rhubarbs +rhumb +rhumba +rhumbaed +rhumbaing +rhumbas +rhumbs +rhus +rhuses rhyme +rhymed +rhymeless +rhymer +rhymers +rhymes +rhymester +rhymesters +rhyming +rhynchocephalian +rhynchocephalians +rhyolite +rhyolites +rhyolitic +rhyta +rhythm +rhythmic +rhythmical +rhythmically +rhythmicities +rhythmicity +rhythmics +rhythmist +rhythmists +rhythmization +rhythmizations +rhythmize +rhythmized +rhythmizes +rhythmizing +rhythms +rhytidome +rhytidomes +rhyton +rhytons +ria +rial +rials +rialto +rialtos +riant +riantly +rias +riata +riatas +rib +ribald +ribaldly +ribaldries +ribaldry +ribalds +riband +ribands +ribavirin +ribavirins +ribband +ribbands +ribbed +ribber +ribbers +ribbier +ribbiest +ribbing +ribbings +ribbon +ribboned +ribbonfish +ribbonfishes +ribboning +ribbonlike +ribbons +ribbony +ribby +ribes +ribgrass +ribgrasses +ribier +ribiers +ribless +riblet +riblets +riblike +riboflavin +riboflavins +ribonuclease +ribonucleases +ribonucleoprotein +ribonucleoproteins +ribonucleoside +ribonucleosides +ribonucleotide +ribonucleotides +ribose +riboses +ribosomal +ribosome +ribosomes +ribs +ribwort +ribworts rice +ricebird +ricebirds +riced +ricer +ricercar +ricercare +ricercari +ricercars +ricers +rices rich +richen +richened +richening +richens +richer +riches +richest +richly +richness +richnesses +richweed +richweeds +ricin +ricing +ricins +ricinus +ricinuses +rick +ricked +ricketier +ricketiest +rickets +rickettsia +rickettsiae +rickettsial +rickettsias +rickety +rickey +rickeys +ricking +rickrack +rickracks +ricks +ricksha +rickshas +rickshaw +rickshaws +ricochet +ricocheted +ricocheting +ricochets +ricochetted +ricochetting +ricotta +ricottas +ricrac +ricracs +rictal +rictus +rictuses rid +ridable +riddance +riddances +ridded +ridden +ridder +ridders +ridding riddle +riddled +riddler +riddlers +riddles +riddling ride +rideable +rident +rider +riderless +riders +ridership +riderships +rides +ridge +ridged +ridgel +ridgeline +ridgelines +ridgeling +ridgelings +ridgels +ridgepole +ridgepoles +ridges +ridgier +ridgiest +ridgil +ridgils +ridging +ridgling +ridglings +ridgy +ridicule +ridiculed +ridiculer +ridiculers +ridicules +ridiculing ridiculous +ridiculously +ridiculousness +ridiculousnesses +riding +ridings +ridley +ridleys +ridotto +ridottos +rids +riel +riels +riesling +rieslings +riever +rievers +rif +rifampicin +rifampicins +rifampin +rifampins +rife +rifely +rifeness +rifenesses +rifer +rifest +riff +riffed +riffing +riffle +riffled +riffler +rifflers +riffles +riffling +riffraff +riffraffs +riffs +rifle +riflebird +riflebirds +rifled +rifleman +riflemen +rifler +rifleries +riflers +riflery +rifles +rifling +riflings +rifs +rift +rifted +rifting +riftless +rifts +rig +rigadoon +rigadoons +rigamarole +rigamaroles +rigatoni +rigatonis +rigaudon +rigaudons +rigged +rigger +riggers +rigging +riggings right +righted +righteous +righteously +righteousness +righteousnesses +righter +righters +rightest +rightful +rightfully +rightfulness +rightfulnesses +righties +righting +rightism +rightisms +rightist +rightists +rightly +rightmost +rightness +rightnesses +righto +rights +rightward +righty rigid +rigidification +rigidifications +rigidified +rigidifies +rigidify +rigidifying +rigidities +rigidity +rigidly +rigidness +rigidnesses +rigmarole +rigmaroles +rigor +rigorism +rigorisms +rigorist +rigoristic +rigorists +rigorous +rigorously +rigorousness +rigorousnesses +rigors +rigour +rigours +rigs +rijsttafel +rijsttafels +rikisha +rikishas +rikshaw +rikshaws +rile +riled +riles +riley +rilievi +rilievo +riling +rill +rille +rilled +rilles +rillet +rillets +rillettes +rilling +rills +rim +rime +rimed +rimer +rimers +rimes +rimester +rimesters +rimfire +rimfires +rimier +rimiest +riminess +riminesses +riming +rimland +rimlands +rimless +rimmed +rimmer +rimmers +rimming +rimose +rimosely +rimosities +rimosity +rimous +rimple +rimpled +rimples +rimpling +rimrock +rimrocks +rims +rimy +rin +rind +rinded +rinderpest +rinderpests +rinds ring +ringbark +ringbarked +ringbarking +ringbarks +ringbolt +ringbolts +ringbone +ringbones +ringdove +ringdoves +ringed +ringent +ringer +ringers +ringgit +ringgits +ringhals +ringhalses +ringing +ringingly +ringleader +ringleaders +ringlet +ringlets +ringlike +ringmaster +ringmasters +ringneck +ringnecks +rings +ringside +ringsides +ringstraked +ringtail +ringtails +ringtaw +ringtaws +ringtoss +ringtosses +ringworm +ringworms +rink +rinks +rinning +rins +rinsable +rinse +rinsed +rinser +rinsers +rinses +rinsible +rinsing +rinsings +rioja +riojas +riot +rioted +rioter +rioters +rioting +riotous +riotously +riotousness +riotousnesses +riots +rip +riparian +ripcord +ripcords ripe +riped +ripely ripen +ripened +ripener +ripeners +ripeness +ripenesses +ripening +ripens +riper +ripes +ripest +ripieni +ripieno +ripienos +riping +ripoff +ripoffs +ripost +riposte +riposted +ripostes +riposting +riposts +rippable +ripped +ripper +rippers +ripping +ripple +rippled +rippler +ripplers +ripples +ripplet +ripplets +ripplier +rippliest +rippling +ripply +riprap +riprapped +riprapping +ripraps +rips +ripsaw +ripsaws +ripsnorter +ripsnorters +ripsnorting +ripstop +ripstops +riptide +riptides rise +risen +riser +risers +rises +rishi +rishis +risibilities +risibility +risible +risibles +risibly +rising +risings risk +risked +risker +riskers +riskier +riskiest +riskily +riskiness +riskinesses +risking +riskless +risks +risky +risorgimento +risorgimentos +risotto +risottos +risque +rissole +rissoles +risus +risuses +ritard +ritardando +ritardandos +ritards +rite +rites +ritornelli +ritornello +ritornellos +ritter +ritters +ritual +ritualism +ritualisms +ritualist +ritualistic +ritualistically +ritualists +ritualization +ritualizations +ritualize +ritualized +ritualizes +ritualizing +ritually +rituals +ritz +ritzes +ritzier +ritziest +ritzily +ritziness +ritzinesses +ritzy +rivage +rivages +rival +rivaled +rivaling +rivalled +rivalling +rivalries +rivalrous +rivalry +rivals +rive +rived +riven river +riverbank +riverbanks +riverbed +riverbeds +riverboat +riverboats +riverfront +riverfronts +riverine +rivers +riverside +riversides +riverward +riverwards +rives +rivet +riveted +riveter +riveters +riveting +rivetingly +rivets +rivetted +rivetting +riviera +rivieras +riviere +rivieres +riving +rivulet +rivulets +rivulose +riyal +riyals +roach +roached +roaches +roaching road +roadabilities +roadability +roadbed +roadbeds +roadblock +roadblocked +roadblocking +roadblocks +roadeo +roadeos +roadholding +roadholdings +roadhouse +roadhouses +roadie +roadies +roadkill +roadkills +roadless +roadrunner +roadrunners +roads +roadshow +roadshows +roadside +roadsides +roadstead +roadsteads +roadster +roadsters +roadway +roadways +roadwork +roadworks +roadworthiness +roadworthinesses +roadworthy +roam +roamed +roamer +roamers +roaming +roams +roan +roans +roar +roared +roarer +roarers +roaring +roaringly +roarings +roars roast +roasted +roaster +roasters +roasting +roasts rob +robalo +robalos +roband +robands +robbed +robber +robberies +robbers +robbery +robbin +robbing +robbins +robe +robed +robes +robin +robing +robins +roble +robles +roborant +roborants robot +robotic +robotically +robotics +robotism +robotisms +robotization +robotizations +robotize +robotized +robotizes +robotizing +robotries +robotry +robots +robs +robust +robusta +robustas +robuster +robustest +robustious +robustiously +robustiousness +robustiousnesses +robustly +robustness +robustnesses +roc +rocaille +rocailles +rochet +rochets rock +rockabies +rockabillies +rockabilly +rockaby +rockabye +rockabyes +rockaway +rockaways +rockbound +rocked +rocker +rockeries +rockers +rockery rocket +rocketed +rocketeer +rocketeers +rocketer +rocketers +rocketing +rocketries +rocketry +rockets +rockfall +rockfalls +rockfish +rockfishes +rockhopper +rockhoppers +rockhound +rockhounding +rockhoundings +rockhounds +rockier +rockiest +rockiness +rockinesses +rocking +rockless +rocklike +rockling +rocklings +rockoon +rockoons +rockrose +rockroses +rocks +rockshaft +rockshafts +rockweed +rockweeds +rockwork +rockworks +rocky +rococo +rococos +rocs +rod +rodded +rodding +rode +rodent +rodenticide +rodenticides +rodents +rodeo +rodeoed +rodeoing +rodeos +rodless +rodlike +rodman +rodmen +rodomontade +rodomontades +rods +rodsman +rodsmen +roe +roebuck +roebucks +roentgen +roentgenogram +roentgenograms +roentgenographic +roentgenographically +roentgenographies +roentgenography +roentgenologic +roentgenological +roentgenologically +roentgenologies +roentgenologist +roentgenologists +roentgenology +roentgens +roes +rogation +rogations +rogatory +roger +rogers +rogue +rogued +rogueing +rogueries +roguery +rogues +roguing +roguish +roguishly +roguishness +roguishnesses +roil +roiled +roilier +roiliest +roiling +roils +roily +roister +roistered +roisterer +roisterers +roistering +roisterous +roisterously +roisters +rolamite +rolamites role +roles +rolf +rolfed +rolfer +rolfers +rolfing +rolfs roll +rollaway +rollback +rollbacks +rolled +roller +rollers +rollick +rollicked +rollicking +rollicks +rollicky +rolling +rollings +rollmop +rollmops +rollout +rollouts +rollover +rollovers +rolls +rolltop +rollway +rollways +rom +romaine +romaines +roman +romance +romanced +romancer +romancers +romances +romancing +romanise +romanised +romanises +romanising +romanization +romanizations +romanize +romanized +romanizes +romanizing +romano +romanos +romans +romantic +romantically +romanticise +romanticised +romanticises +romanticising +romanticism +romanticisms +romanticist +romanticists +romanticization +romanticizations +romanticize +romanticized +romanticizes +romanticizing +romantics +romaunt +romaunts +romeldale +romeldales +romeo +romeos +romp +romped +romper +rompers +romping +rompish +romps +roms +rondeau +rondeaux +rondel +rondelet +rondelets +rondelle +rondelles +rondels +rondo +rondos +rondure +rondures +ronion +ronions +ronnel +ronnels +rontgen +rontgens +ronyon +ronyons +rood +roods roof +roofed +roofer +roofers +roofing +roofings +roofless +rooflike +roofline +rooflines +roofs +rooftop +rooftops +rooftree +rooftrees +rook +rooked +rookeries +rookery +rookie +rookier +rookies +rookiest +rooking +rooks +rooky room +roomed +roomer +roomers +roomette +roomettes +roomful +roomfuls +roomie +roomier +roomies +roomiest +roomily +roominess +roominesses +rooming +roommate +roommates +rooms +roomy +roorbach +roorbachs +roorback +roorbacks +roose +roosed +rooser +roosers +rooses +roosing +roost +roosted rooster +roosters +roosting +roosts root +rootage +rootages +rooted +rootedness +rootednesses +rooter +rooters +roothold +rootholds +rootier +rootiest +rooting +rootless +rootlessness +rootlessnesses +rootlet +rootlets +rootlike +roots +rootstock +rootstocks +rooty +ropable rope +roped +ropedancer +ropedancers +ropedancing +ropedancings +ropelike +roper +roperies +ropers +ropery +ropes +ropewalk +ropewalker +ropewalkers +ropewalks +ropeway +ropeways +ropey +ropier +ropiest +ropily +ropiness +ropinesses +roping +ropy +roque +roquelaure +roquelaures +roques +roquet +roqueted +roqueting +roquets +rorqual +rorquals +rosaceous +rosaria +rosarian +rosarians +rosaries +rosarium +rosariums +rosary +roscoe +roscoes rose +roseate +roseately +rosebay +rosebays +rosebud +rosebuds +rosebush +rosebushes +rosed +rosefish +rosefishes +roselike +roselle +roselles +rosemaling +rosemalings +rosemaries +rosemary +roseola +roseolar +roseolas +roseries +roseroot +roseroots +rosery +roses +roseslug +roseslugs +roset +rosets +rosette +rosettes +rosewater +rosewood +rosewoods +rosier +rosiest +rosily +rosin +rosined +rosiness +rosinesses +rosing +rosining +rosinol +rosinols +rosinous +rosins +rosinweed +rosinweeds +rosiny +rosolio +rosolios +rostella +rostellar +rostellum +rostellums +roster +rosters +rostra +rostral +rostrally +rostrate +rostrum +rostrums +rosulate +rosy rot +rota +rotameter +rotameters +rotaries +rotary +rotas +rotatable +rotate +rotated +rotates +rotating +rotation +rotational +rotations +rotative +rotatively +rotator +rotatores +rotators +rotatory +rotavirus +rotaviruses +rotch +rotche +rotches +rote +rotenone +rotenones +rotes +rotgut +rotguts +roti +rotifer +rotifers +rotiform +rotis +rotisserie +rotisseries +rotl +rotls +roto +rotogravure +rotogravures +rotor +rotorcraft +rotors +rotos +rototill +rototilled +rototiller +rototillers +rototilling +rototills +rots +rotte +rotted +rotten +rottener +rottenest +rottenly +rottenness +rottennesses +rottenstone +rottenstones +rotter +rotters +rottes +rotting +rottweiler +rottweilers +rotund +rotunda +rotundas +rotundities +rotundity +rotundly +rotundness +rotundnesses +roturier +roturiers +rouble +roubles +rouche +rouches +roue +rouen +rouens +roues +rouge +rouged +rouges rough +roughage +roughages +roughcast +roughcasting +roughcasts +roughdried +roughdries +roughdry +roughdrying +roughed +roughen +roughened +roughening +roughens +rougher +roughers +roughest +roughhew +roughhewed +roughhewing +roughhewn +roughhews +roughhouse +roughhoused +roughhouses +roughhousing +roughing +roughish +roughleg +roughlegs +roughly +roughneck +roughnecks +roughness +roughnesses +roughrider +roughriders +roughs +roughshod +rouging +rouille +rouilles +roulade +roulades +rouleau +rouleaus +rouleaux +roulette +rouletted +roulettes +rouletting round roundabout +roundaboutness +roundaboutnesses +roundabouts +rounded +roundedness +roundednesses +roundel +roundelay +roundelays +roundels +rounder +rounders +roundest +roundheaded +roundheadedness +roundheadednesses +roundhouse +roundhouses +rounding +roundish +roundlet +roundlets +roundly +roundness +roundnesses +rounds +roundsman +roundsmen +roundtable +roundtables +roundup +roundups +roundwood +roundwoods +roundworm +roundworms +roup +rouped +roupet +roupier +roupiest +roupily +rouping +roups +roupy +rouse +rouseabout +rouseabouts +roused +rousement +rousements +rouser +rousers +rouses +rousing +rousingly +rousseau +rousseaus +roust +roustabout +roustabouts +rousted +rouster +rousters +rousting +rousts +rout +route +routed +routeman +routemen +router +routers +routes +routeway +routeways +routh +rouths routine +routinely +routines +routing +routinization +routinizations +routinize +routinized +routinizes +routinizing +routs +roux +rove +roved +roven +rover +rovers +roves +roving +rovingly +rovings row +rowable +rowan +rowanberries +rowanberry +rowans +rowboat +rowboats +rowdier +rowdies +rowdiest +rowdily +rowdiness +rowdinesses +rowdy +rowdyish +rowdyism +rowdyisms +rowed +rowel +roweled +roweling +rowelled +rowelling +rowels +rowen +rowens +rower +rowers +rowing +rowings +rowlock +rowlocks +rows +rowth +rowths royal +royalism +royalisms +royalist +royalists +royally +royals +royalties +royalty +royster +roystered +roystering +roysters +rozzer +rozzers +ruana +ruanas +rub +rubaboo +rubaboos +rubace +rubaces +rubaiyat +rubasse +rubasses +rubato +rubatos +rubbaboo +rubbaboos +rubbed rubber +rubbered +rubbering +rubberized +rubberlike +rubberneck +rubbernecked +rubbernecker +rubberneckers +rubbernecking +rubbernecks +rubbers +rubbery +rubbing +rubbings rubbish +rubbishes +rubbishy +rubble +rubbled +rubbles +rubblier +rubbliest +rubbling +rubbly +rubdown +rubdowns +rube +rubefacient +rubefacients +rubella +rubellas +rubellite +rubellites +rubeola +rubeolar +rubeolas +rubes +rubicund +rubicundities +rubicundity +rubidic +rubidium +rubidiums +rubied +rubier +rubies +rubiest +rubigo +rubigos +rubious +ruble +rubles +ruboff +ruboffs +rubout +rubouts +rubric +rubrical +rubrically +rubricate +rubricated +rubricates +rubricating +rubrication +rubrications +rubricator +rubricators +rubrics +rubs +rubus +ruby +rubying +rubylike +rubythroat +rubythroats +ruche +ruched +ruches +ruching +ruchings +ruck +rucked +rucking +ruckle +ruckled +ruckles +ruckling +rucks +rucksack +rucksacks +ruckus +ruckuses +ruction +ructions +ructious +rudbeckia +rudbeckias +rudd +rudder +rudderless +rudderpost +rudderposts +rudders +ruddier +ruddiest +ruddily +ruddiness +ruddinesses +ruddle +ruddled +ruddles +ruddling +ruddock +ruddocks +rudds +ruddy rude +rudely +rudeness +rudenesses +ruder +ruderal +ruderals +rudesbies +rudesby +rudest +rudiment +rudimental +rudimentarily +rudimentariness +rudimentarinesses +rudimentary +rudiments +rue +rued +rueful +ruefully +ruefulness +ruefulnesses +ruer +ruers +rues +rufescent +ruff +ruffe +ruffed +ruffes +ruffian +ruffianism +ruffianisms +ruffianly +ruffians +ruffing +ruffle +ruffled +ruffler +rufflers +ruffles +rufflier +ruffliest +rufflike +ruffling +ruffly +ruffs +rufiyaa +rufous +rug +ruga +rugae +rugal +rugate +rugbies rugby +rugged +ruggeder +ruggedest +ruggedization +ruggedizations +ruggedize +ruggedized +ruggedizes +ruggedizing +ruggedly +ruggedness +ruggednesses +rugger +ruggers +rugging +ruglike +rugola +rugolas +rugosa +rugosas +rugose +rugosely +rugosities +rugosity +rugous +rugs +rugulose ruin +ruinable +ruinate +ruinated +ruinates +ruinating +ruination +ruinations +ruined +ruiner +ruiners +ruing +ruining +ruinous +ruinously +ruinousness +ruinousnesses +ruins +rulable rule +ruled +ruleless ruler +rulers +rulership +rulerships +rules +rulier +ruliest +ruling +rulings +ruly +rum +rumaki +rumakis +rumba +rumbaed +rumbaing +rumbas +rumble +rumbled +rumbler +rumblers +rumbles +rumbling +rumblings +rumbly +rumbustious +rumbustiously +rumbustiousness +rumbustiousnesses +rumen +rumens +rumina +ruminal +ruminant +ruminantly +ruminants +ruminate +ruminated +ruminates +ruminating +rumination +ruminations +ruminative +ruminatively +ruminator +ruminators +rummage +rummaged +rummager +rummagers +rummages +rummaging +rummer +rummers +rummest +rummier +rummies +rummiest +rummy +rumor +rumored +rumoring +rumormonger +rumormongering +rumormongerings +rumormongers +rumors +rumour +rumoured +rumouring +rumours +rump +rumple +rumpled +rumples +rumpless +rumplier +rumpliest +rumpling +rumply +rumps +rumpus +rumpuses +rumrunner +rumrunners +rums run +runabout +runabouts +runagate +runagates +runaround +runarounds +runaway +runaways +runback +runbacks +runcinate +rundle +rundles +rundlet +rundlets +rundown +rundowns +rune +runelike +runes +rung +rungless +rungs +runic +runkle +runkled +runkles +runkling +runless +runlet +runlets +runnel +runnels +runner +runners +runnier +runniest +running +runnings +runny +runoff +runoffs +runout +runouts +runover +runovers +runround +runrounds +runs +runt +runtier +runtiest +runtiness +runtinesses +runtish +runts +runty +runway +runways +rupee +rupees +rupiah +rupiahs +rupture +ruptured +ruptures +rupturing +rural +ruralise +ruralised +ruralises +ruralising +ruralism +ruralisms +ruralist +ruralists +ruralite +ruralites +ruralities +rurality +ruralize +ruralized +ruralizes +ruralizing +rurally +rurban +ruse +ruses rush +rushed +rushee +rushees +rusher +rushers +rushes +rushier +rushiest +rushing +rushings +rushlight +rushlights +rushlike +rushy +rusine +rusk +rusks +russet +russeting +russetings +russets +russetting +russettings +russety +russified +russifies +russify +russifying +rust +rustable +rusted +rustic +rustical +rustically +rusticals +rusticate +rusticated +rusticates +rusticating +rustication +rustications +rusticator +rusticators +rusticities +rusticity +rusticly +rustics +rustier +rustiest +rustily +rustiness +rustinesses +rusting +rustle +rustled +rustler +rustlers +rustles +rustless +rustling +rustproof +rustproofed +rustproofing +rustproofs +rusts +rusty +rut +rutabaga +rutabagas +ruth +ruthenic +ruthenium +rutheniums +rutherfordium +rutherfordiums +ruthful +ruthfully +ruthfulness +ruthfulnesses +ruthless +ruthlessly +ruthlessness +ruthlessnesses +ruths +rutilant +rutile +rutiles +rutin +rutins +ruts +rutted +ruttier +ruttiest +ruttily +rutting +ruttish +ruttishly +ruttishness +ruttishnesses +rutty +rya +ryas +rye +ryegrass +ryegrasses +ryes +ryke +ryked +rykes +ryking +rynd +rynds +ryokan +ryokans +ryot +ryots +sab +sabadilla +sabadillas +sabaton +sabatons +sabayon +sabayons +sabbat +sabbath +sabbaths +sabbatic +sabbatical +sabbaticals +sabbatics +sabbats +sabbed +sabbing +sabe +sabed +sabeing +saber +sabered +sabering +sabermetrician +sabermetricians +sabermetrics +sabers +sabes +sabin +sabine +sabines +sabins +sabir +sabirs +sable +sablefish +sablefishes +sables +sabot +sabotage +sabotaged +sabotages +sabotaging +saboteur +saboteurs +sabots +sabra +sabras +sabre +sabred +sabres +sabring +sabs +sabulose +sabulous +sac +sacahuista +sacahuistas +sacahuiste +sacahuistes +sacaton +sacatons +sacbut +sacbuts +saccade +saccades +saccadic +saccate +saccharase +saccharases +saccharide +saccharides +saccharification +saccharifications +saccharified +saccharifies +saccharify +saccharifying +saccharimeter +saccharimeters +saccharin +saccharine +saccharinities +saccharinity +saccharins +saccharoidal +saccharometer +saccharometers +saccharomyces +saccular +sacculate +sacculated +sacculation +sacculations +saccule +saccules +sacculi +sacculus +sacerdotal +sacerdotalism +sacerdotalisms +sacerdotalist +sacerdotalists +sacerdotally +sachem +sachemic +sachems +sachet +sacheted +sachets +sack +sackbut +sackbuts +sackcloth +sackcloths +sacked +sacker +sackers +sackful +sackfuls +sacking +sackings +sacklike +sacks +sacksful +saclike +sacque +sacques +sacra +sacral +sacrals +sacrament +sacramental +sacramentalism +sacramentalisms +sacramentalist +sacramentalists +sacramentally +sacramentals +sacraments +sacraria +sacrarium sacred +sacredly +sacredness +sacrednesses sacrifice +sacrificed +sacrificer +sacrificers +sacrifices +sacrificial +sacrificially +sacrificing +sacrilege +sacrileges +sacrilegious +sacrilegiously +sacrilegiousness +sacrilegiousnesses +sacring +sacrings +sacrist +sacristan +sacristans +sacristies +sacrists +sacristy +sacroiliac +sacroiliacs +sacrosanct +sacrosanctities +sacrosanctity +sacrum +sacrums +sacs sad +sadden +saddened +saddening +saddens +sadder +saddest +saddhu +saddhus +saddle +saddlebag +saddlebags +saddlebow +saddlebows +saddlebred +saddlebreds +saddlecloth +saddlecloths +saddled +saddleless +saddler +saddleries +saddlers +saddlery +saddles +saddletree +saddletrees +saddling +sade +sades +sadhe +sadhes +sadhu +sadhus +sadi +sadiron +sadirons +sadis +sadism +sadisms +sadist +sadistic +sadistically +sadists +sadly sadness +sadnesses +sadomasochism +sadomasochisms +sadomasochist +sadomasochistic +sadomasochists +sae +safari +safaried +safariing +safaris safe +safecracker +safecrackers +safecracking +safecrackings +safeguard +safeguarded +safeguarding +safeguards +safekeeping +safekeepings +safelight +safelights safely +safeness +safenesses +safer +safes +safest +safetied +safeties +safety +safetying +safetyman +safetymen +safflower +safflowers +saffron +saffrons +safranin +safranine +safranines +safranins +safrol +safrole +safroles +safrols +sag +saga +sagacious +sagaciously +sagaciousness +sagaciousnesses +sagacities +sagacity +sagaman +sagamen +sagamore +sagamores +saganash +saganashes +sagas +sagbut +sagbuts +sage +sagebrush +sagebrushes +sagely +sageness +sagenesses +sager +sages +sagest +saggar +saggard +saggards +saggared +saggaring +saggars +sagged +sagger +saggered +saggering +saggers +saggier +saggiest +sagging +saggy +sagier +sagiest +sagittal +sagittally +sagittate +sago +sagos +sags +saguaro +saguaros +sagum +sagy +sahib +sahibs +sahiwal +sahiwals +sahuaro +sahuaros +saice +saices +said +saids +saiga +saigas sail +sailable +sailboard +sailboarding +sailboardings +sailboards +sailboat +sailboater +sailboaters +sailboating +sailboatings +sailboats +sailcloth +sailcloths +sailed +sailer +sailers +sailfish +sailfishes +sailing +sailings sailor +sailorly +sailors +sailplane +sailplaned +sailplaner +sailplaners +sailplanes +sailplaning +sails +saimin +saimins +sain +sained +sainfoin +sainfoins +saining +sains +saint +saintdom +saintdoms +sainted +sainthood +sainthoods +sainting +saintlier +saintliest +saintlike +saintliness +saintlinesses +saintly +saints +saintship +saintships +saith +saithe +saiyid +saiyids +sajou +sajous +sake +saker +sakers +sakes +saki +sakis +sal +salaam +salaamed +salaaming +salaams +salabilities +salability +salable +salably +salacious +salaciously +salaciousness +salaciousnesses +salacities +salacity salad +saladang +saladangs +salads +salal +salals +salamander +salamanders +salamandrine +salami +salamis +salariat +salariats +salaried +salaries salary +salarying +salaryman +salarymen +salchow +salchows sale +saleable +saleably +salep +saleps +saleratus +saleratuses +saleroom +salerooms +sales +salesclerk +salesclerks salesgirl +salesgirls +salesladies +saleslady salesman +salesmanship +salesmanships +salesmen +salespeople +salesperson +salespersons +salesroom +salesrooms saleswoman +saleswomen +salic +salicin +salicine +salicines +salicins +salicylate +salicylates +salience +saliences +saliencies +saliency +salient +saliently +salients +salified +salifies +salify +salifying +salina +salinas +saline +salines +salinities +salinity +salinization +salinizations +salinize +salinized +salinizes +salinizing +salinometer +salinometers +saliva +salivary +salivas +salivate +salivated +salivates +salivating +salivation +salivations +salivator +salivators +sall +sallet +sallets +sallied +sallier +salliers +sallies +sallow +sallowed +sallower +sallowest +sallowing +sallowish +sallowly +sallowness +sallownesses +sallows +sallowy +sally +sallying +salmagundi +salmagundis +salmi +salmis +salmon +salmonberries +salmonberry +salmonella +salmonellae +salmonellas +salmonelloses +salmonellosis +salmonid +salmonids +salmonoid +salmonoids +salmons +salol +salols +salometer +salometers +salon +salons +saloon +saloons +saloop +saloops +salp +salpa +salpae +salpas +salpian +salpians +salpid +salpids +salpiglosses +salpiglossis +salpiglossises +salpinges +salpingites +salpingitides +salpingitis +salpingitises +salpinx +salps +sals +salsa +salsas +salsifies +salsify +salsilla +salsillas salt +saltant +saltarello +saltarellos +saltation +saltations +saltatorial +saltatory +saltbox +saltboxes +saltbush +saltbushes +saltcellar +saltcellars +salted +salter +saltern +salterns +salters +saltest +saltie +saltier +saltiers +salties +saltiest +saltily +saltimbocca +saltimboccas +saltine +saltines +saltiness +saltinesses +salting +saltings +saltire +saltires +saltish +saltless +saltlike +saltness +saltnesses +saltpan +saltpans +saltpeter +saltpeters +salts +saltshaker +saltshakers +saltwater +saltwork +saltworks +saltwort +saltworts salty +salubrious +salubriously +salubriousness +salubriousnesses +salubrities +salubrity +saluki +salukis +salutarily +salutariness +salutarinesses +salutary +salutation +salutational +salutations +salutatorian +salutatorians +salutatories +salutatory salute +saluted +saluter +saluters +salutes +salutiferous +saluting +salvable +salvably +salvage +salvageabilities +salvageability +salvageable +salvaged +salvagee +salvagees +salvager +salvagers +salvages +salvaging +salvarsan +salvarsans +salvation +salvational +salvationism +salvationisms +salvationist +salvations +salve +salved +salver +salverform +salvers +salves +salvia +salvias +salvific +salving +salvo +salvoed +salvoes +salvoing +salvor +salvors +salvos +samara +samaras +samaritan +samaritans +samarium +samariums +samarskite +samarskites +samba +sambaed +sambaing +sambar +sambars +sambas +sambhar +sambhars +sambhur +sambhurs +sambo +sambos +sambuca +sambucas +sambuke +sambukes +sambur +samburs same +samech +samechs +samek +samekh +samekhs +sameks +sameness +samenesses +samiel +samiels +samisen +samisens +samite +samites +samizdat +samizdats +samlet +samlets +samosa +samosas +samovar +samovars +samp +sampan +sampans +samphire +samphires +sample +sampled +sampler +samplers +samples +sampling +samplings +samps +samsara +samsaras +samshu +samshus +samurai +samurais +sanative +sanatoria +sanatorium +sanatoriums +sanbenito +sanbenitos +sancta +sanctification +sanctifications +sanctified +sanctifier +sanctifiers +sanctifies +sanctify +sanctifying +sanctimonies +sanctimonious +sanctimoniously +sanctimoniousness +sanctimoniousnesses +sanctimony +sanction +sanctionable +sanctioned +sanctioning +sanctions +sanctities +sanctity +sanctuaries +sanctuary +sanctum +sanctums sand +sandal +sandaled +sandaling +sandalled +sandalling +sandals +sandalwood +sandalwoods +sandarac +sandaracs +sandbag +sandbagged +sandbagger +sandbaggers +sandbagging +sandbags +sandbank +sandbanks +sandbar +sandbars +sandblast +sandblasted +sandblaster +sandblasters +sandblasting +sandblasts +sandbox +sandboxes +sandbur +sandburr +sandburrs +sandburs +sanddab +sanddabs +sanded +sander +sanderling +sanderlings +sanders +sandfish +sandfishes +sandflies +sandfly +sandglass +sandglasses +sandgrouse +sandgrouses +sandhi +sandhis +sandhog +sandhogs +sandier +sandiest +sandiness +sandinesses +sanding +sandlike +sandling +sandlings +sandlot +sandlots +sandlotter +sandlotters +sandman +sandmen +sandpainting +sandpaintings +sandpaper +sandpapered +sandpapering +sandpapers +sandpapery +sandpeep +sandpeeps +sandpile +sandpiles +sandpiper +sandpipers +sandpit +sandpits +sands +sandshoe +sandshoes +sandsoap +sandsoaps +sandspur +sandspurs +sandstone +sandstones +sandstorm +sandstorms sandwich +sandwiched +sandwiches +sandwiching +sandworm +sandworms +sandwort +sandworts +sandy +sane +saned +sanely +saneness +sanenesses +saner +sanes +sanest +sang +sanga +sangar +sangaree +sangarees +sangars +sangas +sanger +sangers +sangfroid +sangfroids +sangh +sanghs +sangria +sangrias +sanguinaria +sanguinarias +sanguinarily +sanguinary +sanguine +sanguinely +sanguineness +sanguinenesses +sanguineous +sanguines +sanguinities +sanguinity +sanicle +sanicles +sanies +saning +sanious +sanitaria +sanitarian +sanitarians +sanitaries +sanitarily +sanitarium +sanitariums +sanitary +sanitate +sanitated +sanitates +sanitating +sanitation +sanitations +sanities +sanitise +sanitised +sanitises +sanitising +sanitization +sanitizations +sanitize +sanitized +sanitizes +sanitizing +sanitoria +sanitorium +sanitoriums +sanity +sanjak +sanjaks +sank +sannop +sannops +sannup +sannups +sannyasi +sannyasin +sannyasins +sannyasis +sans +sansar +sansars +sansculotte +sansculottes +sansculottic +sansculottish +sansculottism +sansculottisms +sansei +sanseis +sanserif +sanserifs +sansevieria +sansevierias +santalic +santalol +santalols +santimi +santims +santir +santirs +santo +santol +santolina +santolinas +santols +santonin +santonins +santos +santour +santours +santur +santurs +sap +sapajou +sapajous +saphead +sapheaded +sapheads +saphena +saphenae +saphenous +sapid +sapidities +sapidity +sapience +sapiences +sapiencies +sapiency +sapiens +sapient +sapiently +sapless +saplessness +saplessnesses +sapling +saplings +sapodilla +sapodillas +sapogenin +sapogenins +saponaceous +saponaceousness +saponaceousnesses +saponifiable +saponification +saponifications +saponified +saponifier +saponifiers +saponifies +saponify +saponifying +saponin +saponine +saponines +saponins +saponite +saponites +sapor +saporous +sapors +sapota +sapotas +sapote +sapotes +sapour +sapours +sapped +sapper +sappers +sapphic +sapphics +sapphire +sapphires +sapphirine +sapphism +sapphisms +sapphist +sapphists +sappier +sappiest +sappily +sappiness +sappinesses +sapping +sappy +sapremia +sapremias +sapremic +saprobe +saprobes +saprobic +saprogenic +saprogenicities +saprogenicity +saprolite +saprolites +sapropel +sapropels +saprophagous +saprophyte +saprophytes +saprophytic +saprophytically +saprozoic +saps +sapsago +sapsagos +sapsucker +sapsuckers +sapwood +sapwoods +saraband +sarabande +sarabandes +sarabands +saran +sarans +sarape +sarapes +sarcasm +sarcasms +sarcastic +sarcastically +sarcenet +sarcenets +sarcoid +sarcoidoses +sarcoidosis +sarcoids +sarcolemma +sarcolemmal +sarcolemmas +sarcoma +sarcomas +sarcomata +sarcomatoses +sarcomatosis +sarcomatous +sarcomere +sarcomeres +sarcophagi +sarcophagus +sarcophaguses +sarcoplasm +sarcoplasmic +sarcoplasms +sarcosomal +sarcosome +sarcosomes +sarcous +sard +sardana +sardanas +sardar +sardars +sardine +sardines +sardius +sardiuses +sardonic +sardonically +sardonicism +sardonicisms +sardonyx +sardonyxes +sards +saree +sarees +sargasso +sargassos +sargassum +sargassums +sarge +sarges +sari +sarin +sarins +saris +sark +sarkier +sarkiest +sarks +sarky +sarment +sarmenta +sarments +sarmentum +sarod +sarode +sarodes +sarodist +sarodists +sarods +sarong +sarongs +saros +saroses +sarracenia +sarracenias +sarsaparilla +sarsaparillas +sarsar +sarsars +sarsen +sarsenet +sarsenets +sarsens +sartor +sartorial +sartorially +sartorii +sartorius +sartors +sash +sashay +sashayed +sashaying +sashays +sashed +sashes +sashimi +sashimis +sashing +sasin +sasins +saskatoon +saskatoons +sass +sassabies +sassaby +sassafras +sassafrases +sassed +sasses +sassier +sassies +sassiest +sassily +sassing +sasswood +sasswoods +sassy +sastruga +sastrugi +sat +satang +satangs +satanic +satanically +satanism +satanisms +satanist +satanists +satara +sataras +satay +satays +satchel +satchelful +satchelfuls +satchels +satchelsful +sate +sated +sateen +sateens satellite +satellites +satem +sates +sati +satiable +satiably +satiate +satiated +satiates +satiating +satiation +satiations +satieties +satiety +satin +satinet +satinets +sating +satinpod +satinpods +satins +satinwood +satinwoods +satiny +satire +satires +satiric +satirical +satirically +satirise +satirised +satirises +satirising +satirist +satirists +satirizable +satirize +satirized +satirizes +satirizing +satis satisfaction +satisfactions +satisfactorily +satisfactoriness +satisfactorinesses +satisfactory +satisfiable +satisfied +satisfies satisfy +satisfying +satisfyingly +satori +satoris +satrap +satrapies +satraps +satrapy +satsuma +satsumas +saturable +saturant +saturants +saturate +saturated +saturates +saturating +saturation +saturations +saturator +saturators +saturnalia +saturnalian +saturnalianly +saturnalias +saturniid +saturniids +saturnine +saturnism +saturnisms +satyagraha +satyagrahas +satyr +satyriases +satyriasis +satyric +satyrid +satyrids +satyrs +sau +sauce +sauceboat +sauceboats +saucebox +sauceboxes +sauced +saucepan +saucepans saucer +saucerlike +saucers +sauces +sauch +sauchs +saucier +sauciest +saucily +sauciness +saucinesses +saucing +saucy +sauerbraten +sauerbratens +sauerkraut +sauerkrauts +sauger +saugers +saugh +saughs +saughy +saul +sauls +sault +saults +sauna +saunas +saunter +sauntered +saunterer +saunterers +sauntering +saunters +saurel +saurels +saurian +saurians +sauries +saurischian +saurischians +sauropod +sauropods +saury sausage +sausages +saute +sauted +sauteed +sauteing +sauterne +sauternes +sautes +sautoir +sautoire +sautoires +sautoirs +savable +savage +savaged +savagely +savageness +savagenesses +savager +savageries +savagery +savages +savagest +savaging +savagism +savagisms +savanna +savannah +savannahs +savannas +savant +savants +savarin +savarins +savate +savates save +saveable +saved +saveloy +saveloys +saver +savers +saves +savin +savine +savines +saving +savingly +savings +savins +savior +saviors +saviour +saviours +savor +savored +savorer +savorers +savorier +savories +savoriest +savorily +savoriness +savorinesses +savoring +savorless +savorous +savors +savory +savour +savoured +savourer +savourers +savourier +savouries +savouriest +savouring +savours +savoury +savoy +savoys +savvied +savvier +savvies +savviest +savvy +savvying +saw +sawbill +sawbills +sawbones +sawboneses +sawbuck +sawbucks +sawdust +sawdusts +sawed +sawer +sawers +sawfish +sawfishes +sawflies +sawfly +sawhorse +sawhorses +sawing +sawlike +sawlog +sawlogs +sawmill +sawmills +sawn +sawney +sawneys +saws +sawteeth +sawtimber +sawtimbers +sawtooth +sawyer +sawyers +sax +saxatile +saxes +saxhorn +saxhorns +saxicolous +saxifrage +saxifrages +saxitoxin +saxitoxins +saxonies +saxony +saxophone +saxophones +saxophonic +saxophonist +saxophonists +saxtuba +saxtubas say +sayable +sayer +sayers +sayest +sayid +sayids saying +sayings +sayonara +sayonaras +says +sayst +sayyid +sayyids +scab +scabbard +scabbarded +scabbarding +scabbards +scabbed +scabbier +scabbiest +scabbily +scabbing +scabble +scabbled +scabbles +scabbling +scabby +scabies +scabietic +scabiosa +scabiosas +scabious +scabiouses +scabland +scablands +scablike +scabrous +scabrously +scabrousness +scabrousnesses +scabs +scad +scads +scaffold +scaffolded +scaffolding +scaffoldings +scaffolds +scag +scagliola +scagliolas +scags +scalable +scalably +scalade +scalades +scalado +scalados +scalage +scalages +scalar +scalare +scalares +scalariform +scalariformly +scalars +scalawag +scalawags +scald +scalded +scaldic +scalding +scalds +scale +scaled +scaleless +scalelike +scalene +scaleni +scalenus +scalepan +scalepans +scaler +scalers +scales +scaleup +scaleups +scalier +scaliest +scaliness +scalinesses +scaling +scall +scallion +scallions +scallop +scalloped +scalloper +scallopers +scalloping +scallopini +scallopinis +scallops +scalls +scallywag +scallywags +scalogram +scalograms +scaloppine +scaloppines +scalp +scalped +scalpel +scalpels +scalper +scalpers +scalping +scalps +scaly +scam +scammed +scamming +scammonies +scammony +scamp +scamped +scamper +scampered +scampering +scampers +scampi +scampies +scamping +scampish +scamps +scams scan +scandal +scandaled +scandaling +scandalise +scandalised +scandalises +scandalising +scandalize +scandalized +scandalizes +scandalizing +scandalled +scandalling +scandalmonger +scandalmongering +scandalmongerings +scandalmongers +scandalous +scandalously +scandalousness +scandalousnesses +scandals +scandent +scandia +scandias +scandic +scandium +scandiums +scannable +scanned +scanner +scanners +scanning +scannings +scans +scansion +scansions +scant +scanted +scanter +scantest +scantier +scanties +scantiest +scantily +scantiness +scantinesses +scanting +scantling +scantlings +scantly +scantness +scantnesses +scants +scanty +scape +scaped +scapegoat +scapegoated +scapegoating +scapegoatings +scapegoatism +scapegoatisms +scapegoats +scapegrace +scapegraces +scapes +scaphoid +scaphoids +scaping +scapolite +scapolites +scapose +scapula +scapulae +scapular +scapulars +scapulas scar +scarab +scarabaei +scarabaeus +scarabaeuses +scarabs +scaramouch +scaramouche +scaramouches +scarce +scarcely +scarceness +scarcenesses +scarcer +scarcest +scarcities +scarcity scare +scarecrow +scarecrows +scared +scarehead +scareheads +scaremonger +scaremongers +scarer +scarers +scares +scarey scarf +scarfed +scarfing +scarfpin +scarfpins +scarfs +scarfskin +scarfskins +scarier +scariest +scarification +scarifications +scarified +scarifier +scarifiers +scarifies +scarify +scarifying +scarifyingly +scarily +scaring +scariose +scarious +scarlatina +scarlatinal +scarlatinas +scarless +scarlet +scarlets +scarp +scarped +scarper +scarpered +scarpering +scarpers +scarph +scarphed +scarphing +scarphs +scarping +scarps +scarred +scarrier +scarriest +scarring +scarry +scars +scart +scarted +scarting +scarts +scarves +scary +scat +scatback +scatbacks +scathe +scathed +scatheless +scathes +scathing +scathingly +scatological +scatologies +scatology +scats +scatt +scatted +scatter +scatteration +scatterations +scatterbrain +scatterbrained +scatterbrains +scattered +scatterer +scatterers +scattergood +scattergoods +scattergram +scattergrams +scattergun +scatterguns +scattering +scatteringly +scatterings +scatters +scattershot +scattier +scattiest +scatting +scatts +scatty +scaup +scauper +scaupers +scaups +scaur +scaurs +scavenge +scavenged +scavenger +scavengers +scavenges +scavenging +scena +scenario +scenarios +scenarist +scenarists +scenas +scend +scended +scending +scends scene +sceneries scenery +scenes +sceneshifter +sceneshifters +scenic +scenical +scenically +scenographer +scenographers +scenographic +scenographies +scenography +scent +scented +scenting +scentless +scents +scepter +sceptered +sceptering +scepters +sceptic sceptical +scepticism +scepticisms +sceptics +sceptral +sceptre +sceptred +sceptres +sceptring +schadenfreude +schadenfreudes +schappe +schappes +schav +schavs schedule +scheduled +scheduler +schedulers +schedules +scheduling +scheelite +scheelites +schema +schemas +schemata +schematic +schematically +schematics +schematism +schematisms +schematization +schematizations +schematize +schematized +schematizes +schematizing +scheme +schemed +schemer +schemers +schemes +scheming +scherzando +scherzandos +scherzi +scherzo +scherzos +schiller +schillers +schilling +schillings +schipperke +schipperkes +schism +schismatic +schismatical +schismatically +schismatics +schismatize +schismatized +schismatizes +schismatizing +schisms +schist +schistose +schistosities +schistosity +schistosomal +schistosome +schistosomes +schistosomiases +schistosomiasis +schists +schizier +schiziest +schizo +schizocarp +schizocarps +schizogonic +schizogonies +schizogonous +schizogony +schizoid +schizoids +schizont +schizonts +schizophrene +schizophrenes +schizophrenia +schizophrenias +schizophrenic +schizophrenically +schizophrenics +schizos +schizy +schizzier +schizziest +schizzy +schlemiel +schlemiels +schlep +schlepp +schlepped +schlepping +schlepps +schleps +schliere +schlieren +schlieric +schlock +schlockmeister +schlockmeisters +schlocks +schlocky +schlump +schlumped +schlumping +schlumps +schmaltz +schmaltzes +schmaltzier +schmaltziest +schmaltzy +schmalz +schmalzes +schmalzier +schmalziest +schmalzy +schmear +schmears +schmeer +schmeered +schmeering +schmeers +schmelze +schmelzes +schmo +schmoe +schmoes +schmoos +schmoose +schmoosed +schmooses +schmoosing +schmooze +schmoozed +schmoozes +schmoozing +schmos +schmuck +schmucks +schnapps +schnaps +schnauzer +schnauzers +schnecke +schnecken +schnitzel +schnitzels +schnook +schnooks +schnorkel +schnorkeled +schnorkeling +schnorkels +schnorrer +schnorrers +schnoz +schnozz +schnozzes +schnozzle +schnozzles scholar +scholarly +scholars scholarship +scholarships +scholastic +scholastically +scholasticate +scholasticates +scholasticism +scholasticisms +scholastics +scholia +scholiast +scholiastic +scholiasts +scholium +scholiums school schoolbag +schoolbags +schoolbook +schoolbooks schoolboy +schoolboyish +schoolboys +schoolchild +schoolchildren +schooled +schoolfellow +schoolfellows schoolgirl +schoolgirls +schoolhouse +schoolhouses +schooling +schoolings +schoolkid +schoolkids +schoolman +schoolmarm +schoolmarmish +schoolmarms +schoolmaster +schoolmasterish +schoolmasterly +schoolmasters schoolmate +schoolmates +schoolmen +schoolmistress +schoolmistresses +schoolroom +schoolrooms +schools +schoolteacher +schoolteachers +schooltime +schooltimes +schoolwork +schoolworks +schooner +schooners +schorl +schorls +schottische +schottisches +schrik +schriks +schrod +schrods +schtick +schticks +schtik +schtiks +schuit +schuits +schul +schuln +schuss +schussboomer +schussboomers +schussed +schusser +schussers +schusses +schussing +schwa +schwarmerei +schwarmereis +schwas +sciaenid +sciaenids +sciatic +sciatica +sciaticas +sciatics science +sciences +sciential scientific +scientifically +scientism +scientisms scientist +scientists +scientize +scientized +scientizes +scientizing +scilicet +scilla +scillas +scimetar +scimetars +scimitar +scimitars +scimiter +scimiters +scincoid +scincoids +scintigraphic +scintigraphies +scintigraphy +scintilla +scintillae +scintillant +scintillantly +scintillas +scintillate +scintillated +scintillates +scintillating +scintillation +scintillations +scintillator +scintillators +scintillometer +scintillometers +sciolism +sciolisms +sciolist +sciolistic +sciolists +scion +scions +scirocco +sciroccos +scirrhi +scirrhous +scirrhus +scirrhuses +scissile +scission +scissions +scissor +scissored +scissoring scissors +scissortail +scissortails +scissure +scissures +sciurid +sciurids +sciurine +sciurines +sciuroid +sclaff +sclaffed +sclaffer +sclaffers +sclaffing +sclaffs +sclera +sclerae +scleral +scleras +sclereid +sclereids +sclerenchyma +sclerenchymas +sclerenchymata +sclerenchymatous +sclerite +sclerites +scleroderma +sclerodermas +sclerodermata +scleroid +scleroma +scleromata +sclerometer +sclerometers +scleroprotein +scleroproteins +sclerose +sclerosed +scleroses +sclerosing +sclerosis +sclerotia +sclerotial +sclerotic +sclerotics +sclerotin +sclerotins +sclerotium +sclerotization +sclerotizations +sclerotized +sclerous +scoff +scoffed +scoffer +scoffers +scoffing +scofflaw +scofflaws +scoffs scold +scolded +scolder +scolders +scolding +scoldings +scolds +scoleces +scolecite +scolecites +scolex +scolices +scolioma +scoliomas +scolioses +scoliosis +scoliotic +scollop +scolloped +scolloping +scollops +scolopendra +scolopendras +scombroid +scombroids +sconce +sconced +sconces +sconcing +scone +scones +scoop +scooped +scooper +scoopers +scoopful +scoopfuls +scooping +scoops +scoopsful +scoot +scooted +scooter +scooters +scooting +scoots +scop +scope +scoped +scopes +scoping +scopolamine +scopolamines +scops +scopula +scopulae +scopulas +scorbutic +scorch +scorched +scorcher +scorchers +scorches +scorching +scorchingly score +scoreboard +scoreboards +scorecard +scorecards +scored +scorekeeper +scorekeepers +scoreless +scorepad +scorepads +scorer +scorers +scores +scoria +scoriaceous +scoriae +scorified +scorifies +scorify +scorifying +scoring +scorn +scorned +scorner +scorners +scornful +scornfully +scornfulness +scornfulnesses +scorning +scorns +scorpaenid +scorpaenids +scorpion +scorpions +scot +scotch +scotched +scotches +scotching +scoter +scoters +scotia +scotias +scotoma +scotomas +scotomata +scotopia +scotopias +scotopic +scots +scottie +scotties +scoundrel +scoundrelly +scoundrels +scour +scoured +scourer +scourers +scourge +scourged +scourger +scourgers +scourges +scourging +scouring +scourings +scours +scouse +scouses +scout +scoutcraft +scoutcrafts +scouted +scouter +scouters +scouth +scouther +scouthered +scouthering +scouthers +scouths +scouting +scoutings +scoutmaster +scoutmasters +scouts +scow +scowder +scowdered +scowdering +scowders +scowed +scowing +scowl +scowled +scowler +scowlers +scowling +scowlingly +scowls +scows +scrabble +scrabbled +scrabbler +scrabblers +scrabbles +scrabblier +scrabbliest +scrabbling +scrabbly +scrag +scragged +scraggier +scraggiest +scragging +scragglier +scraggliest +scraggly +scraggy +scrags +scraich +scraiched +scraiching +scraichs +scraigh +scraighed +scraighing +scraighs +scram +scramble +scrambled +scrambler +scramblers +scrambles +scrambling +scramjet +scramjets +scrammed +scramming +scrams +scrannel +scrannels +scrap +scrapbook +scrapbooks +scrape +scraped +scraper +scrapers +scrapes +scrapheap +scrapheaps +scrapie +scrapies +scraping +scrapings +scrappage +scrappages +scrapped +scrapper +scrappers +scrappier +scrappiest +scrappily +scrappiness +scrappinesses +scrapping +scrapple +scrapples +scrappy +scraps scratch +scratchboard +scratchboards +scratched +scratcher +scratchers +scratches +scratchier +scratchiest +scratchily +scratchiness +scratchinesses +scratching +scratchy +scrawl +scrawled +scrawler +scrawlers +scrawlier +scrawliest +scrawling +scrawls +scrawly +scrawnier +scrawniest +scrawniness +scrawninesses +scrawny +screak +screaked +screaking +screaks +screaky scream +screamed +screamer +screamers +screaming +screamingly +screams +scree +screech +screeched +screecher +screechers +screeches +screechier +screechiest +screeching +screechy +screed +screeded +screeding +screeds screen +screenable +screened +screener +screeners +screening +screenings +screenland +screenlands +screenplay +screenplays +screens +screenwriter +screenwriters +screes +screw +screwball +screwballs +screwbean +screwbeans +screwdriver +screwdrivers +screwed +screwer +screwers +screwier +screwiest +screwiness +screwinesses +screwing +screwlike +screws +screwup +screwups +screwworm +screwworms +screwy +scribal +scribble +scribbled +scribbler +scribblers +scribbles +scribbling +scribblings +scribe +scribed +scriber +scribers +scribes +scribing +scried +scries +scrieve +scrieved +scrieves +scrieving +scrim +scrimmage +scrimmaged +scrimmager +scrimmagers +scrimmages +scrimmaging +scrimp +scrimped +scrimper +scrimpers +scrimpier +scrimpiest +scrimping +scrimpit +scrimps +scrimpy +scrims +scrimshander +scrimshanders +scrimshaw +scrimshawed +scrimshawing +scrimshaws +scrip +scrips +script +scripted +scripter +scripters +scripting +scriptoria +scriptorium +scripts +scriptural +scripturally +scripture +scriptures +scriptwriter +scriptwriters +scrive +scrived +scrivener +scriveners +scrives +scriving +scrod +scrods +scrofula +scrofulas +scrofulous +scroggier +scroggiest +scroggy +scroll +scrolled +scrolling +scrolls +scrollwork +scrollworks +scrooch +scrooched +scrooches +scrooching +scrooge +scrooges +scroop +scrooped +scrooping +scroops +scrootch +scrootched +scrootches +scrootching +scrota +scrotal +scrotum +scrotums +scrouge +scrouged +scrouges +scrouging +scrounge +scrounged +scrounger +scroungers +scrounges +scroungier +scroungiest +scrounging +scroungy +scrub +scrubbable +scrubbed +scrubber +scrubbers +scrubbier +scrubbiest +scrubbing +scrubby +scrubland +scrublands +scrubs +scrubwoman +scrubwomen +scruff +scruffier +scruffiest +scruffily +scruffiness +scruffinesses +scruffs +scruffy +scrum +scrummage +scrummaged +scrummages +scrummaging +scrummed +scrumming +scrumptious +scrumptiously +scrums +scrunch +scrunched +scrunches +scrunching +scruple +scrupled +scruples +scrupling +scrupulosities +scrupulosity +scrupulous +scrupulously +scrupulousness +scrupulousnesses +scrutable +scrutineer +scrutineers +scrutinies +scrutinise +scrutinised +scrutinises +scrutinising +scrutinize +scrutinized +scrutinizer +scrutinizers +scrutinizes +scrutinizing +scrutiny +scry +scrying +scuba +scubas +scud +scudded +scudding +scudi +scudo +scuds +scuff +scuffed +scuffing +scuffle +scuffled +scuffler +scufflers +scuffles +scuffling +scuffs +sculk +sculked +sculker +sculkers +sculking +sculks +scull +sculled +sculler +sculleries +scullers +scullery +sculling +scullion +scullions +sculls +sculp +sculped +sculpin +sculping +sculpins +sculps +sculpt +sculpted +sculpting +sculptor +sculptors +sculptress +sculptresses +sculpts +sculptural +sculpturally sculpture +sculptured +sculptures +sculpturesque +sculpturesquely +sculpturing +scum +scumbag +scumbags +scumble +scumbled +scumbles +scumbling +scumlike +scummed +scummer +scummers +scummier +scummiest +scumming +scummy +scums +scungilli +scungillis +scunner +scunnered +scunnering +scunners +scup +scuppaug +scuppaugs +scupper +scuppered +scuppering +scuppernong +scuppernongs +scuppers +scups +scurf +scurfier +scurfiest +scurfs +scurfy +scurried +scurries +scurril +scurrile +scurrilities +scurrility +scurrilous +scurrilously +scurrilousness +scurrilousnesses +scurry +scurrying +scurvier +scurvies +scurviest +scurvily +scurviness +scurvinesses +scurvy +scut +scuta +scutage +scutages +scutate +scutch +scutched +scutcheon +scutcheons +scutcher +scutchers +scutches +scutching +scute +scutella +scutellar +scutellate +scutellated +scutellum +scutes +scuts +scutter +scuttered +scuttering +scutters +scuttle +scuttlebutt +scuttlebutts +scuttled +scuttles +scuttling +scutum +scuzzier +scuzziest +scuzzy +scyphate +scyphi +scyphistoma +scyphistomae +scyphistomas +scyphozoan +scyphozoans +scyphus +scythe +scythed +scythes +scything sea +seabag +seabags +seabeach +seabeaches +seabed +seabeds +seabird +seabirds +seaboard +seaboards +seaboot +seaboots +seaborgium +seaborgiums +seaborne +seacoast +seacoasts +seacock +seacocks +seacraft +seacrafts +seadog +seadogs +seadrome +seadromes +seafarer +seafarers +seafaring +seafarings +seafloor +seafloors +seafood +seafoods +seafowl +seafowls +seafront +seafronts +seagirt +seagoing seagull +seagulls seal +sealable +sealant +sealants +sealed +sealer +sealeries +sealers +sealery +sealing +seallike +seals +sealskin +sealskins +seam +seaman +seamanlike +seamanly +seamanship +seamanships +seamark +seamarks +seamed +seamen +seamer +seamers +seamier +seamiest +seaminess +seaminesses +seaming +seamless +seamlessly +seamlessness +seamlessnesses +seamlike +seamount +seamounts +seams +seamster +seamsters +seamstress +seamstresses +seamy +seance +seances +seapiece +seapieces +seaplane +seaplanes +seaport +seaports +seaquake +seaquakes +sear search +searchable +searched +searcher +searchers +searches +searching +searchingly +searchless +searchlight +searchlights +seared +searer +searest +searing +searingly +searobin +searobins +sears +seas +seascape +seascapes +seascout +seascouts seashell +seashells +seashore +seashores +seasick +seasickness +seasicknesses seaside +seasides season +seasonable +seasonableness +seasonablenesses +seasonably +seasonal +seasonalities +seasonality +seasonally +seasoned +seasoner +seasoners +seasoning +seasonings +seasonless +seasons +seastrand +seastrands seat +seated +seater +seaters +seating +seatings +seatless +seatmate +seatmates +seatrain +seatrains +seats +seatwork +seatworks +seawall +seawalls +seawan +seawans +seawant +seawants +seaward +seawards +seaware +seawares +seawater +seawaters +seaway +seaways seaweed +seaweeds +seaworthiness +seaworthinesses +seaworthy +sebaceous +sebacic +sebasic +seborrhea +seborrheas +seborrheic +sebum +sebums +sec +secalose +secaloses +secant +secantly +secants +secateur +secateurs +secco +seccos +secede +seceded +seceder +seceders +secedes +seceding +secern +secerned +secerning +secerns +secession +secessionism +secessionisms +secessionist +secessionists +secessions +seclude +secluded +secludedly +secludedness +secludednesses +secludes +secluding +seclusion +seclusions +seclusive +seclusively +seclusiveness +seclusivenesses +secobarbital +secobarbitals second +secondaries +secondarily +secondariness +secondarinesses +secondary +seconde +seconded +seconder +seconders +secondes +secondhand +secondi +seconding +secondly +secondo +seconds +secpar +secpars +secrecies +secrecy secret +secretagogue +secretagogues +secretarial +secretariat +secretariats +secretaries secretary +secretaryship +secretaryships +secrete +secreted +secreter +secretes +secretest +secretin +secreting +secretins +secretion +secretionary +secretions +secretive +secretively +secretiveness +secretivenesses +secretly +secretor +secretors +secretory +secrets +secs +sect +sectarian +sectarianism +sectarianisms +sectarianize +sectarianized +sectarianizes +sectarianizing +sectarians +sectaries +sectary +sectile +sectilities +sectility section +sectional +sectionalism +sectionalisms +sectionally +sectionals +sectioned +sectioning +sections +sector +sectoral +sectored +sectorial +sectoring +sectors +sects +secular +secularise +secularised +secularises +secularising +secularism +secularisms +secularist +secularistic +secularists +secularities +secularity +secularization +secularizations +secularize +secularized +secularizer +secularizers +secularizes +secularizing +secularly +seculars +secund +secundly +secundum secure +secured +securely +securement +securements +secureness +securenesses +securer +securers +secures +securest +securing +securities +securitization +securitizations +securitize +securitized +securitizes +securitizing security +sedan +sedans +sedarim +sedate +sedated +sedately +sedateness +sedatenesses +sedater +sedates +sedatest +sedating +sedation +sedations +sedative +sedatives +sedentary +seder +seders +sederunt +sederunts +sedge +sedges +sedgier +sedgiest +sedgy +sedile +sedilia +sedilium +sediment +sedimentable +sedimentary +sedimentation +sedimentations +sedimented +sedimenting +sedimentologic +sedimentological +sedimentologically +sedimentologies +sedimentologist +sedimentologists +sedimentology +sediments +sedition +seditions +seditious +seditiously +seditiousness +seditiousnesses +seduce +seduced +seducement +seducements +seducer +seducers +seduces +seducing +seducive +seduction +seductions +seductive +seductively +seductiveness +seductivenesses +seductress +seductresses +sedulities +sedulity +sedulous +sedulously +sedulousness +sedulousnesses +sedum +sedums see +seeable +seecatch +seecatchie seed +seedbed +seedbeds +seedcake +seedcakes +seedcase +seedcases +seedeater +seedeaters +seeded +seeder +seeders +seedier +seediest +seedily +seediness +seedinesses +seeding +seedless +seedlike +seedling +seedlings +seedman +seedmen +seedpod +seedpods +seeds +seedsman +seedsmen +seedtime +seedtimes +seedy +seeing +seeings seek +seeker +seekers +seeking +seeks +seel +seeled +seeling +seels +seely seem +seemed +seemer +seemers +seeming +seemingly +seemings +seemlier +seemliest +seemliness +seemlinesses +seemly +seems +seen +seep +seepage +seepages +seeped +seepier +seepiest +seeping +seeps +seepy +seer +seeress +seeresses +seers +seersucker +seersuckers +sees +seesaw +seesawed +seesawing +seesaws +seethe +seethed +seethes +seething +seg +segetal +seggar +seggars +segment +segmental +segmentally +segmentary +segmentation +segmentations +segmented +segmenting +segments +segni +segno +segnos +sego +segos +segregant +segregants +segregate +segregated +segregates +segregating +segregation +segregationist +segregationists +segregations +segregative +segs +segue +segued +segueing +segues +seguidilla +seguidillas +sei +seicento +seicentos +seiche +seiches +seidel +seidels +seif +seifs +seigneur +seigneurial +seigneuries +seigneurs +seigneury +seignior +seigniorage +seigniorages +seigniories +seigniors +seigniory +seignorage +seignorages +seignorial +seignories +seignory +seine +seined +seiner +seiners +seines +seining +seis +seisable +seise +seised +seiser +seisers +seises +seisin +seising +seisings +seisins +seism +seismal +seismic +seismically +seismicities +seismicity +seismism +seismisms +seismogram +seismograms +seismograph +seismographer +seismographers +seismographic +seismographies +seismographs +seismography +seismological +seismologies +seismologist +seismologists +seismology +seismometer +seismometers +seismometric +seismometries +seismometry +seisms +seisor +seisors +seisure +seisures +seizable seize +seized +seizer +seizers +seizes +seizin +seizing +seizings +seizins +seizor +seizors +seizure +seizures +sejant +sejeant +sel +selachian +selachians +seladang +seladangs +selaginella +selaginellas +selah +selahs +selamlik +selamliks +selcouth seldom +seldomly select +selectable +selected +selectee +selectees +selecting +selection +selectionist +selectionists +selections +selective +selectively +selectiveness +selectivenesses +selectivities +selectivity +selectly +selectman +selectmen +selectness +selectnesses +selector +selectors +selects +selenate +selenates +selenic +selenide +selenides +seleniferous +selenite +selenites +selenium +seleniums +selenocentric +selenological +selenologies +selenologist +selenologists +selenology +selenous +self +selfdom +selfdoms +selfed +selfheal +selfheals +selfhood +selfhoods +selfing selfish +selfishly +selfishness +selfishnesses +selfless +selflessly +selflessness +selflessnesses +selfness +selfnesses +selfs +selfsame +selfsameness +selfsamenesses +selfward sell +sellable +selle +seller +sellers +selles +selling +sellout +sellouts +sells +sels +selsyn +selsyns +seltzer +seltzers +selva +selvage +selvaged +selvages +selvas +selvedge +selvedged +selvedges +selves +semantic +semantical +semantically +semanticist +semanticists +semantics +semaphore +semaphored +semaphores +semaphoring +semasiological +semasiologies +semasiology +sematic +semblable +semblables +semblably +semblance +semblances +seme +semeiologies +semeiology +semeiotic +semeiotics +sememe +sememes +sememic +semen +semens +semes +semester +semesters +semestral +semestrial +semi +semiabstract +semiabstraction +semiabstractions +semiannual +semiannually +semiaquatic +semiarboreal +semiarid +semiaridities +semiaridity +semiautobiographical +semiautomatic +semiautomatically +semiautomatics +semiautonomous +semibald +semibreve +semibreves +semicentennial +semicentennials semicircle +semicircles +semicircular +semicivilized +semiclassic +semiclassical +semiclassics +semicolon +semicolonial +semicolonialism +semicolonialisms +semicolonies +semicolons +semicolony +semicoma +semicomas +semicommercial +semiconducting +semiconductor +semiconductors +semiconscious +semiconsciousness +semiconsciousnesses +semiconservative +semiconservatively +semicrystalline +semicylindrical +semidarkness +semidarknesses +semideaf +semideified +semideifies +semideify +semideifying +semidesert +semideserts +semidetached +semidiameter +semidiameters +semidiurnal +semidivine +semidocumentaries +semidocumentary +semidome +semidomed +semidomes +semidomesticated +semidomestication +semidomestications +semidominant +semidry +semidrying +semidwarf +semidwarfs +semidwarves +semiempirical +semierect +semievergreen +semifeudal +semifinal +semifinalist +semifinalists +semifinals +semifinished +semifit +semifitted +semiflexible +semifluid +semifluids +semiformal +semigala +semigloss +semigovernmental +semigroup +semigroups +semihard +semihigh +semihobo +semihoboes +semihobos +semilegendary +semilethal +semilethals +semiliquid +semiliquids +semiliterate +semiliterates +semilog +semilogarithmic +semilunar +semilustrous +semimat +semimatt +semimatte +semimetal +semimetallic +semimetals +semimicro +semimoist +semimonastic +semimonthlies +semimonthly +semimute +semimystical +semina +seminal +seminally seminar +seminarian +seminarians +seminaries +seminarist +seminarists +seminars +seminary +seminatural +seminiferous +seminomad +seminomadic +seminomads +seminude +seminudities +seminudity +semiofficial +semiofficially +semiological +semiologically +semiologies +semiologist +semiologists +semiology +semiopaque +semioses +semiosis +semiotic +semiotician +semioticians +semioticist +semioticists +semiotics +semipalmated +semiparasite +semiparasites +semiparasitic +semipermanent +semipermeabilities +semipermeability +semipermeable +semipolitical +semipopular +semiporcelain +semiporcelains +semipornographic +semipornographies +semipornography +semipostal +semipostals +semiprecious +semiprivate +semipro +semiprofessional +semiprofessionally +semiprofessionals +semipros +semipublic +semiquantitative +semiquantitatively +semiquaver +semiquavers +semiraw +semireligious +semiretired +semiretirement +semiretirements +semirigid +semirural +semis +semisacred +semisecret +semisedentary +semises +semishrubby +semiskilled +semisoft +semisolid +semisolids +semisubmersible +semisubmersibles +semisweet +semisynthetic +semiterrestrial +semitist +semitists +semitonal +semitonally +semitone +semitones +semitonic +semitonically +semitrailer +semitrailers +semitranslucent +semitransparent +semitropic +semitropical +semitropics +semivowel +semivowels +semiweeklies +semiweekly +semiwild +semiworks +semiyearly +semolina +semolinas +sempervivum +sempervivums +sempiternal +sempiternally +sempiternities +sempiternity +semple +semplice +sempre +sempstress +sempstresses +sen +senarii +senarius +senary +senate +senates +senator +senatorial +senatorian +senators +senatorship +senatorships send +sendable +sendal +sendals +sended +sender +senders +sending +sendoff +sendoffs +sends +sendup +sendups +sene +seneca +senecas +senecio +senecios +senectitude +senectitudes +senega +senegas +senescence +senescences +senescent +seneschal +seneschals +sengi +senhor +senhora +senhoras +senhores +senhorita +senhoritas +senhors +senile +senilely +seniles +senilities +senility senior +seniorities +seniority +seniors +seniti +senna +sennas +sennet +sennets +sennight +sennights +sennit +sennits +senopia +senopias +senor +senora +senoras +senores +senorita +senoritas +senors +senryu +sensa +sensate +sensated +sensately +sensates +sensating +sensation +sensational +sensationalise +sensationalised +sensationalises +sensationalising +sensationalism +sensationalisms +sensationalist +sensationalistic +sensationalists +sensationalize +sensationalized +sensationalizes +sensationalizing +sensationally +sensations sense +sensed +senseful +senseless +senselessly +senselessness +senselessnesses +senses +sensibilia +sensibilities +sensibility +sensible +sensibleness +sensiblenesses +sensibler +sensibles +sensiblest +sensibly +sensilla +sensillae +sensillum +sensing +sensitisation +sensitisations +sensitise +sensitised +sensitises +sensitising sensitive +sensitively +sensitiveness +sensitivenesses +sensitives +sensitivities +sensitivity +sensitization +sensitizations +sensitize +sensitized +sensitizer +sensitizers +sensitizes +sensitizing +sensitometer +sensitometers +sensitometric +sensitometries +sensitometry +sensor +sensoria +sensorial +sensorially +sensorimotor +sensorineural +sensorium +sensoriums +sensors +sensory +sensual +sensualism +sensualisms +sensualist +sensualistic +sensualists +sensualities +sensuality +sensualization +sensualizations +sensualize +sensualized +sensualizes +sensualizing +sensually +sensum +sensuosities +sensuosity +sensuous +sensuously +sensuousness +sensuousnesses +sent +sente sentence +sentenced +sentences +sentencing +sententia +sententiae +sentential +sententious +sententiously +sententiousness +sententiousnesses +senti +sentience +sentiences +sentient +sentiently +sentients +sentiment +sentimental +sentimentalise +sentimentalised +sentimentalises +sentimentalising +sentimentalism +sentimentalisms +sentimentalist +sentimentalists +sentimentalities +sentimentality +sentimentalization +sentimentalizations +sentimentalize +sentimentalized +sentimentalizes +sentimentalizing +sentimentally +sentiments +sentimo +sentimos +sentinel +sentineled +sentineling +sentinelled +sentinelling +sentinels +sentries +sentry +sepal +sepaled +sepaline +sepalled +sepaloid +sepalous +sepals +separabilities +separability +separable +separableness +separablenesses separate +separated +separately +separateness +separatenesses +separates +separating separation +separationist +separationists +separations +separatism +separatisms +separatist +separatistic +separatists +separative +separator +separators +sepia +sepias +sepic +sepiolite +sepiolites +sepoy +sepoys +seppuku +seppukus +sepses +sepsis +sept +septa +septal +septaria +septarium +septate +septenarii +septenarius +septendecillion +septendecillions +septennial +septennially +septentrion +septentrional +septentrions +septet +septets +septette +septettes +septic +septical +septicemia +septicemias +septicemic +septicidal +septics +septillion +septillions +septime +septimes +septs +septuagenarian +septuagenarians +septum +septums +septuple +septupled +septuples +septupling +sepulcher +sepulchered +sepulchering +sepulchers +sepulchral +sepulchrally +sepulchre +sepulchred +sepulchres +sepulchring +sepulture +sepultures +sequacious +sequaciously +sequacities +sequacity +sequel +sequela +sequelae +sequels +sequence +sequenced +sequencer +sequencers +sequences +sequencies +sequencing +sequency +sequent +sequential +sequentially +sequents +sequester +sequestered +sequestering +sequesters +sequestra +sequestrate +sequestrated +sequestrates +sequestrating +sequestration +sequestrations +sequestrum +sequestrums +sequin +sequined +sequinned +sequins +sequitur +sequiturs +sequoia +sequoias +ser +sera +serac +seracs +seraglio +seraglios +serai +serail +serails +serais +seral +serape +serapes +seraph +seraphic +seraphically +seraphim +seraphims +seraphin +seraphs +serdab +serdabs +sere +sered +serein +sereins +serenade +serenaded +serenader +serenaders +serenades +serenading +serenata +serenatas +serenate +serendipities +serendipitous +serendipitously +serendipity +serene +serenely +sereneness +serenenesses +serener +serenes +serenest +serenities +serenity +serer +seres +serest +serf +serfage +serfages +serfdom +serfdoms +serfhood +serfhoods +serfish +serflike +serfs +serge +sergeancies +sergeancy +sergeant +sergeanties +sergeants +sergeanty +serges +serging +sergings +serial +serialise +serialised +serialises +serialising +serialism +serialisms +serialist +serialists +serialization +serializations +serialize +serialized +serializes +serializing +serially +serials +seriate +seriated +seriately +seriates +seriatim +seriating +sericeous +sericin +sericins +sericultural +sericulture +sericultures +sericulturist +sericulturists +seriema +seriemas +series +serif +serifed +seriffed +serifs +serigraph +serigrapher +serigraphers +serigraphies +serigraphs +serigraphy +serin +serine +serines +sering +seringa +seringas +serins +seriocomic +seriocomically serious +seriously +seriousness +seriousnesses +serjeant +serjeanties +serjeants +serjeanty +sermon +sermonette +sermonettes +sermonic +sermonize +sermonized +sermonizer +sermonizers +sermonizes +sermonizing +sermons +seroconversion +seroconversions +serodiagnoses +serodiagnosis +serodiagnostic +serologic +serological +serologically +serologies +serologist +serologists +serology +seronegative +seronegativities +seronegativity +seropositive +seropositivities +seropositivity +seropurulent +serosa +serosae +serosal +serosas +serosities +serosity +serotinal +serotine +serotines +serotinous +serotonergic +serotonin +serotoninergic +serotonins +serotype +serotypes +serous +serow +serows +serpent +serpentine +serpentinely +serpentines +serpents +serpigines +serpiginous +serpiginously +serpigo +serpigoes +serranid +serranids +serrano +serranos +serrate +serrated +serrates +serrating +serration +serrations +serried +serriedly +serriedness +serriednesses +serries +serry +serrying +sers +serum +serumal +serums +servable +serval +servals servant +servanthood +servanthoods +servantless +servants serve +served +server +servers +serves service +serviceabilities +serviceability +serviceable +serviceableness +serviceablenesses +serviceably +serviceberries +serviceberry +serviced +serviceman +servicemen +servicer +servicers +services +servicewoman +servicewomen +servicing +serviette +serviettes +servile +servilely +servileness +servilenesses +servilities +servility +serving +servings +servitor +servitors +servitude +servitudes +servo +servomechanism +servomechanisms +servomotor +servomotors +servos +sesame +sesames +sesamoid +sesamoids +sesquicarbonate +sesquicarbonates +sesquicentenaries +sesquicentenary +sesquicentennial +sesquicentennials +sesquipedalian +sesquiterpene +sesquiterpenes +sessile session +sessional +sessions +sesspool +sesspools +sesterce +sesterces +sestertia +sestertium +sestet +sestets +sestina +sestinas +sestine +sestines set +seta +setaceous +setae +setal +setback +setbacks +setenant +setenants +setiform +setline +setlines +setoff +setoffs +seton +setons +setose +setous +setout +setouts +sets +setscrew +setscrews +sett +settee +settees +setter +setters +setting +settings settle +settleable +settled settlement +settlements settler +settlers +settles +settling +settlings +settlor +settlors +setts +setulose +setulous +setup +setups +seven +sevenfold +sevens +seventeen +seventeens +seventeenth +seventeenths +seventh +sevenths +seventies +seventieth +seventieths +seventy +sever +severabilities +severability +severable several +severalfold +severally +severals +severalties +severalty +severance +severances +severe +severed +severely +severeness +severenesses +severer +severest +severing +severities +severity +severs +seviche +seviches +sevruga +sevrugas sew +sewabilities +sewability +sewable +sewage +sewages +sewan +sewans +sewar +sewars +sewed +sewer +sewerage +sewerages +sewered +sewering +sewers +sewing +sewings +sewn +sews sex +sexagenarian +sexagenarians +sexagesimal +sexagesimals +sexdecillion +sexdecillions +sexed +sexes +sexier +sexiest +sexily +sexiness +sexinesses +sexing +sexism +sexisms +sexist +sexists +sexless +sexlessly +sexlessness +sexlessnesses +sexologies +sexologist +sexologists +sexology +sexploitation +sexploitations +sexpot +sexpots +sext +sextain +sextains +sextan +sextans +sextant +sextants +sextarii +sextarius +sextet +sextets +sextette +sextettes +sextile +sextiles +sextillion +sextillions +sexto +sextodecimo +sextodecimos +sexton +sextons +sextos +sexts +sextuple +sextupled +sextuples +sextuplet +sextuplets +sextuplicate +sextuplicated +sextuplicates +sextuplicating +sextupling +sextuply +sexual +sexualities +sexuality +sexualization +sexualizations +sexualize +sexualized +sexualizes +sexualizing +sexually +sexy +sferics +sforzandi +sforzando +sforzandos +sforzato +sforzatos +sfumato +sfumatos +sgraffiti +sgraffito +sh +sha +shabbier +shabbiest +shabbily +shabbiness +shabbinesses shabby +shack +shackle +shacklebone +shacklebones +shackled +shackler +shacklers +shackles +shackling +shacko +shackoes +shackos +shacks +shad +shadberries +shadberry +shadblow +shadblows +shadbush +shadbushes +shadchan +shadchanim +shadchans +shaddock +shaddocks shade +shaded +shadeless +shader +shaders +shades +shadflies +shadfly +shadier +shadiest +shadily +shadiness +shadinesses +shading +shadings +shadoof +shadoofs shadow +shadowbox +shadowboxed +shadowboxes +shadowboxing +shadowed +shadower +shadowers +shadowgraph +shadowgraphies +shadowgraphs +shadowgraphy +shadowier +shadowiest +shadowily +shadowiness +shadowinesses +shadowing +shadowless +shadowlike +shadows +shadowy +shadrach +shadrachs +shads +shaduf +shadufs +shady +shaft +shafted +shafting +shaftings +shafts +shag +shagbark +shagbarks +shagged +shaggier +shaggiest +shaggily +shagginess +shagginesses +shagging +shaggy +shaggymane +shaggymanes +shagreen +shagreens +shags +shah +shahdom +shahdoms +shahs +shaird +shairds +shairn +shairns +shaitan +shaitans +shakable shake +shakeable +shakedown +shakedowns +shaken +shakeout +shakeouts +shaker +shakers +shakes +shakeup +shakeups +shakier +shakiest +shakily +shakiness +shakinesses +shaking +shako +shakoes +shakos +shaky +shale +shaled +shales +shaley +shalier +shaliest shall +shalloon +shalloons +shallop +shallops +shallot +shallots shallow +shallowed +shallower +shallowest +shallowing +shallowly +shallowness +shallownesses +shallows +shalom +shaloms +shalt +shaly +sham +shamable +shaman +shamanic +shamanism +shamanisms +shamanist +shamanistic +shamanists +shamans +shamas +shamble +shambled +shambles +shambling +shambolic shame +shamed +shamefaced +shamefacedly +shamefacedness +shamefacednesses +shamefast +shameful +shamefully +shamefulness +shamefulnesses +shameless +shamelessly +shamelessness +shamelessnesses +shames +shaming +shammas +shammash +shammashim +shammasim +shammed +shammer +shammers +shammes +shammied +shammies +shamming +shammos +shammosim +shammy +shammying +shamois +shamos +shamosim +shamoy +shamoyed +shamoying +shamoys +shampoo +shampooed +shampooer +shampooers +shampooing +shampoos +shamrock +shamrocks +shams +shamus +shamuses +shandies +shandy +shandygaff +shandygaffs +shanghai +shanghaied +shanghaier +shanghaiers +shanghaiing +shanghais +shank +shanked +shanking +shankpiece +shankpieces +shanks +shannies +shanny +shantey +shanteys +shanti +shanties +shantih +shantihs +shantis +shantung +shantungs +shanty +shantyman +shantymen +shantytown +shantytowns +shapable shape +shapeable +shaped +shapeless +shapelessly +shapelessness +shapelessnesses +shapelier +shapeliest +shapeliness +shapelinesses +shapely +shapen +shaper +shapers +shapes +shapeup +shapeups +shaping +sharable +shard +shards share +shareabilities +shareability +shareable +sharecrop +sharecropped +sharecropper +sharecroppers +sharecropping +sharecrops +shared +shareholder +shareholders +sharer +sharers +shares +shareware +sharewares +sharif +sharifian +sharifs +sharing shark +sharked +sharker +sharkers +sharking +sharklike +sharks +sharkskin +sharkskins +sharn +sharns +sharny sharp +sharped sharpen +sharpened sharpener +sharpeners +sharpening +sharpens +sharper +sharpers +sharpest +sharpie +sharpies +sharping +sharply +sharpness +sharpnesses +sharps +sharpshooter +sharpshooters +sharpshooting +sharpshootings +sharpy +shashlick +shashlicks +shashlik +shashliks +shaslik +shasliks +shat +shatter +shattered +shattering +shatteringly +shatterproof +shatters +shaugh +shaughs +shaul +shauled +shauling +shauls +shavable shave +shaved +shaveling +shavelings +shaven shaver +shavers +shaves +shavetail +shavetails +shavie +shavies +shaving +shavings +shaw +shawed +shawing +shawl +shawled +shawling +shawls +shawm +shawms +shawn +shaws +shay +shays she +shea +sheaf +sheafed +sheafing +sheaflike +sheafs +sheal +shealing +shealings +sheals +shear +sheared +shearer +shearers +shearing +shearings +shearling +shearlings +shears +shearwater +shearwaters +sheas +sheath +sheathbill +sheathbills +sheathe +sheathed +sheather +sheathers +sheathes +sheathing +sheathings +sheaths +sheave +sheaved +sheaves +sheaving +shebang +shebangs +shebean +shebeans +shebeen +shebeens +shed +shedable +shedded +shedder +shedders +shedding +shedlike +sheds +sheen +sheened +sheeney +sheeneys +sheenful +sheenie +sheenier +sheenies +sheeniest +sheening +sheens +sheeny sheep +sheepberries +sheepberry +sheepcot +sheepcote +sheepcotes +sheepcots +sheepdog +sheepdogs +sheepfold +sheepfolds +sheepherder +sheepherders +sheepherding +sheepherdings +sheepish +sheepishly +sheepishness +sheepishnesses +sheepman +sheepmen +sheepshank +sheepshanks +sheepshead +sheepsheads +sheepshearer +sheepshearers +sheepshearing +sheepshearings +sheepskin +sheepskins +sheer +sheered +sheerer +sheerest +sheering +sheerlegs +sheerly +sheerness +sheernesses +sheers sheet +sheeted +sheeter +sheeters +sheetfed +sheeting +sheetings +sheetlike +sheets +sheeve +sheeves +shegetz +sheik +sheikdom +sheikdoms +sheikh +sheikhdom +sheikhdoms +sheikhs +sheiks +sheila +sheilas +sheitan +sheitans +shekel +shekels +sheldrake +sheldrakes +shelduck +shelducks shelf +shelfful +shelffuls +shelflike +shell +shellac +shellack +shellacked +shellacking +shellackings +shellacks +shellacs +shellback +shellbacks +shellcracker +shellcrackers +shelled +sheller +shellers +shellfire +shellfires +shellfish +shellfisheries +shellfishery +shellfishes +shellier +shelliest +shelling +shellproof +shells +shellshocked +shellwork +shellworks +shelly +shelta +sheltas shelter +shelterbelt +shelterbelts +sheltered +shelterer +shelterers +sheltering +shelterless +shelters +sheltie +shelties +shelty +shelve +shelved +shelver +shelvers +shelves +shelvier +shelviest +shelving +shelvings +shelvy +shenanigan +shenanigans +shend +shending +shends +shent +sheol +sheols +shepherd +shepherded +shepherdess +shepherdesses +shepherding +shepherds +sheqalim +sheqel +sherbert +sherberts +sherbet +sherbets +sherd +sherds +shereef +shereefs +shergottite +shergottites +sherif +sheriff +sheriffdom +sheriffdoms +sheriffs +sherifs +sherlock +sherlocks +sheroot +sheroots +sherpa +sherpas +sherries +sherris +sherrises +sherry +shes +shetland +shetlands +sheuch +sheuchs +sheugh +sheughs +shew +shewbread +shewbreads +shewed +shewer +shewers +shewing +shewn +shews +shh +shiatsu +shiatsus +shiatzu +shiatzus +shibah +shibahs +shibboleth +shibboleths +shicker +shickers +shicksa +shicksas +shied +shiel +shield +shielded +shielder +shielders +shielding +shields +shieling +shielings +shiels +shier +shiers +shies +shiest +shift +shiftable +shifted +shifter +shifters +shiftier +shiftiest +shiftily +shiftiness +shiftinesses +shifting +shiftless +shiftlessly +shiftlessness +shiftlessnesses +shifts +shifty +shigella +shigellae +shigellas +shigelloses +shigellosis +shiitake +shiitakes +shikar +shikaree +shikarees +shikari +shikaris +shikarred +shikarring +shikars +shikker +shikkers +shiksa +shiksas +shikse +shikses +shilingi +shill +shillala +shillalah +shillalahs +shillalas +shilled +shillelagh +shillelaghs +shilling +shillings +shills +shilpit +shily +shim +shimmed +shimmer +shimmered +shimmering +shimmers +shimmery +shimmied +shimmies +shimming +shimmy +shimmying +shims +shin +shinbone +shinbones +shindies +shindig +shindigs +shindy +shindys shine +shined +shiner +shiners +shines +shingle +shingled +shingler +shinglers +shingles +shingling +shingly +shinier +shiniest +shinily +shininess +shininesses +shining +shinleaf +shinleafs +shinleaves +shinned +shinneries +shinnery +shinney +shinneyed +shinneying +shinneys +shinnied +shinnies +shinning +shinny +shinnying +shinplaster +shinplasters +shins +shinsplints +shiny ship +shipboard +shipboards +shipborne +shipbuilder +shipbuilders +shipbuilding +shipbuildings +shipfitter +shipfitters +shiplap +shiplaps +shipload +shiploads +shipman +shipmaster +shipmasters +shipmate +shipmates +shipmen +shipment +shipments +shipowner +shipowners +shippable +shipped +shippen +shippens +shipper +shippers +shipping +shippings +shippon +shippons +ships +shipshape +shipside +shipsides +shipway +shipways +shipworm +shipworms +shipwreck +shipwrecked +shipwrecking +shipwrecks +shipwright +shipwrights +shipyard +shipyards +shire +shires +shirk +shirked +shirker +shirkers +shirking +shirks +shirr +shirred +shirring +shirrings +shirrs shirt +shirtdress +shirtdresses +shirtfront +shirtfronts +shirtier +shirtiest +shirting +shirtings +shirtless +shirtmaker +shirtmakers +shirts +shirtsleeve +shirtsleeved +shirtsleeves +shirttail +shirttails +shirtwaist +shirtwaists +shirty +shist +shists +shit +shitake +shitakes +shithead +shitheads +shits +shittah +shittahs +shitted +shittier +shittiest +shittim +shittims +shittimwood +shittimwoods +shitting +shitty +shiv +shiva +shivah +shivahs +shivaree +shivareed +shivareeing +shivarees +shivas +shive +shiver +shivered +shiverer +shiverers +shivering +shivers +shivery +shives +shivs +shkotzim +shlemiehl +shlemiehls +shlemiel +shlemiels +shlep +shlepp +shlepped +shlepping +shlepps +shleps +shlock +shlocks +shlump +shlumped +shlumping +shlumps +shlumpy +shmaltz +shmaltzes +shmaltzier +shmaltziest +shmaltzy +shmear +shmears +shmo +shmoes +shmooze +shmoozed +shmoozes +shmoozing +shmuck +shmucks +shnaps +shnook +shnooks +shoal +shoaled +shoaler +shoalest +shoalier +shoaliest +shoaling +shoals +shoaly +shoat +shoats shock +shockable +shocked +shocker +shockers +shocking +shockingly +shockproof +shocks +shod +shodden +shoddier +shoddies +shoddiest +shoddily +shoddiness +shoddinesses +shoddy shoe +shoebill +shoebills +shoeblack +shoeblacks +shoed +shoehorn +shoehorned +shoehorning +shoehorns +shoeing +shoelace +shoelaces +shoeless +shoemaker +shoemakers +shoepac +shoepack +shoepacks +shoepacs +shoer +shoers +shoes +shoeshine +shoeshines +shoestring +shoestrings +shoetree +shoetrees +shofar +shofars +shofroth +shog +shogged +shogging +shogs +shogun +shogunal +shogunate +shogunates +shoguns +shoji +shojis +sholom +sholoms +shone +shoo +shooed +shooflies +shoofly +shooing +shook +shooks +shool +shooled +shooling +shools +shoon +shoos shoot +shooter +shooters +shooting +shootings +shootout +shootouts +shoots shop +shopboy +shopboys +shopgirl +shopgirls +shophar +shophars +shophroth shopkeeper +shopkeepers +shoplift +shoplifted +shoplifter +shoplifters +shoplifting +shoplifts +shopman +shopmen +shoppe +shopped +shopper +shoppers +shoppes shopping +shoppings +shops +shoptalk +shoptalks +shopwindow +shopwindows +shopworn +shoran +shorans shore +shorebird +shorebirds +shored +shorefront +shorefronts +shoreline +shorelines +shores +shoreside +shoreward +shorewards +shoring +shorings +shorl +shorls +shorn short +shortage +shortages +shortbread +shortbreads +shortcake +shortcakes +shortchange +shortchanged +shortchanger +shortchangers +shortchanges +shortchanging shortcoming +shortcomings +shortcut +shortcuts +shortcutting +shorted +shorten +shortened +shortener +shorteners +shortening +shortenings +shortens +shorter +shortest +shortfall +shortfalls +shorthair +shorthaired +shorthairs +shorthand +shorthanded +shorthands +shorthorn +shorthorns +shortia +shortias +shortie +shorties +shorting +shortish +shortlist +shortlists shortly +shortness +shortnesses shorts +shortsighted +shortsightedly +shortsightedness +shortsightednesses +shortstop +shortstops +shortwave +shortwaves +shorty shot +shote +shotes +shotgun +shotgunned +shotgunner +shotgunners +shotgunning +shotguns +shots +shott +shotted +shotten +shotting +shotts should shoulder +shouldered +shouldering +shoulders +shouldest +shouldst shout +shouted +shouter +shouters +shouting +shouts +shove +shoved +shovel +shoveled +shoveler +shovelers +shovelful +shovelfuls +shoveling +shovelled +shoveller +shovellers +shovelling +shovelnose +shovelnoses +shovels +shovelsful +shover +shovers +shoves +shoving show +showable +showbiz +showbizzes +showbizzy +showboat +showboated +showboating +showboats +showbread +showbreads +showcase +showcased +showcases +showcasing +showdown +showdowns +showed shower +showered +showerer +showerers +showerhead +showerheads +showering +showerless +showers +showery +showgirl +showgirls +showier +showiest +showily +showiness +showinesses +showing +showings +showman +showmanship +showmanships +showmen +shown +showoff +showoffs +showpiece +showpieces +showplace +showplaces +showring +showrings +showroom +showrooms +shows +showstopper +showstoppers +showstopping +showy +shoyu +shoyus +shrank +shrapnel +shred +shredded +shredder +shredders +shredding +shreds +shrew +shrewd +shrewder +shrewdest +shrewdie +shrewdies +shrewdly +shrewdness +shrewdnesses +shrewed +shrewing +shrewish +shrewishly +shrewishness +shrewishnesses +shrewlike +shrews +shri +shriek +shrieked +shrieker +shriekers +shriekier +shriekiest +shrieking +shrieks +shrieky +shrieval +shrievalties +shrievalty +shrieve +shrieved +shrieves +shrieving +shrift +shrifts +shrike +shrikes +shrill +shrilled +shriller +shrillest +shrilling +shrillness +shrillnesses +shrills +shrilly +shrimp +shrimped +shrimper +shrimpers +shrimpier +shrimpiest +shrimping +shrimplike +shrimps +shrimpy +shrine +shrined +shrines +shrining shrink +shrinkable +shrinkage +shrinkages +shrinker +shrinkers +shrinking +shrinks +shris +shrive +shrived +shrivel +shriveled +shriveling +shrivelled +shrivelling +shrivels +shriven +shriver +shrivers +shrives +shriving +shroff +shroffed +shroffing +shroffs +shroud +shrouded +shrouding +shrouds +shrove +shrub +shrubberies +shrubbery +shrubbier +shrubbiest +shrubby +shrubs +shrug +shrugged +shrugging +shrugs +shrunk +shrunken +shtetel +shtetels +shtetl +shtetlach +shtetls +shtick +shticks +shtik +shtiks +shuck +shucked +shucker +shuckers +shucking +shuckings +shucks +shudder +shuddered +shuddering +shudders +shuddery +shuffle +shuffleboard +shuffleboards +shuffled +shuffler +shufflers +shuffles +shuffling +shul +shuln +shuls +shun +shunned +shunner +shunners +shunning +shunpike +shunpiked +shunpiker +shunpikers +shunpikes +shunpiking +shunpikings +shuns +shunt +shunted +shunter +shunters +shunting +shunts +shush +shushed +shushes +shushing shut +shutdown +shutdowns +shute +shuted +shutes +shuteye +shuteyes +shuting +shutoff +shutoffs +shutout +shutouts +shuts +shutter +shutterbug +shutterbugs +shuttered +shuttering +shutterless +shutters +shutting +shuttle +shuttlecock +shuttlecocked +shuttlecocking +shuttlecocks +shuttled +shuttleless +shuttles +shuttling +shwanpan +shwanpans shy +shyer +shyers +shyest +shying +shylock +shylocked +shylocking +shylocks +shyly +shyness +shynesses +shyster +shysters +si +sial +sialagogue +sialagogues +sialic +sialid +sialidan +sialidans +sialids +sialoid +sials +siamang +siamangs +siamese +siameses +sib +sibb +sibbs +sibilance +sibilances +sibilant +sibilantly +sibilants +sibilate +sibilated +sibilates +sibilating +sibilation +sibilations +sibling +siblings +sibs +sibyl +sibylic +sibyllic +sibylline +sibyls +sic +siccan +sicced +siccing +sice +sices sick +sickbay +sickbays +sickbed +sickbeds +sicked +sickee +sickees +sicken +sickened +sickener +sickeners +sickening +sickeningly +sickens +sicker +sickerly +sickest +sickie +sickies +sicking +sickish +sickishly +sickishness +sickishnesses +sickle +sickled +sicklemia +sicklemias +sickles +sicklied +sicklier +sicklies +sickliest +sicklily +sickliness +sicklinesses +sickling +sickly +sicklying sickness +sicknesses +sicko +sickos +sickout +sickouts +sickroom +sickrooms +sicks +sics +siddur +siddurim +siddurs side -sideroad +sidearm +sideband +sidebands +sidebar +sidebars +sideboard +sideboards +sideburned +sideburns +sidecar +sidecars +sided +sidedness +sidednesses +sidedress +sidedresses +sidehill +sidehills +sidekick +sidekicks +sidelight +sidelights +sideline +sidelined +sideliner +sideliners +sidelines +sideling +sidelining +sidelong +sideman +sidemen +sidepiece +sidepieces +sidereal +siderite +siderites +siderolite +siderolites +sides +sidesaddle +sidesaddles +sideshow +sideshows +sideslip +sideslipped +sideslipping +sideslips +sidespin +sidespins +sidesplitting +sidesplittingly +sidestep +sidestepped +sidestepper +sidesteppers +sidestepping +sidesteps +sidestream +sidestroke +sidestrokes +sideswipe +sideswiped +sideswipes +sideswiping +sidetrack +sidetracked +sidetracking +sidetracks sidewalk +sidewalks +sidewall +sidewalls +sideward +sidewards +sideway sideways +sidewinder +sidewinders +sidewise +siding +sidings +sidle +sidled +sidler +sidlers +sidles +sidling +siege +sieged +sieges +sieging +siemens +sienite +sienites +sienna +siennas +sierozem +sierozems +sierra +sierran +sierras +siesta +siestas +sieur +sieurs +sieve +sieved +sieves +sieving +sifaka +sifakas +siffleur +siffleurs +sift +sifted +sifter +sifters +sifting +siftings +sifts +siganid +siganids sigh +sighed +sigher +sighers +sighing +sighless +sighlike +sighs sight +sighted +sighter +sighters +sighting +sightings +sightless +sightlessly +sightlessness +sightlessnesses +sightlier +sightliest +sightliness +sightlinesses +sightly +sights +sightsaw +sightsee sightseeing +sightseen +sightseer +sightseers +sightsees +sigil +sigils +sigloi +siglos +sigma +sigmas +sigmate +sigmoid +sigmoidal +sigmoidally +sigmoidoscopies +sigmoidoscopy +sigmoids +sign +signage +signages signal +signaled +signaler +signalers +signaling +signalise +signalised +signalises +signalising +signalization +signalizations +signalize +signalized +signalizes +signalizing +signalled +signaller +signallers +signalling +signally +signalman +signalmen +signalment +signalments +signals +signatories +signatory signature +signatures +signboard +signboards +signed +signee +signees +signer +signers +signet +signeted +signeting +signets significance +significances +significancies +significancy +significant +significantly +signification +significations +significative +significs +signified +signifieds +signifier +signifiers +signifies +signify +signifying +signifyings +signing +signior +signiori +signiories +signiors +signiory +signor +signora +signoras +signore +signori +signories +signorina +signorinas +signorine +signors +signory +signpost +signposted +signposting +signposts +signs +sike +siker +sikes +silage +silages +silane +silanes +sild +silds silence +silenced +silencer +silencers +silences +silencing +sileni silent +silenter +silentest +silently +silentness +silentnesses +silents +silenus +silesia +silesias +silex +silexes +silhouette +silhouetted +silhouettes +silhouetting +silhouettist +silhouettists +silica +silicas +silicate +silicates +siliceous +silicic +silicide +silicides +silicification +silicifications +silicified +silicifies +silicify +silicifying +silicious +silicium +siliciums +silicle +silicles +silicon +silicone +silicones +siliconized +silicons +silicoses +silicosis +silicotic +silicotics +silicula +siliculae +siliqua +siliquae +silique +siliques silk +silkaline +silkalines +silked +silken +silkier +silkies +silkiest +silkily +silkiness +silkinesses +silking +silklike +silkoline +silkolines +silks +silkweed +silkweeds +silkworm +silkworms +silky +sill +sillabub +sillabubs +siller +sillers +sillibub +sillibubs +sillier +sillies +silliest +sillily +sillimanite +sillimanites +silliness +sillinesses +sills silly +silo +siloed +siloing +silos +siloxane +siloxanes +silt +siltation +siltations +silted +siltier +siltiest +silting +silts +siltstone +siltstones +silty +silurid +silurids +siluroid +siluroids +silva +silvae +silvan +silvans +silvas silver +silverback +silverbacks +silverberries +silverberry +silvered +silverer +silverers +silverfish +silverfishes +silveriness +silverinesses +silvering +silverly +silvern +silverpoint +silverpoints +silvers +silverside +silversides +silversmith +silversmithing +silversmithings +silversmiths +silverware +silverwares +silverweed +silverweeds +silvery +silvex +silvexes +silvical +silvics +silvicultural +silviculturally +silviculture +silvicultures +silviculturist +silviculturists +sim +sima +simar +simars +simaruba +simarubas +simas +simazine +simazines +simian +simians similar +similarities +similarity +similarly +simile +similes +similitude +similitudes +simioid +simious +simitar +simitars +simlin +simlins +simmer +simmered +simmering +simmers +simnel +simnels +simoleon +simoleons +simoniac +simoniacal +simoniacally +simoniacs +simonies +simonist +simonists +simonize +simonized +simonizes +simonizing +simony +simoom +simooms +simoon +simoons +simp +simpatico +simper +simpered +simperer +simperers +simpering +simpers simple +simpleminded +simplemindedly +simplemindedness +simplemindednesses +simpleness +simplenesses +simpler +simples +simplest +simpleton +simpletons +simplex +simplexes +simplices +simplicia +simplicial +simplicially +simplicities +simplicity +simplification +simplifications +simplified +simplifier +simplifiers +simplifies simplify +simplifying +simplism +simplisms +simplist +simplistic +simplistically +simplists +simply +simps +sims +simulacra +simulacre +simulacres +simulacrum +simulacrums +simulant +simulants +simular +simulars +simulate +simulated +simulates +simulating +simulation +simulations +simulative +simulator +simulators +simulcast +simulcasted +simulcasting +simulcasts +simultaneities +simultaneity +simultaneous +simultaneously +simultaneousness +simultaneousnesses +sin +sinapism +sinapisms since +sincere sincerely +sincereness +sincerenesses +sincerer +sincerest +sincerities +sincerity +sincipita +sincipital +sinciput +sinciputs +sine +sinecure +sinecures +sines +sinew +sinewed +sinewing +sinews +sinewy +sinfonia +sinfonie +sinfonietta +sinfoniettas +sinful +sinfully +sinfulness +sinfulnesses sing +singable +singe +singed +singeing +singer +singers +singes +singing single +singled +singleness +singlenesses +singles +singlestick +singlesticks +singlet +singleton +singletons +singletree +singletrees +singlets +singling +singly +sings +singsong +singsongs +singsongy +singspiel +singspiels +singular +singularities +singularity +singularize +singularized +singularizes +singularizing +singularly +singulars +sinh +sinhs +sinicize +sinicized +sinicizes +sinicizing +sinister +sinisterly +sinisterness +sinisternesses +sinistral +sinistrous sink +sinkable +sinkage +sinkages +sinker +sinkers +sinkhole +sinkholes +sinking +sinks +sinless +sinlessly +sinlessness +sinlessnesses +sinned +sinner +sinners +sinning +sinoatrial +sinological +sinologies +sinologist +sinologists +sinologue +sinologues +sinology +sinopia +sinopias +sinopie +sins +sinsemilla +sinsemillas +sinsyne +sinter +sinterabilities +sinterability +sintered +sintering +sinters +sinuate +sinuated +sinuates +sinuating +sinuosities +sinuosity +sinuous +sinuously +sinuousness +sinuousnesses +sinus +sinuses +sinusitis +sinusitises +sinusoid +sinusoidal +sinusoidally +sinusoids +sip +sipe +siped +sipes +siphon +siphonal +siphoned +siphonic +siphoning +siphonophore +siphonophores +siphonostele +siphonosteles +siphons +siping +sipped +sipper +sippers +sippet +sippets +sipping +sips sir +sirdar +sirdars +sire +sired +siree +sirees +siren +sirenian +sirenians +sirens +sires +siring +sirloin +sirloins +sirocco +siroccos +sirra +sirrah +sirrahs +sirras +sirree +sirrees +sirs +sirup +sirups +sirupy +sirvente +sirventes +sis +sisal +sisals +sises +siskin +siskins +sissier +sissies +sissiest +sissified +sissy +sissyish sister +sistered +sisterhood +sisterhoods +sistering +sisterly +sisters +sistra +sistroid +sistrum +sistrums sit +sitar +sitarist +sitarists +sitars +sitcom +sitcoms +site +sited +sites +sith +sithence +sithens +siting +sitologies +sitology +sitosterol +sitosterols +sits +sitten +sitter +sitters +sitting +sittings +situate +situated +situates +situating situation +situational +situationally +situations +situp +situps +situs +situses +sitzmark +sitzmarks +siver +sivers +six +sixes +sixfold +sixmo +sixmos +sixpence +sixpences +sixpenny +sixte +sixteen +sixteenmo +sixteenmos +sixteens +sixteenth +sixteenths +sixtes +sixth +sixthly +sixths +sixties +sixtieth +sixtieths +sixty +sixtyish +sizable +sizableness +sizablenesses +sizably +sizar +sizars size +sizeable +sizeably +sized +sizer +sizers +sizes +sizier +siziest +siziness +sizinesses +sizing +sizings +sizy +sizzle +sizzled +sizzler +sizzlers +sizzles +sizzling +sjambok +sjamboked +sjamboking +sjamboks +ska +skag +skags +skald +skaldic +skalds +skas +skat skate skateboard +skateboarder +skateboarders +skateboarding +skateboardings +skateboards +skated +skater +skaters +skates +skating +skatings +skatol +skatole +skatoles +skatols +skats +skean +skeane +skeanes +skeans +skedaddle +skedaddled +skedaddler +skedaddlers +skedaddles +skedaddling +skee +skeed +skeeing +skeen +skeens +skees +skeet +skeeter +skeeters +skeets +skeg +skegs +skeigh +skein +skeined +skeining +skeins +skeletal +skeletally +skeleton +skeletonic +skeletonise +skeletonised +skeletonises +skeletonising +skeletonize +skeletonized +skeletonizer +skeletonizers +skeletonizes +skeletonizing +skeletons +skellum +skellums +skelm +skelms +skelp +skelped +skelping +skelpit +skelps +skelter +skeltered +skeltering +skelters +skene +skenes +skep +skeps +skepsis +skepsises +skeptic skeptical +skeptically +skepticism +skepticisms +skeptics +skerries +skerry +sketch +sketchbook +sketchbooks +sketched +sketcher +sketchers +sketches +sketchier +sketchiest +sketchily +sketchiness +sketchinesses +sketching +sketchy +skew +skewback +skewbacks +skewbald +skewbalds +skewed +skewer +skewered +skewering +skewers +skewing +skewness +skewnesses +skews ski +skiable +skiagram +skiagrams +skibob +skibobber +skibobbers +skibobbing +skibobbings +skibobs +skid +skidded +skidder +skidders +skiddier +skiddiest +skidding +skiddoo +skiddooed +skiddooing +skiddoos +skiddy +skidoo +skidooed +skidooing +skidoos +skidproof +skids +skidway +skidways +skied +skier +skiers +skies +skiey +skiff +skiffle +skiffled +skiffles +skiffling +skiffs +skiing +skiings +skijorer +skijorers +skijoring +skijorings skilful skill +skilled +skilless +skillessness +skillessnesses +skillet +skillets +skillful +skillfully +skillfulness +skillfulnesses +skilling +skillings +skills +skim +skimmed +skimmer +skimmers +skimming +skimmings +skimo +skimobile +skimobiles +skimos +skimp +skimped +skimpier +skimpiest +skimpily +skimpiness +skimpinesses +skimping +skimps +skimpy +skims skin +skinflint +skinflints +skinful +skinfuls +skinhead +skinheads +skink +skinked +skinker +skinkers +skinking +skinks +skinless +skinlike +skinned +skinner +skinners +skinnier +skinniest +skinniness +skinninesses +skinning +skinny +skins +skint +skintight +skioring +skiorings skip +skipjack +skipjacks +skiplane +skiplanes +skippable +skipped +skipper +skippered +skippering +skippers +skippet +skippets +skipping +skips +skirl +skirled +skirling +skirls +skirmish +skirmished +skirmisher +skirmishers +skirmishes +skirmishing +skirr +skirred +skirret +skirrets +skirring +skirrs skirt +skirted +skirter +skirters +skirting +skirtings +skirts +skis +skit +skite +skited +skites +skiting +skits +skitter +skittered +skitterier +skitteriest +skittering +skitters +skittery +skittish +skittishly +skittishness +skittishnesses +skittle +skittles +skive +skived +skiver +skivers +skives +skiving +skivvied +skivvies +skivvy +skivvying +skiwear +sklent +sklented +sklenting +sklents +skoal +skoaled +skoaling +skoals +skookum +skosh +skoshes +skreegh +skreeghed +skreeghing +skreeghs +skreigh +skreighed +skreighing +skreighs +skua +skuas +skulduggeries +skulduggery +skulk +skulked +skulker +skulkers +skulking +skulks +skull +skullcap +skullcaps +skullduggeries +skullduggery +skulled +skulls +skunk +skunked +skunking +skunks sky +skyborne +skybox +skyboxes +skycap +skycaps +skydive +skydived +skydiver +skydivers +skydives +skydiving +skydivings +skydove +skyed +skyey +skyhook +skyhooks +skying +skyjack +skyjacked +skyjacker +skyjackers +skyjacking +skyjackings +skyjacks +skylark +skylarked +skylarker +skylarkers +skylarking +skylarks +skylight +skylighted +skylights +skyline +skylines +skylit +skyman +skymen +skyphoi +skyphos +skyrocket +skyrocketed +skyrocketing +skyrockets +skysail +skysails skyscraper +skyscrapers +skywalk +skywalks +skyward +skywards +skyway +skyways +skywrite +skywriter +skywriters +skywrites +skywriting +skywritings +skywritten +skywrote +slab +slabbed +slabber +slabbered +slabbering +slabbers +slabbery +slabbing +slablike +slabs +slack +slacked +slacken +slackened +slackening +slackens +slacker +slackers +slackest +slacking +slackly +slackness +slacknesses +slacks +slag +slagged +slaggier +slaggiest +slagging +slaggy +slags +slain +slainte +slakable +slake +slaked +slaker +slakers +slakes +slaking +slalom +slalomed +slaloming +slaloms +slam +slammed +slammer +slammers +slamming +slams +slander +slandered +slanderer +slanderers +slandering +slanderous +slanderously +slanderousness +slanderousnesses +slanders +slang +slanged +slangier +slangiest +slangily +slanginess +slanginesses +slanging +slangs +slanguage +slanguages +slangy +slank +slant +slanted +slanting +slantingly +slants +slantways +slantwise +slanty +slap +slapdash +slapdashes +slaphappier +slaphappiest +slaphappy +slapjack +slapjacks +slapped +slapper +slappers +slapping +slaps +slapstick +slapsticks +slash +slashed +slasher +slashers +slashes +slashing +slashingly +slashings +slat +slatch +slatches +slate +slated +slatelike +slater +slaters +slates +slatey +slather +slathered +slathering +slathers +slatier +slatiest +slating +slatings +slats +slatted +slattern +slatternliness +slatternlinesses +slatternly +slatterns +slatting +slattings +slaty +slaughter +slaughtered +slaughterer +slaughterers +slaughterhouse +slaughterhouses +slaughtering +slaughterous +slaughterously +slaughters slave +slaved +slaveholder +slaveholders +slaveholding +slaveholdings +slaver +slavered +slaverer +slaverers +slaveries +slavering +slavers slavery +slaves +slavey +slaveys +slaving +slavish +slavishly +slavishness +slavishnesses +slavocracies +slavocracy +slaw +slaws +slay +slayed +slayer +slayers +slaying +slays +sleave +sleaved +sleaves +sleaving +sleaze +sleazebag +sleazebags +sleazeball +sleazeballs +sleazes +sleazier +sleaziest +sleazily +sleaziness +sleazinesses +sleazo +sleazy +sled +sledded +sledder +sledders +sledding +sleddings +sledge +sledged +sledgehammer +sledgehammered +sledgehammering +sledgehammers +sledges +sledging +sleds +sleek +sleeked +sleeken +sleekened +sleekening +sleekens +sleeker +sleekest +sleekier +sleekiest +sleeking +sleekit +sleekly +sleekness +sleeknesses +sleeks +sleeky sleep +sleeper +sleepers +sleepier +sleepiest +sleepily +sleepiness +sleepinesses +sleeping +sleepings +sleepless +sleeplessly +sleeplessness +sleeplessnesses +sleeplike +sleepover +sleepovers +sleeps +sleepwalk +sleepwalked +sleepwalker +sleepwalkers +sleepwalking +sleepwalks +sleepwear sleepy +sleepyhead +sleepyheads +sleet +sleeted +sleetier +sleetiest +sleeting +sleets +sleety sleeve +sleeved +sleeveless +sleevelet +sleevelets +sleeves +sleeving +sleigh +sleighed +sleigher +sleighers +sleighing +sleighs +sleight +sleights +slender +slenderer +slenderest +slenderize +slenderized +slenderizes +slenderizing +slenderly +slenderness +slendernesses +slept +sleuth +sleuthed +sleuthhound +sleuthhounds +sleuthing +sleuths +slew +slewed +slewing +slews slice +sliceable +sliced +slicer +slicers +slices +slicing +slick +slicked +slickenside +slickensides +slicker +slickers +slickest +slicking +slickly +slickness +slicknesses +slickrock +slickrocks +slicks +slid +slidable +slidden slide +slider +sliders +slides +slideway +slideways +sliding +slier +sliest slight +slighted +slighter +slightest +slighting +slightingly +slightly +slightness +slightnesses +slights +slily slim +slime +slimeball +slimeballs +slimed +slimes +slimier +slimiest +slimily +sliminess +sliminesses +sliming +slimly +slimmed +slimmer +slimmers +slimmest +slimming +slimnastics +slimness +slimnesses +slimpsier +slimpsiest +slimpsy +slims +slimsier +slimsiest +slimsy +slimy +sling +slinger +slingers +slinging +slings +slingshot +slingshots +slink +slinked +slinkier +slinkiest +slinkily +slinkiness +slinkinesses +slinking +slinks +slinky slip +slipcase +slipcased +slipcases +slipcover +slipcovers +slipe +sliped +slipes +slipform +slipformed +slipforming +slipforms +sliping +slipknot +slipknots +slipless +slipout +slipouts +slipover +slipovers +slippage +slippages +slipped +slipper +slippered +slipperier +slipperiest +slipperiness +slipperinesses +slippers +slippery +slippier +slippiest +slipping +slippy +slips +slipshod +slipslop +slipslops +slipsole +slipsoles +slipstream +slipstreamed +slipstreaming +slipstreams +slipt +slipup +slipups +slipware +slipwares +slipway +slipways +slit +slither +slithered +slithering +slithers +slithery +slitless +slits +slitted +slitter +slitters +slitting +sliver +slivered +sliverer +sliverers +slivering +slivers +slivovic +slivovices +slivovitz +slivovitzes +slob +slobber +slobbered +slobberer +slobberers +slobbering +slobbers +slobbery +slobbier +slobbiest +slobbish +slobby +slobs +sloe +sloes +slog +slogan +sloganeer +sloganeered +sloganeering +sloganeers +sloganize +sloganized +sloganizes +sloganizing +slogans +slogged +slogger +sloggers +slogging +slogs +sloid +sloids +slojd +slojds +sloop +sloops +slop +slope +sloped +sloper +slopers +slopes +sloping +slopped +sloppier +sloppiest +sloppily +sloppiness +sloppinesses +slopping +sloppy +slops +slopwork +slopworks +slosh +sloshed +sloshes +sloshier +sloshiest +sloshing +sloshy +slot +slotback +slotbacks +sloth +slothful +slothfully +slothfulness +slothfulnesses +sloths +slots +slotted +slotting +slouch +slouched +sloucher +slouchers +slouches +slouchier +slouchiest +slouchily +slouchiness +slouchinesses +slouching +slouchy +slough +sloughed +sloughier +sloughiest +sloughing +sloughs +sloughy +sloven +slovenlier +slovenliest +slovenliness +slovenlinesses +slovenly +slovens slow +slowdown +slowdowns +slowed +slower +slowest +slowing +slowish +slowly +slowness +slownesses +slowpoke +slowpokes +slows +slowworm +slowworms +sloyd +sloyds +slub +slubbed +slubber +slubbered +slubbering +slubbers +slubbing +slubbings +slubs +sludge +sludges +sludgier +sludgiest +sludgy +slue +slued +slues +sluff +sluffed +sluffing +sluffs +slug +slugabed +slugabeds +slugfest +slugfests +sluggard +sluggardly +sluggardness +sluggardnesses +sluggards +slugged +slugger +sluggers +slugging +sluggish +sluggishly +sluggishness +sluggishnesses +slugs +sluice +sluiced +sluices +sluiceway +sluiceways +sluicing +sluicy +sluing +slum +slumber +slumbered +slumberer +slumberers +slumbering +slumberous +slumbers +slumbery +slumbrous +slumgullion +slumgullions +slumgum +slumgums +slumism +slumisms +slumlord +slumlords +slummed +slummer +slummers +slummier +slummiest +slumming +slummy +slump +slumped +slumpflation +slumpflations +slumping +slumps +slums +slung +slungshot +slungshots +slunk +slur +slurb +slurban +slurbs +slurp +slurped +slurping +slurps +slurred +slurried +slurries +slurring +slurry +slurrying +slurs +slush +slushed +slushes +slushier +slushiest +slushily +slushiness +slushinesses +slushing +slushy +slut +sluts +sluttier +sluttiest +sluttish +sluttishly +sluttishness +sluttishnesses +slutty +sly +slyboots +slyer +slyest +slyly +slyness +slynesses +slype +slypes +smack +smacked +smacker +smackers +smacking +smacks small +smallage +smallages +smallclothes +smaller +smallest +smallholder +smallholders +smallholding +smallholdings +smallish +smallmouth +smallmouths +smallness +smallnesses +smallpox +smallpoxes +smalls +smallsword +smallswords +smalt +smalti +smaltine +smaltines +smaltite +smaltites +smalto +smaltos +smalts +smaragd +smaragde +smaragdes +smaragdine +smaragdite +smaragdites +smaragds +smarm +smarmier +smarmiest +smarmily +smarminess +smarminesses +smarms +smarmy smart +smartass +smartasses +smarted +smarten +smartened +smartening +smartens +smarter +smartest +smartie +smarties +smarting +smartly +smartness +smartnesses +smarts +smartweed +smartweeds +smarty +smash +smashed +smasher +smashers +smashes +smashing +smashingly +smashup +smashups +smatter +smattered +smatterer +smatterers +smattering +smatterings +smatters +smaze +smazes +smear +smearcase +smearcases +smeared +smearer +smearers +smearier +smeariest +smearing +smears +smeary +smectic +smectite +smectites +smectitic +smeddum +smeddums +smeek +smeeked +smeeking +smeeks +smegma +smegmas smell +smelled +smeller +smellers +smellier +smelliest +smelling +smells +smelly +smelt +smelted +smelter +smelteries +smelters +smeltery +smelting +smelts +smerk +smerked +smerking +smerks +smew +smews +smidge +smidgen +smidgens +smidgeon +smidgeons +smidges +smidgin +smidgins +smiercase +smiercases +smilax +smilaxes smile +smiled +smileless +smiler +smilers +smiles +smiley +smiling +smilingly +smirch +smirched +smirches +smirching +smirk +smirked +smirker +smirkers +smirkier +smirkiest +smirking +smirks +smirky +smit +smite +smiter +smiters +smites +smith +smithereens +smitheries +smithers +smithery +smithies +smiths +smithsonite +smithsonites +smithy +smiting +smitten +smock +smocked +smocking +smockings +smocks smog +smoggier +smoggiest +smoggy +smogless +smogs +smokable smoke +smokeable +smoked +smokehouse +smokehouses +smokejack +smokejacks +smokeless +smokelike +smokepot +smokepots smoker +smokers +smokes +smokestack +smokestacks +smokey +smokier +smokiest +smokily +smokiness +smokinesses +smoking +smoky +smolder +smoldered +smoldering +smolders +smolt +smolts +smooch +smooched +smooches +smooching +smoochy smooth +smoothbore +smoothbores +smoothed +smoothen +smoothened +smoothening +smoothens +smoother +smoothers +smoothes +smoothest +smoothie +smoothies +smoothing +smoothly +smoothness +smoothnesses +smooths +smoothy +smorgasbord +smorgasbords +smote +smother +smothered +smothering +smothers +smothery +smoulder +smouldered +smouldering +smoulders +smudge +smudged +smudges +smudgier +smudgiest +smudgily +smudginess +smudginesses +smudging +smudgy +smug +smugger +smuggest +smuggle +smuggled +smuggler +smugglers +smuggles +smuggling +smugly +smugness +smugnesses +smut +smutch +smutched +smutches +smutchier +smutchiest +smutching +smutchy +smuts +smutted +smuttier +smuttiest +smuttily +smuttiness +smuttinesses +smutting +smutty +snack +snacked +snacking +snacks +snaffle +snaffled +snaffles +snaffling +snafu +snafued +snafuing +snafus +snag +snagged +snaggier +snaggiest +snagging +snaggleteeth +snaggletooth +snaggletoothed +snaggy +snaglike +snags +snail +snailed +snailing +snaillike +snails snake +snakebird +snakebirds +snakebit +snakebite +snakebites +snakebitten +snaked +snakelike +snakeroot +snakeroots +snakes +snakeskin +snakeskins +snakeweed +snakeweeds +snakey +snakier +snakiest +snakily +snaking +snaky +snap +snapback +snapbacks +snapdragon +snapdragons +snapless +snapped +snapper +snappers +snappier +snappiest +snappily +snappiness +snappinesses +snapping +snappish +snappishly +snappishness +snappishnesses +snappy +snaps +snapshooter +snapshooters +snapshot +snapshots +snapshotted +snapshotting +snapweed +snapweeds +snare +snared +snarer +snarers +snares +snaring +snark +snarkier +snarkiest +snarks +snarky +snarl +snarled +snarler +snarlers +snarlier +snarliest +snarling +snarls +snarly +snash +snashes +snatch +snatched +snatcher +snatchers +snatches +snatchier +snatchiest +snatching +snatchy +snath +snathe +snathes +snaths +snaw +snawed +snawing +snaws +snazzier +snazziest +snazzy +sneak +sneaked sneaker +sneakered +sneakers +sneakier +sneakiest +sneakily +sneakiness +sneakinesses +sneaking +sneakingly +sneaks +sneaky +sneap +sneaped +sneaping +sneaps +sneck +snecks +sned +snedded +snedding +sneds +sneer +sneered +sneerer +sneerers +sneerful +sneering +sneers +sneesh +sneeshes sneeze +sneezed +sneezer +sneezers +sneezes +sneezeweed +sneezeweeds +sneezier +sneeziest +sneezing +sneezy +snell +snelled +sneller +snellest +snelling +snells +snib +snibbed +snibbing +snibs +snick +snicked +snicker +snickered +snickerer +snickerers +snickering +snickers +snickersnee +snickersnees +snickery +snicking +snicks +snide +snidely +snideness +snidenesses +snider +snidest sniff +sniffed +sniffer +sniffers +sniffier +sniffiest +sniffily +sniffiness +sniffinesses +sniffing +sniffish +sniffishly +sniffishness +sniffishnesses +sniffle +sniffled +sniffler +snifflers +sniffles +sniffling +sniffs +sniffy +snifter +snifters +snigger +sniggered +sniggerer +sniggerers +sniggering +sniggers +sniggle +sniggled +sniggler +snigglers +sniggles +sniggling +snip +snipe +sniped +sniper +snipers +sniperscope +sniperscopes +snipes +sniping +snipped +snipper +snippers +snippersnapper +snippersnappers +snippet +snippetier +snippetiest +snippets +snippety +snippier +snippiest +snippily +snipping +snippy +snips +snit +snitch +snitched +snitcher +snitchers +snitches +snitching +snits +snivel +sniveled +sniveler +snivelers +sniveling +snivelled +snivelling +snivels +snob +snobberies +snobbery +snobbier +snobbiest +snobbily +snobbish +snobbishly +snobbishness +snobbishnesses +snobbism +snobbisms +snobby +snobs +snog +snogged +snogging +snogs +snollygoster +snollygosters +snood +snooded +snooding +snoods +snook +snooked +snooker +snookered +snookering +snookers +snooking +snooks +snool +snooled +snooling +snools +snoop +snooped +snooper +snoopers +snoopier +snoopiest +snoopily +snooping +snoops +snoopy +snoot +snooted +snootier +snootiest +snootily +snootiness +snootinesses +snooting +snoots +snooty +snooze +snoozed +snoozer +snoozers +snoozes +snoozier +snooziest +snoozing +snoozle +snoozled +snoozles +snoozling +snoozy +snore +snored +snorer +snorers +snores +snoring +snorkel +snorkeled +snorkeler +snorkelers +snorkeling +snorkels +snort +snorted +snorter +snorters +snorting +snorts +snot +snots +snottier +snottiest +snottily +snottiness +snottinesses +snotty +snout +snouted +snoutier +snoutiest +snouting +snoutish +snouts +snouty snow +snowball +snowballed +snowballing +snowballs +snowbank +snowbanks +snowbell +snowbells +snowbelt +snowbelts +snowberries +snowberry +snowbird +snowbirds +snowblower +snowblowers +snowboard +snowboarder +snowboarders +snowboarding +snowboardings +snowboards +snowbound +snowbrush +snowbrushes +snowbush +snowbushes +snowcap +snowcapped +snowcaps +snowdrift +snowdrifts +snowdrop +snowdrops +snowed +snowfall +snowfalls +snowfield +snowfields +snowflake +snowflakes +snowier +snowiest +snowily +snowiness +snowinesses +snowing +snowland +snowlands +snowless +snowlike +snowmaker +snowmakers +snowmaking +snowman +snowmelt +snowmelts +snowmen +snowmobile +snowmobiler +snowmobilers +snowmobiles +snowmobiling +snowmobilings +snowmobilist +snowmobilists +snowmold +snowmolds +snowpack +snowpacks +snowplow +snowplowed +snowplowing +snowplows +snows +snowscape +snowscapes +snowshed +snowsheds +snowshoe +snowshoed +snowshoeing +snowshoer +snowshoers +snowshoes +snowslide +snowslides +snowstorm +snowstorms +snowsuit +snowsuits snowy +snub +snubbed +snubber +snubbers +snubbier +snubbiest +snubbiness +snubbinesses +snubbing +snubby +snubness +snubnesses +snubs +snuck +snuff +snuffbox +snuffboxes +snuffed +snuffer +snuffers +snuffier +snuffiest +snuffily +snuffing +snuffle +snuffled +snuffler +snufflers +snuffles +snufflier +snuffliest +snuffling +snuffly +snuffs +snuffy +snug +snugged +snugger +snuggeries +snuggery +snuggest +snuggies +snugging +snuggle +snuggled +snuggles +snuggling +snugly +snugness +snugnesses +snugs +snye +snyes so +soak +soakage +soakages +soaked +soaker +soakers +soaking +soaks soap +soapbark +soapbarks +soapberries +soapberry +soapbox +soapboxes +soaped +soaper +soapers +soapier +soapiest +soapily +soapiness +soapinesses +soaping +soapless +soaplike +soaps +soapstone +soapstones +soapsuds +soapwort +soapworts +soapy +soar +soared +soarer +soarers +soaring +soarings +soars +soave +soaves sob +sobbed +sobber +sobbers +sobbing +sobeit +sober +sobered +soberer +soberest +sobering +soberize +soberized +soberizes +soberizing +soberly +soberness +sobernesses +sobers +sobersided +sobersidedness +sobersidednesses +sobersides +sobful +sobrieties +sobriety +sobriquet +sobriquets +sobs +socage +socager +socagers +socages +soccage +soccages soccer +soccers +sociabilities +sociability +sociable +sociableness +sociablenesses +sociables +sociably social +socialise +socialised +socialises +socialising socialism +socialisms socialist +socialistic +socialistically +socialists +socialite +socialites +socialities +sociality +socialization +socializations +socialize +socialized +socializer +socializers +socializes +socializing +socially +socials +societal +societally +societies society +sociobiological +sociobiologies +sociobiologist +sociobiologists +sociobiology +sociocultural +socioculturally +socioeconomic +socioeconomically +sociogram +sociograms +sociohistorical +sociolinguist +sociolinguistic +sociolinguistics +sociolinguists +sociologese +sociologeses +sociologic +sociological +sociologically +sociologies +sociologist +sociologists +sociology +sociometric +sociometries +sociometry +sociopath +sociopathic +sociopaths +sociopolitical +sociopsychological +socioreligious +sociosexual sock +sockdolager +sockdolagers +sockdologer +sockdologers +socked socket +socketed +socketing +sockets +sockeye +sockeyes +socking +sockless +sockman +sockmen +socko +socks +socle +socles +socman +socmen +sod +soda +sodaless +sodalist +sodalists +sodalite +sodalites +sodalities +sodality +sodamide +sodamides +sodas +sodbuster +sodbusters +sodded +sodden +soddened +soddening +soddenly +soddenness +soddennesses +soddens +soddies +sodding +soddy +sodic +sodium +sodiums +sodom +sodomies +sodomist +sodomists +sodomite +sodomites +sodomitic +sodomitical +sodomize +sodomized +sodomizes +sodomizing +sodoms +sodomy +sods +soever sofa +sofar +sofars +sofas +soffit +soffits soft +softa +softas +softback +softbacks +softball +softballer +softballers +softballs +softbound +softcover +softcovers +soften +softened +softener +softeners +softening +softens +softer +softest +softhead +softheaded +softheadedly +softheadedness +softheadednesses +softheads +softhearted +softheartedly +softheartedness +softheartednesses +softie +softies +softish +softly +softness +softnesses +softs +softshell +softshells software +softwares +softwood +softwoods +softy +sogged +soggier +soggiest +soggily +sogginess +sogginesses +soggy +soigne +soignee soil +soilage +soilages +soilborne +soiled +soiling +soilless +soils +soilure +soilures +soiree +soirees +soja +sojas +sojourn +sojourned +sojourner +sojourners +sojourning +sojourns +soke +sokeman +sokemen +sokes +sokol +sokols +sol +sola +solace +solaced +solacement +solacements +solacer +solacers +solaces +solacing +solan +solanaceous +soland +solander +solanders +solands +solanin +solanine +solanines +solanins +solano +solanos +solans +solanum +solanums solar +solaria +solarise +solarised +solarises +solarising +solarism +solarisms +solarium +solariums +solarization +solarizations +solarize +solarized +solarizes +solarizing +solate +solated +solates +solatia +solating +solation +solations +solatium +sold +soldan +soldans +solder +solderabilities +solderability +soldered +solderer +solderers +soldering +solders +soldi soldier +soldiered +soldieries +soldiering +soldierings +soldierly +soldiers +soldiership +soldierships +soldiery +soldo +sole +solecise +solecised +solecises +solecising +solecism +solecisms +solecist +solecistic +solecists +solecize +solecized +solecizes +solecizing +soled +solei +soleless +solely +solemn +solemner +solemnest +solemnified +solemnifies +solemnify +solemnifying +solemnities +solemnity +solemnization +solemnizations +solemnize +solemnized +solemnizes +solemnizing +solemnly +solemnness +solemnnesses +soleness +solenesses +solenoid +solenoidal +solenoids +soleplate +soleplates +soleret +solerets +soles +soleus +solfatara +solfataras +solfege +solfeges +solfeggi +solfeggio +solfeggios +solgel +soli +solicit +solicitant +solicitants +solicitation +solicitations +solicited +soliciting +solicitor +solicitors +solicitorship +solicitorships +solicitous +solicitously +solicitousness +solicitousnesses +solicits +solicitude +solicitudes solid +solidago +solidagos +solidarism +solidarisms +solidarist +solidaristic +solidarists +solidarities +solidarity +solidary +solider +solidest +solidi +solidification +solidifications +solidified +solidifies +solidify +solidifying +solidities +solidity +solidly +solidness +solidnesses +solids +solidus +solifluction +solifluctions +soliloquies +soliloquise +soliloquised +soliloquises +soliloquising +soliloquist +soliloquists +soliloquize +soliloquized +soliloquizer +soliloquizers +soliloquizes +soliloquizing +soliloquy +soling +solion +solions +solipsism +solipsisms +solipsist +solipsistic +solipsistically +solipsists +soliquid +soliquids +solitaire +solitaires +solitaries +solitarily +solitariness +solitarinesses +solitary +soliton +solitons +solitude +solitudes +solitudinarian +solitudinarians +solleret +sollerets +solmization +solmizations +solo +soloed +soloing +soloist +soloists +solon +solonchak +solonchaks +solonets +solonetses +solonetz +solonetzes +solonetzic +solons +solos +sols +solstice +solstices +solstitial +solubilise +solubilised +solubilises +solubilising +solubilities +solubility +solubilization +solubilizations +solubilize +solubilized +solubilizes +solubilizing +soluble +solubles +solubly +solum +solums +solus +solute +solutes +solution +solutions +solvabilities +solvability +solvable +solvate +solvated +solvates +solvating +solvation +solvations +solve +solved +solvencies +solvency +solvent +solventless +solvently +solvents +solver +solvers +solves +solving +solvolyses +solvolysis +solvolytic +soma +somas +somata +somatic +somatically +somatological +somatologies +somatology +somatomedin +somatomedins +somatopleure +somatopleures +somatosensory +somatostatin +somatostatins +somatotrophin +somatotrophins +somatotropin +somatotropins +somatotype +somatotypes +somber +somberly +somberness +sombernesses +sombre +sombrely +sombrero +sombreros +sombrous some +somebodies somebody +someday +somedeal somehow someone +someones +someplace +somersault +somersaulted +somersaulting +somersaults +somerset +somerseted +somerseting +somersets +somersetted +somersetting something +sometime sometimes +someway +someways +somewhat +somewhats +somewhen somewhere +somewheres +somewhither +somewise +somital +somite +somites +somitic +sommelier +sommeliers +somnambulant +somnambulate +somnambulated +somnambulates +somnambulating +somnambulation +somnambulations +somnambulism +somnambulisms +somnambulist +somnambulistic +somnambulistically +somnambulists +somnifacient +somnifacients +somniferous +somnolence +somnolences +somnolent +somnolently son +sonance +sonances +sonant +sonantal +sonantic +sonants +sonar +sonarman +sonarmen +sonars +sonata +sonatas +sonatina +sonatinas +sonatine +sonde +sonder +sonders +sondes +sone +sones song +songbird +songbirds +songbook +songbooks +songfest +songfests +songful +songfully +songfulness +songfulnesses +songless +songlessly +songlike +songs +songsmith +songsmiths +songster +songsters +songstress +songstresses +songwriter +songwriters +songwriting +songwritings +sonhood +sonhoods +sonic +sonically +sonicate +sonicated +sonicates +sonicating +sonication +sonications +sonics +sonless +sonlike +sonly +sonnet +sonneted +sonneteer +sonneteering +sonneteerings +sonneteers +sonneting +sonnets +sonnetted +sonnetting +sonnies +sonny +sonobuoy +sonobuoys +sonogram +sonograms +sonographer +sonographers +sonographies +sonography +sonorant +sonorants +sonorities +sonority +sonorous +sonorously +sonorousness +sonorousnesses +sonovox +sonovoxes +sons +sonship +sonships +sonsie +sonsier +sonsiest +sonsy +soochong +soochongs +sooey +sook +sooks soon +sooner +sooners +soonest +soot +sooted +sooth +soothe +soothed +soother +soothers +soothes +soothest +soothfast +soothing +soothingly +soothingness +soothingnesses +soothly +sooths +soothsaid +soothsay +soothsayer +soothsayers +soothsaying +soothsayings +soothsays +sootier +sootiest +sootily +sootiness +sootinesses +sooting +soots +sooty +sop +sopaipilla +sopaipillas +sopapilla +sopapillas +soph +sophies +sophism +sophisms +sophist +sophistic +sophistical +sophistically +sophisticate +sophisticated +sophisticatedly +sophisticates +sophisticating +sophistication +sophistications +sophistries +sophistry +sophists +sophomore +sophomores +sophomoric +sophs +sophy +sopite +sopited +sopites +sopiting +sopor +soporiferous +soporiferousness +soporiferousnesses +soporific +soporifics +sopors +sopped +soppier +soppiest +soppiness +soppinesses +sopping +soppy +soprani +sopranino +sopraninos +soprano +sopranos +sops +sora +soras +sorb +sorbabilities +sorbability +sorbable +sorbate +sorbates +sorbed +sorbent +sorbents +sorbet +sorbets +sorbic +sorbing +sorbitol +sorbitols +sorbose +sorboses +sorbs +sorcerer +sorcerers +sorceress +sorceresses +sorceries +sorcerous +sorcery +sord +sordid +sordidly +sordidness +sordidnesses +sordine +sordines +sordini +sordino +sordor +sordors +sords +sore +sorehead +soreheaded +soreheads +sorel +sorels +sorely +soreness +sorenesses +sorer +sores +sorest +sorgho +sorghos +sorghum +sorghums +sorgo +sorgos +sori +soricine +soring +sorings +sorites +soritic +sorn +sorned +sorner +sorners +sorning +sorns +soroche +soroches +sororal +sororate +sororates +sororities +sorority +soroses +sorosis +sorosises +sorption +sorptions +sorptive +sorrel +sorrels +sorrier +sorriest +sorrily +sorriness +sorrinesses sorrow +sorrowed +sorrower +sorrowers +sorrowful +sorrowfully +sorrowfulness +sorrowfulnesses +sorrowing +sorrows sorry sort +sortable +sortably +sorted +sorter +sorters +sortie +sortied +sortieing +sorties +sortilege +sortileges +sorting +sortition +sortitions +sorts +sorus +sos +sostenuti +sostenuto +sostenutos +sot +soteriological +soteriologies +soteriology +soth +soths +sotol +sotols +sots +sotted +sottish +sottishly +sottishness +sottishnesses +sou +souari +souaris +soubise +soubises +soubrette +soubrettes +soubriquet +soubriquets +soucar +soucars +souchong +souchongs +soudan +soudans +souffle +souffled +souffleed +souffles +sough +soughed +soughing +soughs +sought +souk +souks soul +souled +soulful +soulfully +soulfulness +soulfulnesses +soulless +soullessly +soullessness +soullessnesses +soullike +souls sound +soundable +soundalike +soundalikes +soundboard +soundboards +soundbox +soundboxes +sounded +sounder +sounders +soundest +sounding +soundingly +soundings +soundless +soundlessly +soundly +soundman +soundmen +soundness +soundnesses +soundproof +soundproofed +soundproofing +soundproofs +sounds +soundstage +soundstages +soundtrack +soundtracks soup +soupcon +soupcons +souped +soupier +soupiest +souping +soups +soupspoon +soupspoons +soupy sour +sourball +sourballs +source +sourcebook +sourcebooks +sourced +sourceless +sources +sourcing +sourdine +sourdines +sourdough +sourdoughs +soured +sourer +sourest +souring +sourish +sourly +sourness +sournesses +sourpuss +sourpusses +sours +soursop +soursops +sourwood +sourwoods +sous +sousaphone +sousaphones +souse +soused +souses +sousing +soutache +soutaches +soutane +soutanes +souter +souters south +southbound southeast +southeaster +southeasterly +southeastern +southeasternmost +southeasters +southeasts +southeastward +southeastwards +southed +souther +southerlies +southerly southern +southerner +southerners +southernmost +southernness +southernnesses +southerns +southernwood +southernwoods +southers +southing +southings +southland +southlands +southpaw +southpaws +southron +southrons +souths +southward +southwards southwest +southwester +southwesterly +southwestern +southwesternmost +southwesters +southwests +southwestward +southwestwards souvenir +souvenirs +souvlaki +souvlakia +souvlakias +souvlakis +sovereign +sovereignly +sovereigns +sovereignties +sovereignty +soviet +sovietism +sovietisms +sovietization +sovietizations +sovietize +sovietized +sovietizes +sovietizing +soviets +sovkhoz +sovkhozes +sovkhozy +sovran +sovranly +sovrans +sovranties +sovranty sow +sowable +sowans +sowar +sowars +sowbellies +sowbelly +sowbread +sowbreads +sowcar +sowcars +sowed +sowens +sower +sowers +sowing +sown +sows +sox +soy +soya +soyas +soybean +soybeans +soymilk +soymilks +soys +soyuz +soyuzes +sozin +sozine +sozines +sozins +sozzled +spa space +spaceband +spacebands +spacecraft +spacecrafts +spaced +spaceflight +spaceflights +spaceless +spaceman +spacemen +spaceport +spaceports +spacer +spacers +spaces spaceship +spaceships +spacesuit +spacesuits +spacewalk +spacewalked +spacewalker +spacewalkers +spacewalking +spacewalks +spaceward +spacey +spacial +spacier +spaciest +spacing +spacings +spacious +spaciously +spaciousness +spaciousnesses +spackle +spackled +spackles +spackling +spacy spade +spaded +spadefish +spadefishes +spadeful +spadefuls +spader +spaders +spades +spadework +spadeworks +spadices +spadille +spadilles +spading +spadix +spadixes +spado +spadones +spae +spaed +spaeing +spaeings +spaes +spaetzle +spaetzles +spaghetti +spaghettilike +spaghettini +spaghettinis +spaghettis +spagyric +spagyrics +spahee +spahees +spahi +spahis +spail +spails +spait +spaits +spake +spale +spales +spall +spallable +spallation +spallations +spalled +spaller +spallers +spalling +spalls +spalpeen +spalpeens +span +spanakopita +spanakopitas +spancel +spanceled +spanceling +spancelled +spancelling +spancels +spandex +spandexes +spandrel +spandrels +spandril +spandrils +spang +spangle +spangled +spangles +spanglier +spangliest +spangling +spangly +spaniel +spaniels +spank +spanked +spanker +spankers +spanking +spankings +spanks +spanless +spanned +spanner +spanners +spanning +spanokopita +spanokopitas +spans +spanworm +spanworms +spar +sparable +sparables spare +spareable +spared +sparely +spareness +sparenesses +sparer +sparerib +spareribs +sparers +spares +sparest +sparge +sparged +sparger +spargers +sparges +sparging +sparid +sparids +sparing +sparingly +spark +sparked +sparker +sparkers +sparkier +sparkiest +sparkily +sparking +sparkish +sparkle +sparkled +sparkler +sparklers +sparkles +sparklier +sparkliest +sparkling +sparkly +sparkplug +sparkplugged +sparkplugging +sparkplugs +sparks +sparky +sparlike +sparling +sparlings +sparoid +sparoids +sparred +sparrier +sparriest +sparring sparrow +sparrowlike +sparrows +sparry +spars +sparse +sparsely +sparseness +sparsenesses +sparser +sparsest +sparsities +sparsity +spartan +sparteine +sparteines +spas +spasm +spasmodic +spasmodically +spasmolytic +spasmolytics +spasms +spastic +spastically +spasticities +spasticity +spastics +spat +spate +spates +spathal +spathe +spathed +spathes +spathic +spathose +spathulate +spatial +spatialities +spatiality +spatially +spatiotemporal +spatiotemporally +spats +spatted +spatter +spatterdock +spatterdocks +spattered +spattering +spatters +spatting +spatula +spatular +spatulas +spatulate +spatzle +spavie +spavies +spaviet +spavin +spavined +spavins +spawn +spawned +spawner +spawners +spawning +spawns +spay +spayed +spaying +spays +spaz +spazzes speak +speakable +speakeasies +speakeasy speaker +speakerphone +speakerphones +speakers +speakership +speakerships +speaking +speakings +speaks +spean +speaned +speaning +speans spear +speared +spearer +spearers +spearfish +spearfished +spearfishes +spearfishing +speargun +spearguns +spearhead +spearheaded +spearheading +spearheads +spearing +spearman +spearmen +spearmint +spearmints +spears +spearwort +spearworts +spec +specced +speccing special +specialer +specialest +specialisation +specialisations +specialise +specialised +specialises +specialising +specialism +specialisms specialist +specialistic +specialists +specialities +speciality +specialization +specializations +specialize +specialized +specializes +specializing +specially +specialness +specialnesses +specials +specialties +specialty +speciate +speciated +speciates +speciating +speciation +speciational +speciations +specie +species +speciesism +speciesisms +specifiable specific +specifically +specification +specifications +specificities +specificity +specifics +specified +specifier +specifiers +specifies +specify +specifying +specimen +specimens +speciosities +speciosity +specious +speciously +speciousness +speciousnesses +speck +specked +specking +speckle +speckled +speckles +speckling +specks +specs +spectacle +spectacled +spectacles +spectacular +spectacularly +spectaculars +spectate +spectated +spectates +spectating +spectator +spectatorial +spectators +spectatorship +spectatorships +specter +specters +spectinomycin +spectinomycins +spectra +spectral +spectrally +spectre +spectres +spectrofluorimeter +spectrofluorimeters +spectrofluorometer +spectrofluorometers +spectrofluorometric +spectrofluorometries +spectrofluorometry +spectrogram +spectrograms +spectrograph +spectrographic +spectrographically +spectrographies +spectrographs +spectrography +spectroheliogram +spectroheliograms +spectroheliograph +spectroheliographies +spectroheliographs +spectroheliography +spectrohelioscope +spectrohelioscopes +spectrometer +spectrometers +spectrometric +spectrometries +spectrometry +spectrophotometer +spectrophotometers +spectrophotometric +spectrophotometrical +spectrophotometrically +spectrophotometries +spectrophotometry +spectroscope +spectroscopes +spectroscopic +spectroscopically +spectroscopies +spectroscopist +spectroscopists +spectroscopy +spectrum +spectrums +specula +specular +specularities +specularity +specularly +speculate +speculated +speculates +speculating +speculation +speculations +speculative +speculatively +speculator +speculators +speculum +speculums +sped speech +speeches +speechified +speechifies +speechify +speechifying +speechless +speechlessly +speechlessness +speechlessnesses +speechwriter +speechwriters speed +speedball +speedballed +speedballing +speedballs +speedboat +speedboating +speedboatings +speedboats +speeded +speeder +speeders +speedier +speediest +speedily +speediness +speedinesses +speeding +speedings +speedo +speedometer +speedometers +speedos +speeds +speedster +speedsters +speedup +speedups +speedway +speedways +speedwell +speedwells +speedy +speel +speeled +speeling +speels +speer +speered +speering +speerings +speers +speil +speiled +speiling +speils +speir +speired +speiring +speirs +speise +speises +speiss +speisses +spelaean +spelean +speleological +speleologies +speleologist +speleologists +speleology spell +spellbind +spellbinder +spellbinders +spellbinding +spellbindingly +spellbinds +spellbound +spelled +speller +spellers spelling +spellings +spells +spelt +spelter +spelters +spelts +speltz +speltzes +spelunk +spelunked +spelunker +spelunkers +spelunking +spelunkings +spelunks +spence +spencer +spencers +spences spend +spendable +spender +spenders +spending +spends +spendthrift +spendthrifts +spense +spenses +spent +sperm +spermaceti +spermacetis +spermagonia +spermagonium +spermaries +spermary +spermatheca +spermathecae +spermathecas +spermatia +spermatial +spermatic +spermatid +spermatids +spermatium +spermatocyte +spermatocytes +spermatogeneses +spermatogenesis +spermatogenic +spermatogonia +spermatogonial +spermatogonium +spermatophore +spermatophores +spermatophyte +spermatophytes +spermatophytic +spermatozoa +spermatozoal +spermatozoan +spermatozoans +spermatozoid +spermatozoids +spermatozoon +spermic +spermicidal +spermicide +spermicides +spermine +spermines +spermiogeneses +spermiogenesis +spermophile +spermophiles +spermous +sperms +sperrylite +sperrylites +spessartine +spessartines +spessartite +spessartites +spew +spewed +spewer +spewers +spewing +spews +sphagnous +sphagnum +sphagnums +sphalerite +sphalerites +sphene +sphenes +sphenic +sphenodon +sphenodons +sphenodont +sphenoid +sphenoidal +sphenoids +sphenopsid +sphenopsids +spheral +sphere +sphered +spheres +spheric +spherical +spherically +sphericities +sphericity +spherics +spherier +spheriest +sphering +spheroid +spheroidal +spheroidally +spheroids +spherometer +spherometers +spheroplast +spheroplasts +spherule +spherules +spherulite +spherulites +spherulitic +sphery +sphincter +sphincteric +sphincters +sphinges +sphingid +sphingids +sphingosine +sphingosines +sphinx +sphinxes +sphinxlike +sphygmic +sphygmograph +sphygmographs +sphygmomanometer +sphygmomanometers +sphygmomanometries +sphygmomanometry +sphygmus +sphygmuses +spic +spica +spicae +spicas +spicate +spicated +spiccato +spiccatos +spice +spicebush +spicebushes +spiced +spiceless +spicer +spiceries +spicers +spicery +spices +spicey +spicier +spiciest +spicily +spiciness +spicinesses +spicing +spick +spicks +spics +spicula +spiculae +spicular +spiculation +spiculations +spicule +spicules +spiculum +spicy +spider +spiderier +spideriest +spiderish +spiderlike +spiders +spiderweb +spiderwebs +spiderwort +spiderworts +spidery +spied +spiegel +spiegeleisen +spiegeleisens +spiegels +spiel +spieled +spieler +spielers +spieling +spiels +spier +spiered +spiering +spiers +spies +spiff +spiffed +spiffier +spiffiest +spiffily +spiffiness +spiffinesses +spiffing +spiffs +spiffy +spigot +spigots +spik +spike +spiked +spikelet +spikelets +spikelike +spikenard +spikenards +spiker +spikers +spikes +spikey +spikier +spikiest +spikily +spikiness +spikinesses +spiking +spiks +spiky +spile +spiled +spiles +spilikin +spilikins +spiling +spilings +spill +spillable +spillage +spillages +spilled +spiller +spillers +spillikin +spillikins +spilling +spillover +spillovers +spills +spillway +spillways +spilt +spilth +spilths spin +spinach +spinaches +spinachlike +spinachy +spinage +spinages +spinal +spinally +spinals +spinate +spindle +spindled +spindler +spindlers +spindles +spindlier +spindliest +spindling +spindly +spindrift +spindrifts +spine +spined +spinel +spineless +spinelessly +spinelessness +spinelessnesses +spinelike +spinelle +spinelles +spinels +spines +spinet +spinets +spinier +spiniest +spinifex +spinifexes +spininess +spininesses +spinless +spinnaker +spinnakers +spinner +spinneret +spinnerets +spinnerette +spinnerettes +spinneries +spinners +spinnery +spinney +spinneys +spinnies +spinning +spinnings +spinny +spinoff +spinoffs +spinor +spinors +spinose +spinosities +spinosity +spinous +spinout +spinouts +spins +spinster +spinsterhood +spinsterhoods +spinsterish +spinsterly +spinsters +spinthariscope +spinthariscopes +spinto +spintos +spinula +spinulae +spinule +spinules +spinulose +spiny +spiracle +spiracles +spiracular +spiraea +spiraeas +spiral +spiraled +spiraling +spiralled +spiralling +spirally +spirals +spirant +spirants +spire +spirea +spireas +spired +spirem +spireme +spiremes +spirems +spires +spirier +spiriest +spirilla +spirillum +spiring spirit +spirited +spiritedly +spiritedness +spiritednesses +spiriting +spiritism +spiritisms +spiritist +spiritistic +spiritists +spiritless +spiritlessly +spiritlessness +spiritlessnesses +spiritoso +spiritous +spirits spiritual +spiritualism +spiritualisms +spiritualist +spiritualistic +spiritualists +spiritualities +spirituality +spiritualization +spiritualizations +spiritualize +spiritualized +spiritualizes +spiritualizing +spiritually +spiritualness +spiritualnesses +spirituals +spiritualties +spiritualty +spirituel +spirituelle +spirituous +spirochaete +spirochaetes +spirochetal +spirochete +spirochetes +spirochetoses +spirochetosis +spirogyra +spirogyras +spiroid +spirometer +spirometers +spirometric +spirometries +spirometry +spirt +spirted +spirting +spirts +spirula +spirulae +spirulas +spiry spit +spital +spitals +spitball +spitballs +spite +spited +spiteful +spitefuller +spitefullest +spitefully +spitefulness +spitefulnesses +spites +spitfire +spitfires +spiting +spits +spitted +spitter +spitters +spitting +spittle +spittlebug +spittlebugs +spittles +spittoon +spittoons +spitz +spitzes +spiv +spivs +splake +splakes +splanchnic +splash +splashboard +splashboards +splashdown +splashdowns +splashed +splasher +splashers +splashes +splashier +splashiest +splashily +splashiness +splashinesses +splashing +splashy +splat +splats +splatted +splatter +splattered +splattering +splatters +splatting +splay +splayed +splayfeet +splayfoot +splayfooted +splaying +splays +spleen +spleenful +spleenier +spleeniest +spleens +spleenwort +spleenworts +spleeny +splendent splendid +splendider +splendidest +splendidly +splendidness +splendidnesses +splendiferous +splendiferously +splendiferousness +splendiferousnesses +splendor +splendorous +splendors +splendour +splendours +splendrous +splenectomies +splenectomize +splenectomized +splenectomizes +splenectomizing +splenectomy +splenetic +splenetically +splenetics +splenia +splenial +splenic +splenii +splenium +splenius +splenomegalies +splenomegaly +splent +splents +spleuchan +spleuchans +splice +spliced +splicer +splicers +splices +splicing +spliff +spliffs +spline +splined +splines +splining +splint +splinted +splinter +splintered +splintering +splinters +splintery +splinting +splints split +splits +splitter +splitters +splitting +splodge +splodged +splodges +splodging +splore +splores +splosh +sploshed +sploshes +sploshing +splotch +splotched +splotches +splotchier +splotchiest +splotching +splotchy +splurge +splurged +splurger +splurgers +splurges +splurgier +splurgiest +splurging +splurgy +splutter +spluttered +splutterer +splutterers +spluttering +splutters +spluttery +spode +spodes +spodumene +spodumenes +spoil +spoilable +spoilage +spoilages +spoiled +spoiler +spoilers +spoiling +spoils +spoilsman +spoilsmen +spoilsport +spoilsports +spoilt +spoke +spoked spoken +spokes +spokeshave +spokeshaves spokesman +spokesmanship +spokesmanships +spokesmen +spokespeople +spokesperson +spokespersons spokeswoman +spokeswomen +spoking +spoliate +spoliated +spoliates +spoliating +spoliation +spoliations +spoliator +spoliators +spondaic +spondaics +spondee +spondees +spondylites +spondylitides +spondylitis +spondylitises +sponge +sponged +sponger +spongers +sponges +spongeware +spongewares +spongier +spongiest +spongily +spongin +sponginess +sponginesses +sponging +spongins +spongy +sponsal +sponsion +sponsions +sponson +sponsons sponsor +sponsored +sponsorial +sponsoring +sponsors +sponsorship +sponsorships +spontaneities +spontaneity +spontaneous +spontaneously +spontaneousness +spontaneousnesses +spontoon +spontoons +spoof +spoofed +spoofer +spooferies +spoofers +spoofery +spoofing +spoofs +spoofy +spook +spooked +spookeries +spookery +spookier +spookiest +spookily +spookiness +spookinesses +spooking +spookish +spooks +spooky +spool +spooled +spooling +spoolings +spools spoon +spoonbill +spoonbills +spooned +spoonerism +spoonerisms +spooney +spooneys spoonful +spoonfuls +spoonier +spoonies +spooniest +spoonily +spooning +spoons +spoonsful +spoony +spoor +spoored +spooring +spoors +sporadic +sporadically +sporal +sporangia +sporangial +sporangiophore +sporangiophores +sporangium +spore +spored +spores +sporicidal +sporicide +sporicides +sporing +sporocarp +sporocarps +sporocyst +sporocysts +sporogeneses +sporogenesis +sporogenic +sporogenous +sporogonia +sporogonic +sporogonies +sporogonium +sporogony +sporoid +sporophore +sporophores +sporophyll +sporophylls +sporophyte +sporophytes +sporophytic +sporopollenin +sporopollenins +sporotrichoses +sporotrichosis +sporotrichosises +sporozoa +sporozoan +sporozoans +sporozoite +sporozoites +sporozoon +sporran +sporrans sport +sported +sporter +sporters +sportfisherman +sportfishermen +sportfishing +sportfishings +sportful +sportfully +sportfulness +sportfulnesses +sportier +sportiest +sportif +sportily +sportiness +sportinesses +sporting +sportingly +sportive +sportively +sportiveness +sportivenesses +sports +sportscast +sportscaster +sportscasters +sportscasting +sportscastings +sportscasts +sportsman +sportsmanlike +sportsmanly +sportsmanship +sportsmanships +sportsmen +sportswear +sportswoman +sportswomen +sportswriter +sportswriters +sportswriting +sportswritings +sporty +sporular +sporulate +sporulated +sporulates +sporulating +sporulation +sporulations +sporulative +sporule +sporules spot +spotless +spotlessly +spotlessness +spotlessnesses +spotlight +spotlighted +spotlighting +spotlights +spotlit +spots +spottable +spotted +spotter +spotters +spottier +spottiest +spottily +spottiness +spottinesses +spotting +spotty +spousal +spousals +spouse +spoused +spouses +spousing +spout +spouted +spouter +spouters +spouting +spouts +sprachgefuhl +sprachgefuhls +spraddle +spraddled +spraddles +spraddling +sprag +sprags +sprain +sprained +spraining +sprains +sprang +sprangs +sprat +sprats +sprattle +sprattled +sprattles +sprattling +sprawl +sprawled +sprawler +sprawlers +sprawlier +sprawliest +sprawling +sprawls +sprawly spray +sprayed +sprayer +sprayers +spraying +sprays spread +spreadabilities +spreadability +spreadable +spreader +spreaders +spreading +spreads +spreadsheet +spreadsheets +spree +sprees +sprent +sprier +spriest +sprig +sprigged +sprigger +spriggers +spriggier +spriggiest +sprigging +spriggy +spright +sprightful +sprightfully +sprightfulness +sprightfulnesses +sprightlier +sprightliest +sprightliness +sprightlinesses +sprightly +sprights +sprigs spring +springal +springald +springalds +springals +springboard +springboards +springbok +springboks +springe +springed +springeing +springer +springers +springes +springhead +springheads +springhouse +springhouses +springier +springiest +springily +springiness +springinesses +springing +springings +springlike +springs +springtail +springtails +springtide +springtides +springtime +springtimes +springwater +springwaters +springwood +springwoods +springy +sprinkle +sprinkled +sprinkler +sprinklered +sprinklers +sprinkles +sprinkling +sprinklings +sprint +sprinted +sprinter +sprinters +sprinting +sprints +sprit +sprite +sprites +sprits +spritsail +spritsails +spritz +spritzed +spritzer +spritzers +spritzes +spritzing +sprocket +sprockets +sprout +sprouted +sprouting +sprouts +spruce +spruced +sprucely +spruceness +sprucenesses +sprucer +spruces +sprucest +sprucier +spruciest +sprucing +sprucy +sprue +sprues +sprug +sprugs +sprung +spry +spryer +spryest +spryly +spryness +sprynesses +spud +spudded +spudder +spudders +spudding +spuds +spue +spued +spues +spuing +spume +spumed +spumes +spumier +spumiest +spuming +spumone +spumones +spumoni +spumonis +spumous +spumy +spun +spunbonded +spunk +spunked +spunkie +spunkier +spunkies +spunkiest +spunkily +spunkiness +spunkinesses +spunking +spunks +spunky +spur +spurgall +spurgalled +spurgalling +spurgalls +spurge +spurges +spurious +spuriously +spuriousness +spuriousnesses +spurn +spurned +spurner +spurners +spurning +spurns +spurred +spurrer +spurrers +spurrey +spurreys +spurrier +spurriers +spurries +spurring +spurry +spurs +spurt +spurted +spurting +spurtle +spurtles +spurts +sputa +sputnik +sputniks +sputter +sputtered +sputterer +sputterers +sputtering +sputters +sputum spy +spyglass +spyglasses +spying +spymaster +spymasters +squab +squabbier +squabbiest +squabble +squabbled +squabbler +squabblers +squabbles +squabbling +squabby +squabs +squad +squadded +squadding +squadron +squadroned +squadroning +squadrons +squads +squalene +squalenes +squalid +squalider +squalidest +squalidly +squalidness +squalidnesses +squall +squalled +squaller +squallers +squallier +squalliest +squalling +squalls +squally +squalor +squalors +squama +squamae +squamate +squamation +squamations +squamosal +squamosals +squamose +squamous +squamulose +squander +squandered +squanderer +squanderers +squandering +squanders square +squared +squarely +squareness +squarenesses +squarer +squarers +squares +squarest +squaring +squarish +squarishly +squarishness +squarishnesses +squash +squashed +squasher +squashers +squashes +squashier +squashiest +squashily +squashiness +squashinesses +squashing +squashy +squat +squatly +squatness +squatnesses +squats +squatted +squatter +squattered +squattering +squatters +squattest +squattier +squattiest +squatting +squatty +squaw +squawfish +squawfishes +squawk +squawked +squawker +squawkers +squawking +squawks +squawroot +squawroots +squaws +squeak +squeaked +squeaker +squeakers +squeakier +squeakiest +squeaking +squeaks +squeaky +squeal +squealed +squealer +squealers +squealing +squeals +squeamish +squeamishly +squeamishness +squeamishnesses +squeegee +squeegeed +squeegeeing +squeegees +squeezabilities +squeezability +squeezable squeeze +squeezed +squeezer +squeezers +squeezes +squeezing +squeg +squegged +squegging +squegs +squelch +squelched +squelcher +squelchers +squelches +squelchier +squelchiest +squelching +squelchy +squeteague +squib +squibbed +squibbing +squibs +squid +squidded +squidding +squids +squiffed +squiffier +squiffiest +squiffy +squiggle +squiggled +squiggles +squigglier +squiggliest +squiggling +squiggly +squilgee +squilgeed +squilgeeing +squilgees +squill +squilla +squillae +squillas +squills +squinch +squinched +squinches +squinching +squinnied +squinnier +squinnies +squinniest +squinny +squinnying +squint +squinted +squinter +squinters +squintest +squintier +squintiest +squinting +squintingly +squints +squinty +squirarchies +squirarchy +squire +squirearchies +squirearchy +squired +squireen +squireens +squires +squiring +squirish +squirm +squirmed +squirmer +squirmers +squirmier +squirmiest +squirming +squirms +squirmy squirrel +squirreled +squirreling +squirrelled +squirrelling +squirrelly +squirrels +squirt +squirted +squirter +squirters +squirting +squirts +squish +squished +squishes +squishier +squishiest +squishiness +squishinesses +squishing +squishy +squoosh +squooshed +squooshes +squooshier +squooshiest +squooshing +squooshy +squush +squushed +squushes +squushing +sraddha +sraddhas +sradha +sradhas +sri +sris +stab +stabbed +stabber +stabbers +stabbing +stabbings +stabile +stabiles +stabilities +stability +stabilization +stabilizations +stabilize +stabilized +stabilizer +stabilizers +stabilizes +stabilizing stable +stabled +stableman +stablemate +stablemates +stablemen +stableness +stablenesses +stabler +stablers +stables +stablest +stabling +stablings +stablish +stablished +stablishes +stablishing +stablishment +stablishments +stably +stabs +staccati +staccato +staccatos +stack +stackable +stacked +stacker +stackers +stacking +stacks +stackup +stackups +stacte +stactes +staddle +staddles +stade +stades +stadia +stadias stadium +stadiums +stadtholder +stadtholderate +stadtholderates +stadtholders +stadtholdership +stadtholderships staff +staffed +staffer +staffers +staffing +staffs +stag stage +stageable +stagecoach +stagecoaches +stagecraft +stagecrafts +staged +stageful +stagefuls +stagehand +stagehands +stagelike +stager +stagers +stages +stagestruck +stagey +stagflation +stagflationary +stagflations +staggard +staggards +staggart +staggarts +stagged +stagger +staggerbush +staggerbushes +staggered +staggerer +staggerers +staggering +staggeringly +staggers +staggery +staggie +staggier +staggies +staggiest +stagging +staggy +staghound +staghounds +stagier +stagiest +stagily +staginess +staginesses +staging +stagings +stagnancies +stagnancy +stagnant +stagnantly +stagnate +stagnated +stagnates +stagnating +stagnation +stagnations +stags +stagy +staid +staider +staidest +staidly +staidness +staidnesses +staig +staigs stain +stainabilities +stainability +stainable +stained +stainer +stainers +staining stainless +stainlesses +stainlessly +stainproof +stains stair +staircase +staircases +stairs +stairway +stairways +stairwell +stairwells +staithe +staithes +stake +staked +stakeholder +stakeholders +stakeout +stakeouts +stakes +staking +stalactite +stalactites +stalactitic +stalag +stalagmite +stalagmites +stalagmitic +stalags +stale +staled +stalely +stalemate +stalemated +stalemates +stalemating +staleness +stalenesses +staler +stales +stalest +staling +stalk +stalked +stalker +stalkers +stalkier +stalkiest +stalkily +stalking +stalkless +stalks +stalky +stall +stalled +stallholder +stallholders +stalling +stallion +stallions +stalls +stalwart +stalwartly +stalwartness +stalwartnesses +stalwarts +stalworth +stalworths +stamen +stamens +stamina +staminal +staminas +staminate +staminodia +staminodium +stammel +stammels +stammer +stammered +stammerer +stammerers +stammering +stammers stamp +stamped +stampede +stampeded +stampeder +stampeders +stampedes +stampeding +stamper +stampers +stamping +stampless +stamps +stance +stances +stanch +stanched +stancher +stanchers +stanches +stanchest +stanching +stanchion +stanchioned +stanchions +stanchly stand standard +standardbred +standardbreds +standardise +standardised +standardises +standardising +standardization +standardizations +standardize +standardized +standardizes +standardizing +standardless +standardly +standards +standaway +standby +standbys +standee +standees +stander +standers +standing +standings +standish +standishes +standoff +standoffish +standoffishly +standoffishness +standoffishnesses +standoffs +standout +standouts +standpat +standpatter +standpatters +standpattism +standpattisms +standpipe +standpipes +standpoint +standpoints +stands +standstill +standstills +standup +stane +staned +stanes +stang +stanged +stanging +stangs +stanhope +stanhopes +stanine +stanines +staning +stank +stanks +stannaries +stannary +stannic +stannite +stannites +stannous +stannum +stannums +stanza +stanzaed +stanzaic +stanzas +stapedectomies +stapedectomy +stapedes +stapedial +stapelia +stapelias +stapes +staph +staphs +staphylinid +staphylinids +staphylococcal +staphylococci +staphylococcic +staphylococcus +staple +stapled +stapler +staplers +staples +stapling star +starboard +starboarded +starboarding +starboards +starch +starched +starches +starchier +starchiest +starchily +starchiness +starchinesses +starching +starchy +stardom +stardoms +stardust +stardusts stare +stared +starer +starers +stares +starets +starfish +starfishes +starflower +starflowers +starfruit +starfruits +stargaze +stargazed +stargazer +stargazers +stargazes +stargazing +stargazings +staring +stark +starker +starkers +starkest +starkly +starkness +starknesses +starless +starlet +starlets +starlight +starlights +starlike +starling +starlings +starlit +starnose +starnoses +starred +starrier +starriest +starring +starry +stars +starship +starships +starstruck start +started +starter +starters +starting +startle +startled +startlement +startlements +startler +startlers +startles +startling +startlingly +starts +startsy +startup +startups starvation +starvations starve +starved +starveling +starvelings +starver +starvers +starves +starving +starwort +starworts +stases +stash +stashed +stashes +stashing +stasima +stasimon +stasis +stat +statable +statal +statant state +stateable +statecraft +statecrafts +stated +statedly +statehood +statehoods +statehouse +statehouses +stateless +statelessness +statelessnesses +statelier +stateliest +stateliness +statelinesses +stately statement +statements +stater +stateroom +staterooms +staters +states +stateside statesman -stateswoman +statesmanlike +statesmanly +statesmanship +statesmanships +statesmen +statewide +static +statical +statically +statice +statices +staticky +statics +stating station +stational +stationary +stationed +stationer +stationeries +stationers +stationery +stationing +stationmaster +stationmasters +stations +statism +statisms +statist +statistic +statistical +statistically +statistician +statisticians statistics +statists +stative +statives +statoblast +statoblasts +statocyst +statocysts +statolith +statoliths +stator +stators +statoscope +statoscopes +stats +statuaries +statuary statue +statued +statues +statuesque +statuesquely +statuette +statuettes +stature +statures status +statuses +statusy +statutable +statute +statutes +statutorily +statutory +staumrel +staumrels +staunch +staunched +stauncher +staunches +staunchest +staunching +staunchly +staunchness +staunchnesses +staurolite +staurolites +staurolitic +stave +staved +staves +stavesacre +stavesacres +staving +staw stay +stayed +stayer +stayers +staying +stays +staysail +staysails +stead +steaded +steadfast +steadfastly +steadfastness +steadfastnesses +steadied +steadier +steadiers +steadies +steadiest +steadily +steadiness +steadinesses +steading +steadings +steads steady +steadying steak +steakhouse +steakhouses +steaks steal +stealable +stealage +stealages +stealer +stealers +stealing +stealings +steals +stealth +stealthier +stealthiest +stealthily +stealthiness +stealthinesses +stealths +stealthy steam +steamboat +steamboats +steamed +steamer +steamered +steamering +steamers +steamfitter +steamfitters +steamier +steamiest +steamily +steaminess +steaminesses +steaming +steamroll +steamrolled +steamroller +steamrollered +steamrollering +steamrollers +steamrolling +steamrolls +steams +steamship +steamships +steamy +steapsin +steapsins +stearate +stearates +stearic +stearin +stearine +stearines +stearins +steatite +steatites +steatitic +steatopygia +steatopygias +steatopygic +steatopygous +steatorrhea +steatorrheas +stedfast +steed +steeds +steek +steeked +steeking +steeks steel +steeled +steelhead +steelheads +steelie +steelier +steelies +steeliest +steeliness +steelinesses +steeling +steelmaker +steelmakers +steelmaking +steelmakings +steels +steelwork +steelworker +steelworkers +steelworks +steely +steelyard +steelyards +steenbok +steenboks steep +steeped +steepen +steepened +steepening +steepens +steeper +steepers +steepest +steeping +steepish +steeple +steeplebush +steeplebushes +steeplechase +steeplechaser +steeplechasers +steeplechases +steeplechasing +steeplechasings +steepled +steeplejack +steeplejacks +steeples +steeply +steepness +steepnesses +steeps +steer +steerable +steerage +steerages +steerageway +steerageways +steered +steerer +steerers +steering +steers +steersman +steersmen +steeve +steeved +steeves +steeving +steevings +stegodon +stegodons +stegosaur +stegosaurs +stegosaurus +stegosauruses +stein +steinbok +steinboks +steins +stela +stelae +stelai +stelar +stele +stelene +steles +stelic +stella +stellar +stellas +stellate +stellified +stellifies +stellify +stellifying +stem +stemless +stemlike +stemma +stemmas +stemmata +stemmatic +stemmed +stemmer +stemmeries +stemmers +stemmery +stemmier +stemmiest +stemming +stemmy +stems +stemson +stemsons +stemware +stemwares +stench +stenches +stenchful +stenchier +stenchiest +stenchy +stencil +stenciled +stenciler +stencilers +stenciling +stencilled +stenciller +stencillers +stencilling +stencils +stengah +stengahs +steno +stenobathic +stenographer +stenographers +stenographic +stenographically +stenographies +stenography +stenohaline +stenokies +stenoky +stenos +stenosed +stenoses +stenosis +stenotherm +stenothermal +stenotherms +stenotic +stenotopic +stenotype +stenotyped +stenotypes +stenotypies +stenotyping +stenotypist +stenotypists +stenotypy +stentor +stentorian +stentors step +stepbrother +stepbrothers +stepchild +stepchildren +stepdame +stepdames +stepdaughter +stepdaughters +stepfamilies +stepfamily +stepfather +stepfathers +stephanotis +stephanotises +stepladder +stepladders +steplike +stepmother +stepmothers +stepparent +stepparenting +stepparentings +stepparents +steppe +stepped +stepper +steppers +steppes +stepping +steps +stepsister +stepsisters +stepson +stepsons +stepwise +stercoraceous +stere +stereo +stereochemical +stereochemistries +stereochemistry +stereoed +stereogram +stereograms +stereograph +stereographed +stereographic +stereographies +stereographing +stereographs +stereography +stereoing +stereoisomer +stereoisomeric +stereoisomerism +stereoisomerisms +stereoisomers +stereological +stereologically +stereologies +stereology +stereomicroscope +stereomicroscopes +stereomicroscopic +stereomicroscopically +stereophonic +stereophonically +stereophonies +stereophony +stereophotographic +stereophotographies +stereophotography +stereopses +stereopsides +stereopsis +stereopticon +stereopticons +stereoregular +stereoregularities +stereoregularity +stereos +stereoscope +stereoscopes +stereoscopic +stereoscopically +stereoscopies +stereoscopy +stereospecific +stereospecifically +stereospecificities +stereospecificity +stereotactic +stereotaxic +stereotaxically +stereotype +stereotyped +stereotyper +stereotypers +stereotypes +stereotypic +stereotypical +stereotypically +stereotypies +stereotyping +stereotypy +steres +steric +sterical +sterically +sterigma +sterigmas +sterigmata +sterilant +sterilants +sterile +sterilely +sterilities +sterility +sterilization +sterilizations +sterilize +sterilized +sterilizer +sterilizers +sterilizes +sterilizing +sterlet +sterlets +sterling +sterlingly +sterlingness +sterlingnesses +sterlings +stern +sterna +sternal +sterner +sternest +sternforemost +sternite +sternites +sternly +sternmost +sternness +sternnesses +sternocostal +sternpost +sternposts +sterns +sternson +sternsons +sternum +sternums +sternutation +sternutations +sternutator +sternutators +sternward +sternwards +sternway +sternways +steroid +steroidal +steroidogeneses +steroidogenesis +steroidogenic +steroids +sterol +sterols +stertor +stertorous +stertorously +stertors +stet +stethoscope +stethoscopes +stethoscopic +stets +stetted +stetting +stevedore +stevedored +stevedores +stevedoring +stew steward +stewarded stewardess +stewardesses +stewarding +stewards +stewardship +stewardships +stewbum +stewbums +stewed +stewing +stewpan +stewpans +stews +stey +sthenia +sthenias +sthenic +stibial +stibine +stibines +stibium +stibiums +stibnite +stibnites +stich +stichic +stichomythia +stichomythias +stichomythic +stichomythies +stichomythy +stichs stick +stickball +stickballs +sticked +sticker +stickers +stickful +stickfuls +stickhandle +stickhandled +stickhandler +stickhandlers +stickhandles +stickhandling +stickier +stickiest +stickily +stickiness +stickinesses +sticking +stickit +stickle +stickleback +sticklebacks +stickled +stickler +sticklers +stickles +sticklike +stickling +stickman +stickmen +stickout +stickouts +stickpin +stickpins +sticks +stickseed +stickseeds +sticktight +sticktights +stickum +stickums +stickup +stickups +stickweed +stickweeds +stickwork +stickworks +sticky +stiction +stictions +stied +sties +stiff +stiffed +stiffen +stiffened +stiffener +stiffeners +stiffening +stiffens +stiffer +stiffest +stiffing +stiffish +stiffly +stiffness +stiffnesses +stiffs +stifle +stifled +stifler +stiflers +stifles +stifling +stiflingly +stigma +stigmal +stigmas +stigmasterol +stigmasterols +stigmata +stigmatic +stigmatically +stigmatics +stigmatist +stigmatists +stigmatization +stigmatizations +stigmatize +stigmatized +stigmatizes +stigmatizing +stilbene +stilbenes +stilbestrol +stilbestrols +stilbite +stilbites +stile +stiles +stiletto +stilettoed +stilettoes +stilettoing +stilettos still +stillbirth +stillbirths +stillborn +stillborns +stilled +stiller +stillest +stillier +stilliest +stilling +stillman +stillmen +stillness +stillnesses +stillroom +stillrooms +stills +stilly +stilt +stilted +stiltedly +stiltedness +stiltednesses +stilting +stilts +stime +stimes +stimied +stimies +stimulant +stimulants +stimulate +stimulated +stimulates +stimulating +stimulation +stimulations +stimulative +stimulator +stimulators +stimulatory +stimuli +stimulus +stimy +stimying +sting +stingaree +stingarees +stinger +stingers +stingier +stingiest +stingily +stinginess +stinginesses +stinging +stingingly +stingless +stingo +stingos +stingray +stingrays +stings +stingy +stink +stinkard +stinkards +stinkbug +stinkbugs +stinker +stinkers +stinkhorn +stinkhorns +stinkier +stinkiest +stinking +stinkingly +stinko +stinkpot +stinkpots +stinks +stinkweed +stinkweeds +stinkwood +stinkwoods +stinky +stint +stinted +stinter +stinters +stinting +stints +stipe +stiped +stipel +stipels +stipend +stipendiaries +stipendiary +stipends +stipes +stipites +stipple +stippled +stippler +stipplers +stipples +stippling +stipular +stipulate +stipulated +stipulates +stipulating +stipulation +stipulations +stipulator +stipulators +stipulatory +stipule +stipuled +stipules +stir +stirabout +stirabouts +stirk +stirks +stirp +stirpes +stirps +stirred +stirrer +stirrers +stirring +stirringly +stirrup +stirrups +stirs +stitch +stitched +stitcher +stitcheries +stitchers +stitchery +stitches +stitching +stitchwort +stitchworts +stithied +stithies +stithy +stithying +stiver +stivers +stoa +stoae +stoai +stoas +stoat +stoats +stob +stobbed +stobbing +stobs +stoccado +stoccados +stoccata +stoccatas +stochastic +stochastically +stock +stockade +stockaded +stockades +stockading +stockbreeder +stockbreeders +stockbroker +stockbrokerage +stockbrokerages +stockbrokers +stockbroking +stockbrokings +stockcar +stockcars +stocked +stocker +stockers +stockfish +stockfishes +stockholder +stockholders +stockier +stockiest +stockily +stockiness +stockinesses +stockinet +stockinets +stockinette +stockinettes stocking +stockinged +stockings +stockish +stockist +stockists +stockjobber +stockjobbers +stockjobbing +stockjobbings +stockkeeper +stockkeepers +stockman +stockmen +stockpile +stockpiled +stockpiler +stockpilers +stockpiles +stockpiling +stockpot +stockpots +stockroom +stockrooms +stocks +stocktaking +stocktakings +stocky +stockyard +stockyards +stodge +stodged +stodges +stodgier +stodgiest +stodgily +stodginess +stodginesses +stodging +stodgy +stogey +stogeys +stogie +stogies +stogy +stoic +stoical +stoically +stoichiometric +stoichiometrically +stoichiometries +stoichiometry +stoicism +stoicisms +stoics +stoke +stoked +stokehold +stokeholds +stoker +stokers +stokes +stokesia +stokesias +stoking +stole +stoled +stolen +stoles +stolid +stolider +stolidest +stolidities +stolidity +stolidly +stollen +stollens +stolon +stolonic +stoloniferous +stolons +stolport +stolports +stoma stomach +stomachache +stomachaches +stomached +stomacher +stomachers +stomachic +stomachics +stomaching +stomachs +stomachy +stomal +stomas +stomata +stomatal +stomate +stomates +stomatic +stomatitides +stomatitis +stomatitises +stomatopod +stomatopods +stomodaea +stomodaeal +stomodaeum +stomodaeums +stomodea +stomodeal +stomodeum +stomodeums +stomp +stomped +stomper +stompers +stomping +stomps +stonable stone +stoneboat +stoneboats +stonechat +stonechats +stonecrop +stonecrops +stonecutter +stonecutters +stonecutting +stonecuttings +stoned +stonefish +stonefishes +stoneflies +stonefly +stonemason +stonemasonries +stonemasonry +stonemasons +stoner +stoners +stones +stonewall +stonewalled +stonewaller +stonewallers +stonewalling +stonewalls +stoneware +stonewares +stonewashed +stonework +stoneworks +stonewort +stoneworts +stoney +stonier +stoniest +stonily +stoniness +stoninesses +stoning +stonish +stonished +stonishes +stonishing +stony +stonyhearted +stood +stooge +stooged +stooges +stooging +stook +stooked +stooker +stookers +stooking +stooks +stool +stooled +stoolie +stoolies +stooling +stools +stoop +stoopball +stoopballs +stooped +stooper +stoopers +stooping +stoops stop +stopbank +stopbanks +stopcock +stopcocks +stope +stoped +stoper +stopers +stopes +stopgap +stopgaps +stoping +stoplight +stoplights +stopover +stopovers +stoppable +stoppage +stoppages +stopped +stopper +stoppered +stoppering +stoppers +stopping +stopple +stoppled +stopples +stoppling +stops +stopt +stopwatch +stopwatches +storable +storables storage +storages +storax +storaxes store +stored +storefront +storefronts +storehouse +storehouses +storekeeper +storekeepers +storeroom +storerooms +stores +storeship +storeships +storewide +storey +storeyed +storeys +storied +stories +storing +stork +storks +storksbill +storksbills storm +stormbound +stormed +stormier +stormiest +stormily +storminess +storminesses +storming +storms +stormy story +storyboard +storyboarded +storyboarding +storyboards +storybook +storybooks +storying +storyteller +storytellers +storytelling +storytellings +stoss +stotinka +stotinki +stound +stounded +stounding +stounds +stoup +stoups +stour +stoure +stoures +stourie +stours +stoury stout +stouten +stoutened +stoutening +stoutens +stouter +stoutest +stouthearted +stoutheartedly +stoutheartedness +stoutheartednesses +stoutish +stoutly +stoutness +stoutnesses +stouts stove +stovepipe +stovepipes +stover +stovers +stoves +stow +stowable +stowage +stowages +stowaway +stowaways +stowed +stowing +stowp +stowps +stows +strabismic +strabismus +strabismuses +straddle +straddled +straddler +straddlers +straddles +straddling +strafe +strafed +strafer +strafers +strafes +strafing +straggle +straggled +straggler +stragglers +straggles +stragglier +straggliest +straggling +straggly straight +straightaway +straightaways +straightbred +straightbreds +straighted +straightedge +straightedges +straighten +straightened +straightener +straighteners +straightening +straightens +straighter +straightest straightforward +straightforwardly +straightforwardness +straightforwardnesses +straightforwards +straighting +straightish +straightjacket +straightjacketed +straightjacketing +straightjackets +straightlaced +straightly +straightness +straightnesses +straights +straightway +strain +strained +strainer +strainers +straining +strains strait +straiten +straitened +straitening +straitens +straiter +straitest +straitjacket +straitjacketed +straitjacketing +straitjackets +straitlaced +straitlacedly +straitlacedness +straitlacednesses +straitly +straitness +straitnesses +straits +strake +straked +strakes +stramash +stramashes +stramonies +stramonium +stramoniums +stramony +strand +stranded +strandedness +strandednesses +strander +stranders +stranding +strandline +strandlines +strands +strang strange +strangely +strangeness +strangenesses stranger +strangered +strangering +strangers +strangest +strangle +strangled +stranglehold +strangleholds +strangler +stranglers +strangles +strangling +strangulate +strangulated +strangulates +strangulating +strangulation +strangulations +stranguries +strangury +strap +straphang +straphanger +straphangers +straphanging +straphangs +straphung +strapless +straplesses +strappado +strappadoes +strappados +strapped +strapper +strappers +strapping +strappings +straps +strass +strasses +strata +stratagem +stratagems +stratal +stratas +strategic +strategical +strategically +strategies +strategist +strategists +strategize +strategized +strategizes +strategizing +strategy +strath +straths +strathspey +strathspeys +strati +stratification +stratifications +stratified +stratifies +stratiform +stratify +stratifying +stratigraphic +stratigraphies +stratigraphy +stratocracies +stratocracy +stratocumuli +stratocumulus +stratosphere +stratospheres +stratospheric +stratous +stratovolcano +stratovolcanoes +stratovolcanos +stratum +stratums +stratus +stravage +stravaged +stravages +stravaging +stravaig +stravaiged +stravaiging +stravaigs straw +strawberries strawberry +strawed +strawflower +strawflowers +strawhat +strawier +strawiest +strawing +straws +strawy +stray +strayed +strayer +strayers +straying +strays +streak +streaked +streaker +streakers +streakier +streakiest +streakiness +streakinesses +streaking +streakings +streaks +streaky stream +streambed +streambeds +streamed +streamer +streamers +streamier +streamiest +streaming +streamings +streamlet +streamlets +streamline +streamlined +streamliner +streamliners +streamlines +streamlining +streams +streamside +streamsides +streamy +streek +streeked +streeker +streekers +streeking +streeks +streel +streeled +streeling +streels street +streetcar +streetcars +streetlamp +streetlamps +streetlight +streetlights +streets +streetscape +streetscapes +streetwalker +streetwalkers +streetwalking +streetwalkings +streetwise strength strengthen +strengthened +strengthener +strengtheners +strengthening +strengthens +strengths +strenuosities +strenuosity +strenuous +strenuously +strenuousness +strenuousnesses +strep +streps +streptobacilli +streptobacillus +streptococcal +streptococci +streptococcic +streptococcus +streptokinase +streptokinases +streptolysin +streptolysins +streptomyces +streptomycete +streptomycetes +streptomycin +streptomycins +streptothricin +streptothricins stress +stressed +stresses +stressful +stressfully +stressing +stressless +stresslessness +stresslessnesses +stressor +stressors +stretch +stretchabilities +stretchability +stretchable +stretched +stretcher +stretchers +stretches +stretchier +stretchiest +stretching +stretchy +stretta +strettas +strette +stretti +stretto +strettos +streusel +streusels +strew +strewed +strewer +strewers +strewing +strewment +strewments +strewn +strews +stria +striae +striate +striated +striates +striating +striation +striations +strick +stricken +strickle +strickled +strickles +strickling +stricks strict +stricter +strictest +strictly +strictness +strictnesses +stricture +strictures +stridden +stride +stridence +stridences +stridencies +stridency +strident +stridently +strider +striders +strides +striding +stridor +stridors +stridulate +stridulated +stridulates +stridulating +stridulation +stridulations +stridulatory +stridulous +stridulously +strife +strifeless +strifes +strigil +strigils +strigose strike +strikebound +strikebreaker +strikebreakers +strikebreaking +strikebreakings +strikeout +strikeouts +strikeover +strikeovers +striker +strikers +strikes +striking +strikingly string +stringcourse +stringcourses +stringed +stringencies +stringency +stringendo +stringent +stringently +stringer +stringers +stringhalt +stringhalted +stringhalts +stringier +stringiest +stringiness +stringinesses +stringing +stringings +stringless +stringpiece +stringpieces +strings +stringy +stringybark +stringybarks +strip +stripe +striped +stripeless +striper +stripers +stripes +stripier +stripiest +striping +stripings +stripling +striplings +strippable +stripped +stripper +strippers +stripping +strips +stript +striptease +stripteaser +stripteasers +stripteases +stripy +strive +strived +striven +striver +strivers +strives +striving +strobe +strobes +strobic +strobil +strobila +strobilae +strobilation +strobilations +strobile +strobiles +strobili +strobils +strobilus +stroboscope +stroboscopes +stroboscopic +stroboscopically +strobotron +strobotrons +strode +stroganoff +stroke +stroked +stroker +strokers +strokes +stroking +stroll +strolled +stroller +strollers +strolling +strolls +stroma +stromal +stromata +stromatolite +stromatolites +stromatolitic strong +strongbox +strongboxes +stronger +strongest +stronghold +strongholds +strongish +strongly +strongman +strongmen +strongyl +strongyle +strongyles +strongyloidiases +strongyloidiasis +strongyloidoses +strongyloidosis +strongyloidosises +strongyls +strontia +strontianite +strontianites +strontias +strontic +strontium +strontiums +strook +strop +strophanthin +strophanthins +strophe +strophes +strophic +stropped +stropper +stroppers +stroppier +stroppiest +stropping +stroppy +strops +stroud +strouding +stroudings +strouds +strove +strow +strowed +strowing +strown +strows +stroy +stroyed +stroyer +stroyers +stroying +stroys +struck +strucken +structural +structuralism +structuralisms +structuralist +structuralists +structuralization +structuralizations +structuralize +structuralized +structuralizes +structuralizing +structurally +structuration +structurations +structure +structured +structureless +structurelessness +structurelessnesses +structures +structuring +strudel +strudels struggle +struggled +struggler +strugglers +struggles +struggling +strum +struma +strumae +strumas +strummed +strummer +strummers +strumming +strumose +strumous +strumpet +strumpets +strums +strung +strunt +strunted +strunting +strunts +strut +struthious +struts +strutted +strutter +strutters +strutting +strychnine +strychnines +stub +stubbed +stubbier +stubbiest +stubbily +stubbing +stubble +stubbled +stubbles +stubblier +stubbliest +stubbly stubborn +stubborner +stubbornest +stubbornly +stubbornness +stubbornnesses +stubby +stubs +stucco +stuccoed +stuccoer +stuccoers +stuccoes +stuccoing +stuccos +stuccowork +stuccoworks +stuck +stud +studbook +studbooks +studded +studdie +studdies +studding +studdings student +students +studentship +studentships +studfish +studfishes +studhorse +studhorses +studied +studiedly +studiedness +studiednesses +studier +studiers +studies studio +studios +studious +studiously +studiousness +studiousnesses +studlier +studliest +studly +studs +studwork +studworks study +studying +stuff +stuffed +stuffer +stuffers +stuffier +stuffiest +stuffily +stuffiness +stuffinesses +stuffing +stuffings +stuffless +stuffs +stuffy +stuiver +stuivers +stull +stulls +stultification +stultifications +stultified +stultifies +stultify +stultifying +stum +stumble +stumblebum +stumblebums +stumbled +stumbler +stumblers +stumbles +stumbling +stumblingly +stummed +stumming +stump +stumpage +stumpages +stumped +stumper +stumpers +stumpier +stumpiest +stumping +stumps +stumpy +stums +stun +stung +stunk +stunned +stunner +stunners +stunning +stunningly +stuns +stunsail +stunsails +stunt +stunted +stuntedness +stuntednesses +stunting +stuntman +stuntmen +stunts +stuntwoman +stuntwomen +stupa +stupas +stupe +stupefaction +stupefactions +stupefied +stupefies +stupefy +stupefying +stupefyingly +stupendous +stupendously +stupendousness +stupendousnesses +stupes stupid +stupider +stupidest +stupidities +stupidity +stupidly +stupidness +stupidnesses +stupids +stupor +stuporous +stupors +sturdied +sturdier +sturdies +sturdiest +sturdily +sturdiness +sturdinesses +sturdy +sturgeon +sturgeons +sturt +sturts +stutter +stuttered +stutterer +stutterers +stuttering +stutters +sty +stye +styed +styes +stygian +stying +stylar +stylate style +stylebook +stylebooks +styled +styleless +stylelessness +stylelessnesses +styler +stylers +styles +stylet +stylets +styli +styliform +styling +stylings +stylise +stylised +styliser +stylisers +stylises +stylish +stylishly +stylishness +stylishnesses +stylising +stylist +stylistic +stylistically +stylistics +stylists +stylite +stylites +stylitic +stylization +stylizations +stylize +stylized +stylizer +stylizers +stylizes +stylizing +stylobate +stylobates +stylographies +stylography +styloid +stylopodia +stylopodium +stylus +styluses +stymie +stymied +stymieing +stymies +stymy +stymying +stypsis +stypsises +styptic +styptics +styrax +styraxes +styrene +styrenes +suabilities +suability +suable +suably +suasion +suasions +suasive +suasively +suasiveness +suasivenesses +suasory +suave +suavely +suaveness +suavenesses +suaver +suavest +suavities +suavity +sub +suba +subabbot +subabbots +subacid +subacidly +subacidness +subacidnesses +subacrid +subacute +subacutely +subadar +subadars +subadolescent +subadolescents +subadult +subadults +subaerial +subaerially +subagencies +subagency +subagent +subagents +subah +subahdar +subahdars +subahs +subalar +suballocation +suballocations +subalpine +subaltern +subalterns +subantarctic +subapical +subaquatic +subaqueous +subarachnoid +subarachnoidal +subarctic +subarctics +subarea +subareas +subarid +subas +subassemblies +subassembly +subatmospheric +subatom +subatomic +subatoms +subaudible +subaudition +subauditions +subaverage +subaxial +subbase +subbasement +subbasements +subbases +subbasin +subbasins +subbass +subbasses +subbed +subbing +subbings +subbituminous +subblock +subblocks +subbranch +subbranches +subbreed +subbreeds +subcabinet +subcapsular +subcaste +subcastes +subcategories +subcategorization +subcategorizations +subcategorize +subcategorized +subcategorizes +subcategorizing +subcategory +subcause +subcauses +subceiling +subceilings +subcell +subcellar +subcellars +subcells +subcellular +subcenter +subcenters +subcentral +subcentrally +subchapter +subchapters +subchaser +subchasers +subchief +subchiefs +subclan +subclans +subclass +subclassed +subclasses +subclassification +subclassifications +subclassified +subclassifies +subclassify +subclassifying +subclassing +subclavian +subclavians +subclerk +subclerks +subclimax +subclimaxes +subclinical +subclinically +subcluster +subclusters +subcode +subcodes +subcollection +subcollections +subcollege +subcolleges +subcollegiate +subcolonies +subcolony +subcommission +subcommissions +subcommittee +subcommittees +subcommunities +subcommunity +subcompact +subcompacts +subcomponent +subcomponents +subconscious +subconsciouses +subconsciously +subconsciousness +subconsciousnesses +subcontinent +subcontinental +subcontinents +subcontract +subcontracted +subcontracting +subcontractor +subcontractors +subcontracts +subcontraoctave +subcontraoctaves +subcontraries +subcontrary +subcool +subcooled +subcooling +subcools +subcordate +subcoriaceous +subcortical +subcounties +subcounty +subcritical +subcrustal +subcult +subcults +subcultural +subculturally +subculture +subcultured +subcultures +subculturing +subcurative +subcuratives +subcutaneous +subcutaneously +subcutes +subcutis +subcutises +subdeacon +subdeacons +subdean +subdeans +subdeb +subdebs +subdebutante +subdebutantes +subdecision +subdecisions +subdepartment +subdepartments +subdepot +subdepots +subdermal +subdermally +subdevelopment +subdevelopments +subdialect +subdialects +subdirector +subdirectors +subdiscipline +subdisciplines +subdistrict +subdistricted +subdistricting +subdistricts +subdividable +subdivide +subdivided +subdivider +subdividers +subdivides +subdividing +subdivision +subdivisions +subdominant +subdominants +subdual +subduals +subduce +subduced +subduces +subducing +subduct +subducted +subducting +subduction +subductions +subducts +subdue +subdued +subduedly +subduer +subduers +subdues +subduing +subdural +subecho +subechoes +subeconomies +subeconomy +subedit +subedited +subediting +subeditor +subeditorial +subeditors +subedits +subemployed +subemployment +subemployments +subentries +subentry +subepidermal +subepoch +subepochs +suber +suberect +suberic +suberin +suberins +suberise +suberised +suberises +suberising +suberization +suberizations +suberize +suberized +suberizes +suberizing +suberose +suberous +subers +subfamilies +subfamily +subfield +subfields +subfile +subfiles +subfix +subfixes +subfloor +subfloors +subfluid +subfossil +subfossils +subframe +subframes +subfreezing +subfusc +subgenera +subgeneration +subgenerations +subgenre +subgenres +subgenus +subgenuses +subglacial +subglacially +subgoal +subgoals +subgovernment +subgovernments +subgrade +subgrades +subgraph +subgraphs +subgroup +subgroups +subgum +subgums +subhead +subheading +subheadings +subheads +subhuman +subhumans +subhumid +subidea +subideas +subindex +subindexes +subindices +subindustries +subindustry +subinfeudate +subinfeudated +subinfeudates +subinfeudating +subinfeudation +subinfeudations +subinhibitory +subinterval +subintervals +subirrigate +subirrigated +subirrigates +subirrigating +subirrigation +subirrigations +subitem +subitems +subito +subjacencies +subjacency +subjacent +subjacently subject +subjected +subjecting +subjection +subjections subjective +subjectively +subjectiveness +subjectivenesses +subjectives +subjectivise +subjectivised +subjectivises +subjectivising +subjectivism +subjectivisms +subjectivist +subjectivistic +subjectivists +subjectivities +subjectivity +subjectivization +subjectivizations +subjectivize +subjectivized +subjectivizes +subjectivizing +subjectless +subjects +subjoin +subjoined +subjoining +subjoins +subjugate +subjugated +subjugates +subjugating +subjugation +subjugations +subjugator +subjugators +subjunction +subjunctions +subjunctive +subjunctives +subkingdom +subkingdoms +sublanguage +sublanguages +sublate +sublated +sublates +sublating +sublation +sublations +sublease +subleased +subleases +subleasing +sublet +sublethal +sublethally +sublets +subletting +sublevel +sublevels +sublibrarian +sublibrarians +sublicense +sublicensed +sublicenses +sublicensing +sublieutenant +sublieutenants +sublimable +sublimate +sublimated +sublimates +sublimating +sublimation +sublimations +sublime +sublimed +sublimely +sublimeness +sublimenesses +sublimer +sublimers +sublimes +sublimest +subliminal +subliminally +subliming +sublimities +sublimity +subline +sublines +sublingual +subliteracies +subliteracy +subliterary +subliterate +subliterature +subliteratures +sublittoral +sublittorals +sublot +sublots +sublunar +sublunary +subluxation +subluxations +submanager +submanagers +submandibular +submandibulars +submarginal +submarine +submarined +submariner +submariners +submarines +submarining +submarket +submarkets +submaxillaries +submaxillary +submaximal +submediant +submediants +submenu +submenus +submerge +submerged +submergence +submergences +submerges +submergible +submerging +submerse +submersed +submerses +submersible +submersibles +submersing +submersion +submersions +submetacentric +submetacentrics +submicrogram +submicron +submicroscopic +submicroscopically +submillimeter +subminiature +subminimal +subminister +subministers +submiss +submission +submissions +submissive +submissively +submissiveness +submissivenesses submit +submitochondrial +submits +submittal +submittals +submitted +submitting +submucosa +submucosae +submucosal +submucosas +submultiple +submultiples +submunition +submunitions +subnasal +subnational +subnet +subnets +subnetwork +subnetworks +subniche +subniches +subnodal +subnormal +subnormalities +subnormality +subnormally +subnuclear +suboceanic +suboptic +suboptimal +suboptimization +suboptimizations +suboptimize +suboptimized +suboptimizes +suboptimizing +suboptimum +suboral +suborbicular +suborbital +suborder +suborders +subordinate +subordinated +subordinately +subordinateness +subordinatenesses +subordinates +subordinating +subordination +subordinations +subordinative +subordinator +subordinators +suborganization +suborganizations +suborn +subornation +subornations +suborned +suborner +suborners +suborning +suborns +suboval +subovate +suboxide +suboxides +subpanel +subpanels +subpar +subparagraph +subparagraphs +subparallel +subpart +subparts +subpena +subpenaed +subpenaing +subpenas +subperiod +subperiods +subphase +subphases +subphyla +subphylum +subplot +subplots +subpoena +subpoenaed +subpoenaing +subpoenas +subpolar +subpopulation +subpopulations +subpotencies +subpotency +subpotent +subprimate +subprimates +subprincipal +subprincipals +subproblem +subproblems +subprocess +subprocesses +subproduct +subproducts +subprofessional +subprofessionals +subprogram +subprograms +subproject +subprojects +subproletariat +subproletariats +subpubic +subrace +subraces +subrational +subregion +subregional +subregions +subrent +subrents +subreption +subreptions +subreptitious +subreptitiously +subring +subrings +subrogate +subrogated +subrogates +subrogating +subrogation +subrogations +subroutine +subroutines +subrule +subrules +subs +subsale +subsales +subsample +subsampled +subsamples +subsampling +subsatellite +subsatellites +subsaturated +subsaturation +subsaturations +subscale +subscales +subscience +subsciences subscribe +subscribed +subscriber +subscribers +subscribes +subscribing +subscript +subscription +subscriptions +subscripts +subsea +subsecretaries +subsecretary +subsect +subsection +subsections +subsector +subsectors +subsects +subsegment +subsegments +subseizure +subseizures +subsense +subsenses +subsentence +subsentences +subsequence +subsequences +subsequent +subsequently +subsequents +subsere +subseres +subseries +subserve +subserved +subserves +subservience +subserviences +subserviencies +subserviency +subservient +subserviently +subserving +subset +subsets +subshaft +subshafts +subshell +subshells +subshrub +subshrubs +subside +subsided +subsidence +subsidences +subsider +subsiders +subsides +subsidiaries +subsidiarily +subsidiarities +subsidiarity +subsidiary +subsidies +subsiding +subsidise +subsidised +subsidises +subsidising +subsidization +subsidizations +subsidize +subsidized +subsidizer +subsidizers +subsidizes +subsidizing +subsidy +subsist +subsisted +subsistence +subsistences +subsistent +subsisting +subsists +subsite +subsites +subskill +subskills +subsocial +subsocieties +subsociety +subsoil +subsoiled +subsoiler +subsoilers +subsoiling +subsoils +subsolar +subsonic +subsonically +subspace +subspaces +subspecialist +subspecialists +subspecialize +subspecialized +subspecializes +subspecializing +subspecialties +subspecialty +subspecies +subspecific +substage +substages +substance +substanceless +substances +substandard +substantial +substantialities +substantiality +substantially +substantialness +substantialnesses +substantials +substantiate +substantiated +substantiates +substantiating +substantiation +substantiations +substantiative +substantival +substantivally +substantive +substantively +substantiveness +substantivenesses +substantives +substantivize +substantivized +substantivizes +substantivizing +substate +substates +substation +substations +substituent +substituents +substitutabilities +substitutability +substitutable substitute +substituted +substitutes +substituting +substitution +substitutional +substitutionally +substitutionary +substitutions +substitutive +substitutively +substrata +substrate +substrates +substratum +substructural +substructure +substructures +subsumable +subsume +subsumed +subsumes +subsuming +subsumption +subsumptions +subsurface +subsurfaces +subsystem +subsystems +subtask +subtasks +subtaxa +subtaxon +subtaxons +subteen +subteens +subtemperate +subtenancies +subtenancy +subtenant +subtenants +subtend +subtended +subtending +subtends +subterfuge +subterfuges +subterminal +subterranean +subterraneanly +subterraneous +subterraneously +subtest +subtests +subtext +subtexts +subtextual +subtheme +subthemes +subtherapeutic +subthreshold +subtile +subtilely +subtileness +subtilenesses +subtiler +subtilest +subtilin +subtilins +subtilisin +subtilisins +subtilization +subtilizations +subtilize +subtilized +subtilizes +subtilizing +subtilties +subtilty +subtitle +subtitled +subtitles +subtitling +subtle +subtleness +subtlenesses +subtler +subtlest +subtleties +subtlety +subtly +subtone +subtones +subtonic +subtonics +subtopia +subtopias +subtopic +subtopics +subtotal +subtotaled +subtotaling +subtotalled +subtotalling +subtotally +subtotals +subtract +subtracted +subtracter +subtracters +subtracting +subtraction +subtractions +subtractive +subtracts +subtrahend +subtrahends +subtreasuries +subtreasury +subtrend +subtrends +subtribe +subtribes +subtropic +subtropical +subtropics +subtunic +subtunics +subtype +subtypes +subulate +subumbrella +subumbrellas +subunit +subunits +suburb +suburban +suburbanise +suburbanised +suburbanises +suburbanising +suburbanite +suburbanites +suburbanization +suburbanizations +suburbanize +suburbanized +suburbanizes +suburbanizing +suburbans +suburbed +suburbia +suburbias +suburbs +subvarieties +subvariety +subvassal +subvassals +subvene +subvened +subvenes +subvening +subvention +subventionary +subventions +subversion +subversionary +subversions +subversive +subversively +subversiveness +subversivenesses +subversives +subvert +subverted +subverter +subverters +subverting +subverts +subvicar +subvicars +subviral +subvisible +subvisual +subvocal +subvocalization +subvocalizations +subvocalize +subvocalized +subvocalizes +subvocalizing +subvocally +subway +subwayed +subwaying +subways +subworld +subworlds +subwriter +subwriters +subzero +subzone +subzones +succah +succahs +succedanea +succedaneous +succedaneum +succedaneums +succedent succeed +succeeded +succeeder +succeeders +succeeding +succeeds success +successes successful +successfully +successfulness +successfulnesses +succession +successional +successionally +successions +successive +successively +successiveness +successivenesses +successor +successors +succinate +succinates +succinct +succincter +succinctest +succinctly +succinctness +succinctnesses +succinic +succinyl +succinylcholine +succinylcholines +succinyls +succor +succored +succorer +succorers +succories +succoring +succors +succory +succotash +succotashes +succoth +succour +succoured +succouring +succours +succuba +succubae +succubi +succubus +succubuses +succulence +succulences +succulent +succulently +succulents +succumb +succumbed +succumbing +succumbs +succuss +succussed +succusses +succussing such +suchlike +suchness +suchnesses suck +sucked +sucker +suckered +suckering +suckers +suckfish +suckfishes +sucking +suckle +suckled +suckler +sucklers +suckles +suckless +suckling +sucklings +sucks +sucrase +sucrases +sucre +sucres +sucrose +sucroses +suction +suctional +suctioned +suctioning +suctions +suctorial +suctorian +suctorians +sudaria +sudaries +sudarium +sudary +sudation +sudations +sudatoria +sudatories +sudatorium +sudatoriums +sudatory +sudd sudden +suddenly +suddenness +suddennesses +suddens +sudds +sudor +sudoral +sudoriferous +sudorific +sudorifics +sudors +suds +sudsed +sudser +sudsers +sudses +sudsier +sudsiest +sudsing +sudsless +sudsy +sue +sued +suede +sueded +suedes +sueding +suer +suers +sues +suet +suets +suety +suffari +suffaris suffer +sufferable +sufferableness +sufferablenesses +sufferably +sufferance +sufferances +suffered +sufferer +sufferers suffering +sufferings +suffers +suffice +sufficed +sufficer +sufficers +suffices +sufficiencies +sufficiency +sufficient +sufficiently +sufficing +suffix +suffixal +suffixation +suffixations +suffixed +suffixes +suffixing +sufflate +sufflated +sufflates +sufflating +suffocate +suffocated +suffocates +suffocating +suffocatingly +suffocation +suffocations +suffocative +suffragan +suffragans +suffrage +suffrages +suffragette +suffragettes +suffragist +suffragists +suffuse +suffused +suffuses +suffusing +suffusion +suffusions +suffusive sugar +sugarberries +sugarberry +sugarcane +sugarcanes +sugarcoat +sugarcoated +sugarcoating +sugarcoats +sugared +sugarhouse +sugarhouses +sugarier +sugariest +sugaring +sugarless +sugarloaf +sugarloaves +sugarplum +sugarplums +sugars +sugary suggest +suggested +suggester +suggesters +suggestibilities +suggestibility +suggestible +suggesting suggestion +suggestions +suggestive +suggestively +suggestiveness +suggestivenesses +suggests +sugh +sughed +sughing +sughs +suicidal +suicidally +suicide +suicided +suicides +suiciding +suing +suint +suints suit +suitabilities +suitability suitable +suitableness +suitablenesses +suitably suitcase +suitcases suite +suited +suiter +suiters +suites +suiting +suitings +suitlike +suitor +suitors +suits +sukiyaki +sukiyakis +sukkah +sukkahs +sukkot +sukkoth +sulcal +sulcate +sulcated +sulci +sulcus +suldan +suldans +sulfa +sulfadiazine +sulfadiazines +sulfanilamide +sulfanilamides +sulfas +sulfatase +sulfatases +sulfate +sulfated +sulfates +sulfating +sulfhydryl +sulfhydryls +sulfid +sulfide +sulfides +sulfids +sulfinpyrazone +sulfinpyrazones +sulfinyl +sulfinyls +sulfite +sulfites +sulfitic +sulfo +sulfonamide +sulfonamides +sulfonate +sulfonated +sulfonates +sulfonating +sulfonation +sulfonations +sulfone +sulfones +sulfonic +sulfonium +sulfoniums +sulfonyl +sulfonyls +sulfonylurea +sulfonylureas +sulfoxide +sulfoxides +sulfur +sulfured +sulfuret +sulfureted +sulfureting +sulfurets +sulfuretted +sulfuretting +sulfuric +sulfuring +sulfurize +sulfurized +sulfurizes +sulfurizing +sulfurous +sulfurously +sulfurousness +sulfurousnesses +sulfurs +sulfury +sulfuryl +sulfuryls +sulk +sulked +sulker +sulkers +sulkier +sulkies +sulkiest +sulkily +sulkiness +sulkinesses +sulking +sulks +sulky +sullage +sullages +sullen +sullener +sullenest +sullenly +sullenness +sullennesses +sullied +sullies +sully +sullying +sulpha +sulphas +sulphate +sulphated +sulphates +sulphating +sulphid +sulphide +sulphides +sulphids +sulphite +sulphites +sulphone +sulphones +sulphur +sulphured +sulphureous +sulphuring +sulphurise +sulphurised +sulphurises +sulphurising +sulphurous +sulphurs +sulphury +sultan +sultana +sultanas +sultanate +sultanates +sultaness +sultanesses +sultanic +sultans +sultrier +sultriest +sultrily +sultriness +sultrinesses +sultry +sulu +sulus +sum +sumac +sumach +sumachs +sumacs +sumless +summa +summabilities +summability +summable +summae +summand +summands +summaries +summarily +summarise +summarised +summarises +summarising +summarizable +summarization +summarizations +summarize +summarized +summarizer +summarizers +summarizes +summarizing summary +summas +summate +summated +summates +summating +summation +summational +summations +summative +summed summer +summered +summerhouse +summerhouses +summerier +summeriest +summering +summerlike +summerlong +summerly +summers +summersault +summersaulted +summersaulting +summersaults +summertime +summertimes +summerwood +summerwoods +summery +summing +summit +summital +summited +summiteer +summiteers +summiting +summitries +summitry +summits +summon +summonable +summoned +summoner +summoners +summoning +summons +summonsed +summonses +summonsing +sumo +sumos +sump +sumps +sumpter +sumpters +sumptuary +sumptuous +sumptuously +sumptuousness +sumptuousnesses +sumpweed +sumpweeds +sums sun +sunback +sunbaked +sunbath +sunbathe +sunbathed +sunbather +sunbathers +sunbathes +sunbathing +sunbaths +sunbeam +sunbeams +sunbeamy +sunbelt +sunbelts +sunbird +sunbirds +sunblock +sunblocks +sunbonnet +sunbonnets +sunbow +sunbows +sunburn +sunburned +sunburning +sunburns sunburnt +sunburst +sunbursts +sunchoke +sunchokes +sundae +sundaes +sundeck +sundecks +sunder +sundered +sunderer +sunderers +sundering +sunders +sundew +sundews +sundial +sundials +sundog +sundogs +sundown +sundowner +sundowners +sundowns +sundress +sundresses +sundries +sundrops +sundry +sunfast +sunfish +sunfishes +sunflower +sunflowers +sung +sunglass +sunglasses +sunglow +sunglows +sunk +sunken +sunket +sunkets +sunlamp +sunlamps +sunland +sunlands +sunless sunlight +sunlights +sunlike +sunlit +sunn +sunna +sunnah +sunnahs +sunnas +sunned +sunnier +sunniest +sunnily +sunniness +sunninesses +sunning +sunns sunny +sunporch +sunporches +sunproof +sunrise +sunrises +sunroof +sunroofs +sunroom +sunrooms +suns +sunscald +sunscalds +sunscreen +sunscreening +sunscreens +sunseeker +sunseekers +sunset +sunsets +sunshade +sunshades sunshine +sunshines +sunshiny +sunspot +sunspots +sunstone +sunstones +sunstroke +sunstrokes +sunstruck +sunsuit +sunsuits +suntan +suntanned +suntans +sunup +sunups +sunward +sunwards +sunwise +sup +supe super +superable +superableness +superablenesses +superably +superabound +superabounded +superabounding +superabounds +superabsorbent +superabsorbents +superabundance +superabundances +superabundant +superabundantly +superachiever +superachievers +superactivities +superactivity +superadd +superadded +superadding +superaddition +superadditions +superadds +superadministrator +superadministrators +superagencies +superagency +superagent +superagents +superalloy +superalloys +superaltern +superalterns +superambitious +superannuate +superannuated +superannuates +superannuating +superannuation +superannuations +superathlete +superathletes superb +superbad +superbank +superbanks +superber +superbest +superbillionaire +superbillionaires +superbitch +superbitches +superblock +superblocks +superbly +superbness +superbnesses +superboard +superboards +superbomb +superbomber +superbombers +superbombs +superbright +superbureaucrat +superbureaucrats +supercabinet +supercabinets +supercalender +supercalendered +supercalendering +supercalenders +supercar +supercargo +supercargoes +supercargos +supercarrier +supercarriers +supercars +supercautious +supercede +superceded +supercedes +superceding +supercenter +supercenters +supercharge +supercharged +supercharger +superchargers +supercharges +supercharging +superchic +superchurch +superchurches +superciliary +supercilious +superciliously +superciliousness +superciliousnesses +supercities +supercity +supercivilization +supercivilizations +supercivilized +superclass +superclasses +superclean +superclub +superclubs +supercluster +superclusters +supercoil +supercoiled +supercoiling +supercoils +supercollider +supercolliders +supercolossal +supercomfortable +supercompetitive +supercomputer +supercomputers +superconduct +superconducted +superconducting +superconductive +superconductivities +superconductivity +superconductor +superconductors +superconducts +superconfident +superconglomerate +superconglomerates +superconservative +supercontinent +supercontinents +superconvenient +supercool +supercooled +supercooling +supercools +supercop +supercops +supercorporation +supercorporations +supercriminal +supercriminals +supercritical +supercurrent +supercurrents +supercute +superdeluxe +superdiplomat +superdiplomats +supered +supereffective +superefficiencies +superefficiency +superefficient +superego +superegoist +superegoists +superegos +superelevate +superelevated +superelevates +superelevating +superelevation +superelevations +superelite +superelites +supereminence +supereminences +supereminent +supereminently +superencipher +superenciphered +superenciphering +superenciphers +supererogation +supererogations +supererogatory +superette +superettes +superexpensive +superexpress +superexpresses +superfamilies +superfamily +superfan +superfans +superfarm +superfarms +superfast +superfatted +superfecundation +superfecundations +superfetation +superfetations +superficial +superficialities +superficiality +superficially +superficies +superfine +superfirm +superfirms +superfix +superfixes +superflack +superflacks +superfluid +superfluidities +superfluidity +superfluids +superfluities +superfluity +superfluous +superfluously +superfluousness +superfluousnesses +superfund +superfunds +supergene +supergenes +supergiant +supergiants +superglue +superglues +supergood +supergovernment +supergovernments +supergraphics +supergravities +supergravity +supergroup +supergroups +supergrowth +supergrowths +superharden +superhardened +superhardening +superhardens +superheat +superheated +superheater +superheaters +superheating +superheats +superheavy +superheavyweight +superheavyweights +superhelical +superhelices +superhelix +superhelixes +superhero +superheroes +superheroine +superheroines +superheterodyne +superheterodynes +superhighway +superhighways +superhit +superhits +superhot +superhuman +superhumanities +superhumanity +superhumanly +superhumanness +superhumannesses +superhype +superhyped +superhypes +superhyping +superimposable +superimpose +superimposed +superimposes +superimposing +superimposition +superimpositions +superincumbent +superincumbently +superindividual +superinduce +superinduced +superinduces +superinducing +superinduction +superinductions +superinfect +superinfected +superinfecting +superinfection +superinfections +superinfects +supering +superinsulated +superintellectual +superintellectuals +superintelligence +superintelligences +superintelligent +superintend +superintended +superintendence +superintendences +superintendencies +superintendency +superintendent +superintendents +superintending +superintends +superintensities +superintensity superior +superiorities +superiority +superiorly +superiors +superjacent +superjet +superjets +superjock +superjocks +superjumbo +superlain +superlarge +superlative +superlatively +superlativeness +superlativenesses +superlatives +superlawyer +superlawyers +superlay +superlie +superlies +superlight +superliner +superliners +superlobbyist +superlobbyists +superloyalist +superloyalists +superlunar +superlunary +superluxuries +superluxurious +superluxury +superlying +supermacho +supermachos +supermajorities +supermajority +supermale +supermales +superman supermarket +supermarkets +supermasculine +supermassive +supermen +supermicro +supermicros +supermilitant +supermillionaire +supermillionaires +supermind +superminds +supermini +superminicomputer +superminicomputers +superminis +superminister +superministers +supermodel +supermodels +supermodern +supermom +supermoms +supernal +supernally +supernatant +supernatants +supernation +supernational +supernations +supernatural +supernaturalism +supernaturalisms +supernaturalist +supernaturalistic +supernaturalists +supernaturally +supernaturalness +supernaturalnesses +supernaturals +supernature +supernatures +supernormal +supernormalities +supernormality +supernormally +supernova +supernovae +supernovas +supernumeraries +supernumerary +supernutrition +supernutritions +superorder +superorders +superordinate +superorganic +superorganism +superorganisms +superorgasm +superorgasms +superovulate +superovulated +superovulates +superovulating +superovulation +superovulations +superoxide +superoxides +superparasitism +superparasitisms +superpatriot +superpatriotic +superpatriotism +superpatriotisms +superpatriots +superperson +superpersonal +superpersons +superphenomena +superphenomenon +superphosphate +superphosphates +superphysical +superpimp +superpimps +superplane +superplanes +superplastic +superplasticities +superplasticity +superplayer +superplayers +superpolite +superport +superports +superposable +superpose +superposed +superposes +superposing +superposition +superpositions +superpower +superpowered +superpowerful +superpowers +superpremium +superpremiums +superpro +superprofit +superprofits +superpros +superqualities +superquality +superrace +superraces +superreal +superrealism +superrealisms +superregenerative +superregional +superrich +superroad +superroads +superromantic +superromanticism +superromanticisms +supers +supersafe +supersale +supersales +supersalesman +supersalesmen +supersaturate +supersaturated +supersaturates +supersaturating +supersaturation +supersaturations +superscale +superscales +superschool +superschools +superscout +superscouts +superscribe +superscribed +superscribes +superscribing +superscript +superscription +superscriptions +superscripts +supersecrecies +supersecrecy +supersecret +supersecrets +supersede +supersedeas +superseded +superseder +superseders +supersedes +superseding +supersedure +supersedures +supersell +superseller +supersellers +supersells +supersensible +supersensitive +supersensitively +supersensitivities +supersensitivity +supersensory +superserviceable +supersession +supersessions +supersex +supersexes +supersexualities +supersexuality +supersharp +supershow +supershows +supersinger +supersingers +supersize +supersized +supersleuth +supersleuths +superslick +supersmart +supersmooth +supersoft +supersonic +supersonically +supersonics +supersophisticated +superspecial +superspecialist +superspecialists +superspecialization +superspecializations +superspecialized +superspecials +superspectacle +superspectacles +superspectacular +superspectaculars +superspeculation +superspeculations +superspies +superspy +superstar +superstardom +superstardoms +superstars +superstate +superstates +superstation +superstations +superstimulate +superstimulated +superstimulates +superstimulating +superstition +superstitions +superstitious +superstitiously +superstock +superstocks +superstore +superstores +superstrata +superstratum +superstrength +superstrengths +superstrike +superstrikes +superstring +superstrings +superstrong +superstructural +superstructure +superstructures +superstud +superstuds +supersubstantial +supersubtle +supersubtleties +supersubtlety +supersurgeon +supersurgeons +supersweet +supersymmetric +supersymmetries +supersymmetry +supersystem +supersystems +supertanker +supertankers +supertax +supertaxes +superterrific +superthick +superthin +superthriller +superthrillers +supertight +supertonic +supertonics +supervene +supervened +supervenes +supervenient +supervening +supervention +superventions +supervirile +supervirtuosi +supervirtuoso +supervirtuosos +supervise +supervised +supervises +supervising +supervision +supervisions +supervisor +supervisors +supervisory +superwave +superwaves +superweapon +superweapons +superwide +superwife +superwives +superwoman +superwomen +supes +supinate +supinated +supinates +supinating +supination +supinations +supinator +supinators +supine +supinely +supineness +supinenesses +supines +supped supper +suppers +suppertime +suppertimes +supping +supplant +supplantation +supplantations +supplanted +supplanter +supplanters +supplanting +supplants +supple +suppled +supplejack +supplejacks +supplely +supplement +supplemental +supplementals +supplementary +supplementation +supplementations +supplemented +supplementer +supplementers +supplementing +supplements +suppleness +supplenesses +suppler +supples +supplest +suppletion +suppletions +suppletive +suppletory +suppliance +suppliances +suppliant +suppliantly +suppliants +supplicant +supplicants +supplicate +supplicated +supplicates +supplicating +supplication +supplications +supplicatory +supplied +supplier +suppliers +supplies +suppling supply +supplying support +supportabilities +supportability +supportable +supported +supporter +supporters +supporting +supportive +supportiveness +supportivenesses +supports +supposable +supposably +supposal +supposals suppose +supposed +supposedly +supposer +supposers +supposes +supposing +supposition +suppositional +suppositions +suppositious +supposititious +supposititiously +suppositories +suppository +suppress +suppressant +suppressants +suppressed +suppresses +suppressibilities +suppressibility +suppressible +suppressing +suppression +suppressions +suppressive +suppressiveness +suppressivenesses +suppressor +suppressors +suppurate +suppurated +suppurates +suppurating +suppuration +suppurations +suppurative +supra +supraliminal +supramolecular +supranational +supranationalism +supranationalisms +supranationalist +supranationalists +supranationalities +supranationality +supraoptic +supraorbital +suprarational +suprarenal +suprarenals +suprasegmental +supraventricular +supravital +supravitally +supremacies +supremacist +supremacists +supremacy +suprematism +suprematisms +suprematist +suprematists supreme +supremely +supremeness +supremenesses +supremer +supremest +supremo +supremos +sups +suq +suqs +sura +surah +surahs +sural +suras +surbase +surbased +surbases +surcease +surceased +surceases +surceasing +surcharge +surcharged +surcharges +surcharging +surcingle +surcingles +surcoat +surcoats +surd +surds sure +surefire +surefooted +surefootedly +surefootedness +surefootednesses +surely +sureness +surenesses +surer +surest +sureties +surety +suretyship +suretyships +surf +surfable surface +surfaced +surfacer +surfacers +surfaces +surfacing +surfacings +surfactant +surfactants +surfbird +surfbirds +surfboard +surfboarded +surfboarder +surfboarders +surfboarding +surfboards +surfboat +surfboats +surfed +surfeit +surfeited +surfeiter +surfeiters +surfeiting +surfeits +surfer +surfers +surffish +surffishes +surficial +surfier +surfiest +surfing +surfings +surflike +surfperch +surfperches +surfs +surfy +surge +surged surgeon +surgeonfish +surgeonfishes +surgeons +surger +surgeries +surgers +surgery +surges +surgical +surgically +surging +surgy +suricate +suricates +surimi +surjection +surjections +surjective +surlier +surliest +surlily +surliness +surlinesses +surly +surmise +surmised +surmiser +surmisers +surmises +surmising +surmount +surmountable +surmounted +surmounting +surmounts +surname +surnamed +surnamer +surnamers +surnames +surnaming +surpass +surpassable +surpassed +surpasses +surpassing +surpassingly +surplice +surplices surplus +surplusage +surplusages +surpluses +surprint +surprinted +surprinting +surprints +surprisal +surprisals surprise +surprised +surpriser +surprisers +surprises +surprising +surprisingly +surprize +surprized +surprizes +surprizing +surra +surras +surreal +surrealism +surrealisms +surrealist +surrealistic +surrealistically +surrealists +surreally +surrebutter +surrebutters +surrejoinder +surrejoinders +surrender +surrendered +surrendering +surrenders +surreptitious +surreptitiously +surrey +surreys +surrogacies +surrogacy +surrogate +surrogated +surrogates +surrogating surround +surrounded surrounding +surroundings +surrounds +surroyal +surroyals +surtax +surtaxed +surtaxes +surtaxing +surtout +surtouts +surveil +surveillance +surveillances +surveillant +surveillants +surveilled +surveilling +surveils +survey +surveyed +surveying +surveyings +surveyor +surveyors +surveys +survivabilities +survivability +survivable survival +survivalist +survivalists +survivals +survivance +survivances survive +survived +surviver +survivers +survives +surviving +survivor +survivors +survivorship +survivorships +susceptibilities +susceptibility +susceptible +susceptibleness +susceptiblenesses +susceptibly +susceptive +susceptiveness +susceptivenesses +susceptivities +susceptivity +sushi +sushis +suslik +susliks suspect +suspected +suspecting +suspects +suspend +suspended +suspender +suspendered +suspenders +suspending +suspends +suspense +suspenseful +suspensefully +suspensefulness +suspensefulnesses +suspenseless +suspenser +suspensers +suspenses suspension +suspensions +suspensive +suspensively +suspensor +suspensories +suspensors +suspensory +suspicion +suspicioned +suspicioning +suspicions +suspicious +suspiciously +suspiciousness +suspiciousnesses +suspiration +suspirations +suspire +suspired +suspires +suspiring +suss +sussed +susses +sussing +sustain +sustainabilities +sustainability +sustainable +sustained +sustainedly +sustainer +sustainers +sustaining +sustains +sustenance +sustenances +sustentation +sustentations +sustentative +susurrant +susurration +susurrations +susurrous +susurrus +susurruses +sutler +sutlers +sutra +sutras +sutta +suttas +suttee +suttees +sutural +suturally +suture +sutured +sutures +suturing +suzerain +suzerains +suzerainties +suzerainty +svaraj +svarajes +svedberg +svedbergs +svelte +sveltely +svelteness +sveltenesses +svelter +sveltest +swab +swabbed +swabber +swabbers +swabbie +swabbies +swabbing +swabby +swabs +swacked +swaddle +swaddled +swaddles +swaddling +swag +swage +swaged +swager +swagers +swages +swagged +swagger +swaggered +swaggerer +swaggerers +swaggering +swaggeringly +swaggers +swaggie +swaggies +swagging +swaging +swagman +swagmen +swags +swail +swails +swain +swainish +swainishness +swainishnesses +swains +swale +swales swallow +swallowable +swallowed +swallower +swallowers +swallowing +swallows +swallowtail +swallowtails +swam +swami +swamies +swamis +swamp +swamped +swamper +swampers +swampier +swampiest +swampiness +swampinesses +swamping +swampish +swampland +swamplands +swamps +swampy +swamy +swan +swang +swanherd +swanherds +swank +swanked +swanker +swankest +swankier +swankiest +swankily +swankiness +swankinesses +swanking +swanks +swanky +swanlike +swanned +swanneries +swannery +swanning +swanpan +swanpans +swans +swansdown +swansdowns +swanskin +swanskins swap +swapped +swapper +swappers +swapping +swaps +swaraj +swarajes +swarajist +swarajists +sward +swarded +swarding +swards +sware +swarf +swarfs +swarm +swarmed +swarmer +swarmers +swarming +swarms +swart +swarth +swarthier +swarthiest +swarthiness +swarthinesses +swarths +swarthy +swartness +swartnesses +swarty +swash +swashbuckle +swashbuckled +swashbuckler +swashbucklers +swashbuckles +swashbuckling +swashed +swasher +swashers +swashes +swashing +swastica +swasticas +swastika +swastikas +swat +swatch +swatches +swath +swathe +swathed +swather +swathers +swathes +swathing +swaths +swats +swatted +swatter +swatters +swatting +sway +swayable +swayback +swaybacked +swaybacks +swayed +swayer +swayers +swayful +swaying +sways swear +swearer +swearers +swearing +swears +swearword +swearwords sweat +sweatband +sweatbands +sweatbox +sweatboxes +sweated sweater +sweaterdress +sweaterdresses +sweaters +sweatier +sweatiest +sweatily +sweatiness +sweatinesses +sweating +sweatpants +sweats +sweatshirt +sweatshirts +sweatshop +sweatshops +sweaty +swede +swedes +sweenies +sweeny sweep +sweepback +sweepbacks +sweeper +sweepers +sweepier +sweepiest +sweeping +sweepingly +sweepingness +sweepingnesses +sweepings +sweeps +sweepstakes +sweepy +sweer sweet +sweetbread +sweetbreads +sweetbriar +sweetbriars +sweetbrier +sweetbriers +sweeten +sweetened +sweetener +sweeteners +sweetening +sweetenings +sweetens +sweeter +sweetest +sweetheart +sweethearts +sweetie +sweeties +sweeting +sweetings +sweetish +sweetishly +sweetly +sweetmeat +sweetmeats +sweetness +sweetnesses +sweets +sweetshop +sweetshops +sweetsop +sweetsops swell +swelled +sweller +swellest +swellfish +swellfishes +swellhead +swellheaded +swellheadedness +swellheadednesses +swellheads +swelling +swellings +swells +swelter +sweltered +sweltering +swelteringly +swelters +sweltrier +sweltriest +sweltry +swept +swerve +swerved +swerver +swervers +swerves +swerving +sweven +swevens +swidden +swiddens swift +swifter +swifters +swiftest +swiftlet +swiftlets +swiftly +swiftness +swiftnesses +swifts +swig +swigged +swigger +swiggers +swigging +swigs +swill +swilled +swiller +swillers +swilling +swills swim +swimmable +swimmer +swimmeret +swimmerets +swimmers +swimmier +swimmiest +swimmily +swimming +swimmingly +swimmings +swimmy +swims +swimsuit +swimsuits +swimwear +swindle +swindled +swindler +swindlers +swindles +swindling +swine +swineherd +swineherds +swinepox +swinepoxes swing +swingby +swingbys +swinge +swinged +swingeing +swinger +swingers +swinges +swingier +swingiest +swinging +swingingest +swingingly +swingings +swingle +swingled +swingles +swingletree +swingletrees +swingling +swingman +swingmen +swings +swingy +swinish +swinishly +swinishness +swinishnesses +swink +swinked +swinking +swinks +swinney +swinneys +swipe +swiped +swipes +swiping +swiple +swiples +swipple +swipples +swirl +swirled +swirlier +swirliest +swirling +swirlingly +swirls +swirly +swish +swished +swisher +swishers +swishes +swishier +swishiest +swishing +swishingly +swishy +swiss +swisses switch +switchable +switchback +switchbacked +switchbacking +switchbacks +switchblade +switchblades +switchboard +switchboards +switched +switcher +switcheroo +switcheroos +switchers +switches +switchgrass +switchgrasses +switching +switchman +switchmen +switchyard +switchyards +swith +swithe +swither +swithered +swithering +swithers +swithly +swive +swived +swivel +swiveled +swiveling +swivelled +swivelling +swivels +swives +swivet +swivets +swiving +swizzle +swizzled +swizzler +swizzlers +swizzles +swizzling +swob +swobbed +swobber +swobbers +swobbing +swobs +swollen +swoon +swooned +swooner +swooners +swooning +swooningly +swoons +swoop +swooped +swooper +swoopers +swooping +swoops +swoopstake +swoosh +swooshed +swooshes +swooshing +swop +swopped +swopping +swops sword +swordfish +swordfishes +swordlike +swordman +swordmen +swordplay +swordplayer +swordplayers +swordplays +swords +swordsman +swordsmanship +swordsmanships +swordsmen +swordtail +swordtails +swore +sworn +swot +swots +swotted +swotter +swotters +swotting +swoun +swound +swounded +swounding +swounds +swouned +swouning +swouns +swum +swung +sybarite +sybarites +sybaritic +sybaritically +sybaritism +sybaritisms +sybo +syboes +sycamine +sycamines +sycamore +sycamores +syce +sycee +sycees +syces +sycomore +sycomores +syconia +syconium +sycophancies +sycophancy +sycophant +sycophantic +sycophantically +sycophantish +sycophantishly +sycophantism +sycophantisms +sycophantly +sycophants +sycoses +sycosis +syenite +syenites +syenitic +syke +sykes +syli +sylis +syllabaries +syllabary +syllabi +syllabic +syllabically +syllabicate +syllabicated +syllabicates +syllabicating +syllabication +syllabications +syllabicities +syllabicity +syllabics +syllabification +syllabifications +syllabified +syllabifies +syllabify +syllabifying +syllable +syllabled +syllables +syllabling +syllabub +syllabubs +syllabus +syllabuses +syllepses +syllepsis +sylleptic +syllogism +syllogisms +syllogist +syllogistic +syllogistically +syllogists +syllogize +syllogized +syllogizes +syllogizing +sylph +sylphic +sylphid +sylphids +sylphish +sylphlike +sylphs +sylphy +sylva +sylvae +sylvan +sylvanite +sylvanites +sylvans +sylvas +sylvatic +sylviculture +sylvicultures +sylvin +sylvine +sylvines +sylvins +sylvite +sylvites +symbion +symbions +symbiont +symbionts +symbioses +symbiosis +symbiot +symbiote +symbiotes +symbiotic +symbiotically +symbiots symbol +symboled +symbolic +symbolical +symbolically +symboling +symbolise +symbolised +symbolises +symbolising +symbolism +symbolisms +symbolist +symbolistic +symbolists +symbolization +symbolizations +symbolize +symbolized +symbolizer +symbolizers +symbolizes +symbolizing +symbolled +symbolling +symbologies +symbology +symbols +symmetallism +symmetallisms +symmetric +symmetrical +symmetrically +symmetricalness +symmetricalnesses +symmetries +symmetrization +symmetrizations +symmetrize +symmetrized +symmetrizes +symmetrizing +symmetry +sympathectomies +sympathectomized +sympathectomy +sympathetic +sympathetically +sympathetics +sympathies +sympathin +sympathins +sympathise +sympathised +sympathises +sympathising +sympathize +sympathized +sympathizer +sympathizers +sympathizes +sympathizing +sympatholytic +sympatholytics +sympathomimetic +sympathomimetics sympathy +sympatric +sympatrically +sympatries +sympatry +sympetalies +sympetalous +sympetaly +symphonic +symphonically +symphonies +symphonious +symphoniously +symphonist +symphonists symphony +symphyseal +symphyses +symphysial +symphysis +sympodia +sympodial +sympodium +symposia +symposiarch +symposiarchs +symposiast +symposiasts +symposium +symposiums symptom +symptomatic +symptomatically +symptomatologic +symptomatological +symptomatologically +symptomatologies +symptomatology +symptomless +symptoms +syn +synaereses +synaeresis +synaestheses +synaesthesia +synaesthesias +synaesthesis +synagog +synagogal +synagogs +synagogue +synagogues +synalepha +synalephas +synaloepha +synaloephas +synanon +synanons +synapse +synapsed +synapses +synapsid +synapsids +synapsing +synapsis +synaptic +synaptically +synaptosomal +synaptosome +synaptosomes +synarthrodial +synarthroses +synarthrosis +sync +syncarp +syncarpies +syncarpous +syncarps +syncarpy +syncategorematic +syncategorematically +synced +synch +synched +synching +synchro +synchrocyclotron +synchrocyclotrons +synchromesh +synchromeshes +synchronal +synchroneities +synchroneity +synchronic +synchronical +synchronically +synchronicities +synchronicity +synchronies +synchronisation +synchronisations +synchronise +synchronised +synchronises +synchronising +synchronism +synchronisms +synchronistic +synchronization +synchronizations +synchronize +synchronized +synchronizer +synchronizers +synchronizes +synchronizing +synchronous +synchronously +synchronousness +synchronousnesses +synchrony +synchros +synchroscope +synchroscopes +synchrotron +synchrotrons +synchs +syncing +synclinal +syncline +synclines +syncom +syncoms +syncopal +syncopate +syncopated +syncopates +syncopating +syncopation +syncopations +syncopative +syncopator +syncopators +syncope +syncopes +syncopic +syncretic +syncretise +syncretised +syncretises +syncretising +syncretism +syncretisms +syncretist +syncretistic +syncretists +syncretize +syncretized +syncretizes +syncretizing +syncs +syncytia +syncytial +syncytium +syndactylies +syndactylism +syndactylisms +syndactyly +syndeses +syndesis +syndesises +syndesmoses +syndesmosis +syndet +syndetic +syndetically +syndets +syndic +syndical +syndicalism +syndicalisms +syndicalist +syndicalists +syndicate +syndicated +syndicates +syndicating +syndication +syndications +syndicator +syndicators +syndics +syndrome +syndromes +syne +synecdoche +synecdoches +synecdochic +synecdochical +synecdochically +synecological +synecologies +synecology +synectic +synereses +syneresis +synergetic +synergia +synergias +synergic +synergically +synergid +synergids +synergies +synergism +synergisms +synergist +synergistic +synergistically +synergists +synergy +synesis +synesises +synesthesia +synesthesias +synesthetic +synfuel +synfuels +syngamic +syngamies +syngamy +syngas +syngases +syngasses +syngeneic +synizeses +synizesis +synkaryon +synkaryons +synod +synodal +synodic +synodical +synods +synonym +synonyme +synonymes +synonymic +synonymical +synonymies +synonymist +synonymists +synonymities +synonymity +synonymize +synonymized +synonymizes +synonymizing +synonymous +synonymously +synonyms +synonymy +synopses +synopsis +synopsize +synopsized +synopsizes +synopsizing +synoptic +synoptical +synoptically +synostoses +synostosis +synovia +synovial +synovias +synovitis +synovitises +syntactic +syntactical +syntactically +syntactics +syntagma +syntagmas +syntagmata +syntagmatic +syntax +syntaxes +synth +syntheses +synthesis +synthesist +synthesists +synthesize +synthesized +synthesizer +synthesizers +synthesizes +synthesizing +synthetase +synthetases +synthetic +synthetically +synthetics +synths +syntonic +syntonies +syntony +synura +synurae +syph +sypher +syphered +syphering +syphers +syphilis +syphilises +syphilitic +syphilitics +syphon +syphoned +syphoning +syphons +syphs +syren +syrens +syringa +syringas +syringe +syringed +syringes +syringing +syringomyelia +syringomyelias +syringomyelic +syrinx +syrinxes +syrphian +syrphians +syrphid +syrphids +syrup +syrups +syrupy +sysop +sysops +systaltic system systematic +systematically +systematicness +systematicnesses +systematics +systematise +systematised +systematises +systematising +systematism +systematisms +systematist +systematists +systematization +systematizations +systematize +systematized +systematizer +systematizers +systematizes +systematizing +systemic +systemically +systemics +systemization +systemizations +systemize +systemized +systemizes +systemizing +systemless +systems +systole +systoles +systolic +syzygal +syzygial +syzygies +syzygy +ta +tab +tabanid +tabanids +tabard +tabarded +tabards +tabaret +tabarets +tabbed +tabbied +tabbies +tabbing +tabbis +tabbises +tabbouleh +tabboulehs +tabby +tabbying +taber +tabered +tabering +tabernacle +tabernacled +tabernacles +tabernacling +tabernacular +tabers +tabes +tabetic +tabetics +tabid +tabla +tablas +tablature +tablatures table +tableau +tableaus +tableaux +tablecloth +tablecloths +tabled +tableful +tablefuls +tableland +tablelands +tablemate +tablemates +tables +tablesful +tablespoon +tablespoonful +tablespoonfuls +tablespoons +tablespoonsful tablet +tableted +tableting +tabletop +tabletops +tablets +tabletted +tabletting +tableware +tablewares +tabling +tabloid +tabloids +taboo +tabooed +tabooing +tabooley +tabooleys +taboos +tabor +tabored +taborer +taborers +taboret +taborets +taborin +taborine +taborines +taboring +taborins +tabors +tabouli +taboulis +tabour +taboured +tabourer +tabourers +tabouret +tabourets +tabouring +tabours +tabs +tabu +tabued +tabuing +tabular +tabulate +tabulated +tabulates +tabulating +tabulation +tabulations +tabulator +tabulators +tabuli +tabulis +tabun +tabuns +tabus +tacamahac +tacamahacs +tace +taces +tacet +tach +tache +taches +tachinid +tachinids +tachism +tachisme +tachismes +tachisms +tachist +tachiste +tachistes +tachistoscope +tachistoscopes +tachistoscopic +tachistoscopically +tachists +tachometer +tachometers +tachs +tachyarrhythmia +tachyarrhythmias +tachycardia +tachycardias +tachyon +tachyons +tacit +tacitly +tacitness +tacitnesses +taciturn +taciturnities +taciturnity +tack +tackboard +tackboards +tacked +tacker +tackers +tacket +tackets +tackey +tackier +tackiest +tackified +tackifier +tackifiers +tackifies +tackify +tackifying +tackily +tackiness +tackinesses +tacking +tackle +tackled +tackler +tacklers +tackles +tackless +tackling +tacklings +tacks +tacky +tacnode +tacnodes +taco +taconite +taconites +tacos +tact +tactful +tactfully +tactfulness +tactfulnesses +tactic +tactical +tactically +tactician +tacticians +tactics +tactile +tactilely +tactilities +tactility +taction +tactions +tactless +tactlessly +tactlessness +tactlessnesses +tacts +tactual +tactually +tad +tadpole +tadpoles +tads +tae +tael +taels +taenia +taeniae +taenias +taeniases +taeniasis +taffarel +taffarels +tafferel +tafferels +taffeta +taffetas +taffetized +taffia +taffias +taffies +taffrail +taffrails +taffy +tafia +tafias +tag +tagalong +tagalongs +tagboard +tagboards +tagged +tagger +taggers +tagging +tagliatelle +tagliatelles +taglike +tagmeme +tagmemes +tagmemic +tagrag +tagrags +tags +tahini +tahinis +tahr +tahrs +tahsil +tahsils +taiga +taigas +taiglach tail +tailback +tailbacks +tailboard +tailboards +tailbone +tailbones +tailcoat +tailcoated +tailcoats +tailed +tailender +tailenders +tailer +tailers +tailfan +tailfans +tailgate +tailgated +tailgater +tailgaters +tailgates +tailgating +tailing +tailings +taillamp +taillamps +taille +tailles +tailless +tailleur +tailleurs +taillight +taillights +taillike tailor +tailorbird +tailorbirds +tailored +tailoring +tailorings +tailors +tailpiece +tailpieces +tailpipe +tailpipes +tailplane +tailplanes +tailrace +tailraces +tails +tailskid +tailskids +tailslide +tailslides +tailspin +tailspins +tailwater +tailwaters +tailwind +tailwinds +tain +tains +taint +tainted +tainting +taintless +taints +taipan +taipans +taj +tajes +taka +takable +takahe +takahes take +takeable +takeaway +takedown +takedowns +taken +takeoff +takeoffs +takeout +takeouts +takeover +takeovers +taker +takers +takes +takeup +takeups +takin +taking +takingly +takings +takins +tala +talapoin +talapoins +talar +talaria +talars +talas +talc +talced +talcing +talcked +talcking +talcky +talcose +talcous +talcs +talcum +talcums tale +talebearer +talebearers +talebearing +talebearings talent +talented +talentless +talents +taler +talers +tales +talesman +talesmen +taleysim +tali +talion +talions +taliped +talipeds +talipes +talipot +talipots +talisman +talismanic +talismanically +talismans talk +talkable +talkathon +talkathons +talkative +talkatively +talkativeness +talkativenesses +talked +talker +talkers +talkfests +talkie +talkier +talkies +talkiest +talkiness +talkinesses +talking +talkings +talks +talky tall +tallage +tallaged +tallages +tallaging +tallaisim +tallboy +tallboys +taller +tallest +tallied +tallier +talliers +tallies +tallis +tallish +tallisim +tallit +tallith +tallithes +tallithim +tallitim +tallitoth +tallness +tallnesses +tallol +tallols +tallow +tallowed +tallowing +tallows +tallowy +tally +tallyho +tallyhoed +tallyhoing +tallyhos +tallying +tallyman +tallymen +talmudic +talmudism +talmudisms +talon +taloned +talons +talooka +talookas +taluk +taluka +talukas +taluks +talus +taluses +tam +tamable +tamal +tamale +tamales +tamals +tamandu +tamandua +tamanduas +tamandus +tamarack +tamaracks +tamarao +tamaraos +tamarau +tamaraus +tamari +tamarillo +tamarillos +tamarin +tamarind +tamarinds +tamarins +tamaris +tamarisk +tamarisks +tamasha +tamashas +tambac +tambacs +tambak +tambaks +tambala +tambalas +tambour +tamboura +tambouras +tamboured +tambourer +tambourers +tambourine +tambourines +tambouring +tambours +tambur +tambura +tamburas +tamburs +tame +tameable +tamed +tamein +tameins +tameless +tamely +tameness +tamenesses +tamer +tamers +tames +tamest +taming +tamis +tamises +tammie +tammies +tammy +tamoxifen +tamoxifens +tamp +tampala +tampalas +tampan +tampans +tamped +tamper +tampered +tamperer +tamperers +tampering +tamperproof +tampers +tamping +tampion +tampions +tampon +tamponed +tamponing +tampons +tamps +tams +tan +tanager +tanagers +tanbark +tanbarks +tandem +tandems +tandoor +tandoori +tang +tanged +tangelo +tangelos +tangence +tangences +tangencies +tangency +tangent +tangential +tangentially +tangents +tangerine +tangerines +tangibilities +tangibility +tangible +tangibleness +tangiblenesses +tangibles +tangibly +tangier +tangiest +tanging +tangle +tangled +tanglement +tanglements +tangler +tanglers +tangles +tanglier +tangliest +tangling +tangly +tango +tangoed +tangoing +tangos +tangram +tangrams +tangs +tangy +tanist +tanistries +tanistry +tanists tank +tanka +tankage +tankages +tankard +tankards +tankas +tanked +tanker +tankers +tankful +tankfuls +tanking +tanklike +tanks +tankship +tankships +tannable +tannage +tannages +tannate +tannates +tanned +tanner +tanneries +tanners +tannery +tannest +tannic +tannin +tanning +tannings +tannins +tannish +tanrec +tanrecs +tans +tansies +tansy +tantalate +tantalates +tantalic +tantalise +tantalised +tantalises +tantalising +tantalite +tantalites +tantalize +tantalized +tantalizer +tantalizers +tantalizes +tantalizing +tantalizingly +tantalum +tantalums +tantalus +tantaluses +tantamount +tantara +tantaras +tantivies +tantivy +tanto +tantra +tantras +tantric +tantrum +tantrums +tanuki +tanukis +tanyard +tanyards +tanzanite +tanzanites +tao +taos tap +tapa +tapadera +tapaderas +tapadero +tapaderos +tapalo +tapalos +tapas tape +taped +tapeless +tapelike +tapeline +tapelines +taper +tapered +taperer +taperers +tapering +tapers +taperstick +tapersticks +tapes +tapestried +tapestries +tapestry +tapestrying +tapeta +tapetal +tapetum +tapeworm +tapeworms +taphole +tapholes +taphonomic +taphonomies +taphonomist +taphonomists +taphonomy +taphouse +taphouses +taping +tapioca +tapiocas +tapir +tapirs +tapis +tapises +tapped +tapper +tappers +tappet +tappets +tapping +tappings +taproom +taprooms +taproot +taproots +taps +tapster +tapsters +tar +taradiddle +taradiddles +tarama +taramas +tarantas +tarantases +tarantella +tarantellas +tarantism +tarantisms +tarantula +tarantulae +tarantulas +tarboosh +tarbooshes +tarbush +tarbushes +tardier +tardies +tardiest +tardigrade +tardigrades +tardily +tardiness +tardinesses +tardo +tardy +tardyon +tardyons +tare +tared +tares +targe +targes target +targetable +targeted +targeting +targets +tariff +tariffed +tariffing +tariffs +taring +tarlatan +tarlatans +tarletan +tarletans +tarmac +tarmacadam +tarmacadams +tarmacs +tarn +tarnal +tarnally +tarnation +tarnations +tarnish +tarnishable +tarnished +tarnishes +tarnishing +tarns +taro +taroc +tarocs +tarok +taroks +taros +tarot +tarots +tarp +tarpan +tarpans +tarpaper +tarpapers +tarpaulin +tarpaulins +tarpon +tarpons +tarps +tarradiddle +tarradiddles +tarragon +tarragons +tarre +tarred +tarres +tarriance +tarriances +tarried +tarrier +tarriers +tarries +tarriest +tarring +tarry +tarrying +tars +tarsal +tarsals +tarsi +tarsia +tarsias +tarsier +tarsiers +tarsometatarsi +tarsometatarsus +tarsus +tart +tartan +tartana +tartanas +tartans +tartar +tartaric +tartars +tarted +tarter +tartest +tarting +tartish +tartlet +tartlets +tartly +tartness +tartnesses +tartrate +tartrates +tarts +tartufe +tartufes +tartuffe +tartuffes +tarty +tarweed +tarweeds +tarzan +tarzans +tas task +tasked +tasking +taskmaster +taskmasters +taskmistress +taskmistresses +tasks +taskwork +taskworks +tass +tasse +tassel +tasseled +tasseling +tasselled +tasselling +tassels +tasses +tasset +tassets +tassie +tassies +tastable taste +tasted +tasteful +tastefully +tastefulness +tastefulnesses tasteless +tastelessly +tastelessness +tastelessnesses +tastemaker +tastemakers +taster +tasters +tastes +tastier +tastiest +tastily +tastiness +tastinesses +tasting tasty +tat +tatami +tatamis +tatar +tatars +tate +tater +taters +tates +tatouay +tatouays +tats +tatted +tatter +tatterdemalion +tatterdemalions +tattered +tattering +tatters +tattersall +tattersalls +tattie +tattier +tatties +tattiest +tattily +tattiness +tattinesses +tatting +tattings +tattle +tattled +tattler +tattlers +tattles +tattletale +tattletales +tattling +tattoo +tattooed +tattooer +tattooers +tattooing +tattooist +tattooists +tattoos +tatty +tau +taught +taunt +taunted +taunter +taunters +taunting +tauntingly +taunts +taupe +taupes +taurine +taurines +taus +taut +tautaug +tautaugs +tauted +tauten +tautened +tautening +tautens +tauter +tautest +tauting +tautly +tautness +tautnesses +tautog +tautogs +tautological +tautologically +tautologies +tautologous +tautologously +tautology +tautomer +tautomeric +tautomerism +tautomerisms +tautomers +tautonym +tautonymies +tautonyms +tautonymy +tauts +tav +tavern +taverna +tavernas +taverner +taverners +taverns +tavs +taw +tawdrier +tawdries +tawdriest +tawdrily +tawdriness +tawdrinesses +tawdry +tawed +tawer +tawers +tawie +tawing +tawney +tawneys +tawnier +tawnies +tawniest +tawnily +tawniness +tawninesses +tawny +tawpie +tawpies +taws +tawse +tawsed +tawses +tawsing tax +taxa +taxable +taxables +taxably +taxation +taxations +taxed +taxeme +taxemes +taxemic +taxer +taxers +taxes taxi +taxicab +taxicabs +taxidermic +taxidermies +taxidermist +taxidermists +taxidermy +taxied +taxies +taxiing +taximan +taximen +taximeter +taximeters +taxing +taxingly +taxis +taxite +taxites +taxitic +taxiway +taxiways +taxless +taxman +taxmen +taxon +taxonomic +taxonomically +taxonomies +taxonomist +taxonomists +taxonomy +taxons +taxpaid taxpayer +taxpayers +taxpaying +taxus +taxwise +taxying +tazza +tazzas +tazze +tchotchke +tchotchkes tea +teaberries +teaberry +teaboard +teaboards +teabowl +teabowls +teabox +teaboxes +teacake +teacakes +teacart +teacarts teach +teachable +teachableness +teachablenesses +teachably teacher +teacherly +teachers +teaches +teaching +teachings +teacup +teacupful +teacupfuls +teacups +teacupsful +teahouse +teahouses +teak +teakettle +teakettles +teaks +teakwood +teakwoods +teal +tealike +teals team +teamaker +teamakers +teamed +teaming +teammate +teammates +teams +teamster +teamsters teamwork +teamworks teapot +teapots +teapoy +teapoys tear +tearable +tearaway +tearaways +teardown +teardowns +teardrop +teardrops +teared +tearer +tearers +tearful +tearfully +tearfulness +tearfulnesses +teargas +teargases +teargassed +teargasses +teargassing +tearier +teariest +tearily +tearing +tearjerker +tearjerkers +tearless +tearoom +tearooms +tears +tearstain +tearstained +tearstains +teary +teas tease +teased +teasel +teaseled +teaseler +teaselers +teaseling +teaselled +teaselling +teasels +teaser +teasers +teases +teashop +teashops +teasing +teasingly +teaspoon +teaspoonful +teaspoonfuls +teaspoons +teaspoonsful +teat +teated +teatime +teatimes +teats +teaware +teawares +teazel +teazeled +teazeling +teazelled +teazelling +teazels +teazle +teazled +teazles +teazling +teched +techie +techier +techies +techiest +techily +technetium +technetiums +technetronic +technic technical +technicalities +technicality +technicalization +technicalizations +technicalize +technicalized +technicalizes +technicalizing +technically +technicals +technician +technicians +technics technique +techniques +technobabble +technobabbles +technocracies +technocracy +technocrat +technocratic +technocrats +technologic +technological +technologically +technologies +technologist +technologists +technologize +technologized +technologizes +technologizing technology +technophile +technophiles +technophobe +technophobes +technophobia +technophobias +technophobic +technostructure +technostructures +techy +tecta +tectal +tectite +tectites +tectonic +tectonically +tectonics +tectonism +tectonisms +tectrices +tectrix +tectum +ted +tedded +tedder +tedders +teddies +tedding +teddy +tedious +tediously +tediousness +tediousnesses +tedium +tediums +teds +tee +teed +teeing +teel +teels +teem +teemed +teemer +teemers +teeming +teemingly +teemingness +teemingnesses +teems +teen +teenage +teenaged teenager +teenagers +teener +teeners +teenful +teenier +teeniest +teens +teensier +teensiest +teensy +teentsier +teentsiest +teentsy +teeny +teenybop +teenybopper +teenyboppers +teepee +teepees +tees +teeter +teeterboard +teeterboards +teetered +teetering +teeters +teeth +teethe +teethed +teether +teethers +teethes +teething +teethings +teethridge +teethridges +teetotal +teetotaled +teetotaler +teetotalers +teetotaling +teetotalism +teetotalisms +teetotalist +teetotalists +teetotalled +teetotaller +teetotallers +teetotalling +teetotally +teetotals +teetotum +teetotums +teff +teffs +tefillin +teg +tegmen +tegmenta +tegmental +tegmentum +tegmina +tegminal +tegs +tegua +teguas +tegular +tegumen +tegument +teguments +tegumina +teiglach +teiid +teiids +teind +teinds +tektite +tektites +tektitic +tel +tela +telae +telamon +telamones +telangiectases +telangiectasia +telangiectasias +telangiectasis +telangiectatic +tele +telecast +telecasted +telecaster +telecasters +telecasting +telecasts +telecommunication +telecommunications +telecommute +telecommuted +telecommuter +telecommuters +telecommutes +telecommuting +teleconference +teleconferenced +teleconferences +teleconferencing +teleconferencings +telecourse +telecourses +teledu +teledus +telefacsimile +telefacsimiles +telefilm +telefilms +telega +telegas +telegenic +telegonies +telegony +telegram +telegrammed +telegramming +telegrams +telegraph +telegraphed +telegrapher +telegraphers +telegraphese +telegrapheses +telegraphic +telegraphically +telegraphies +telegraphing +telegraphist +telegraphists +telegraphs +telegraphy +telekineses +telekinesis +telekinetic +telekinetically +teleman +telemark +telemarketer +telemarketers +telemarketing +telemarketings +telemarks +telemen +telemeter +telemetered +telemetering +telemeters +telemetric +telemetrically +telemetries +telemetry +telencephala +telencephalic +telencephalon +telencephalons +teleologic +teleological +teleologically +teleologies +teleologist +teleologists +teleology +teleonomic +teleonomies +teleonomy +teleost +teleostean +teleosts +telepath +telepathic +telepathically +telepathies +telepaths +telepathy telephone +telephoned +telephoner +telephoners +telephones +telephonic +telephonically +telephonies +telephoning +telephonist +telephonists +telephony +telephoto +telephotographies +telephotography +telephotos +teleplay +teleplays +teleport +teleportation +teleportations +teleported +teleporting +teleports +teleprinter +teleprinters +teleprocessing +teleprocessings +teleran +telerans +teles telescope +telescoped +telescopes +telescopic +telescopically +telescoping +teleses +telesis +telestic +telestics +teletext +teletexts +telethon +telethons +teletypewriter +teletypewriters +teleutospore +teleutospores +televangelism +televangelisms +televangelist +televangelists +teleview +televiewed +televiewer +televiewers +televiewing +televiews +televise +televised +televises +televising television +televisions +televisual +telex +telexed +telexes +telexing +telfer +telfered +telfering +telfers +telford +telfords +telia +telial +telic +telically +teliospore +teliospores +telium tell +tellable +teller +tellers +tellies +telling +tellingly +tells +telltale +telltales +telluric +telluride +tellurides +tellurium +telluriums +tellurometer +tellurometers +telly +tellys +telocentric +telocentrics +teloi +telome +telomere +telomeres +telomes +telomic +telophase +telophases +telos +telotaxes +telotaxis +telpher +telphered +telphering +telphers +tels +telson +telsonic +telsons +temblor +temblores +temblors +temerarious +temerariously +temerariousness +temerariousnesses +temerities +temerity +temp +temped +tempeh +tempehs +temper +tempera +temperable +temperament +temperamental +temperamentally +temperaments +temperance +temperances +temperas +temperate +temperately +temperateness +temperatenesses temperature +temperatures +tempered +temperer +temperers +tempering +tempers +tempest +tempested +tempesting +tempests +tempestuous +tempestuously +tempestuousness +tempestuousnesses +tempi +temping +templar +templars +template +templates temple +templed +temples +templet +templets +tempo +temporal +temporalities +temporality +temporalize +temporalized +temporalizes +temporalizing +temporally +temporals +temporaries +temporarily +temporariness +temporarinesses temporary +temporise +temporised +temporises +temporising +temporization +temporizations +temporize +temporized +temporizer +temporizers +temporizes +temporizing +temporomandibular +tempos +temps +tempt +temptable +temptation +temptations +tempted +tempter +tempters +tempting +temptingly +temptress +temptresses +tempts +tempura +tempuras +ten +tenabilities +tenability +tenable +tenableness +tenablenesses +tenably +tenace +tenaces +tenacious +tenaciously +tenaciousness +tenaciousnesses +tenacities +tenacity +tenacula +tenaculum +tenaculums +tenail +tenaille +tenailles +tenails +tenancies +tenancy +tenant +tenantable +tenanted +tenanting +tenantless +tenantries +tenantry +tenants +tench +tenches tend +tendance +tendances +tended +tendence +tendences +tendencies +tendencious tendency +tendentious +tendentiously +tendentiousness +tendentiousnesses +tender +tendered +tenderer +tenderers +tenderest +tenderfeet +tenderfoot +tenderfoots +tenderhearted +tenderheartedly +tenderheartedness +tenderheartednesses +tendering +tenderization +tenderizations +tenderize +tenderized +tenderizer +tenderizers +tenderizes +tenderizing +tenderloin +tenderloins +tenderly +tenderness +tendernesses +tenderometer +tenderometers +tenders +tending +tendinites +tendinitides +tendinitis +tendinitises +tendinous +tendon +tendonites +tendonitides +tendonitis +tendonitises +tendons +tendresse +tendresses +tendril +tendriled +tendrilled +tendrilous +tendrils +tends +tenebrae +tenebrific +tenebrionid +tenebrionids +tenebrious +tenebrism +tenebrisms +tenebrist +tenebrists +tenebrous +tenement +tenements +tenesmic +tenesmus +tenesmuses +tenet +tenets +tenfold +tenfolds +tenia +teniae +tenias +teniases +teniasis +tenner +tenners +tennies tennis +tennises +tennist +tennists +tenon +tenoned +tenoner +tenoners +tenoning +tenons +tenor +tenorist +tenorists +tenorite +tenorites +tenors +tenosynovitis +tenosynovitises +tenotomies +tenotomy +tenour +tenours +tenpence +tenpences +tenpenny +tenpin +tenpins +tenpounder +tenpounders +tenrec +tenrecs +tens tense +tensed +tensely +tenseness +tensenesses +tenser +tenses +tensest +tensible +tensibly +tensile +tensilities +tensility +tensing +tensiometer +tensiometers +tensiometric +tensiometries +tensiometry tension +tensional +tensioned +tensioner +tensioners +tensioning +tensionless +tensions +tensities +tensity +tensive +tensor +tensors tent +tentacle +tentacled +tentacles +tentacular +tentage +tentages tentative +tentatively +tentativeness +tentativenesses +tentatives +tented +tenter +tentered +tenterhook +tenterhooks +tentering +tenters +tenth +tenthly +tenths +tentie +tentier +tentiest +tenting +tentless +tentlike +tents +tenty +tenues +tenuis +tenuities +tenuity +tenuous +tenuously +tenuousness +tenuousnesses +tenurable +tenure +tenured +tenures +tenurial +tenurially +tenuti +tenuto +tenutos +teocalli +teocallis +teopan +teopans +teosinte +teosintes +tepa +tepal +tepals +tepas +tepee +tepees +tepefied +tepefies +tepefy +tepefying +tephra +tephras +tephrite +tephrites +tepid +tepidities +tepidity +tepidly +tepidness +tepidnesses +tepoy +tepoys +tequila +tequilas +terai +terais +teraohm +teraohms +teraph +teraphim +teratism +teratisms +teratocarcinoma +teratocarcinomas +teratocarcinomata +teratogen +teratogeneses +teratogenesis +teratogenic +teratogenicities +teratogenicity +teratogens +teratoid +teratologic +teratological +teratologies +teratologist +teratologists +teratology +teratoma +teratomas +teratomata +terawatt +terawatts +terbia +terbias +terbic +terbium +terbiums +terce +tercel +tercelet +tercelets +tercels +tercentenaries +tercentenary +tercentennial +tercentennials +terces +tercet +tercets +terebene +terebenes +terebic +terebinth +terebinths +teredines +teredo +teredos +terefah +terephthalate +terephthalates +terete +terga +tergal +tergite +tergites +tergiversate +tergiversated +tergiversates +tergiversating +tergiversation +tergiversations +tergiversator +tergiversators +tergum +teriyaki +teriyakis term +termagant +termagants +termed +termer +termers +terminable +terminableness +terminablenesses +terminably terminal +terminally +terminals +terminate +terminated +terminates +terminating +termination +terminational +terminations +terminative +terminatively +terminator +terminators +terming +termini +terminological +terminologically +terminologies +terminology +terminus +terminuses +termitaria +termitaries +termitarium +termitary +termite +termites +termitic +termless +termly +termor +termors +terms +termtime +termtimes +tern +ternaries +ternary +ternate +ternately +terne +terneplate +terneplates +ternes +ternion +ternions +terns +terpene +terpeneless +terpenes +terpenic +terpenoid +terpenoids +terpineol +terpineols +terpinol +terpinols +terpolymer +terpolymers +terpsichorean +terra +terrace +terraced +terraces +terracing +terrae +terraform +terraformed +terraforming +terraforms +terrain +terrains +terrane +terranes +terrapin +terrapins +terraqueous +terraria +terrarium +terrariums +terras +terrases +terrazzo +terrazzos +terreen +terreens +terrella +terrellas +terrene +terrenes +terreplein +terrepleins +terrestrial +terrestrially +terrestrials +terret +terrets terrible +terribleness +terriblenesses +terribly +terricolous +terrier +terriers +terries +terrific +terrifically +terrified +terrifies terrify +terrifying +terrifyingly +terrigenous +terrine +terrines +territ +territorial +territorialism +territorialisms +territorialist +territorialists +territorialities +territoriality +territorialization +territorializations +territorialize +territorialized +territorializes +territorializing +territorially +territorials +territories +territory +territs terror +terrorise +terrorised +terrorises +terrorising +terrorism +terrorisms +terrorist +terroristic +terrorists +terrorization +terrorizations +terrorize +terrorized +terrorizes +terrorizing +terrorless +terrors +terry +terse +tersely +terseness +tersenesses +terser +tersest +tertial +tertials +tertian +tertians +tertiaries +tertiary +tervalent +tesla +teslas +tessellate +tessellated +tessellates +tessellating +tessellation +tessellations +tessera +tesseract +tesseracts +tesserae +tessitura +tessituras test +testa +testabilities +testability +testable +testaceous +testacies +testacy +testae +testament +testamentary +testaments +testate +testates +testator +testators +testatrices +testatrix +testcross +testcrossed +testcrosses +testcrossing +tested +testee +testees +tester +testers +testes +testicle +testicles +testicular +testier +testiest +testified +testifier +testifiers +testifies +testify +testifying +testily +testimonial +testimonials +testimonies +testimony +testiness +testinesses +testing +testis +teston +testons +testoon +testoons +testosterone +testosterones +tests +testudines +testudo +testudos +testy +tet +tetanal +tetanic +tetanically +tetanics +tetanies +tetanise +tetanised +tetanises +tetanising +tetanization +tetanizations +tetanize +tetanized +tetanizes +tetanizing +tetanoid +tetanus +tetanuses +tetany +tetartohedral +tetched +tetchier +tetchiest +tetchily +tetchiness +tetchinesses +tetchy +teth +tether +tetherball +tetherballs +tethered +tethering +tethers +teths +tetotum +tetotums +tetra +tetracaine +tetracaines +tetrachloride +tetrachlorides +tetrachord +tetrachords +tetracid +tetracids +tetracycline +tetracyclines +tetrad +tetradic +tetradrachm +tetradrachms +tetrads +tetradynamous +tetrafluoride +tetrafluorides +tetragon +tetragonal +tetragonally +tetragons +tetragrammaton +tetragrammatons +tetrahedra +tetrahedral +tetrahedrally +tetrahedrite +tetrahedrites +tetrahedron +tetrahedrons +tetrahydrocannabinol +tetrahydrocannabinols +tetrahydrofuran +tetrahydrofurans +tetrahymena +tetrahymenas +tetralogies +tetralogy +tetramer +tetrameric +tetramerous +tetramers +tetrameter +tetrameters +tetramethyllead +tetramethylleads +tetraploid +tetraploidies +tetraploids +tetraploidy +tetrapod +tetrapods +tetrapyrrole +tetrapyrroles +tetrarch +tetrarchic +tetrarchies +tetrarchs +tetrarchy +tetras +tetraspore +tetraspores +tetrasporic +tetravalent +tetrazolium +tetrazoliums +tetrazzini +tetrode +tetrodes +tetrodotoxin +tetrodotoxins +tetroxid +tetroxide +tetroxides +tetroxids +tetryl +tetryls +tets +tetter +tetters +teuch +teugh +teughly +teutonize +teutonized +teutonizes +teutonizing +tew +tewed +tewing +tews +texas +texases text textbook +textbookish +textbooks +textile +textiles +textless +texts +textual +textually +textuaries +textuary +textural +texturally +texture +textured +textureless +textures +texturing +texturize +texturized +texturizes +texturizing +thack +thacked +thacking +thacks +thae +thairm +thairms +thalami +thalamic +thalamus +thalassaemia +thalassaemias +thalassemia +thalassemias +thalassemic +thalassemics +thalassic +thalassocracies +thalassocracy +thalassocrat +thalassocrats +thaler +thalers +thalidomide +thalidomides +thalli +thallic +thallium +thalliums +thalloid +thallophyte +thallophytes +thallophytic +thallous +thallus +thalluses than +thanage +thanages +thanatological +thanatologies +thanatologist +thanatologists +thanatology +thanatos +thanatoses +thane +thanes +thaneship +thaneships thank +thanked +thanker +thankers thankful +thankfuller +thankfullest +thankfully +thankfulness +thankfulnesses +thanking +thankless +thanklessly +thanklessness +thanklessnesses +thanks +thanksgiving +thanksgivings +thankworthy +tharm +tharms that +thataway +thatch +thatched +thatcher +thatchers +thatches +thatchier +thatchiest +thatching +thatchy +thaumaturge +thaumaturges +thaumaturgic +thaumaturgies +thaumaturgist +thaumaturgists +thaumaturgy +thaw +thawed +thawer +thawers +thawing +thawless +thaws the +thearchies +thearchy theater +theatergoer +theatergoers +theatergoing +theatergoings +theaters theatre +theatres +theatric +theatrical +theatricalism +theatricalisms +theatricalities +theatricality +theatricalization +theatricalizations +theatricalize +theatricalized +theatricalizes +theatricalizing +theatrically +theatricals +theatrics +thebaine +thebaines +thebe +theca +thecae +thecal +thecate +thecodont +thecodonts +thee +theelin +theelins +theelol +theelols theft +thefts +thegn +thegnly +thegns +thein +theine +theines +theins their theirs +theirselves +theism +theisms +theist +theistic +theistical +theistically +theists +thelitis +thelitises them +thematic +thematically +thematics theme +themed +themes +theming themselves then +thenage +thenages +thenal +thenar +thenars +thence +thenceforth +thenceforward +thenceforwards +thens +theobromine +theobromines +theocentric +theocentricities +theocentricity +theocentrism +theocentrisms +theocracies +theocracy +theocrat +theocratic +theocratical +theocratically +theocrats +theodicies +theodicy +theodolite +theodolites +theogonic +theogonies +theogony +theolog +theologian +theologians +theologic +theological +theologically +theologies +theologise +theologised +theologises +theologising +theologize +theologized +theologizer +theologizers +theologizes +theologizing +theologs +theologue +theologues +theology +theonomies +theonomous +theonomy +theophanic +theophanies +theophany +theophylline +theophyllines +theorbo +theorbos +theorem +theorematic +theorems +theoretic theoretical +theoretically +theoretician +theoreticians +theories +theorise +theorised +theorises +theorising +theorist +theorists +theorization +theorizations +theorize +theorized +theorizer +theorizers +theorizes +theorizing theory +theosophical +theosophically +theosophies +theosophist +theosophists +theosophy +therapeuses +therapeusis +therapeutic +therapeutically +therapeutics +therapies +therapist +therapists +therapsid +therapsids +therapy there +thereabout +thereabouts +thereafter +thereat +thereby +therefor therefore +therefrom +therein +thereinafter +thereinto +theremin +theremins +thereof +thereon +theres +thereto +theretofore +thereunder +thereunto +thereupon +therewith +therewithal +theriac +theriaca +theriacal +theriacas +theriacs +theriomorphic +therm +thermae +thermal +thermalization +thermalizations +thermalize +thermalized +thermalizes +thermalizing +thermally +thermals +therme +thermel +thermels +thermes +thermic +thermically +thermion +thermionic +thermionics +thermions +thermistor +thermistors +thermite +thermites +thermochemical +thermochemist +thermochemistries +thermochemistry +thermochemists +thermocline +thermoclines +thermocouple +thermocouples +thermoduric +thermodynamic +thermodynamical +thermodynamically +thermodynamicist +thermodynamicists +thermodynamics +thermoelectric +thermoelectricities +thermoelectricity +thermoelement +thermoelements +thermoform +thermoformable +thermoformed +thermoforming +thermoforms +thermogram +thermograms +thermograph +thermographic +thermographically +thermographies +thermographs +thermography +thermohaline +thermojunction +thermojunctions +thermolabile +thermolabilities +thermolability +thermoluminescence +thermoluminescences +thermoluminescent +thermomagnetic +thermometer +thermometers +thermometric +thermometrically +thermometries +thermometry +thermonuclear +thermoperiodicities +thermoperiodicity +thermoperiodism +thermoperiodisms +thermophile +thermophiles +thermophilic +thermophilous +thermopile +thermopiles +thermoplastic +thermoplasticities +thermoplasticity +thermoplastics +thermoreceptor +thermoreceptors +thermoregulate +thermoregulated +thermoregulates +thermoregulating +thermoregulation +thermoregulations +thermoregulator +thermoregulators +thermoregulatory +thermoremanence +thermoremanences +thermoremanent thermos +thermoscope +thermoscopes +thermoses +thermoset +thermosets +thermosetting +thermosphere +thermospheres +thermospheric +thermostabilities +thermostability +thermostable +thermostat +thermostated +thermostatic +thermostatically +thermostating +thermostats +thermostatted +thermostatting +thermotactic +thermotaxes +thermotaxis +thermotropic +thermotropism +thermotropisms +therms +theroid +theropod +theropods +thesaural +thesauri +thesaurus +thesauruses these +theses +thesis +thespian +thespians +theta +thetas +thetic +thetical +thetically +theurgic +theurgical +theurgies +theurgist +theurgists +theurgy +thew +thewier +thewiest +thewless +thews +thewy they +thiabendazole +thiabendazoles +thiamin +thiaminase +thiaminases +thiamine +thiamines +thiamins +thiazide +thiazides +thiazin +thiazine +thiazines +thiazins +thiazol +thiazole +thiazoles +thiazols thick +thicken +thickened +thickener +thickeners +thickening +thickenings +thickens +thicker +thickest +thicket +thicketed +thickets +thickety +thickhead +thickheaded +thickheads +thickish +thickly +thickness +thicknesses +thicks +thickset +thicksets thief +thieve +thieved +thieveries +thievery +thieves +thieving +thievish +thievishly +thievishness +thievishnesses +thigh +thighbone +thighbones +thighed +thighs +thigmotaxes +thigmotaxis +thigmotropism +thigmotropisms +thill +thills +thimble +thimbleberries +thimbleberry +thimbleful +thimblefuls +thimblerig +thimblerigged +thimblerigger +thimbleriggers +thimblerigging +thimblerigs +thimbles +thimbleweed +thimbleweeds +thimerosal +thimerosals thin +thinclad +thinclads +thindown +thindowns +thine thing +thingamabob +thingamabobs +thingamajig +thingamajigs +thingness +thingnesses +things +thingumajig +thingumajigs +thingummies +thingummy think +thinkable +thinkableness +thinkablenesses +thinkably +thinker +thinkers thinking +thinkingly +thinkingness +thinkingnesses +thinkings +thinks +thinly +thinned +thinner +thinners +thinness +thinnesses +thinnest +thinning +thinnish +thins +thio +thiocyanate +thiocyanates +thiol +thiolic +thiols +thionate +thionates +thionic +thionin +thionine +thionines +thionins +thionyl +thionyls +thiopental +thiopentals +thiophen +thiophene +thiophenes +thiophens +thioridazine +thioridazines +thiosulfate +thiosulfates +thiotepa +thiotepas +thiouracil +thiouracils +thiourea +thioureas +thir +thiram +thirams +third +thirdhand +thirdly +thirds +thirl +thirlage +thirlages +thirled +thirling +thirls thirst +thirsted +thirster +thirsters +thirstier +thirstiest +thirstily +thirstiness +thirstinesses +thirsting +thirsts +thirsty +thirteen +thirteens +thirteenth +thirteenths +thirties +thirtieth +thirtieths +thirty +thirtyish this +thistle +thistledown +thistledowns +thistles +thistlier +thistliest +thistly +thither +thitherto +thitherward +thitherwards +thixotropic +thixotropies +thixotropy +tho +thole +tholed +tholeiite +tholeiites +tholeiitic +tholepin +tholepins +tholes +tholing +tholoi +tholos +thong +thonged +thongs +thoracal +thoraces +thoracic +thoracically +thoracotomies +thoracotomy +thorax +thoraxes +thoria +thorianite +thorianites +thorias +thoric +thorite +thorites +thorium +thoriums +thorn +thornback +thornbacks +thornbush +thornbushes +thorned +thornier +thorniest +thornily +thorniness +thorninesses +thorning +thornless +thornlike +thorns +thorny +thoro +thoron +thorons thorough +thoroughbass +thoroughbasses +thoroughbrace +thoroughbraces +thoroughbred +thoroughbreds +thorougher +thoroughest +thoroughfare +thoroughfares +thoroughgoing +thoroughly +thoroughness +thoroughnesses +thoroughpin +thoroughpins +thoroughwort +thoroughworts +thorp +thorpe +thorpes +thorps those +thou +thoued though thought +thoughtful +thoughtfully +thoughtfulness +thoughtfulnesses +thoughtless +thoughtlessly +thoughtlessness +thoughtlessnesses +thoughts +thoughtway +thoughtways +thouing +thous +thousand +thousandfold +thousands +thousandth +thousandths +thowless +thraldom +thraldoms +thrall +thralldom +thralldoms +thralled +thralling +thralls +thrash +thrashed +thrasher +thrashers +thrashes +thrashing +thrashings +thrasonical +thrasonically +thrave +thraves +thraw +thrawart +thrawed +thrawing +thrawn +thrawnly +thraws thread +threadbare +threadbareness +threadbarenesses +threaded +threader +threaders +threadfin +threadfins +threadier +threadiest +threadiness +threadinesses +threading +threadless +threadlike +threads +threadworm +threadworms +thready +threap +threaped +threaper +threapers +threaping +threaps +threat +threated +threaten +threatened +threatener +threateners +threatening +threateningly +threatens +threating +threats +three +threefold +threep +threeped +threepence +threepences +threepenny +threeping +threeps +threes +threescore +threesome +threesomes +threnode +threnodes +threnodic +threnodies +threnodist +threnodists +threnody +threonine +threonines +thresh +threshed +thresher +threshers +threshes +threshing +threshold +thresholds +threw +thrice +thrift +thriftier +thriftiest +thriftily +thriftiness +thriftinesses +thriftless +thriftlessly +thriftlessness +thriftlessnesses +thrifts +thrifty thrill +thrilled thriller +thrillers +thrilling +thrillingly +thrills +thrip +thrips +thrive +thrived +thriven +thriver +thrivers +thrives +thriving +thrivingly +thro throat +throated +throatier +throatiest +throatily +throatiness +throatinesses +throating +throatlatch +throatlatches +throats +throaty +throb +throbbed +throbber +throbbers +throbbing +throbs +throe +throes +thrombi +thrombin +thrombins +thrombocyte +thrombocytes +thrombocytic +thrombocytopenia +thrombocytopenias +thrombocytopenic +thromboembolic +thromboembolism +thromboembolisms +thrombokinase +thrombokinases +thrombolytic +thrombophlebitides +thrombophlebitis +thromboplastic +thromboplastin +thromboplastins +thromboses +thrombosis +thrombotic +thromboxane +thromboxanes +thrombus +throne +throned +thrones +throng +thronged +thronging +throngs +throning +throstle +throstles +throttle +throttleable +throttled +throttlehold +throttleholds +throttler +throttlers +throttles +throttling through +throughither +throughly +throughother throughout +throughput +throughputs +throughway +throughways +throve throw +throwaway +throwaways +throwback +throwbacks +thrower +throwers +throwing +thrown +throws +throwster +throwsters +thru +thrum +thrummed +thrummer +thrummers +thrummier +thrummiest +thrumming +thrummy +thrums +thruput +thruputs +thrush +thrushes +thrust +thrusted +thruster +thrusters +thrustful +thrusting +thrustor +thrustors +thrusts +thruway +thruways +thud +thudded +thudding +thuds +thug +thuggee +thuggees +thuggeries +thuggery +thuggish +thugs +thuja +thujas +thulia +thulias +thulium +thuliums +thumb +thumbed +thumbhole +thumbholes +thumbing +thumbkin +thumbkins +thumbnail +thumbnails +thumbnut +thumbnuts +thumbprint +thumbprints +thumbs +thumbscrew +thumbscrews +thumbtack +thumbtacked +thumbtacking +thumbtacks +thumbwheel +thumbwheels +thump +thumped +thumper +thumpers +thumping +thumps thunder +thunderbird +thunderbirds +thunderbolt +thunderbolts +thunderclap +thunderclaps +thundercloud +thunderclouds +thundered +thunderer +thunderers +thunderhead +thunderheads +thundering +thunderingly +thunderous +thunderously +thunders +thundershower +thundershowers +thunderstone +thunderstones thunderstorm +thunderstorms +thunderstricken +thunderstrike +thunderstrikes +thunderstriking +thunderstroke +thunderstrokes +thunderstruck +thundery +thunk +thunked +thunking +thunks +thurible +thuribles +thurifer +thurifers +thurl +thurls thus +thusly +thuya +thuyas +thwack +thwacked +thwacker +thwackers +thwacking +thwacks +thwart +thwarted +thwarter +thwarters +thwarting +thwartly +thwarts +thwartwise +thy +thylacine +thylacines +thylakoid +thylakoids +thyme +thymectomies +thymectomize +thymectomized +thymectomizes +thymectomizing +thymectomy +thymes +thymey +thymi +thymic +thymidine +thymidines +thymier +thymiest +thymine +thymines +thymocyte +thymocytes +thymol +thymols +thymosin +thymosins +thymus +thymuses +thymy +thyratron +thyratrons +thyreoid +thyristor +thyristors +thyrocalcitonin +thyrocalcitonins +thyroglobulin +thyroglobulins +thyroid +thyroidal +thyroidectomies +thyroidectomized +thyroidectomy +thyroidites +thyroiditides +thyroiditis +thyroiditises +thyroids +thyrotoxicoses +thyrotoxicosis +thyrotrophic +thyrotrophin +thyrotrophins +thyrotropic +thyrotropin +thyrotropins +thyroxin +thyroxine +thyroxines +thyroxins +thyrse +thyrses +thyrsi +thyrsoid +thyrsus +thysanuran +thysanurans +thyself +ti +tiara +tiaraed +tiaras +tibia +tibiae +tibial +tibias +tibiofibula +tibiofibulae +tibiofibulas +tic +tical +ticals tick +ticked +ticker +tickers ticket +ticketed +ticketing +ticketless +tickets +ticking +tickings +tickle +tickled +tickler +ticklers +tickles +tickling +ticklish +ticklishly +ticklishness +ticklishnesses +ticks +tickseed +tickseeds +ticktack +ticktacked +ticktacking +ticktacks +ticktacktoe +ticktacktoes +ticktock +ticktocked +ticktocking +ticktocks +tics +tictac +tictacked +tictacking +tictacs +tictoc +tictocked +tictocking +tictocs +tidal +tidally +tidbit +tidbits +tiddledywinks +tiddler +tiddlers +tiddly +tiddlywinks +tide +tided +tideland +tidelands +tideless +tidelike +tidemark +tidemarks +tiderip +tiderips +tides +tidewater +tidewaters +tideway +tideways +tidied +tidier +tidiers +tidies +tidiest +tidily +tidiness +tidinesses +tiding +tidings tidy +tidying +tidytips tie +tieback +tiebacks +tiebreaker +tiebreakers +tieclasp +tieclasps +tied +tieing +tieless +tiemannite +tiemannites +tiepin +tiepins +tier +tierce +tierced +tiercel +tiercels +tierces +tiered +tiering +tiers +ties +tiff +tiffanies +tiffany +tiffed +tiffin +tiffined +tiffing +tiffining +tiffins +tiffs tiger +tigereye +tigereyes +tigerish +tigerishly +tigerishness +tigerishnesses +tigerlike +tigers tight +tighten +tightened +tightener +tighteners +tightening +tightens +tighter +tightest +tightfisted +tightfistedness +tightfistednesses +tightly +tightness +tightnesses +tightrope +tightropes +tights +tightwad +tightwads +tightwire +tightwires +tiglon +tiglons +tigon +tigons +tigress +tigresses +tigrish +tike +tikes +tiki +tikis +til +tilak +tilaks +tilapia +tilapias +tilburies +tilbury +tilde +tildes +tile +tiled +tilefish +tilefishes +tilelike +tiler +tilers +tiles +tiling +tilings till +tillable +tillage +tillages +tillandsia +tillandsias +tilled +tiller +tillered +tillering +tillerman +tillermen +tillers +tilling +tillite +tillites +tills +tils +tilt +tiltable +tilted +tilter +tilters +tilth +tilths +tilting +tiltmeter +tiltmeters +tilts +tiltyard +tiltyards +timarau +timaraus +timbal +timbale +timbales +timbals +timber +timberdoodle +timberdoodles +timbered +timberhead +timberheads +timbering +timberings +timberland +timberlands +timberline +timberlines +timberman +timbermen +timbers +timberwork +timberworks +timbral +timbre +timbrel +timbrelled +timbrels +timbres time +timecard +timecards +timed +timekeeper +timekeepers +timekeeping +timekeepings +timeless +timelessly +timelessness +timelessnesses +timelier +timeliest +timeline +timelines +timeliness +timelinesses +timely +timeous +timeously +timeout +timeouts +timepiece +timepieces +timepleaser +timepleasers +timer +timers +times +timesaver +timesavers +timesaving +timescale +timescales +timeserver +timeservers +timeserving +timeservings timetable +timetables +timework +timeworker +timeworkers +timeworks +timeworn +timid +timider +timidest +timidities +timidity +timidly +timidness +timidnesses +timing +timings +timocracies +timocracy +timocratic +timocratical +timolol +timolols +timorous +timorously +timorousness +timorousnesses +timothies +timothy +timpana +timpani +timpanist +timpanists +timpano +timpanum +timpanums tin +tinamou +tinamous +tincal +tincals +tinct +tincted +tincting +tinctorial +tinctorially +tincts +tincture +tinctured +tinctures +tincturing +tinder +tinderbox +tinderboxes +tinders +tindery +tine +tinea +tineal +tineas +tined +tineid +tineids +tines +tinfoil +tinfoils +tinful +tinfuls +ting +tinge +tinged +tingeing +tinges +tinging +tingle +tingled +tingler +tinglers +tingles +tinglier +tingliest +tingling +tinglingly +tingly +tings +tinhorn +tinhorns +tinier +tiniest +tinily +tininess +tininesses +tining +tinker +tinkered +tinkerer +tinkerers +tinkering +tinkers +tinkle +tinkled +tinkler +tinklers +tinkles +tinklier +tinkliest +tinkling +tinklings +tinkly +tinlike +tinman +tinmen +tinned +tinner +tinners +tinnier +tinniest +tinnily +tinniness +tinninesses +tinning +tinnitus +tinnituses +tinny +tinplate +tinplates +tins +tinsel +tinseled +tinseling +tinselled +tinselling +tinselly +tinsels +tinsmith +tinsmithing +tinsmithings +tinsmiths +tinstone +tinstones +tint +tinted +tinter +tinters +tinting +tintings +tintinnabulary +tintinnabulation +tintinnabulations +tintless +tints +tintype +tintypes +tinware +tinwares +tinwork +tinworks tiny tip +tipcart +tipcarts +tipcat +tipcats +tipi +tipis +tipless +tipoff +tipoffs +tippable +tipped +tipper +tippers +tippet +tippets +tippier +tippiest +tipping +tipple +tippled +tippler +tipplers +tipples +tippling +tippy +tippytoe +tippytoed +tippytoeing +tippytoes +tips +tipsier +tipsiest +tipsily +tipsiness +tipsinesses +tipstaff +tipstaffs +tipstaves +tipster +tipsters +tipstock +tipstocks +tipsy +tiptoe +tiptoed +tiptoeing +tiptoes +tiptop +tiptops +tirade +tirades +tiramisu +tiramisus tire tired +tireder +tiredest +tiredly +tiredness +tirednesses +tireless +tirelessly +tirelessness +tirelessnesses +tires tiresome +tiresomely +tiresomeness +tiresomenesses +tiring +tirl +tirled +tirling +tirls +tiro +tiros +tirrivee +tirrivees +tis +tisane +tisanes +tissual tissue +tissued +tissues +tissuey +tissuing +tissular +tit +titan +titanate +titanates +titaness +titanesses +titania +titanias +titanic +titanically +titaniferous +titanism +titanisms +titanite +titanites +titanium +titaniums +titanous +titans +titbit +titbits +titer +titers +titfer +titfers +tithable +tithe +tithed +tither +tithers +tithes +tithing +tithings +tithonia +tithonias +titi +titian +titians +titillate +titillated +titillates +titillating +titillatingly +titillation +titillations +titillative +titis +titivate +titivated +titivates +titivating +titivation +titivations +titlark +titlarks title +titled +titleholder +titleholders +titles +titling +titlist +titlists +titman +titmen +titmice +titmouse +titrable +titrant +titrants +titratable +titrate +titrated +titrates +titrating +titration +titrations +titrator +titrators +titre +titres +titrimetric +tits +titter +tittered +titterer +titterers +tittering +titters +tittie +titties +tittivate +tittivated +tittivates +tittivating +tittle +tittles +tittup +tittuped +tittuping +tittupped +tittupping +tittuppy +tittups +titty +titular +titularies +titularly +titulars +titulary +tivy +tizzies +tizzy +tmeses +tmesis to +toad +toadeater +toadeaters +toadfish +toadfishes +toadflax +toadflaxes +toadied +toadies +toadish +toadless +toadlike +toads +toadstone +toadstones +toadstool +toadstools +toady +toadying +toadyish +toadyism +toadyisms toast +toasted +toaster +toasters +toastier +toastiest +toasting +toastmaster +toastmasters +toastmistress +toastmistresses +toasts +toasty tobacco +tobaccoes +tobacconist +tobacconists +tobaccos +tobies +toboggan +tobogganed +tobogganer +tobogganers +tobogganing +tobogganings +tobogganist +tobogganists +toboggans +toby +toccata +toccatas +toccate +tocher +tochered +tochering +tochers +tocologies +tocology +tocopherol +tocopherols +tocsin +tocsins +tod today +todays +toddies +toddle +toddled +toddler +toddlerhood +toddlerhoods +toddlers +toddles +toddling +toddy +todies +tods +tody +toe +toea +toecap +toecaps +toed +toehold +toeholds +toeing +toeless +toelike +toenail +toenailed +toenailing +toenails +toepiece +toepieces +toeplate +toeplates +toes +toeshoe +toeshoes +toff +toffee +toffees +toffies +toffs +toffy +toft +tofts +tofu +tofus +tog +toga +togae +togaed +togas +togate +togated together +togetherness +togethernesses +togged +toggeries +toggery +togging +toggle +toggled +toggler +togglers +toggles +toggling +togs +togue +togues +toil +toile +toiled +toiler +toilers +toiles toilet +toileted +toileting +toiletries +toiletry +toilets +toilette +toilettes +toilful +toilfully +toiling +toils +toilsome +toilsomely +toilsomeness +toilsomenesses +toilworn +toit +toited +toiting +toits +tokamak +tokamaks +tokay +tokays +toke +toked +token +tokened +tokening +tokenism +tokenisms +tokens +toker +tokers +tokes +toking +tokologies +tokology +tokomak +tokomaks +tokonoma +tokonomas +tola +tolan +tolane +tolanes +tolans +tolas +tolbooth +tolbooths +tolbutamide +tolbutamides +told +tole +toled +toledo +toledos +tolerabilities +tolerability +tolerable +tolerably +tolerance +tolerances +tolerant +tolerantly tolerate +tolerated +tolerates +tolerating +toleration +tolerations +tolerative +tolerator +tolerators +toles +tolidin +tolidine +tolidines +tolidins +toling +toll +tollage +tollages +tollbar +tollbars +tollbooth +tollbooths +tolled +toller +tollers +tollgate +tollgates +tollhouse +tollhouses +tolling +tollman +tollmen +tolls +tollway +tollways +tolu +toluate +toluates +toluene +toluenes +toluic +toluid +toluide +toluides +toluidin +toluidine +toluidines +toluidins +toluids +toluol +toluole +toluoles +toluols +tolus +toluyl +toluyls +tolyl +tolyls +tom +tomahawk +tomahawked +tomahawking +tomahawks +tomalley +tomalleys +toman +tomans +tomatillo +tomatillos tomato +tomatoes +tomatoey tomb +tombac +tomback +tombacks +tombacs +tombak +tombaks +tombal +tombed +tombing +tombless +tomblike +tombola +tombolas +tombolo +tombolos +tomboy +tomboyish +tomboyishness +tomboyishnesses +tomboys +tombs +tombstone +tombstones +tomcat +tomcats +tomcatted +tomcatting +tomcod +tomcods +tome +tomenta +tomentose +tomentum +tomes +tomfool +tomfooleries +tomfoolery +tomfools +tommed +tommies +tomming +tommy +tommyrot +tommyrots +tomogram +tomograms +tomographic +tomographies +tomography tomorrow +tomorrows +tompion +tompions +toms +tomtit +tomtits ton +tonal +tonalities +tonality +tonally +tondi +tondo +tondos +tone +tonearm +tonearms +toned +toneless +tonelessly +tonelessness +tonelessnesses +toneme +tonemes +tonemic +toner +toners +tones +tonetic +tonetically +tonetics +tonette +tonettes +toney +tong +tonga +tongas +tonged +tonger +tongers +tonging +tongman +tongmen +tongs tongue +tongued +tongueless +tonguelike +tongues +tonguing +tonguings +tonic +tonically +tonicities +tonicity +tonics +tonier +toniest tonight +tonights +toning +tonish +tonishly +tonlet +tonlets +tonnage +tonnages +tonne +tonneau +tonneaus +tonneaux +tonner +tonners +tonnes +tonnish +tonometer +tonometers +tonometries +tonometry +tonoplast +tonoplasts +tons +tonsil +tonsilar +tonsillar +tonsillectomies +tonsillectomy +tonsillites +tonsillitides +tonsillitis +tonsillitises +tonsils +tonsorial +tonsure +tonsured +tonsures +tonsuring +tontine +tontines +tonus +tonuses +tony too +took tool +toolbox +toolboxes +tooled +tooler +toolers +toolhead +toolheads +toolholder +toolholders +toolhouse +toolhouses +tooling +toolings +toolless +toolmaker +toolmakers +toolmaking +toolmakings +toolroom +toolrooms +tools +toolshed +toolsheds +toom +toon +toons +toot +tooted +tooter +tooters tooth toothache +toothaches toothbrush +toothbrushes +toothbrushing +toothbrushings +toothed +toothier +toothiest +toothily +toothing +toothless +toothlike toothpaste +toothpastes +toothpick +toothpicks +tooths +toothsome +toothsomely +toothsomeness +toothsomenesses +toothwort +toothworts +toothy +tooting +tootle +tootled +tootler +tootlers +tootles +tootling +toots +tootses +tootsie +tootsies +tootsy top +topaz +topazes +topazine +topcoat +topcoats +topcross +topcrosses +topdressing +topdressings +tope +toped +topee +topees +toper +topers +topes +topflight +topful +topfull +topgallant +topgallants +toph +tophe +tophes +tophi +tophs +tophus +topi +topiaries +topiary topic +topical +topicalities +topicality +topically +topics +toping +topis +topkick +topkicks +topknot +topknots +topless +toplessness +toplessnesses +topline +toplines +toploftical +toploftier +toploftiest +toploftily +toploftiness +toploftinesses +toplofty +topmast +topmasts +topminnow +topminnows +topmost +topnotch +topnotcher +topnotchers +topocentric +topographer +topographers +topographic +topographical +topographically +topographies +topography +topoi +topological +topologically +topologies +topologist +topologists +topology +toponym +toponymic +toponymical +toponymies +toponymist +toponymists +toponyms +toponymy +topos +topotype +topotypes +topped +topper +toppers +topping +toppings +topple +toppled +topples +toppling +tops +topsail +topsails +topside +topsider +topsiders +topsides +topsoil +topsoiled +topsoiling +topsoils +topspin +topspins +topstitch +topstitched +topstitches +topstitching +topstone +topstones +topwork +topworked +topworking +topworks +toque +toques +toquet +toquets +tor +tora +torah +torahs +toras +torc +torch +torchbearer +torchbearers +torched +torchere +torcheres +torches +torchier +torchiers +torchiest +torching +torchlight +torchlights +torchon +torchons +torchwood +torchwoods +torchy +torcs +tore +toreador +toreadors +torero +toreros +tores +toreutic +toreutics +tori +toric +tories +torii +torment +tormented +tormenter +tormenters +tormentil +tormentils +tormenting +tormentor +tormentors +torments +torn +tornadic +tornado +tornadoes +tornados +tornillo +tornillos +toro +toroid +toroidal +toroidally +toroids +toros +torose +torosities +torosity +torot +toroth +torous +torpedo +torpedoed +torpedoes +torpedoing +torpedos +torpid +torpidities +torpidity +torpidly +torpids +torpor +torpors +torquate +torque +torqued +torquer +torquers +torques +torqueses +torquing +torr +torrefied +torrefies +torrefy +torrefying +torrent +torrential +torrentially +torrents +torrid +torrider +torridest +torridities +torridity +torridly +torridness +torridnesses +torrified +torrifies +torrify +torrifying +tors +torsade +torsades +torse +torses +torsi +torsion +torsional +torsionally +torsions +torsk +torsks +torso +torsos +tort +torte +tortellini +tortellinis +torten +tortes +torticollis +torticollises +tortile +tortilla +tortillas +tortious +tortiously tortoise +tortoises +tortoiseshell +tortoiseshells +tortoni +tortonis +tortricid +tortricids +tortrix +tortrixes +torts +tortuosities +tortuosity +tortuous +tortuously +tortuousness +tortuousnesses +torture +tortured +torturer +torturers +tortures +torturing +torturous +torturously +torula +torulae +torulas +torus +tory +tosh +toshes +toss +tossed +tosser +tossers +tosses +tossing +tosspot +tosspots +tossup +tossups +tost +tostada +tostadas +tostado +tostados +tot +totable total +totaled +totaling +totalisator +totalisators +totalise +totalised +totalises +totalising +totalism +totalisms +totalist +totalistic +totalists +totalitarian +totalitarianism +totalitarianisms +totalitarianize +totalitarianized +totalitarianizes +totalitarianizing +totalitarians +totalities +totality +totalizator +totalizators +totalize +totalized +totalizer +totalizers +totalizes +totalizing +totalled +totalling +totally +totals +tote +toted +totem +totemic +totemism +totemisms +totemist +totemistic +totemists +totemite +totemites +totems +toter +toters +totes +tother +toting +totipotencies +totipotency +totipotent +tots +totted +totter +tottered +totterer +totterers +tottering +totteringly +totters +tottery +totting +toucan +toucans touch +touchable +touchback +touchbacks +touchdown +touchdowns +touche +touched +toucher +touchers +touches +touchhole +touchholes +touchier +touchiest +touchily +touchiness +touchinesses +touching +touchingly +touchline +touchlines +touchmark +touchmarks +touchstone +touchstones +touchup +touchups +touchwood +touchwoods +touchy tough +toughed +toughen +toughened +toughening +toughens +tougher +toughest +toughie +toughies +toughing +toughish +toughly +toughness +toughnesses +toughs +toughy +toupee +toupees tour +touraco +touracos +tourbillion +tourbillions +tourbillon +tourbillons +toured +tourer +tourers +touring +tourings tourism +tourisms tourist +touristic +touristically +tourists +touristy +tourmaline +tourmalines tournament +tournaments +tournedos +tourney +tourneyed +tourneying +tourneys +tourniquet +tourniquets +tours +touse +toused +touses +tousing +tousle +tousled +tousles +tousling +tout +touted +touter +touters +touting +touts +touzle +touzled +touzles +touzling +tovarich +tovariches +tovarish +tovarishes +tow +towage +towages toward +towardliness +towardlinesses +towardly towards +towaway +towaways +towboat +towboats +towed towel +toweled +towelette +towelettes +toweling +towelings +towelled +towelling +towellings +towels tower +towered +towerier +toweriest +towering +toweringly +towerlike +towers +towery +towhead +towheaded +towheads +towhee +towhees +towie +towies +towing +towline +towlines +towmond +towmonds +towmont +towmonts town +townee +townees +townfolk +townhome +townhomes +townhouse +townhouses +townie +townies +townish +townless +townlet +townlets +towns +townscape +townscapes +townsfolk +township +townships +townsman +townsmen +townspeople +townswoman +townswomen +townwear +towny +towpath +towpaths +towrope +towropes +tows +towy +toxaemia +toxaemias +toxaemic +toxaphene +toxaphenes +toxemia +toxemias +toxemic +toxic +toxical +toxicant +toxicants +toxicities +toxicity +toxicologic +toxicological +toxicologically +toxicologies +toxicologist +toxicologists +toxicology +toxicoses +toxicosis +toxics +toxigenic +toxigenicities +toxigenicity +toxin +toxine +toxines +toxins +toxoid +toxoids +toxophilies +toxophilite +toxophilites +toxophily +toxoplasma +toxoplasmas +toxoplasmic +toxoplasmoses +toxoplasmosis toy +toyed +toyer +toyers +toying +toyish +toyless +toylike +toyo +toyon +toyons +toyos +toys +toyshop +toyshops +trabeate +trabeated +trabeation +trabeations +trabecula +trabeculae +trabecular +trabeculas +trabeculate +trace +traceabilities +traceability +traceable +traced +traceless +tracer +traceried +traceries +tracers +tracery +traces +trachea +tracheae +tracheal +tracheary +tracheas +tracheate +tracheated +tracheid +tracheids +tracheites +tracheitides +tracheitis +tracheitises +tracheobronchial +tracheolar +tracheole +tracheoles +tracheophyte +tracheophytes +tracheostomies +tracheostomy +tracheotomies +tracheotomy +trachle +trachled +trachles +trachling +trachoma +trachomas +trachyte +trachytes +trachytic +tracing +tracings track +trackage +trackages +trackball +trackballs +tracked +tracker +trackers +tracking +trackings +tracklayer +tracklayers +tracklaying +tracklayings +trackless +trackman +trackmen +tracks +trackside +tracksides +tracksuit +tracksuits +trackwalker +trackwalkers +trackway +trackways +tract +tractabilities +tractability +tractable +tractableness +tractablenesses +tractably +tractate +tractates +tractile +traction +tractional +tractions +tractive tractor +tractors +tracts +trad +tradable trade +tradeable +tradecraft +tradecrafts +traded +trademark +trademarked +trademarking +trademarks +tradeoff +tradeoffs +trader +traders +trades +tradescantia +tradescantias +tradesman +tradesmen +tradespeople +trading tradition traditional +traditionalism +traditionalisms +traditionalist +traditionalistic +traditionalists +traditionalize +traditionalized +traditionalizes +traditionalizing +traditionally +traditionary +traditionless +traditions +traditor +traditores +traduce +traduced +traducement +traducements +traducer +traducers +traduces +traducing traffic +trafficabilities +trafficability +trafficable +trafficked +trafficker +traffickers +trafficking +traffics +tragacanth +tragacanths +tragedian +tragedians +tragedienne +tragediennes +tragedies +tragedy +tragi +tragic +tragical +tragically +tragicomedies +tragicomedy +tragicomic +tragicomical +tragics +tragopan +tragopans +tragus +traik +traiked +traiking +traiks +trail +trailblazer +trailblazers +trailblazing +trailbreaker +trailbreakers +trailed +trailer +trailerable +trailered +trailering +trailerings +trailerist +trailerists +trailerite +trailerites +trailers +trailhead +trailheads +trailing +trailless +trails +trailside train +trainabilities +trainability +trainable +trainband +trainbands +trainbearer +trainbearers +trained +trainee +trainees +traineeship +traineeships +trainer +trainers +trainful +trainfuls training +trainings +trainload +trainloads +trainman +trainmen +trains +trainway +trainways +traipse +traipsed +traipses +traipsing +trait +traitor +traitoress +traitoresses +traitorous +traitorously +traitors +traitress +traitresses +traits +traject +trajected +trajecting +trajection +trajections +trajectories +trajectory +trajects tram +tramcar +tramcars +tramel +trameled +trameling +tramell +tramelled +tramelling +tramells +tramels +tramless +tramline +tramlines +trammed +trammel +trammeled +trammeling +trammelled +trammelling +trammels +tramming +tramontane +tramontanes +tramp +tramped +tramper +trampers +tramping +trampish +trample +trampled +trampler +tramplers +tramples +trampling +trampoline +trampoliner +trampoliners +trampolines +trampolining +trampolinings +trampolinist +trampolinists +tramps +tramroad +tramroads +trams +tramway +tramways +trance +tranced +trancelike +trances +tranche +tranches +trancing +trangam +trangams +trank +tranks +tranq +tranqs +tranquil +tranquiler +tranquilest +tranquilities +tranquility +tranquilize +tranquilized +tranquilizer +tranquilizers +tranquilizes +tranquilizing +tranquiller +tranquillest +tranquillities +tranquillity +tranquillize +tranquillized +tranquillizer +tranquillizers +tranquillizes +tranquillizing +tranquilly +tranquilness +tranquilnesses +trans +transact +transacted +transacting +transactinide +transaction +transactional +transactions +transactor +transactors +transacts +transalpine +transaminase +transaminases +transamination +transaminations +transatlantic +transaxle +transaxles +transceiver +transceivers +transcend +transcended +transcendence +transcendences +transcendencies +transcendency +transcendent +transcendental +transcendentalism +transcendentalisms +transcendentalist +transcendentalists +transcendentally +transcendently +transcending +transcends +transcontinental +transcribe +transcribed +transcriber +transcribers +transcribes +transcribing +transcript +transcriptase +transcriptases +transcription +transcriptional +transcriptionally +transcriptionist +transcriptionists +transcriptions +transcripts +transcultural +transcutaneous +transdermal +transdisciplinary +transduce +transduced +transducer +transducers +transduces +transducing +transductant +transductants +transduction +transductional +transductions +transect +transected +transecting +transection +transections +transects +transept +transeptal +transepts +transfect +transfected +transfecting +transfection +transfections +transfects +transfer +transferabilities +transferability +transferable +transferal +transferals +transferase +transferases +transferee +transferees +transference +transferences +transferential +transferor +transferors +transferrable +transferred +transferrer +transferrers +transferrin +transferring +transferrins +transfers +transfiguration +transfigurations +transfigure +transfigured +transfigures +transfiguring +transfinite +transfix +transfixed +transfixes +transfixing +transfixion +transfixions +transfixt transform +transformable +transformation +transformational +transformationalist +transformationalists +transformationally +transformations +transformative +transformed +transformer +transformers +transforming +transforms +transfusable +transfuse +transfused +transfuses +transfusible +transfusing +transfusion +transfusional +transfusions +transgenerational +transgenic +transgress +transgressed +transgresses +transgressing +transgression +transgressions +transgressive +transgressor +transgressors +tranship +transhipped +transhipping +tranships +transhistorical +transhumance +transhumances +transhumant +transhumants +transience +transiences +transiencies +transiency +transient +transiently +transients +transilluminate +transilluminated +transilluminates +transilluminating +transillumination +transilluminations +transilluminator +transilluminators +transistor +transistorise +transistorised +transistorises +transistorising +transistorization +transistorizations +transistorize +transistorized +transistorizes +transistorizing +transistors +transit +transited +transiting +transition +transitional +transitionally +transitions +transitive +transitively +transitiveness +transitivenesses +transitivities +transitivity +transitorily +transitoriness +transitorinesses +transitory +transits +translatabilities +translatability +translatable translate +translated +translates +translating translation +translational +translations +translative translator +translators +translatory +transliterate +transliterated +transliterates +transliterating +transliteration +transliterations +translocate +translocated +translocates +translocating +translocation +translocations +translucence +translucences +translucencies +translucency +translucent +translucently +transmarine +transmembrane +transmigrate +transmigrated +transmigrates +transmigrating +transmigration +transmigrations +transmigrator +transmigrators +transmigratory +transmissibilities +transmissibility +transmissible +transmission +transmissions +transmissive +transmissivities +transmissivity +transmissometer +transmissometers +transmit +transmits +transmittable +transmittal +transmittals +transmittance +transmittances +transmitted +transmitter +transmitters +transmitting +transmogrification +transmogrifications +transmogrified +transmogrifies +transmogrify +transmogrifying +transmontane +transmountain +transmutable +transmutation +transmutations +transmutative +transmute +transmuted +transmutes +transmuting +transnational +transnationalism +transnationalisms +transnatural +transoceanic +transom +transoms +transonic +transpacific +transparence +transparences +transparencies +transparency transparent +transparentize +transparentized +transparentizes +transparentizing +transparently +transparentness +transparentnesses +transpersonal +transpicuous +transpierce +transpierced +transpierces +transpiercing +transpiration +transpirational +transpirations +transpire +transpired +transpires +transpiring +transplacental +transplacentally +transplant +transplantabilities +transplantability +transplantable +transplantation +transplantations +transplanted +transplanter +transplanters +transplanting +transplants +transpolar +transponder +transponders +transpontine transport +transportabilities +transportability +transportable +transportation +transportational +transportations +transported +transportee +transportees +transporter +transporters +transporting +transports +transposable +transpose +transposed +transposes +transposing +transposition +transpositional +transpositions +transposon +transposons +transsexual +transsexualism +transsexualisms +transsexualities +transsexuality +transsexuals +transshape +transshaped +transshapes +transshaping +transship +transshipment +transshipments +transshipped +transshipping +transships +transsonic +transthoracic +transthoracically +transubstantial +transubstantiate +transubstantiated +transubstantiates +transubstantiating +transubstantiation +transubstantiations +transudate +transudates +transudation +transudations +transude +transuded +transudes +transuding +transuranic +transuranics +transuranium +transvaluate +transvaluated +transvaluates +transvaluating +transvaluation +transvaluations +transvalue +transvalued +transvalues +transvaluing +transversal +transversals +transverse +transversely +transverses +transvestism +transvestisms +transvestite +transvestites trap +trapan +trapanned +trapanning +trapans +trapball +trapballs +trapdoor +trapdoors +trapes +trapesed +trapeses +trapesing +trapeze +trapezes +trapezia +trapezii +trapezist +trapezists +trapezium +trapezius +trapeziuses +trapezohedra +trapezohedron +trapezohedrons +trapezoid +trapezoidal +trapezoids +traplike +trapline +traplines +trapnest +trapnested +trapnesting +trapnests +trappean +trapped +trapper +trappers +trapping +trappings +trappose +trappous +traprock +traprocks +traps +trapshooter +trapshooters +trapshooting +trapshootings +trapt +trapunto +trapuntos +trash +trashed +trashes +trashier +trashiest +trashily +trashiness +trashinesses +trashing +trashman +trashmen +trashy +trass +trasses +trattoria +trattorias +trattorie +trauchle +trauchled +trauchles +trauchling +trauma +traumas +traumata +traumatic +traumatically +traumatise +traumatised +traumatises +traumatising +traumatism +traumatisms +traumatization +traumatizations +traumatize +traumatized +traumatizes +traumatizing +travail +travailed +travailing +travails +trave travel +traveled traveler +travelers +traveling +travelled traveller +travellers +travelling +travelog +travelogs +travelogue +travelogues +travels +traversable +traversal +traversals +traverse +traversed +traverser +traversers +traverses +traversing +travertine +travertines +traves +travestied +travesties +travesty +travestying +travois +travoise +travoises +trawl +trawled +trawler +trawlerman +trawlermen +trawlers +trawley +trawleys +trawling +trawlnet +trawlnets +trawls +tray +trayful +trayfuls +trays +treacheries +treacherous +treacherously +treacherousness +treacherousnesses +treachery +treacle +treacles +treacly +tread +treaded +treader +treaders +treading +treadle +treadled +treadler +treadlers +treadles +treadless +treadling +treadmill +treadmills +treads +treason +treasonable +treasonably +treasonous +treasons +treasurable treasure +treasured +treasurer +treasurers +treasurership +treasurerships +treasures +treasuries +treasuring +treasury treat +treatabilities +treatability +treatable +treated +treater +treaters +treaties +treating +treatise +treatises treatment +treatments +treats +treaty +treble +trebled +trebles +trebling +trebly +trebuchet +trebuchets +trebucket +trebuckets +trecento +trecentos +treddle +treddled +treddles +treddling +tredecillion +tredecillions tree +treed +treehopper +treehoppers +treeing +treelawn +treelawns +treeless +treelike +treen +treenail +treenails +treens +treenware +treenwares +trees +treetop +treetops +tref +trefah +trefoil +trefoils +trehala +trehalas +trehalose +trehaloses +treillage +treillages +trek +trekked +trekker +trekkers +trekking +treks +trellis +trellised +trellises +trellising +trelliswork +trellisworks +trematode +trematodes tremble +trembled +trembler +tremblers +trembles +tremblier +trembliest +trembling +trembly +tremendous +tremendously +tremendousness +tremendousnesses +tremolite +tremolites +tremolitic +tremolo +tremolos +tremor +tremors +tremulant +tremulous +tremulously +tremulousness +tremulousnesses +trenail +trenails +trench +trenchancies +trenchancy +trenchant +trenchantly +trenched +trencher +trencherman +trenchermen +trenchers +trenches +trenching trend +trended +trendier +trendies +trendiest +trendily +trendiness +trendinesses +trending +trends +trendsetter +trendsetters +trendsetting +trendy +trepan +trepanation +trepanations +trepang +trepangs +trepanned +trepanning +trepans +trephination +trephinations +trephine +trephined +trephines +trephining +trepid +trepidant +trepidation +trepidations +treponema +treponemal +treponemas +treponemata +treponematoses +treponematosis +treponeme +treponemes +trespass +trespassed +trespasser +trespassers +trespasses +trespassing +tress +tressed +tressel +tressels +tresses +tressier +tressiest +tressour +tressours +tressure +tressures +tressy +trestle +trestles +trestlework +trestleworks +tret +tretinoin +tretinoins +trets +trevet +trevets +trews +trey +treys +triable +triac +triacetate +triacetates +triacid +triacids +triacs +triad +triadic +triadically +triadics +triadism +triadisms +triads +triage +triaged +triages +triaging trial +trialogue +trialogues +trials +triamcinolone +triamcinolones triangle +triangles +triangular +triangularities +triangularity +triangularly +triangulate +triangulated +triangulates +triangulating +triangulation +triangulations +triarchies +triarchy +triathlete +triathletes +triathlon +triathlons +triatomic +triaxial +triaxialities +triaxiality +triazin +triazine +triazines +triazins +triazole +triazoles +tribade +tribades +tribadic +tribal +tribalism +tribalisms +tribally +tribasic +tribe +tribes +tribesman +tribesmen +tribespeople +triboelectric +triboelectricities +triboelectricity +tribological +tribologies +tribologist +tribologists +tribology +triboluminescence +triboluminescences +triboluminescent +tribrach +tribrachic +tribrachs +tribulate +tribulated +tribulates +tribulating +tribulation +tribulations +tribunal +tribunals +tribunate +tribunates +tribune +tribunes +tribuneship +tribuneships +tributaries +tributary +tribute +tributes +tricarboxylic +trice +triced +triceps +tricepses +triceratops +triceratopses +trices +trichiases +trichiasis +trichina +trichinae +trichinal +trichinas +trichinize +trichinized +trichinizes +trichinizing +trichinoses +trichinosis +trichinosises +trichinous +trichite +trichites +trichlorfon +trichlorfons +trichloroethylene +trichloroethylenes +trichlorphon +trichlorphons +trichocyst +trichocysts +trichogyne +trichogynes +trichoid +trichologies +trichologist +trichologists +trichology +trichome +trichomes +trichomonacidal +trichomonacide +trichomonacides +trichomonad +trichomonads +trichomonal +trichomoniases +trichomoniasis +trichopteran +trichopterans +trichothecene +trichothecenes +trichotomies +trichotomous +trichotomously +trichotomy +trichromat +trichromatic +trichromatism +trichromatisms +trichromats +tricing trick +tricked +tricker +trickeries +trickers +trickery +trickie +trickier +trickiest +trickily +trickiness +trickinesses +tricking +trickish +trickishly +trickishness +trickishnesses +trickle +trickled +trickles +tricklier +trickliest +trickling +trickly +tricks +tricksier +tricksiest +tricksiness +tricksinesses +trickster +tricksters +tricksy +tricky +triclad +triclads +triclinia +triclinic +triclinium +tricolette +tricolettes +tricolor +tricolored +tricolors +tricorn +tricorne +tricornered +tricornes +tricorns +tricot +tricotine +tricotines +tricots +trictrac +trictracs +tricuspid +tricuspids +tricycle +tricycles +tricyclic +tricyclics +trident +tridents +tridimensional +tridimensionalities +tridimensionality +triduum +triduums +tried +triene +trienes +triennia +triennial +triennially +triennials +triennium +trienniums +triens +trientes +trier +trierarch +trierarchies +trierarchs +trierarchy +triers +tries +triethyl +trifecta +trifectas +trifid +trifle +trifled +trifler +triflers +trifles +trifling +triflings +trifluoperazine +trifluoperazines +trifluralin +trifluralins +trifocal +trifocals +trifold +trifoliate +trifoliolate +trifolium +trifoliums +triforia +triforium +triform +trifurcate +trifurcated +trifurcates +trifurcating +trifurcation +trifurcations +trig +trigeminal +trigeminals +trigged +trigger +triggered +triggerfish +triggerfishes +triggering +triggerman +triggermen +triggers +triggest +trigging +trigly +triglyceride +triglycerides +triglyph +triglyphic +triglyphical +triglyphs +trigness +trignesses +trigo +trigon +trigonal +trigonally +trigonometric +trigonometrical +trigonometrically +trigonometries +trigonometry +trigons +trigos +trigram +trigrams +trigraph +trigraphic +trigraphs +trigs +trihalomethane +trihalomethanes +trihedra +trihedral +trihedrals +trihedron +trihedrons +trihybrid +trihybrids +trihydroxy +triiodothyronine +triiodothyronines +trijet +trijets +trike +trikes +trilateral +trilbies +trilby +trilinear +trilingual +trilingually +triliteral +triliteralism +triliteralisms +triliterals +trill +trilled +triller +trillers +trilling +trillion +trillions +trillionth +trillionths +trillium +trilliums +trills +trilobal +trilobate +trilobed +trilobite +trilobites +trilogies +trilogy +trim +trimaran +trimarans +trimer +trimeric +trimerous +trimers +trimester +trimesters +trimeter +trimeters +trimethoprim +trimethoprims +trimetrogon +trimetrogons +trimly +trimmed +trimmer +trimmers +trimmest +trimming +trimmings +trimness +trimnesses +trimonthly +trimorph +trimorphic +trimorphs +trimotor +trimotors +trims +trinal +trinary +trindle +trindled +trindles +trindling +trine +trined +trines +trining +trinitarian +trinities +trinitrotoluene +trinitrotoluenes +trinity +trinket +trinketed +trinketer +trinketers +trinketing +trinketries +trinketry +trinkets +trinkums +trinocular +trinodal +trinomial +trinomials +trinucleotide +trinucleotides +trio +triode +triodes +triol +triolet +triolets +triols +trios +triose +trioses +trioxid +trioxide +trioxides +trioxids trip +tripack +tripacks +tripart +tripartite +tripe +tripedal +tripes +triphase +triphenylmethane +triphenylmethanes +triphosphate +triphosphates +triphthong +triphthongal +triphthongs +tripinnate +tripinnately +triplane +triplanes +triple +tripled +triples +triplet +tripletail +tripletails +triplets +triplex +triplexes +triplicate +triplicated +triplicates +triplicating +triplication +triplications +triplicities +triplicity +tripling +triplite +triplites +triploblastic +triploid +triploidies +triploids +triploidy +triply +tripod +tripodal +tripodic +tripodies +tripods +tripody +tripoli +tripolis +tripos +triposes +tripped +tripper +trippers +trippet +trippets +trippier +trippiest +tripping +trippingly +trippings +trippy +trips +triptane +triptanes +triptyca +triptycas +triptych +triptychs +tripwire +tripwires +triquetrous +triradiate +trireme +triremes +trisaccharide +trisaccharides +triscele +trisceles +trisect +trisected +trisecting +trisection +trisections +trisector +trisectors +trisects +triseme +trisemes +trisemic +trishaw +trishaws +triskaidekaphobia +triskaidekaphobias +triskele +triskeles +triskelion +triskelions +trismic +trismus +trismuses +trisoctahedra +trisoctahedron +trisoctahedrons +trisome +trisomes +trisomic +trisomics +trisomies +trisomy +tristate +triste +tristearin +tristearins +tristeza +tristezas +tristful +tristfully +tristfulness +tristfulnesses +tristich +tristichs +tristimulus +trisubstituted +trisulfide +trisulfides +trisyllabic +trisyllable +trisyllables +trite +tritely +triteness +tritenesses +triter +tritest +tritheism +tritheisms +tritheist +tritheistic +tritheistical +tritheists +trithing +trithings +tritiated +triticale +triticales +triticum +triticums +tritium +tritiums +tritoma +tritomas +triton +tritone +tritones +tritons +triturable +triturate +triturated +triturates +triturating +trituration +triturations +triturator +triturators +triumph +triumphal +triumphalism +triumphalisms +triumphalist +triumphalists +triumphant +triumphantly +triumphed +triumphing +triumphs +triumvir +triumvirate +triumvirates +triumviri +triumvirs +triune +triunes +triunities +triunity +trivalent +trivalve +trivalves +trivet +trivets +trivia +trivial +trivialise +trivialised +trivialises +trivialising +trivialist +trivialists +trivialities +triviality +trivialization +trivializations +trivialize +trivialized +trivializes +trivializing +trivially +trivium +triweeklies +triweekly +troak +troaked +troaking +troaks +trocar +trocars +trochaic +trochaics +trochal +trochanter +trochanteral +trochanteric +trochanters +trochar +trochars +troche +trochee +trochees +troches +trochil +trochili +trochils +trochilus +trochlea +trochleae +trochlear +trochlears +trochleas +trochoid +trochoidal +trochoids +trochophore +trochophores +trock +trocked +trocking +trocks +trod +trodden +trode +troffer +troffers +troglodyte +troglodytes +troglodytic +trogon +trogons +troika +troikas +troilism +troilisms +troilite +troilites +troilus +troiluses +trois +troke +troked +trokes +troking +troland +trolands +troll +trolled +troller +trollers +trolley trolleybus +trolleybuses +trolleybusses +trolleyed +trolleying +trolleys +trollied +trollies +trolling +trollings +trollop +trollops +trollopy +trolls +trolly +trollying +trombone +trombones +trombonist +trombonists +trommel +trommels +tromp +trompe +tromped +trompes +tromping +tromps +trona +tronas +trone +trones troop +trooped +trooper +troopers +troopial +troopials +trooping +troops +troopship +troopships +trooz +trop +trope +tropes +trophallaxes +trophallaxis +trophic +trophically +trophied +trophies +trophoblast +trophoblastic +trophoblasts +trophozoite +trophozoites +trophy +trophying +tropic +tropical +tropicalize +tropicalized +tropicalizes +tropicalizing +tropically +tropics +tropin +tropine +tropines +tropins +tropism +tropisms +tropistic +tropocollagen +tropocollagens +tropologic +tropological +tropologically +tropomyosin +tropomyosins +troponin +troponins +tropopause +tropopauses +troposphere +tropospheres +tropospheric +tropotaxes +tropotaxis +trot +troth +trothed +trothing +trothplight +trothplighted +trothplighting +trothplights +troths +trotline +trotlines +trots +trotted +trotter +trotters +trotting +trotyl +trotyls +troubadour +troubadours trouble +troubled +troublemaker +troublemakers +troublemaking +troublemakings +troubler +troublers +troubles +troubleshoot +troubleshooter +troubleshooters +troubleshooting +troubleshoots +troubleshot troublesome +troublesomely +troublesomeness +troublesomenesses +troubling +troublous +troublously +troublousness +troublousnesses +trough +troughs +trounce +trounced +trouncer +trouncers +trounces +trouncing +troupe +trouped +trouper +troupers +troupes +troupial +troupials +trouping +trouser trousers +trousseau +trousseaus +trousseaux +trout +troutier +troutiest +trouts +trouty +trouvere +trouveres +trouveur +trouveurs +trove +trover +trovers +troves +trow +trowed +trowel +troweled +troweler +trowelers +troweling +trowelled +trowelling +trowels +trowing +trows +trowsers +trowth +trowths +troy +troys +truancies +truancy +truant +truanted +truanting +truantries +truantry +truants +truce +truced +truces +trucing truck +truckage +truckages +trucked +trucker +truckers +truckful +truckfuls +trucking +truckings +truckle +truckled +truckler +trucklers +truckles +truckline +trucklines +truckling +truckload +truckloads +truckman +truckmaster +truckmasters +truckmen +trucks +truculence +truculences +truculencies +truculency +truculent +truculently +trudge +trudged +trudgen +trudgens +trudgeon +trudgeons +trudger +trudgers +trudges +trudging true +trueblue +trueblues +trueborn +truebred +trued +truehearted +trueheartedness +trueheartednesses +trueing +truelove +trueloves +trueness +truenesses +truepennies +truepenny +truer +trues +truest +truffe +truffes +truffle +truffled +truffles +trug +trugs +truing +truism +truisms +truistic +trull +trulls truly +trumeau +trumeaux +trump +trumped +trumperies +trumpery +trumpet +trumpeted +trumpeter +trumpeters +trumpeting +trumpetlike +trumpets +trumping +trumps +truncate +truncated +truncates +truncating +truncation +truncations +truncheon +truncheoned +truncheoning +truncheons +trundle +trundled +trundler +trundlers +trundles +trundling trunk +trunked +trunkfish +trunkfishes +trunkful +trunkfuls +trunks +trunksful +trunnel +trunnels +trunnion +trunnions +truss +trussed +trusser +trussers +trusses +trussing +trussings trust +trustabilities +trustability +trustable +trustbuster +trustbusters +trusted +trustee +trusteed +trusteeing +trustees +trusteeship +trusteeships +truster +trusters +trustful +trustfully +trustfulness +trustfulnesses +trustier +trusties +trustiest +trustily +trustiness +trustinesses +trusting +trustingly +trustingness +trustingnesses +trustless +trustor +trustors +trusts +trustworthily +trustworthiness +trustworthinesses +trustworthy +trusty truth +truthful +truthfully +truthfulness +truthfulnesses +truths try -tshirt +trying +tryingly +tryma +trymata +tryout +tryouts +trypanosome +trypanosomes +trypanosomiases +trypanosomiasis +trypsin +trypsinogen +trypsinogens +trypsins +tryptamine +tryptamines +tryptic +tryptophan +tryptophane +tryptophanes +tryptophans +trysail +trysails +tryst +tryste +trysted +tryster +trysters +trystes +trysting +trysts +tryworks +tsade +tsades +tsadi +tsadis +tsar +tsardom +tsardoms +tsarevna +tsarevnas +tsarina +tsarinas +tsarism +tsarisms +tsarist +tsarists +tsaritza +tsaritzas +tsars +tsetse +tsetses +tsimmes +tsimmeses +tsk +tsked +tsking +tsks +tsktsk +tsktsked +tsktsking +tsktsks +tsooris +tsores +tsoris +tsorriss +tsuba +tsunami +tsunamic +tsunamis +tsuris +tsutsugamushi +tuatara +tuataras +tuatera +tuateras +tub +tuba +tubae +tubaist +tubaists +tubal +tubas +tubate +tubbable +tubbed +tubber +tubbers +tubbier +tubbiest +tubbing +tubby tube +tubed +tubeless +tubelike +tubenose +tubenoses +tuber +tubercle +tubercles +tubercular +tuberculars +tuberculate +tuberculated +tuberculin +tuberculins +tuberculoid +tuberculoses +tuberculosis +tuberculous +tuberoid +tuberose +tuberoses +tuberosities +tuberosity +tuberous +tubers +tubes +tubework +tubeworks +tubful +tubfuls +tubifex +tubifexes +tubificid +tubificids +tubiform +tubing +tubings +tubist +tubists +tublike +tubocurarine +tubocurarines +tubs +tubular +tubulate +tubulated +tubulates +tubulating +tubule +tubules +tubulin +tubulins +tubulose +tubulous +tubulure +tubulures +tuchun +tuchuns +tuck +tuckahoe +tuckahoes +tucked +tucker +tuckered +tuckering +tuckers +tucket +tuckets +tucking +tucks +tuckshop +tuckshops +tufa +tufaceous +tufas +tuff +tuffaceous +tuffet +tuffets +tuffs +tufoli +tuft +tufted +tufter +tufters +tuftier +tuftiest +tuftily +tufting +tufts +tufty +tug +tugboat +tugboats +tugged +tugger +tuggers +tugging +tughrik +tughriks +tugless +tugrik +tugriks +tugs +tui +tuille +tuilles +tuis +tuition +tuitional +tuitions +tuladi +tuladis +tularemia +tularemias +tularemic +tule +tules +tulip +tulips +tulipwood +tulipwoods +tulle +tulles +tullibee +tullibees +tumble +tumblebug +tumblebugs +tumbled +tumbledown +tumbler +tumblerful +tumblerfuls +tumblers +tumbles +tumbleweed +tumbleweeds +tumbling +tumblings +tumbrel +tumbrels +tumbril +tumbrils +tumefaction +tumefactions +tumefied +tumefies +tumefy +tumefying +tumescence +tumescences +tumescent +tumid +tumidities +tumidity +tumidly +tummies +tummler +tummlers +tummy +tumor +tumoral +tumorigeneses +tumorigenesis +tumorigenic +tumorigenicities +tumorigenicity +tumorlike +tumorous +tumors +tumour +tumours +tump +tumped +tumping +tumpline +tumplines +tumps +tumular +tumuli +tumulose +tumulous +tumult +tumults +tumultuary +tumultuous +tumultuously +tumultuousness +tumultuousnesses +tumulus +tumuluses +tun +tuna +tunabilities +tunability +tunable +tunableness +tunablenesses +tunably +tunas +tundish +tundishes +tundra +tundras tune +tuneable +tuneably +tuned +tuneful +tunefully +tunefulness +tunefulnesses +tuneless +tunelessly +tuner +tuners +tunes +tunesmith +tunesmiths +tuneup +tuneups +tung +tungs +tungstate +tungstates +tungsten +tungstens +tungstic +tunic +tunica +tunicae +tunicate +tunicated +tunicates +tunicle +tunicles +tunics +tuning +tunnage +tunnages +tunned +tunnel +tunneled +tunneler +tunnelers +tunneling +tunnelled +tunnellike +tunnelling +tunnels +tunnies +tunning +tunny +tuns +tup +tupelo +tupelos +tupik +tupiks +tupped +tuppence +tuppences +tuppenny +tupping +tups +tuque +tuques +turaco +turacos +turacou +turacous +turban +turbaned +turbanned +turbans +turbaries +turbary +turbellarian +turbellarians +turbeth +turbeths +turbid +turbidimeter +turbidimeters +turbidimetric +turbidimetrically +turbidimetries +turbidimetry +turbidite +turbidites +turbidities +turbidity +turbidly +turbidness +turbidnesses +turbinal +turbinals +turbinate +turbinated +turbinates +turbine +turbines +turbit +turbith +turbiths +turbits +turbo +turbocar +turbocars +turbocharged +turbocharger +turbochargers +turboelectric +turbofan +turbofans +turbogenerator +turbogenerators +turbojet +turbojets +turbomachineries +turbomachinery +turboprop +turboprops +turbos +turboshaft +turboshafts +turbot +turbots +turbulence +turbulences +turbulencies +turbulency +turbulent +turbulently +turd +turdine +turds +tureen +tureens +turf +turfed +turfier +turfiest +turfing +turfless +turflike +turfman +turfmen +turfs +turfski +turfskiing +turfskiings +turfskis +turfy +turgencies +turgency +turgent +turgescence +turgescences +turgescent +turgid +turgidities +turgidity +turgidly +turgidness +turgidnesses +turgite +turgites +turgor +turgors +turista +turistas +turk turkey +turkeys +turkois +turkoises +turks +turmeric +turmerics +turmoil +turmoiled +turmoiling +turmoils turn +turnable +turnabout +turnabouts +turnaround +turnarounds +turnbuckle +turnbuckles +turncoat +turncoats +turndown +turndowns +turned +turner +turneries +turners +turnery +turnhall +turnhalls turning +turnings +turnip +turnips +turnkey +turnkeys +turnoff +turnoffs +turnout +turnouts +turnover +turnovers +turnpike +turnpikes +turns +turnsole +turnsoles +turnspit +turnspits +turnstile +turnstiles +turnstone +turnstones +turntable +turntables +turnup +turnups +turnverein +turnvereins +turophile +turophiles +turpentine +turpentined +turpentines +turpentining +turpeth +turpeths +turpitude +turpitudes +turps +turquois +turquoise +turquoises +turret +turreted +turrets +turrical +turtle +turtleback +turtlebacks +turtled +turtledove +turtledoves +turtlehead +turtleheads +turtleneck +turtlenecked +turtlenecks +turtler +turtlers +turtles +turtling +turtlings +turves +tusche +tusches +tush +tushed +tushes +tushie +tushies +tushing +tushy +tusk +tusked +tusker +tuskers +tusking +tuskless +tusklike +tusks +tussah +tussahs +tussal +tussar +tussars +tusseh +tussehs +tusser +tussers +tussis +tussises +tussive +tussle +tussled +tussles +tussling +tussock +tussocks +tussocky +tussor +tussore +tussores +tussors +tussuck +tussucks +tussur +tussurs +tut +tutee +tutees +tutelage +tutelages +tutelar +tutelaries +tutelars +tutelary tutor -tv +tutorage +tutorages +tutored +tutoress +tutoresses +tutorial +tutorials +tutoring +tutors +tutorship +tutorships +tutoyed +tutoyer +tutoyered +tutoyering +tutoyers +tuts +tutted +tutti +tutties +tutting +tuttis +tutty +tutu +tutus +tux +tuxedo +tuxedoed +tuxedoes +tuxedos +tuxes +tuyer +tuyere +tuyeres +tuyers +twa +twaddle +twaddled +twaddler +twaddlers +twaddles +twaddling +twae +twaes +twain +twains +twang +twanged +twanger +twangers +twangier +twangiest +twanging +twangle +twangled +twangler +twanglers +twangles +twangling +twangs +twangy +twankies +twanky +twas +twasome +twasomes +twat +twats +twattle +twattled +twattles +twattling +twayblade +twayblades +tweak +tweaked +tweakier +tweakiest +tweaking +tweaks +tweaky +twee +tweed +tweedier +tweediest +tweediness +tweedinesses +tweedle +tweedled +tweedles +tweedling +tweeds +tweedy +tween +tweenies +tweeny +tweet +tweeted +tweeter +tweeters +tweeting +tweets +tweeze +tweezed +tweezer +tweezers +tweezes +tweezing +twelfth +twelfths +twelve +twelvemo +twelvemonth +twelvemonths +twelvemos +twelves +twenties +twentieth +twentieths +twenty +twerp +twerps +twibil +twibill +twibills +twibils twice +twiddle +twiddled +twiddler +twiddlers +twiddles +twiddlier +twiddliest +twiddling +twiddly +twier +twiers +twig +twigged +twiggen +twiggier +twiggiest +twigging +twiggy +twigless +twiglike +twigs +twilight +twilights +twilit +twill +twilled +twilling +twillings +twills twin +twinberries +twinberry +twinborn +twine +twined +twiner +twiners +twines +twinflower +twinflowers +twinge +twinged +twingeing +twinges +twinging +twinier +twiniest +twinight +twining +twinjet +twinjets +twinkle +twinkled +twinkler +twinklers +twinkles +twinkling +twinklings +twinkly +twinned +twinning +twinnings +twins +twinset +twinsets +twinship +twinships +twiny +twirl +twirled +twirler +twirlers +twirlier +twirliest +twirling +twirls +twirly +twirp +twirps twist +twisted +twister +twisters +twistier +twistiest +twisting +twistings +twists +twisty +twit +twitch +twitched +twitcher +twitchers +twitches +twitchier +twitchiest +twitchily +twitching +twitchy +twits +twitted +twitter +twittered +twittering +twitters +twittery +twitting +twixt +two +twofer +twofers +twofold +twofolds +twopence +twopences +twopenny +twos +twosome +twosomes +twyer +twyers +tycoon +tycoons +tye +tyee +tyees +tyer +tyers +tyes +tying +tyke +tykes +tylosin +tylosins +tymbal +tymbals +tympan +tympana +tympanal +tympani +tympanic +tympanies +tympanist +tympanists +tympanites +tympaniteses +tympanitic +tympano +tympans +tympanum +tympanums +tympany +tyne +tyned +tynes +tyning +typable +typal type +typeable +typebar +typebars +typecase +typecases +typecast +typecasting +typecasts +typed +typeface +typefaces +typefounder +typefounders +typefounding +typefoundings +types +typescript +typescripts +typeset +typesets +typesetter +typesetters +typesetting +typesettings +typestyle +typestyles +typewrite typewriter +typewriters +typewrites +typewriting +typewritings +typewritten +typewrote +typey +typhlosole +typhlosoles +typhoid +typhoids +typhon +typhonic +typhons typhoon +typhoons +typhose +typhous +typhus +typhuses +typic typical +typicalities +typicality +typically +typicalness +typicalnesses +typier +typiest +typification +typifications +typified +typifier +typifiers +typifies +typify +typifying +typing typist +typists +typo +typograph +typographed +typographer +typographers +typographic +typographical +typographically +typographies +typographing +typographs +typography +typological +typologically +typologies +typologist +typologists +typology +typos +typp +typps +typy +tyramine +tyramines +tyrannic +tyrannical +tyrannically +tyrannicalness +tyrannicalnesses +tyrannicide +tyrannicides +tyrannies +tyrannise +tyrannised +tyrannises +tyrannising +tyrannize +tyrannized +tyrannizer +tyrannizers +tyrannizes +tyrannizing +tyrannosaur +tyrannosaurs +tyrannosaurus +tyrannosauruses +tyrannous +tyrannously +tyranny +tyrant +tyrants tyre +tyred +tyres +tyring +tyro +tyrocidin +tyrocidine +tyrocidines +tyrocidins +tyronic +tyros +tyrosinase +tyrosinases +tyrosine +tyrosines +tyrothricin +tyrothricins +tythe +tythed +tythes +tything +tzaddik +tzaddikim +tzar +tzardom +tzardoms +tzarevna +tzarevnas +tzarina +tzarinas +tzarism +tzarisms +tzarist +tzarists +tzaritza +tzaritzas +tzars +tzetze +tzetzes +tzigane +tziganes +tzimmes +tzimmeses +tzitzis +tzitzit +tzitzith +tzuris +ubieties +ubiety +ubique +ubiquinone +ubiquinones +ubiquities +ubiquitous +ubiquitously +ubiquitousness +ubiquitousnesses +ubiquity +udder +udders +udo +udometer +udometers +udometries +udometry +udos +ufological +ufologies +ufologist +ufologists +ufology +ugh +ughs +uglier +uglies +ugliest +uglification +uglifications +uglified +uglifier +uglifiers +uglifies +uglify +uglifying +uglily +ugliness +uglinesses ugly +ugsome +uh +uhlan +uhlans +uintahite +uintahites +uintaite +uintaites +ukase +ukases +uke +ukelele +ukeleles +ukes +ukulele +ukuleles +ulama +ulamas +ulan +ulans +ulcer +ulcerate +ulcerated +ulcerates +ulcerating +ulceration +ulcerations +ulcerative +ulcered +ulcering +ulcerogenic +ulcerous +ulcers +ulema +ulemas +ulexite +ulexites +ullage +ullaged +ullages +ulna +ulnad +ulnae +ulnar +ulnas +ulpan +ulpanim +ulster +ulsters +ulterior +ulteriorly +ultima +ultimacies +ultimacy +ultimas +ultimata +ultimate +ultimated +ultimately +ultimateness +ultimatenesses +ultimates +ultimating +ultimatum +ultimatums +ultimo +ultimogeniture +ultimogenitures +ultra +ultrabasic +ultrabasics +ultracareful +ultracasual +ultracautious +ultracentrifugal +ultracentrifugally +ultracentrifugation +ultracentrifugations +ultracentrifuge +ultracentrifuged +ultracentrifuges +ultracentrifuging +ultrachic +ultracivilized +ultraclean +ultracold +ultracommercial +ultracompact +ultracompetent +ultraconservatism +ultraconservatisms +ultraconservative +ultraconservatives +ultracontemporaries +ultracontemporary +ultraconvenient +ultracool +ultracritical +ultrademocratic +ultradense +ultradistance +ultradistances +ultradistant +ultradry +ultraefficient +ultraenergetic +ultraexclusive +ultrafamiliar +ultrafast +ultrafastidious +ultrafeminine +ultrafiche +ultrafiches +ultrafiltrate +ultrafiltrates +ultrafiltration +ultrafiltrations +ultrafine +ultraglamorous +ultrahazardous +ultraheat +ultraheated +ultraheating +ultraheats +ultraheavy +ultrahigh +ultrahip +ultrahot +ultrahuman +ultraism +ultraisms +ultraist +ultraistic +ultraists +ultraleft +ultraleftism +ultraleftisms +ultraleftist +ultraleftists +ultraliberal +ultraliberalism +ultraliberalisms +ultraliberals +ultralight +ultralights +ultralightweight +ultralow +ultramafic +ultramarathon +ultramarathoner +ultramarathoners +ultramarathons +ultramarine +ultramarines +ultramasculine +ultramicro +ultramicroscope +ultramicroscopes +ultramicroscopic +ultramicroscopical +ultramicroscopically +ultramicrotome +ultramicrotomes +ultramicrotomies +ultramicrotomy +ultramilitant +ultraminiature +ultraminiaturized +ultramodern +ultramodernist +ultramodernists +ultramontane +ultramontanes +ultramontanism +ultramontanisms +ultranationalism +ultranationalisms +ultranationalist +ultranationalistic +ultranationalists +ultraorthodox +ultraparadoxical +ultrapatriotic +ultraphysical +ultrapowerful +ultrapractical +ultraprecise +ultraprecision +ultraprecisions +ultraprofessional +ultraprogressive +ultraprogressives +ultrapure +ultraquiet +ultraradical +ultraradicals +ultrarapid +ultrarare +ultrararefied +ultrarational +ultrarealism +ultrarealisms +ultrarealist +ultrarealistic +ultrarealists +ultrared +ultrareds +ultrarefined +ultrareliable +ultrarespectable +ultrarevolutionaries +ultrarevolutionary +ultrarich +ultraright +ultrarightist +ultrarightists +ultraromantic +ultraroyalist +ultraroyalists +ultras +ultrasafe +ultrasecret +ultrasegregationist +ultrasegregationists +ultrasensitive +ultraserious +ultrasharp +ultrashort +ultrasimple +ultraslick +ultraslow +ultrasmall +ultrasmart +ultrasmooth +ultrasoft +ultrasonic +ultrasonically +ultrasonics +ultrasonographer +ultrasonographers +ultrasonographic +ultrasonographies +ultrasonography +ultrasophisticated +ultrasound +ultrasounds +ultrastructural +ultrastructurally +ultrastructure +ultrastructures +ultrathin +ultravacua +ultravacuum +ultravacuums +ultraviolence +ultraviolences +ultraviolent +ultraviolet +ultraviolets +ultravirile +ultravirilities +ultravirility +ultrawide +ulu +ululant +ululate +ululated +ululates +ululating +ululation +ululations +ulus +ulva +ulvas +um +umangite +umangites +umbel +umbeled +umbellar +umbellate +umbelled +umbellet +umbellets +umbellifer +umbelliferous +umbellifers +umbels +umber +umbered +umbering +umbers +umbilical +umbilicals +umbilicate +umbilicated +umbilication +umbilications +umbilici +umbilicus +umbilicuses +umbles +umbo +umbonal +umbonate +umbones +umbonic +umbos +umbra +umbrae +umbrage +umbrageous +umbrageously +umbrageousness +umbrageousnesses +umbrages +umbral +umbras umbrella +umbrellaed +umbrellaing +umbrellas +umbrette +umbrettes +umiac +umiack +umiacks +umiacs +umiak +umiaks +umiaq +umiaqs +umlaut +umlauted +umlauting +umlauts +umm +ump +umped +umping +umpirage +umpirages +umpire +umpired +umpires +umpiring +umps +umpteen +umpteenth +umteenth +un +unabashed +unabashedly +unabated +unabatedly unable +unabraded +unabridged +unabsorbed +unabsorbent +unabused +unacademic +unacademically +unaccented +unacceptabilities +unacceptability +unacceptable +unacceptably +unaccepted +unacclimated +unacclimatized +unaccommodated +unaccommodating +unaccompanied +unaccountabilities +unaccountability +unaccountable +unaccountably +unaccounted +unaccredited +unacculturated +unaccustomed +unaccustomedly +unachieved +unacknowledged +unacquainted +unactable +unacted +unactorish +unadaptable +unadapted +unaddressed +unadjudicated +unadjusted +unadmired +unadmitted +unadoptable +unadorned +unadult +unadulterated +unadulteratedly +unadventurous +unadvertised +unadvised +unadvisedly +unaesthetic +unaffected +unaffectedly +unaffectedness +unaffectednesses +unaffecting +unaffectionate +unaffectionately +unaffiliated +unaffluent +unaffordable +unafraid +unaged +unageing +unaggressive +unagile +unaging +unai +unaided +unaimed +unaired +unais +unakin +unakite +unakites +unalienable +unalienated +unaligned +unalike +unalleviated +unallied +unallocated +unalloyed +unalluring +unalterabilities +unalterability +unalterable +unalterableness +unalterablenesses +unalterably +unaltered +unambiguous +unambiguously +unambitious +unambivalent +unambivalently +unamenable +unamended +unamiable +unamortized +unamplified +unamused +unamusing +unanalyzable +unanalyzed +unanchor +unanchored +unanchoring +unanchors +unaneled +unanesthetized +unanimities +unanimity +unanimous +unanimously +unannotated +unannounced +unanswerabilities +unanswerability +unanswerable +unanswerably +unanswered +unanticipated +unanticipatedly +unapologetic +unapologetically +unapologizing +unapparent +unappealable +unappealing +unappealingly +unappeasable +unappeasably +unappeased +unappetizing +unappetizingly +unappreciated +unappreciation +unappreciations +unappreciative +unapproachabilities +unapproachability +unapproachable +unapproachably +unappropriated +unapproved +unapt +unaptly +unaptness +unaptnesses +unarguable +unarguably +unargued +unarm +unarmed +unarming +unarmored +unarms +unarrogant +unartful +unarticulated +unartistic +unary +unashamed +unashamedly +unasked +unaspirated +unassailabilities +unassailability +unassailable +unassailableness +unassailablenesses +unassailably +unassailed +unassembled +unassertive +unassertively +unassigned +unassimilable +unassimilated +unassisted +unassociated +unassuageable +unassuaged +unassuming +unassumingness +unassumingnesses +unathletic +unatoned +unattached +unattainable +unattended +unattenuated +unattested +unattractive +unattractively +unattractiveness +unattractivenesses +unattributable +unattributed +unattuned +unau +unaudited +unaus +unauthentic +unauthorized +unautomated +unavailabilities +unavailability +unavailable +unavailing +unavailingly +unavailingness +unavailingnesses +unaverage +unavoidable +unavoidably +unavowed +unawaked +unawakened +unawarded +unaware +unawarely +unawareness +unawarenesses +unawares +unawed +unawesome +unbacked +unbaked +unbalance +unbalanced +unbalances +unbalancing +unballasted +unban +unbandage +unbandaged +unbandages +unbandaging +unbanned +unbanning +unbans +unbaptized +unbar +unbarbed +unbarbered +unbarred +unbarricaded +unbarring +unbars +unbased +unbated +unbathed +unbe +unbear unbearable +unbearably +unbeared +unbearing +unbears +unbeatable +unbeatably +unbeaten +unbeautiful +unbeautifully +unbecoming +unbecomingly +unbecomingness +unbecomingnesses +unbeholden +unbeknown +unbeknownst +unbelief +unbeliefs unbelievable +unbelievably +unbeliever +unbelievers +unbelieving +unbelievingly +unbelligerent +unbeloved +unbelt +unbelted +unbelting +unbelts +unbemused +unbend +unbendable +unbended +unbending +unbends +unbenign +unbent +unbeseeming +unbiased +unbiasedness +unbiasednesses +unbiblical +unbid +unbidden +unbilled +unbind +unbinding +unbinds +unbitted +unbitten +unbitter +unblamed +unbleached +unblemished +unblenched +unblended +unblessed +unblest +unblinded +unblinking +unblinkingly +unblock +unblocked +unblocking +unblocks +unblooded +unbloodied +unbloody +unblushing +unblushingly +unbodied +unbolt +unbolted +unbolting +unbolts +unboned +unbonnet +unbonneted +unbonneting +unbonnets +unbookish +unborn +unbosom +unbosomed +unbosoming +unbosoms +unbought +unbouncy +unbound +unbounded +unboundedness +unboundednesses +unbowdlerized +unbowed +unbox +unboxed +unboxes +unboxing +unbrace +unbraced +unbraces +unbracing +unbracketed +unbraid +unbraided +unbraiding +unbraids +unbrake +unbraked +unbrakes +unbraking +unbranched +unbranded +unbreachable +unbreakable +unbreathable +unbred +unbreech +unbreeched +unbreeches +unbreeching +unbridgeable +unbridged +unbridle +unbridled +unbridles +unbridling +unbriefed +unbright +unbrilliant +unbroke +unbroken +unbruised +unbrushed +unbuckle +unbuckled +unbuckles +unbuckling +unbudgeable +unbudgeably +unbudgeted +unbudging +unbudgingly +unbuffered +unbuild +unbuildable +unbuilding +unbuilds +unbuilt +unbulky +unbundle +unbundled +unbundles +unbundling +unburden +unburdened +unburdening +unburdens +unbureaucratic +unburied +unburnable +unburned +unburnt +unbusinesslike +unbusted +unbusy +unbuttered +unbutton +unbuttoned +unbuttoning +unbuttons +uncage +uncaged +uncages +uncaging +uncake +uncaked +uncakes +uncaking +uncalcified +uncalcined +uncalculated +uncalculating +uncalibrated +uncalled +uncalloused +uncanceled +uncandid +uncandidly +uncannier +uncanniest +uncannily +uncanniness +uncanninesses +uncanny +uncanonical +uncap +uncapitalized +uncapped +uncapping +uncaps +uncaptioned +uncapturable +uncaring +uncarpeted +uncase +uncased +uncases +uncashed +uncasing +uncasked +uncastrated +uncataloged +uncatchable +uncatchy +uncategorizable +uncaught +uncaused +unceasing +unceasingly +uncelebrated +uncensored +uncensorious +uncensured +unceremonious +unceremoniously +unceremoniousness +unceremoniousnesses uncertain +uncertainly +uncertainness +uncertainnesses +uncertainties +uncertainty +uncertified +unchain +unchained +unchaining +unchains +unchallengeable +unchallenged +unchallenging +unchancy +unchangeabilities +unchangeability +unchangeable +unchangeableness +unchangeablenesses +unchangeably +unchanged +unchanging +unchangingly +unchangingness +unchangingnesses +unchanneled +unchaperoned +uncharacteristic +uncharacteristically +uncharge +uncharged +uncharges +uncharging +uncharismatic +uncharitable +uncharitableness +uncharitablenesses +uncharitably +uncharming +uncharted +unchartered +unchary +unchaste +unchastely +unchasteness +unchastenesses +unchastities +unchastity +unchauvinistic +uncheckable +unchecked +unchewable +unchewed +unchic +unchicly +unchildlike +unchivalrous +unchivalrously +unchlorinated +unchoke +unchoked +unchokes +unchoking +unchoreographed +unchosen +unchristened +unchristian +unchronicled +unchronological +unchurch +unchurched +unchurches +unchurching +unchurchly +unci +uncia +unciae +uncial +uncially +uncials +unciform +unciforms +unciliated +uncinal +uncinariases +uncinariasis +uncinate +uncinematic +uncini +uncinus +uncirculated +uncircumcised +uncircumcision +uncircumcisions +uncivil +uncivilized +uncivilly +unclad +unclaimed +unclamp +unclamped +unclamping +unclamps +unclarified +unclarities +unclarity +unclasp +unclasped +unclasping +unclasps +unclassical +unclassifiable +unclassified uncle +unclean +uncleaned +uncleaner +uncleanest +uncleanliness +uncleanlinesses +uncleanly +uncleanness +uncleannesses +unclear +unclearer +unclearest +unclench +unclenched +unclenches +unclenching +uncles +uncliched +unclimbable +unclimbableness +unclimbablenesses +unclinch +unclinched +unclinches +unclinching +unclip +unclipped +unclipping +unclips +uncloak +uncloaked +uncloaking +uncloaks +unclog +unclogged +unclogging +unclogs +unclose +unclosed +uncloses +unclosing +unclothe +unclothed +unclothes +unclothing +uncloud +unclouded +uncloudedly +unclouding +unclouds +uncloyed +uncloying +unclubbable +unclutter +uncluttered +uncluttering +unclutters +unco +uncoalesce +uncoalesced +uncoalesces +uncoalescing +uncoated +uncoating +uncock +uncocked +uncocking +uncocks +uncoded +uncodified +uncoerced +uncoercive +uncoercively +uncoffin +uncoffined +uncoffining +uncoffins +uncoil +uncoiled +uncoiling +uncoils +uncoined +uncollected +uncollectible +uncollectibles +uncolored +uncombative +uncombed +uncombined +uncomely uncomfortable +uncomfortably +uncomic +uncommercial +uncommercialized +uncommitted +uncommon +uncommoner +uncommonest +uncommonly +uncommonness +uncommonnesses +uncommunicable +uncommunicative +uncompassionate +uncompelling +uncompensated +uncompetitive +uncompetitiveness +uncompetitivenesses +uncomplacent +uncomplaining +uncomplainingly +uncompleted +uncomplicated +uncomplimentary +uncompounded +uncomprehended +uncomprehending +uncomprehendingly +uncompromisable +uncompromising +uncompromisingly +uncompromisingness +uncompromisingnesses +uncomputerized +unconcealed +unconceivable +unconcern +unconcerned +unconcernedly +unconcernedness +unconcernednesses +unconcerns unconditional +unconditionally +unconditioned +unconfessed +unconfined +unconfirmed +unconformable +unconformably +unconformities +unconformity +unconfounded +unconfuse +unconfused +unconfuses +unconfusing +uncongenial +uncongenialities +uncongeniality +unconjugated +unconnected +unconquerable +unconquerably +unconquered +unconscionabilities +unconscionability +unconscionable +unconscionableness +unconscionablenesses +unconscionably unconscious +unconsciouses +unconsciously +unconsciousness +unconsciousnesses +unconsecrated +unconsidered +unconsolidated +unconstitutional +unconstitutionalities +unconstitutionality +unconstitutionally +unconstrained +unconstraint +unconstraints +unconstricted +unconstructed +unconstructive +unconsumed +unconsummated +uncontainable +uncontaminated +uncontemplated +uncontemporary +uncontentious +uncontested +uncontracted +uncontradicted +uncontrived +uncontrollabilities +uncontrollability +uncontrollable +uncontrollably +uncontrolled +uncontroversial +uncontroversially +unconventional +unconventionalities +unconventionality +unconventionally +unconverted +unconvinced +unconvincing +unconvincingly +unconvincingness +unconvincingnesses +unconvoyed +uncooked +uncool +uncooled +uncooperative +uncoordinated +uncopyrightable +uncork +uncorked +uncorking +uncorks +uncorrectable +uncorrected +uncorrelated +uncorroborated +uncorrupt +uncorseted +uncos +uncountable +uncounted +uncouple +uncoupled +uncoupler +uncouplers +uncouples +uncoupling +uncourageous +uncouth +uncouthly +uncouthness +uncouthnesses +uncovenanted +uncover +uncovered +uncovering +uncovers +uncoy +uncracked +uncrate +uncrated +uncrates +uncrating +uncrazy +uncreate +uncreated +uncreates +uncreating +uncreative +uncredentialed +uncredited +uncrippled +uncritical +uncritically +uncropped +uncross +uncrossable +uncrossed +uncrosses +uncrossing +uncrowded +uncrown +uncrowned +uncrowning +uncrowns +uncrumple +uncrumpled +uncrumples +uncrumpling +uncrushable +uncrystallized +unction +unctions +unctuous +unctuously +unctuousness +unctuousnesses +uncuff +uncuffed +uncuffing +uncuffs +uncultivable +uncultivated +uncultured +uncurb +uncurbed +uncurbing +uncurbs +uncured +uncurious +uncurl +uncurled +uncurling +uncurls +uncurrent +uncursed +uncurtained +uncus +uncustomarily +uncustomary +uncut +uncute +uncynical +uncynically +undamaged +undamped +undanceable +undaring +undated +undauntable +undaunted +undauntedly +unde +undead +undebatable +undebatably +undecadent +undeceive +undeceived +undeceives +undeceiving +undecidabilities +undecidability +undecidable +undecided +undecideds +undecillion +undecillions +undecipherable +undeciphered +undecked +undeclared +undecomposed +undecorated +undedicated +undee +undefeated +undefended +undefiled +undefinable +undefined +undefoliated +undeformed +undelegated +undeliverable +undelivered +undeluded +undemanding +undemocratic +undemocratically +undemonstrative +undemonstratively +undemonstrativeness +undemonstrativenesses +undeniable +undeniableness +undeniablenesses +undeniably +undenied +undenominational +undependable under +underachieve +underachieved +underachievement +underachievements +underachiever +underachievers +underachieves +underachieving +underact +underacted +underacting +underactive +underactivities +underactivity +underacts +underage +underages +underappreciated +underarm +underarms +underate +underbellies +underbelly +underbid +underbidder +underbidders +underbidding +underbids +underbodies +underbody +underboss +underbosses +underbought +underbred +underbrim +underbrims +underbrush +underbrushes +underbud +underbudded +underbudding +underbudgeted +underbuds +underbuy +underbuying +underbuys +undercapitalized +undercard +undercards +undercarriage +undercarriages +undercharge +undercharged +undercharges +undercharging +underclass +underclasses +underclassman +underclassmen +underclothes +underclothing +underclothings +undercoat +undercoating +undercoatings +undercoats +undercool +undercooled +undercooling +undercools +undercount +undercounted +undercounting +undercounts +undercover +undercroft +undercrofts +undercurrent +undercurrents +undercut +undercuts +undercutting +underdeveloped +underdevelopment +underdevelopments +underdid +underdo +underdoes +underdog +underdogs +underdoing +underdone +underdrawers +undereat +undereaten +undereating +undereats +undereducated +underemphases +underemphasis +underemphasize +underemphasized +underemphasizes +underemphasizing +underemployed +underemployment +underemployments +underestimate +underestimated +underestimates +underestimating +underestimation +underestimations +underexpose +underexposed +underexposes +underexposing +underexposure +underexposures +underfed +underfeed +underfeeding +underfeeds +underfinanced +underfoot +underfund +underfunded +underfunding +underfunds +underfur +underfurs +undergarment +undergarments +undergird +undergirded +undergirding +undergirds +undergirt +underglaze +underglazes +undergo +undergod +undergods +undergoes +undergoing +undergone +undergrad +undergrads +undergraduate +undergraduates underground +undergrounder +undergrounders +undergrounds +undergrowth +undergrowths +underhand +underhanded +underhandedly +underhandedness +underhandednesses +underinflated +underinflation +underinflations +underinsured +underinvestment +underinvestments +underjaw +underjaws +underlaid +underlain +underlap +underlapped +underlapping +underlaps +underlay +underlaying +underlayment +underlayments +underlays +underlet +underlets +underletting +underlie +underlies underline +underlined +underlines +underling +underlings +underlining +underlip +underlips +underlit +underlying +underlyingly +undermanned +undermine +undermined +undermines +undermining +undermost +underneath +undernourished +undernourishment +undernourishments +undernutrition +undernutritions +underpaid +underpainting +underpaintings +underpants +underpart +underparts +underpass +underpasses +underpay +underpaying +underpayment +underpayments +underpays +underpin +underpinned +underpinning +underpinnings +underpins +underplay +underplayed +underplaying +underplays +underplot +underplots +underpopulated +underpowered +underprepared +underprice +underpriced +underprices +underpricing +underprivileged +underproduction +underproductions +underproof +underpublicized +underqualified +underran +underrate +underrated +underrates +underrating +underreact +underreacted +underreacting +underreacts +underreport +underreported +underreporting +underreports +underrepresentation +underrepresentations +underrepresented +underrun +underrunning +underruns +undersaturated +underscore +underscored +underscores +underscoring +undersea +underseas +undersecretaries +undersecretary +undersell +underselling +undersells +underserved +underset +undersets +undersexed +undersheriff +undersheriffs +undershirt +undershirted +undershirts +undershoot +undershooting +undershoots +undershorts +undershot +undershrub +undershrubs +underside +undersides +undersigned +undersize +undersized +underskirt +underskirts +underslung +undersold +underspin +underspins +understaffed +understaffing +understaffings understand +understandabilities +understandability +understandable +understandably +understanding +understandingly +understandings +understands +understate +understated +understatedly +understatement +understatements +understates +understating +understeer +understeered +understeering +understeers +understood +understories +understory +understrapper +understrappers +understrength +understudied +understudies +understudy +understudying +undersupplies +undersupply +undersurface +undersurfaces undertake +undertaken +undertaker +undertakers +undertakes +undertaking +undertakings +undertax +undertaxed +undertaxes +undertaxing +undertenant +undertenants +underthrust +underthrusting +underthrusts +undertone +undertones +undertook +undertow +undertows +undertrick +undertricks +underused +underutilization +underutilizations +underutilize +underutilized +underutilizes +underutilizing +undervaluation +undervaluations +undervalue +undervalued +undervalues +undervaluing +underwater +underway underwear +underweight +underweights +underwent +underwhelm +underwhelmed +underwhelming +underwhelms +underwing +underwings +underwood +underwoods +underwool +underwools +underworld +underworlds +underwrite +underwriter +underwriters +underwrites +underwriting +underwritten +underwrote +undescended +undescribable +undeserved +undeserving +undesignated +undesigning +undesirabilities +undesirability +undesirable +undesirableness +undesirablenesses +undesirables +undesirably +undesired +undetectable +undetected +undeterminable +undetermined +undeterred +undeveloped +undeviating +undeviatingly +undevout +undiagnosable +undiagnosed +undialectical +undid +undidactic +undies +undifferentiated +undigested +undigestible +undignified +undiluted +undiminished +undimmed +undine +undines +undiplomatic +undiplomatically +undirected +undischarged +undisciplined +undisclosed +undiscouraged +undiscoverable +undiscovered +undiscriminating +undiscussed +undisguised +undisguisedly +undismayed +undisputable +undisputed +undissociated +undissolved +undistinguished +undistorted +undistracted +undistributed +undisturbed +undivided +undo +undoable +undocile +undock +undocked +undocking +undocks +undoctored +undoctrinaire +undocumented +undoer +undoers +undoes +undogmatic +undogmatically +undoing +undoings +undomestic +undomesticated +undone +undotted +undouble +undoubled +undoubles +undoubling +undoubtable +undoubted +undoubtedly +undoubting +undrained +undramatic +undramatically +undramatized +undrape +undraped +undrapes +undraping +undraw +undrawing +undrawn +undraws +undreamed +undreamt +undress +undressed +undresses +undressing +undrest +undrew +undried +undrilled +undrinkable +undrunk +undubbed +undue +undulant +undular +undulate +undulated +undulates +undulating +undulation +undulations +undulatory +undulled +unduly +unduplicated +undutiful +undutifully +undutifulness +undutifulnesses +undy +undyed +undying +undynamic +uneager +unearmarked +unearned +unearth +unearthed +unearthing +unearthliness +unearthlinesses +unearthly +unearths +unease +uneases +uneasier +uneasiest +uneasily +uneasiness +uneasinesses +uneasy +uneatable +uneaten +uneccentric +unecological +uneconomic +uneconomical +unedible +unedifying +unedited +uneducable +uneducated +unelaborate +unelectable +unelected +unelectrified +unembarrassed +unembellished +unembittered +unemotional +unemotionally +unemphatic +unemphatically +unempirical +unemployabilities +unemployability +unemployable +unemployables +unemployed +unemployeds unemployment +unemployments +unenchanted +unenclosed +unencouraging +unencumbered +unendearing +unended +unending +unendingly +unendurable +unendurableness +unendurablenesses +unendurably +unenforceable +unenforced +unenlarged +unenlightened +unenlightening +unenriched +unenterprising +unenthusiastic +unenthusiastically +unenviable +unenvied +unenvious +unequal +unequaled +unequalled +unequally +unequals +unequipped +unequivocably +unequivocal +unequivocally +unerased +unerotic +unerring +unerringly +unescapable +unessential +unestablished +unethical +unevaded +unevaluated +uneven +unevener +unevenest +unevenly +unevenness +unevennesses +uneventful +uneventfully +uneventfulness +uneventfulnesses +unevolved +unexamined +unexampled +unexcelled +unexceptionable +unexceptionableness +unexceptionablenesses +unexceptionably +unexceptional +unexcitable +unexcited +unexciting +unexcused +unexercised +unexotic +unexpected +unexpectedly +unexpectedness +unexpectednesses +unexpended +unexpert +unexpired +unexplainable +unexplained +unexploded +unexploited +unexplored +unexposed +unexpressed +unexpressive +unexpurgated +unextraordinary +unfaded +unfading +unfadingly +unfailing +unfailingly unfair +unfairer +unfairest +unfairly +unfairness +unfairnesses +unfaith +unfaithful +unfaithfully +unfaithfulness +unfaithfulnesses +unfaiths +unfaked +unfallen +unfalsifiable +unfaltering +unfalteringly +unfamiliar +unfamiliarities +unfamiliarity +unfamiliarly +unfamous +unfancy +unfashionable +unfashionableness +unfashionablenesses +unfashionably +unfasten +unfastened +unfastening +unfastens +unfastidious +unfathered +unfathomable +unfavorable +unfavorableness +unfavorablenesses +unfavorably +unfavorite +unfazed +unfeared +unfeasible +unfed +unfeeling +unfeelingly +unfeelingness +unfeelingnesses +unfeigned +unfeignedly +unfelt +unfeminine +unfence +unfenced +unfences +unfencing +unfermented +unfertile +unfertilized +unfetter +unfettered +unfettering +unfetters +unfilial +unfilially +unfilled +unfilmed +unfiltered +unfindable +unfinished +unfired +unfished unfit +unfitly +unfitness +unfitnesses +unfits +unfitted +unfitting +unfix +unfixed +unfixes +unfixing +unfixt +unflagging +unflaggingly +unflamboyant +unflappabilities +unflappability +unflappable +unflappably +unflashy +unflattering +unflatteringly +unfledged +unflexed +unflinching +unflinchingly +unflyable +unfocused +unfocussed +unfoiled +unfold +unfolded +unfolder +unfolders +unfolding +unfoldment +unfoldments +unfolds +unfond +unforced +unforeseeable +unforeseen +unforested +unforged +unforgettable +unforgettably +unforgivable +unforgiving +unforgivingness +unforgivingnesses +unforgot +unforked +unformed +unformulated +unforthcoming +unfortified unfortunate +unfortunately +unfortunates +unfossiliferous +unfought +unfound +unfounded +unframed +unfree +unfreed +unfreedom +unfreedoms +unfreeing +unfrees +unfreeze +unfreezes +unfreezing +unfrequented +unfriended +unfriendlier +unfriendliest +unfriendliness +unfriendlinesses +unfriendly +unfrivolous +unfrock +unfrocked +unfrocking +unfrocks +unfroze +unfrozen +unfruitful +unfruitfully +unfruitfulness +unfruitfulnesses +unfulfillable +unfulfilled +unfunded +unfunny +unfurl +unfurled +unfurling +unfurls +unfurnished +unfused +unfussily +unfussy +ungainlier +ungainliest +ungainliness +ungainlinesses +ungainly +ungallant +ungallantly +ungalled +ungarnished +ungenerosities +ungenerosity +ungenerous +ungenerously +ungenial +ungenteel +ungentle +ungentlemanly +ungently +ungentrified +ungerminated +ungifted +ungimmicky +ungird +ungirded +ungirding +ungirds +ungirt +unglamorized +unglamorous +unglazed +unglove +ungloved +ungloves +ungloving +unglue +unglued +unglues +ungluing +ungodlier +ungodliest +ungodliness +ungodlinesses +ungodly +ungot +ungotten +ungovernable +ungowned +ungraced +ungraceful +ungracefully +ungracious +ungraciously +ungraciousness +ungraciousnesses +ungraded +ungrammatical +ungrammaticalities +ungrammaticality +ungraspable +ungrateful +ungratefully +ungratefulness +ungratefulnesses +ungreedy +unground +ungrounded +ungrouped +ungrudging +ungual +unguard +unguarded +unguardedly +unguardedness +unguardednesses +unguarding +unguards +unguent +unguenta +unguents +unguentum +ungues +unguessable +unguided +unguis +ungula +ungulae +ungular +ungulate +ungulates +unhackneyed +unhailed +unhair +unhaired +unhairing +unhairs +unhallow +unhallowed +unhallowing +unhallows +unhalved +unhampered +unhand +unhanded +unhandicapped +unhandier +unhandiest +unhandily +unhandiness +unhandinesses +unhanding +unhands +unhandsome +unhandsomely +unhandy +unhang +unhanged +unhanging +unhangs +unhappier +unhappiest +unhappily +unhappiness +unhappinesses +unhappy +unharmed +unharness +unharnessed +unharnesses +unharnessing +unharvested +unhasty +unhat +unhatched +unhats +unhatted +unhatting +unhealed +unhealthful +unhealthier +unhealthiest +unhealthily +unhealthiness +unhealthinesses +unhealthy +unheard +unheated +unhedged +unheeded +unheeding +unhelm +unhelmed +unhelming +unhelms +unhelped +unhelpful +unhelpfully +unheralded +unheroic +unhesitating +unhesitatingly +unhewn +unhindered +unhinge +unhinged +unhinges +unhinging +unhip +unhired +unhistorical +unhitch +unhitched +unhitches +unhitching +unholier +unholiest +unholily +unholiness +unholinesses +unholy +unhomogenized +unhonored +unhood +unhooded +unhooding +unhoods +unhook +unhooked +unhooking +unhooks +unhoped +unhopeful +unhorse +unhorsed +unhorses +unhorsing +unhouse +unhoused +unhouseled +unhouses +unhousing +unhuman +unhumorous +unhung +unhurried +unhurriedly +unhurt +unhusk +unhusked +unhusking +unhusks +unhydrolyzed +unhygienic +unhyphenated +unhysterical +unhysterically +unialgal +uniaxial +unicameral +unicamerally +unicellular +unicolor +unicorn +unicorns +unicycle +unicycles +unicyclist +unicyclists +unideaed +unideal +unidentifiable +unidentified +unideological +unidimensional +unidimensionalities +unidimensionality +unidiomatic +unidirectional +unidirectionally +uniface +unifaces +unifiable +unific +unification +unifications +unified +unifier +unifiers +unifies +unifilar +unifoliate +unifoliolate uniform +uniformed +uniformer +uniformest +uniforming +uniformitarian +uniformitarianism +uniformitarianisms +uniformitarians +uniformities +uniformity +uniformly +uniformness +uniformnesses +uniforms +unify +unifying +unignorable +unilateral +unilaterally +unilineal +unilinear +unilingual +unilluminating +unillusioned +unilobed +unilocular +unimaginable +unimaginably +unimaginative +unimaginatively +unimbued +unimmunized +unimpaired +unimpassioned +unimpeachable +unimpeachably +unimpeded +unimplemented +unimportance +unimportances +unimportant +unimposing +unimpressed +unimpressive +unimproved +unincorporated +unindexed +unindicted +unindustrialized +uninfected +uninflated +uninflected +uninfluenced +uninformative +uninformatively +uninformed +uningratiating +uninhabitable +uninhabited +uninhibited +uninhibitedly +uninhibitedness +uninhibitednesses +uninitiate +uninitiated +uninitiates +uninjured +uninoculated +uninspected +uninspired +uninspiring +uninstructed +uninstructive +uninsulated +uninsurable +uninsured +unintegrated +unintellectual +unintelligent +unintelligently +unintelligibilities +unintelligibility +unintelligible +unintelligibleness +unintelligiblenesses +unintelligibly +unintended +unintentional +unintentionally +uninterest +uninterested +uninteresting +uninterests +uninterrupted +uninterruptedly +unintimidated +uninucleate +uninventive +uninvited +uninviting +uninvolved union +unionisation +unionisations +unionise +unionised +unionises +unionising +unionism +unionisms +unionist +unionists +unionization +unionizations +unionize +unionized +unionizes +unionizing +unions +uniparental +uniparentally +unipod +unipods +unipolar unique +uniquely +uniqueness +uniquenesses +uniquer +uniques +uniquest +unironed +unironically +unirradiated +unirrigated +unisex +unisexes +unisexual +unisexualities +unisexuality +unison +unisonal +unisons +unissued unit +unitage +unitages +unitard +unitards +unitarian +unitarianism +unitarianisms +unitarians +unitarily +unitary unite +united +unitedly +uniter +uniters +unites +unities +uniting +unitive +unitization +unitizations +unitize +unitized +unitizer +unitizers +unitizes +unitizing +unitrust +unitrusts +units +unity +univalent +univalents +univalve +univalves +univariate universal +universalism +universalisms +universalist +universalistic +universalists +universalities +universality +universalization +universalizations +universalize +universalized +universalizes +universalizing +universally +universalness +universalnesses +universals universe +universes +universities university +univocal +univocally +univocals +unjaded +unjoined +unjoint +unjointed +unjointing +unjoints +unjoyful +unjudged +unjust +unjustifiable +unjustifiably +unjustified +unjustly +unjustness +unjustnesses +unkempt +unkend +unkenned +unkennel +unkenneled +unkenneling +unkennelled +unkennelling +unkennels +unkent +unkept +unkind +unkinder +unkindest +unkindlier +unkindliest +unkindliness +unkindlinesses +unkindly +unkindness +unkindnesses +unkingly +unkink +unkinked +unkinking +unkinks +unkissed +unknit +unknits +unknitted +unknitting +unknot +unknots +unknotted +unknotting +unknowabilities +unknowability +unknowable +unknowing +unknowingly +unknowings +unknowledgeable +unknown +unknowns +unkosher +unlabeled +unlace +unlaced +unlaces +unlacing +unlade +unladed +unladen +unlades +unlading +unladylike +unlaid +unlamented +unlash +unlashed +unlashes +unlashing +unlatch +unlatched +unlatches +unlatching +unlaundered +unlawful +unlawfully +unlawfulness +unlawfulnesses +unlay +unlaying +unlays +unlead +unleaded +unleading +unleads +unlearn +unlearnable +unlearned +unlearning +unlearns +unlearnt +unleased +unleash +unleashed +unleashes +unleashing +unleavened +unled unless +unlet +unlethal +unletted +unlettered +unlevel +unleveled +unleveling +unlevelled +unlevelling +unlevels +unlevied +unliberated +unlicensed +unlicked +unlikable unlike +unlikelier +unlikeliest +unlikelihood +unlikelihoods +unlikeliness +unlikelinesses +unlikely +unlikeness +unlikenesses +unlimber +unlimbered +unlimbering +unlimbers +unlimited +unlimitedly +unlined +unlink +unlinked +unlinking +unlinks +unlisted +unlistenable +unlit +unliterary +unlivable +unlive +unlived +unlively +unlives +unliving +unload +unloaded +unloader +unloaders +unloading +unloads +unlobed +unlocalized +unlock +unlocked +unlocking +unlocks +unloose +unloosed +unloosen +unloosened +unloosening +unloosens +unlooses +unloosing +unlovable +unloved +unlovelier +unloveliest +unloveliness +unlovelinesses +unlovely +unloving +unluckier +unluckiest +unluckily +unluckiness +unluckinesses +unlucky +unlyrical +unmacho +unmade +unmagnified +unmake +unmaker +unmakers +unmakes +unmaking +unmalicious +unmaliciously +unman +unmanageable +unmanageably +unmanaged +unmanful +unmanipulated +unmanlier +unmanliest +unmanliness +unmanlinesses +unmanly +unmanned +unmannered +unmanneredly +unmannerliness +unmannerlinesses +unmannerly +unmanning +unmans +unmapped +unmarked +unmarketable +unmarred +unmarried +unmarrieds +unmasculine +unmask +unmasked +unmasker +unmaskers +unmasking +unmasks +unmatchable +unmatched +unmated +unmatted +unmeaning +unmeant +unmeasurable +unmeasured +unmechanized +unmediated +unmedicated +unmeet +unmeetly +unmellow +unmelodious +unmelodiousness +unmelodiousnesses +unmelted +unmemorable +unmemorably +unmended +unmentionable +unmentionables +unmentioned +unmerciful +unmercifully +unmerited +unmerry +unmesh +unmeshed +unmeshes +unmeshing +unmet +unmetabolized +unmew +unmewed +unmewing +unmews +unmilitary +unmilled +unmindful +unmined +unmingle +unmingled +unmingles +unmingling +unmistakable +unmistakably +unmiter +unmitered +unmitering +unmiters +unmitigated +unmitigatedly +unmitigatedness +unmitigatednesses +unmitre +unmitred +unmitres +unmitring +unmix +unmixable +unmixed +unmixes +unmixing +unmixt +unmodernized +unmodified +unmodish +unmold +unmolded +unmolding +unmolds +unmolested +unmolten +unmonitored +unmoor +unmoored +unmooring +unmoors +unmoral +unmoralities +unmorality +unmotivated +unmounted +unmovable +unmoved +unmoving +unmown +unmuffle +unmuffled +unmuffles +unmuffling +unmusical +unmuzzle +unmuzzled +unmuzzles +unmuzzling +unmyelinated +unnail +unnailed +unnailing +unnails +unnameable +unnamed +unnatural +unnaturally +unnaturalness +unnaturalnesses +unnecessarily +unnecessary +unneeded +unnegotiable +unnerve +unnerved +unnerves +unnerving +unnervingly +unneurotic +unnewsworthy +unnilhexium +unnilhexiums +unnilpentium +unnilpentiums +unnilquadium +unnilquadiums +unnoisy +unnoted +unnoticeable +unnoticed +unnourishing +unnumbered +unobjectionable +unobservable +unobservant +unobserved +unobstructed +unobtainable +unobtrusive +unobtrusively +unobtrusiveness +unobtrusivenesses +unoccupied +unofficial +unofficially +unoiled +unopen +unopenable +unopened +unopposed +unordered +unorganized +unoriginal +unornamented +unornate +unorthodox +unorthodoxies +unorthodoxly +unorthodoxy +unostentatious +unostentatiously +unowned +unoxygenated +unpack +unpacked +unpacker +unpackers +unpacking +unpacks +unpaged +unpaid +unpainted +unpaired +unpalatabilities +unpalatability +unpalatable +unparalleled +unparasitized +unpardonable +unparented +unparliamentary +unparted +unpassable +unpasteurized +unpastoral +unpatentable +unpatriotic +unpaved +unpaying +unpedantic +unpeeled +unpeg +unpegged +unpegging +unpegs +unpen +unpenned +unpenning +unpens +unpent +unpeople +unpeopled +unpeoples +unpeopling +unperceived +unperceptive +unperfect +unperformable +unperformed +unperson +unpersons +unpersuaded +unpersuasive +unperturbed +unpick +unpicked +unpicking +unpicks +unpicturesque +unpile +unpiled +unpiles +unpiling +unpin +unpinned +unpinning +unpins +unpitied +unplaced +unplait +unplaited +unplaiting +unplaits +unplanned +unplausible +unplayable +unplayed +unpleasant +unpleasantly +unpleasantness +unpleasantnesses +unpleased +unpleasing +unpliant +unplowed +unplug +unplugged +unplugging +unplugs +unplumbed +unpoetic +unpoised +unpolarized +unpoliced +unpolished +unpolite +unpolitical +unpolled +unpolluted +unpopular +unpopularities +unpopularity +unposed +unposted +unpotted +unpractical +unprecedented +unprecedentedly +unpredictabilities +unpredictability +unpredictable +unpredictables +unpredictably +unpregnant +unprejudiced +unpremeditated +unprepared +unpreparedness +unpreparednesses +unprepossessing +unpressed +unpressured +unpressurized +unpretending +unpretentious +unpretentiously +unpretentiousness +unpretentiousnesses +unpretty +unpriced +unprimed +unprincipled +unprincipledness +unprinciplednesses +unprintable +unprivileged +unprized +unprobed +unproblematic +unprocessed +unproduced +unproductive +unprofessed +unprofessional +unprofessionally +unprofessionals +unprofitable +unprofitableness +unprofitablenesses +unprofitably +unprogrammable +unprogrammed +unprogressive +unpromising +unpromisingly +unprompted +unpronounceable +unpronounced +unpropitious +unprosperous +unprotected +unprovable +unproved +unproven +unprovoked +unpruned +unpublicized +unpublishable +unpublished +unpucker +unpuckered +unpuckering +unpuckers +unpunctual +unpunctualities +unpunctuality +unpunctuated +unpunished +unpure +unpurged +unpuzzle +unpuzzled +unpuzzles +unpuzzling +unqualified +unqualifiedly +unquantifiable +unquenchable +unquestionable +unquestionably +unquestioned +unquestioning +unquestioningly +unquiet +unquieter +unquietest +unquietly +unquietness +unquietnesses +unquiets +unquote +unquoted +unquotes +unquoting +unraised +unraked +unranked +unrated +unravel +unraveled +unraveling +unravelled +unravelling +unravels +unravished +unrazed +unreachable +unreached +unread +unreadable +unreadier +unreadiest +unreadiness +unreadinesses +unready +unreal +unrealistic +unrealistically +unrealities +unreality +unrealizable +unrealized +unreally +unreason +unreasonable +unreasonableness +unreasonablenesses +unreasonably +unreasoned +unreasoning +unreasoningly +unreasons +unreceptive +unreclaimable +unreclaimed +unrecognizable +unrecognizably +unrecognized +unreconcilable +unreconciled +unreconstructed +unrecorded +unrecoverable +unrecovered +unrecyclable +unredeemable +unredeemed +unredressed +unreel +unreeled +unreeler +unreelers +unreeling +unreels +unreeve +unreeved +unreeves +unreeving +unrefined +unreflective +unreformed +unrefrigerated +unregenerate +unregenerately +unregistered +unregulated +unrehearsed +unreinforced +unrelated +unrelaxed +unrelenting +unrelentingly +unreliabilities +unreliability +unreliable +unrelieved +unrelievedly +unreligious +unreluctant +unremarkable +unremarkably +unremarked +unremembered +unreminiscent +unremitting +unremittingly +unremorseful +unremovable +unrent +unrented +unrepaid +unrepair +unrepairs +unrepeatable +unrepentant +unrepentantly +unreported +unrepresentative +unrepresentativeness +unrepresentativenesses +unrepresented +unrepressed +unrequited +unreserve +unreserved +unreservedly +unreservedness +unreservednesses +unreserves +unresistant +unresisting +unresolvable +unresolved +unrespectable +unresponsive +unresponsively +unresponsiveness +unresponsivenesses unrest +unrested +unrestful +unrestored +unrestrained +unrestrainedly +unrestrainedness +unrestrainednesses +unrestraint +unrestraints +unrestricted +unrests +unretouched +unreturnable +unrevealed +unreviewable +unreviewed +unrevised +unrevolutionary +unrewarded +unrewarding +unrhetorical +unrhymed +unrhythmic +unridable +unriddle +unriddled +unriddles +unriddling +unrifled +unrig +unrigged +unrigging +unrighteous +unrighteously +unrighteousness +unrighteousnesses +unrigs +unrimed +unrinsed +unrip +unripe +unripely +unripened +unripeness +unripenesses +unriper +unripest +unripped +unripping +unrips +unrisen +unrivaled +unrivalled +unrobe +unrobed +unrobes +unrobing +unroll +unrolled +unrolling +unrolls +unromantic +unromantically +unromanticized +unroof +unroofed +unroofing +unroofs +unroot +unrooted +unrooting +unroots +unroped +unrough +unround +unrounded +unrounding +unrounds +unrove +unroven +unruffled +unruled +unrulier +unruliest +unruliness +unrulinesses +unruly +unrushed +unrusted +uns +unsaddle +unsaddled +unsaddles +unsaddling +unsafe +unsafely +unsafeties +unsafety +unsaid +unsalable +unsalaried +unsalted +unsalvageable +unsanctioned +unsanitary +unsated +unsatisfactorily +unsatisfactoriness +unsatisfactorinesses +unsatisfactory +unsatisfied +unsatisfying +unsaturate +unsaturated +unsaturates +unsaved +unsavory +unsawed +unsawn +unsay +unsayable +unsaying +unsays +unscalable +unscaled +unscarred +unscathed +unscented +unscheduled +unscholarly +unschooled +unscientific +unscientifically +unscramble +unscrambled +unscrambler +unscramblers +unscrambles +unscrambling +unscreened +unscrew +unscrewed +unscrewing +unscrews +unscripted +unscriptural +unscrupulous +unscrupulously +unscrupulousness +unscrupulousnesses +unseal +unsealed +unsealing +unseals +unseam +unseamed +unseaming +unseams +unsearchable +unsearchably +unseared +unseasonable +unseasonableness +unseasonablenesses +unseasonably +unseasoned +unseat +unseated +unseating +unseats +unseaworthy +unsecured +unseeded +unseeing +unseemlier +unseemliest +unseemliness +unseemlinesses +unseemly +unseen +unsegmented +unsegregated +unseized +unselected +unselective +unselectively +unselfish +unselfishly +unselfishness +unselfishnesses +unsell +unsellable +unselling +unsells +unsensational +unsensitized +unsent +unsentimental +unseparated +unserious +unseriousness +unseriousnesses +unserved +unserviceable +unset +unsets +unsetting +unsettle +unsettled +unsettledness +unsettlednesses +unsettlement +unsettlements +unsettles +unsettling +unsettlingly +unsew +unsewed +unsewing +unsewn +unsews +unsex +unsexed +unsexes +unsexing +unsexual +unsexy +unshackle +unshackled +unshackles +unshackling +unshaded +unshakable +unshakably +unshaken +unshamed +unshaped +unshapely +unshapen +unshared +unsharp +unshaved +unshaven +unsheathe +unsheathed +unsheathes +unsheathing +unshed +unshell +unshelled +unshelling +unshells +unshift +unshifted +unshifting +unshifts +unship +unshipped +unshipping +unships +unshockable +unshod +unshorn +unshowy +unshrunk +unshut +unsicker +unsifted +unsight +unsighted +unsighting +unsightlier +unsightliest +unsightliness +unsightlinesses +unsightly +unsights +unsigned +unsilent +unsinful +unsinkable +unsized +unskilled +unskillful +unskillfully +unskillfulness +unskillfulnesses +unslakable +unslaked +unsliced +unsling +unslinging +unslings +unslung +unsmart +unsmiling +unsmoked +unsmoothed +unsnap +unsnapped +unsnapping +unsnaps +unsnarl +unsnarled +unsnarling +unsnarls +unsoaked +unsober +unsociabilities +unsociability +unsociable +unsociableness +unsociablenesses +unsociably +unsocial +unsocialized +unsocially +unsoiled +unsold +unsolder +unsoldered +unsoldering +unsolders +unsoldierly +unsolicited +unsolid +unsolvable +unsolved +unsoncy +unsonsie +unsonsy +unsophisticated +unsophistication +unsophistications +unsorted +unsought +unsound +unsounded +unsounder +unsoundest +unsoundly +unsoundness +unsoundnesses +unsoured +unsowed +unsown +unsparing +unsparingly +unspeak +unspeakable +unspeakably +unspeaking +unspeaks +unspecialized +unspecifiable +unspecific +unspecified +unspectacular +unspent +unsphere +unsphered +unspheres +unsphering +unspilt +unspiritual +unsplit +unspoiled +unspoilt +unspoke +unspoken +unsportsmanlike +unspotted +unsprayed +unsprung +unspun +unstable +unstableness +unstablenesses +unstabler +unstablest +unstably +unstack +unstacked +unstacking +unstacks +unstained +unstandardized +unstartling +unstate +unstated +unstates +unstating +unstayed +unsteadied +unsteadier +unsteadies +unsteadiest +unsteadily +unsteadiness +unsteadinesses +unsteady +unsteadying +unsteel +unsteeled +unsteeling +unsteels +unstep +unstepped +unstepping +unsteps +unsterile +unsterilized +unstick +unsticking +unsticks +unstinted +unstinting +unstintingly +unstitch +unstitched +unstitches +unstitching +unstoned +unstop +unstoppable +unstoppably +unstopped +unstopper +unstoppered +unstoppering +unstoppers +unstopping +unstops +unstrained +unstrap +unstrapped +unstrapping +unstraps +unstratified +unstress +unstressed +unstresses +unstring +unstringing +unstrings +unstructured +unstrung +unstuck +unstudied +unstuffy +unstung +unstylish +unsubdued +unsubsidized +unsubstantial +unsubstantialities +unsubstantiality +unsubstantially +unsubstantiated +unsubtle +unsubtly +unsuccess +unsuccesses +unsuccessful +unsuccessfully +unsuitabilities +unsuitability +unsuitable +unsuitably +unsuited +unsullied +unsung +unsunk +unsupervised +unsupportable +unsupported +unsure +unsurely +unsurpassable +unsurpassed +unsurprised +unsurprising +unsurprisingly +unsusceptible +unsuspected +unsuspecting +unsuspectingly +unsuspicious +unsustainable +unswathe +unswathed +unswathes +unswathing +unswayed +unswear +unswearing +unswears +unsweetened +unswept +unswerving +unswore +unsworn +unsymmetrical +unsymmetrically +unsympathetic +unsympathetically +unsymptomatic +unsynchronized +unsystematic +unsystematically +unsystematized +untack +untacked +untacking +untacks +untactful +untagged +untainted +untaken +untalented +untamable +untame +untamed +untangle +untangled +untangles +untangling +untanned +untapped +untarnished +untasted +untaught +untaxed +unteach +unteachable +unteaches +unteaching +untechnical +untempered +untenabilities +untenability +untenable +untenanted +untended +untented +untenured +untestable +untested +untether +untethered +untethering +untethers +unthawed +untheoretical +unthink +unthinkabilities +unthinkability +unthinkable +unthinkably +unthinking +unthinkingly +unthinks +unthought +unthread +unthreaded +unthreading +unthreads +unthreatening +unthrifty +unthrone +unthroned +unthrones +unthroning +untidied +untidier +untidies +untidiest +untidily +untidiness +untidinesses +untidy +untidying +untie +untied +unties until +untillable +untilled +untilted +untimelier +untimeliest +untimeliness +untimelinesses +untimely +untimeous +untinged +untipped +untired +untiring +untiringly +untitled +unto +untogether +untold +untorn +untouchabilities +untouchability +untouchable +untouchables +untouched +untoward +untowardly +untowardness +untowardnesses +untraceable +untraced +untraditional +untraditionally +untrained +untrammeled +untransformed +untranslatabilities +untranslatability +untranslatable +untranslated +untraveled +untraversed +untread +untreading +untreads +untreated +untrendy +untried +untrim +untrimmed +untrimming +untrims +untrod +untrodden +untroubled +untrue +untruer +untruest +untruly +untruss +untrussed +untrusses +untrussing +untrusting +untrustworthy +untrusty +untruth +untruthful +untruthfully +untruthfulness +untruthfulnesses +untruths +untuck +untucked +untucking +untucks +untufted +untune +untuned +untunes +untuning +unturned +untutored +untwine +untwined +untwines +untwining +untwist +untwisted +untwisting +untwists +untying +untypical +untypically +ununderstandable +ununited +unurged +unusable +unused unusual +unusually +unusualness +unusualnesses +unutilized +unutterable +unutterably +unvaccinated +unvalued +unvanquished +unvaried +unvarnished +unvarying +unveil +unveiled +unveiling +unveils +unveined +unventilated +unverbalized +unverifiable +unverified +unversed +unvexed +unvext +unviable +unvisited +unvocal +unvoice +unvoiced +unvoices +unvoicing +unwalled +unwaning +unwanted +unwarier +unwariest +unwarily +unwariness +unwarinesses +unwarlike +unwarmed +unwarned +unwarped +unwarrantable +unwarrantably +unwarranted +unwary +unwashed +unwashedness +unwashednesses +unwasheds +unwasted +unwatchable +unwavering +unwaveringly +unwaxed +unweaned +unwearable +unwearied +unweariedly +unweary +unweathered +unweave +unweaves +unweaving +unwed +unwedded +unweeded +unweeting +unweetingly +unweight +unweighted +unweighting +unweights +unwelcome +unwelded +unwell +unwept +unwetted +unwhite +unwholesome +unwholesomely +unwieldier +unwieldiest +unwieldily +unwieldiness +unwieldinesses +unwieldy +unwifely +unwilled unwilling +unwillingly +unwillingness +unwillingnesses +unwind +unwinder +unwinders +unwinding +unwinds +unwinnable +unwisdom +unwisdoms +unwise +unwisely +unwiser +unwisest +unwish +unwished +unwishes +unwishing +unwit +unwits +unwitted +unwitting +unwittingly +unwomanly +unwon +unwonted +unwontedly +unwontedness +unwontednesses +unwooded +unwooed +unworkabilities +unworkability +unworkable +unworkables +unworked +unworldliness +unworldlinesses +unworldly +unworn +unworried +unworthier +unworthies +unworthiest +unworthily +unworthiness +unworthinesses +unworthy +unwound +unwounded +unwove +unwoven +unwrap +unwrapped +unwrapping +unwraps +unwreathe +unwreathed +unwreathes +unwreathing +unwritten +unwrung +unyeaned +unyielding +unyieldingly +unyoke +unyoked +unyokes +unyoking +unyoung +unzip +unzipped +unzipping +unzips +unzoned up +upas +upases +upbear +upbearer +upbearers +upbearing +upbears +upbeat +upbeats +upbind +upbinding +upbinds +upboil +upboiled +upboiling +upboils +upbore +upborne +upbound +upbow +upbows +upbraid +upbraided +upbraider +upbraiders +upbraiding +upbraids +upbringing +upbringings +upbuild +upbuilding +upbuilds +upbuilt +upby +upbye +upcast +upcasting +upcasts +upchuck +upchucked +upchucking +upchucks +upclimb +upclimbed +upclimbing +upclimbs +upcoast +upcoil +upcoiled +upcoiling +upcoils +upcoming +upcountry +upcurl +upcurled +upcurling +upcurls +upcurve +upcurved +upcurves +upcurving +updart +updarted +updarting +updarts update +updated +updater +updaters +updates +updating +updive +updived +updives +updiving +updo +updos +updove +updraft +updrafts +updried +updries +updry +updrying +upend +upended +upending +upends +upfield +upfling +upflinging +upflings +upflow +upflowed +upflowing +upflows +upflung +upfold +upfolded +upfolding +upfolds +upfront +upgather +upgathered +upgathering +upgathers +upgaze +upgazed +upgazes +upgazing +upgird +upgirded +upgirding +upgirds +upgirt +upgoing +upgradabilities +upgradability +upgradable +upgrade +upgradeabilities +upgradeability +upgradeable +upgraded +upgrades +upgrading +upgrew +upgrow +upgrowing +upgrown +upgrows +upgrowth +upgrowths +upheap +upheaped +upheaping +upheaps +upheaval +upheavals +upheave +upheaved +upheaver +upheavers +upheaves +upheaving +upheld +uphill +uphills +uphoard +uphoarded +uphoarding +uphoards +uphold +upholder +upholders +upholding +upholds +upholster +upholstered +upholsterer +upholsterers +upholsteries +upholstering +upholsters +upholstery +uphove +uphroe +uphroes +upkeep +upkeeps +upland +uplander +uplanders +uplands +upleap +upleaped +upleaping +upleaps +upleapt +uplift +uplifted +uplifter +uplifters +uplifting +uplifts +uplight +uplighted +uplighting +uplights +uplink +uplinks +uplit +upload +uploaded +uploading +uploads +upmanship +upmanships +upmarket +upmost +upo upon +upped upper +uppercase +uppercased +uppercases +uppercasing +upperclassman +upperclassmen +uppercut +uppercuts +uppercutting +uppermost +upperpart +upperparts +uppers +uppile +uppiled +uppiles +uppiling +upping +uppings +uppish +uppishly +uppishness +uppishnesses +uppitiness +uppitinesses +uppity +uppityness +uppitynesses +upprop +uppropped +uppropping +upprops +upraise +upraised +upraiser +upraisers +upraises +upraising +uprate +uprated +uprates +uprating +upreach +upreached +upreaches +upreaching +uprear +upreared +uprearing +uprears +upright +uprighted +uprighting +uprightly +uprightness +uprightnesses +uprights +uprise +uprisen +upriser +uprisers +uprises +uprising +uprisings +upriver +uprivers +uproar +uproarious +uproariously +uproariousness +uproariousnesses +uproars +uproot +uprootal +uprootals +uprooted +uprootedness +uprootednesses +uprooter +uprooters +uprooting +uproots +uprose +uprouse +uproused +uprouses +uprousing +uprush +uprushed +uprushes +uprushing +ups +upscale +upscaled +upscales +upscaling +upsend +upsending +upsends +upsent upset +upsets +upsetter +upsetters +upsetting +upshift +upshifted +upshifting +upshifts +upshoot +upshooting +upshoots +upshot +upshots +upside +upsides +upsilon +upsilons +upsoar +upsoared +upsoaring +upsoars +upsprang +upspring +upspringing +upsprings +upsprung +upstage +upstaged +upstages +upstaging +upstair upstairs +upstand +upstanding +upstandingness +upstandingnesses +upstands +upstare +upstared +upstares +upstaring +upstart +upstarted +upstarting +upstarts +upstate +upstater +upstaters +upstates +upstep +upstepped +upstepping +upsteps +upstir +upstirred +upstirring +upstirs +upstood +upstream +upstroke +upstrokes +upsurge +upsurged +upsurges +upsurging +upsweep +upsweeping +upsweeps +upswell +upswelled +upswelling +upswells +upswept +upswing +upswinging +upswings +upswollen +upswung +uptake +uptakes +uptear +uptearing +uptears +upthrew +upthrow +upthrowing +upthrown +upthrows +upthrust +upthrusting +upthrusts +uptick +upticks +uptight +uptightness +uptightnesses +uptilt +uptilted +uptilting +uptilts +uptime +uptimes +uptore +uptorn +uptoss +uptossed +uptosses +uptossing +uptown +uptowner +uptowners +uptowns +uptrend +uptrends +upturn +upturned +upturning +upturns +upwaft +upwafted +upwafting +upwafts upward +upwardly +upwardness +upwardnesses upwards +upwell +upwelled +upwelling +upwellings +upwells +upwind +upwinds +uracil +uracils +uraei +uraemia +uraemias +uraemic +uraeus +uraeuses +uralite +uralites +uralitic +urania +uranias +uranic +uranide +uranides +uraninite +uraninites +uranism +uranisms +uranite +uranites +uranitic +uranium +uraniums +uranographies +uranography +uranous +uranyl +uranylic +uranyls +urare +urares +urari +uraris +urase +urases +urate +urates +uratic +urb urban +urbane +urbanely +urbaner +urbanest +urbanisation +urbanisations +urbanise +urbanised +urbanises +urbanising +urbanism +urbanisms +urbanist +urbanistic +urbanistically +urbanists +urbanite +urbanites +urbanities +urbanity +urbanization +urbanizations +urbanize +urbanized +urbanizes +urbanizing +urbanologies +urbanologist +urbanologists +urbanology +urbia +urbias +urbs +urceolate +urchin +urchins +urd +urds +urea +ureal +ureas +urease +ureases +uredia +uredial +uredinia +uredinial +urediniospore +urediniospores +uredinium +urediospore +urediospores +uredium +uredo +uredos +uredospore +uredospores +ureic +ureide +ureides +uremia +uremias +uremic +ureotelic +ureotelism +ureotelisms +ureter +ureteral +ureteric +ureters +urethan +urethane +urethanes +urethans +urethra +urethrae +urethral +urethras +urethrites +urethritides +urethritis +urethritises +urethroscope +urethroscopes +uretic urge +urged +urgencies +urgency urgent +urgently +urger +urgers +urges +urging +urgingly +urial +urials +uric +uricosuric +uricotelic +uricotelism +uricotelisms +uridine +uridines +urinal +urinals +urinalyses +urinalysis +urinaries +urinary +urinate +urinated +urinates +urinating +urination +urinations +urine +urinemia +urinemias +urinemic +urines +urinogenital +urinometer +urinometers +urinose +urinous +urn +urnlike +urns +urochord +urochordate +urochordates +urochords +urochrome +urochromes +urodele +urodeles +urogenital +urokinase +urokinases +urolith +urolithiases +urolithiasis +uroliths +urologic +urological +urologies +urologist +urologists +urology +uropod +uropodal +uropods +uropygia +uropygium +uropygiums +uroscopies +uroscopy +urostyle +urostyles +ursa +ursae +ursiform +ursine +urtext +urtexts +urticant +urticants +urticaria +urticarial +urticarias +urticate +urticated +urticates +urticating +urtication +urtications +urus +uruses +urushiol +urushiols +us +usabilities +usability +usable +usableness +usablenesses +usably +usage +usages +usance +usances +usaunce +usaunces use +useable +useably used useful +usefully +usefulness +usefulnesses useless +uselessly +uselessness +uselessnesses user +users +uses +usher +ushered +usherette +usherettes +ushering +ushers +using +usnea +usneas +usquabae +usquabaes +usque +usquebae +usquebaes +usquebaugh +usquebaughs +usques +ustulate usual +usually +usualness +usualnesses +usuals +usufruct +usufructs +usufructuaries +usufructuary +usurer +usurers +usuries +usurious +usuriously +usuriousness +usuriousnesses +usurp +usurpation +usurpations +usurped +usurper +usurpers +usurping +usurps +usury +ut +uta +utas +utensil +utensils +uteri +uterine +uterus +uteruses +utile +utilidor +utilidors +utilise +utilised +utiliser +utilisers +utilises +utilising +utilitarian +utilitarianism +utilitarianisms +utilitarians +utilities +utility +utilizable +utilization +utilizations +utilize +utilized +utilizer +utilizers +utilizes +utilizing +utmost +utmosts +utopia +utopian +utopianism +utopianisms +utopians +utopias +utopism +utopisms +utopist +utopistic +utopists +utricle +utricles +utricular +utriculi +utriculus +uts +utter +utterable +utterance +utterances +uttered +utterer +utterers +uttering +utterly +uttermost +uttermosts +utters +uvarovite +uvarovites +uvea +uveal +uveas +uveitic +uveitis +uveitises +uveous +uvula +uvulae +uvular +uvularly +uvulars +uvulas +uvulitis +uvulitises +uxorial +uxoricide +uxoricides +uxorious +uxoriously +uxoriousness +uxoriousnesses +vac +vacancies +vacancy vacant +vacantly +vacantness +vacantnesses +vacate +vacated +vacates +vacating vacation +vacationed +vacationer +vacationers +vacationing +vacationist +vacationists +vacationland +vacationlands +vacations +vaccina +vaccinal +vaccinas +vaccinate +vaccinated +vaccinates +vaccinating +vaccination +vaccinations +vaccinator +vaccinators +vaccine +vaccinee +vaccinees +vaccines +vaccinia +vaccinial +vaccinias +vacillate +vacillated +vacillates +vacillating +vacillatingly +vacillation +vacillations +vacillator +vacillators +vacs +vacua +vacuities +vacuity +vacuolar +vacuolate +vacuolated +vacuolation +vacuolations +vacuole +vacuoles +vacuous +vacuously +vacuousness +vacuousnesses +vacuum +vacuumed +vacuuming +vacuums +vadose +vagabond +vagabondage +vagabondages +vagabonded +vagabonding +vagabondish +vagabondism +vagabondisms +vagabonds +vagal +vagally +vagaries +vagarious +vagariously +vagary +vagi +vagile +vagilities +vagility +vagina +vaginae +vaginal +vaginally +vaginas +vaginate +vaginismus +vaginismuses +vaginitis +vaginitises +vagotomies +vagotomy +vagotonia +vagotonias +vagotonic +vagrancies +vagrancy +vagrant +vagrantly +vagrants +vagrom vague +vaguely +vagueness +vaguenesses +vaguer +vaguest +vagus +vahine +vahines +vail +vailed +vailing +vails vain +vainer +vainest +vainglories +vainglorious +vaingloriously +vaingloriousness +vaingloriousnesses +vainglory +vainly +vainness +vainnesses +vair +vairs +vakeel +vakeels +vakil +vakils +valance +valanced +valances +valancing +vale +valediction +valedictions +valedictorian +valedictorians +valedictories +valedictory +valence +valences +valencia +valencias +valencies +valency +valentine +valentines +valerate +valerates +valerian +valerians +valeric +vales +valet +valeted +valeting +valets +valetudinarian +valetudinarianism +valetudinarianisms +valetudinarians +valetudinaries +valetudinary +valgoid +valgus +valguses +valiance +valiances +valiancies +valiancy +valiant +valiantly +valiantness +valiantnesses +valiants valid +validate +validated +validates +validating +validation +validations +validities +validity +validly +valine +valines +valise +valises +valkyr +valkyrie +valkyries +valkyrs +vallate +vallecula +valleculae +vallecular valley +valleys +valonia +valonias +valor +valorise +valorised +valorises +valorising +valorization +valorizations +valorize +valorized +valorizes +valorizing +valorous +valorously +valors +valour +valours +valpolicella +valpolicellas +valse +valses valuable +valuableness +valuablenesses +valuables +valuably +valuate +valuated +valuates +valuating +valuation +valuational +valuationally +valuations +valuator +valuators value +valued +valueless +valuelessness +valuelessnesses +valuer +valuers +values +valuing +valuta +valutas +valval +valvar +valvate +valve +valved +valveless +valvelet +valvelets +valves +valving +valvula +valvulae +valvular +valvule +valvules +valvulites +valvulitides +valvulitis +valvulitises +vambrace +vambraces +vamoose +vamoosed +vamooses +vamoosing +vamose +vamosed +vamoses +vamosing +vamp +vamped +vamper +vampers +vamping +vampire +vampires +vampiric +vampirish +vampirism +vampirisms +vampish +vamps +van +vanadate +vanadates +vanadic +vanadium +vanadiums +vanadous +vanaspati +vanaspatis +vanda +vandal +vandalic +vandalise +vandalised +vandalises +vandalising +vandalism +vandalisms +vandalistic +vandalization +vandalizations +vandalize +vandalized +vandalizes +vandalizing +vandals +vandas +vandyke +vandyked +vandykes +vane +vaned +vanes +vang +vangs +vanguard +vanguardism +vanguardisms +vanguardist +vanguardists +vanguards +vanilla +vanillas +vanillic +vanillin +vanillins +vanish +vanished +vanisher +vanishers +vanishes +vanishing +vanishingly +vanitied +vanities +vanitories +vanitory +vanity +vanman +vanmen +vanned +vanner +vanners +vanning +vanpool +vanpooling +vanpoolings +vanpools +vanquish +vanquishable +vanquished +vanquisher +vanquishers +vanquishes +vanquishing +vans +vantage +vantages +vanward +vapid +vapidities +vapidity +vapidly +vapidness +vapidnesses +vapor +vapored +vaporer +vaporers +vaporetti +vaporetto +vaporettos +vaporing +vaporings +vaporise +vaporised +vaporises +vaporish +vaporishness +vaporishnesses +vaporising +vaporizable +vaporization +vaporizations +vaporize +vaporized +vaporizer +vaporizers +vaporizes +vaporizing +vaporous +vaporously +vaporousness +vaporousnesses +vapors +vaporware +vaporwares +vapory +vapour +vapoured +vapourer +vapourers +vapouring +vapours +vapoury +vaquero +vaqueros +var +vara +varactor +varactors +varas +varia +variabilities +variability +variable +variableness +variablenesses +variables +variably +variance +variances +variant +variants +variate +variated +variates +variating +variation +variational +variationally +variations +varicella +varicellas +varices +varicocele +varicoceles +varicolored +varicose +varicosed +varicosities +varicosity +varied +variedly +variegate +variegated +variegates +variegating +variegation +variegations +variegator +variegators +varier +variers +varies +varietal +varietals +varieties variety +variform +variola +variolar +variolas +variole +varioles +variometer +variometers +variorum +variorums various +variously +variousness +variousnesses +varisized +varistor +varistors +varix +varlet +varletries +varletry +varlets +varment +varments +varmint +varmints +varna +varnas +varnish +varnished +varnisher +varnishers +varnishes +varnishing +varnishy +varoom +varoomed +varooming +varooms +vars +varsities +varsity +varus +varuses +varve +varved +varves +vary +varying +varyingly +vas +vasa +vasal +vascula +vascular +vascularities +vascularity +vascularization +vascularizations +vasculature +vasculatures +vasculitides +vasculitis +vasculum +vasculums vase +vasectomies +vasectomize +vasectomized +vasectomizes +vasectomizing +vasectomy +vaselike +vases +vasiform +vasoactive +vasoactivities +vasoactivity +vasoconstriction +vasoconstrictions +vasoconstrictive +vasoconstrictor +vasoconstrictors +vasodilatation +vasodilatations +vasodilation +vasodilations +vasodilator +vasodilators +vasomotor +vasopressin +vasopressins +vasopressor +vasopressors +vasospasm +vasospasms +vasospastic +vasotocin +vasotocins +vasotomies +vasotomy +vasovagal +vassal +vassalage +vassalages +vassals vast -vcd +vaster +vastest +vastier +vastiest +vastities +vastitude +vastitudes +vastity +vastly +vastness +vastnesses +vasts +vasty +vat +vatful +vatfuls +vatic +vatical +vaticide +vaticides +vaticinal +vaticinate +vaticinated +vaticinates +vaticinating +vaticination +vaticinations +vaticinator +vaticinators +vats +vatted +vatting +vatu +vatus +vau +vaudeville +vaudevilles +vaudevillian +vaudevillians +vault +vaulted +vaulter +vaulters +vaultier +vaultiest +vaulting +vaultingly +vaultings +vaults +vaulty +vaunt +vaunted +vaunter +vaunters +vauntful +vauntie +vaunting +vauntingly +vaunts +vaunty +vaus +vav +vavasor +vavasors +vavasour +vavasours +vavassor +vavassors +vavs +vaw +vaward +vawards +vawntie +vaws +veal +vealed +vealer +vealers +vealier +vealiest +vealing +veals +vealy +vector +vectored +vectorial +vectorially +vectoring +vectors +vedalia +vedalias +vedette +vedettes +vee +veejay +veejays +veena +veenas +veep +veepee +veepees +veeps +veer +veered +veeries +veering +veeringly +veers +veery +vees +veg +vegan +veganism +veganisms +vegans vegetable +vegetables +vegetably +vegetal +vegetant +vegetarian +vegetarianism +vegetarianisms +vegetarians +vegetate +vegetated +vegetates +vegetating +vegetation +vegetational +vegetations +vegetative +vegetatively +vegetativeness +vegetativenesses +vegete +vegetist +vegetists +vegetive +veggie +veggies +vegie +vegies +vehemence +vehemences +vehement +vehemently vehicle +vehicles +vehicular +veil +veiled +veiledly +veiler +veilers +veiling +veilings +veillike +veils +vein +veinal +veined +veiner +veiners +veinier +veiniest +veining +veinings +veinless +veinlet +veinlets +veinlike +veins +veinule +veinules +veinulet +veinulets +veiny +vela +velamen +velamina +velar +velaria +velarium +velarization +velarizations +velarize +velarized +velarizes +velarizing +velars +velate +veld +velds +veldt +veldts +veliger +veligers +velites +velleities +velleity +vellum +vellums +veloce +velocimeter +velocimeters +velocipede +velocipedes +velocities +velocity +velodrome +velodromes +velour +velours +veloute +veloutes +velum +velure +velured +velures +veluring +velveret +velverets +velvet +velveted +velveteen +velveteens +velvetlike +velvets +velvety +vena +venae +venal +venalities +venality +venally +venatic +venation +venations +vend +vendable +vendables +vendace +vendaces +vended +vendee +vendees +vender +venders +vendetta +vendettas +vendeuse +vendeuses +vendibilities +vendibility +vendible +vendibles +vendibly +vending +vendor +vendors +vends +vendue +vendues +veneer +veneered +veneerer +veneerers +veneering +veneerings +veneers +venenate +venenated +venenates +venenating +venenose +venerabilities +venerability +venerable +venerableness +venerablenesses +venerably +venerate +venerated +venerates +venerating +veneration +venerations +venerator +venerators +venereal +veneries +venery +venesection +venesections +venetian +venetians +venge +vengeance +vengeances +venged +vengeful +vengefully +vengefulness +vengefulnesses +venges +venging +venial +venially +venialness +venialnesses +venin +venine +venines +venins +venipuncture +venipunctures +venire +venireman +veniremen +venires +venison +venisons +venogram +venograms +venographies +venography +venom +venomed +venomer +venomers +venoming +venomous +venomously +venomousness +venomousnesses +venoms +venose +venosities +venosity +venous +venously +vent +ventage +ventages +ventail +ventails +vented +venter +venters +ventifact +ventifacts +ventilate +ventilated +ventilates +ventilating +ventilation +ventilations +ventilator +ventilators +ventilatory +venting +ventless +ventral +ventrally +ventrals +ventricle +ventricles +ventricose +ventricular +ventriculi +ventriculus +ventriloquial +ventriloquially +ventriloquies +ventriloquism +ventriloquisms +ventriloquist +ventriloquistic +ventriloquists +ventriloquize +ventriloquized +ventriloquizes +ventriloquizing +ventriloquy +ventrolateral +ventromedial +vents +venture +ventured +venturer +venturers +ventures +venturesome +venturesomely +venturesomeness +venturesomenesses +venturi +venturing +venturis +venturous +venturously +venturousness +venturousnesses +venue +venues +venular +venule +venules +venulose +venulous +vera +veracious +veraciously +veraciousness +veraciousnesses +veracities +veracity +veranda +verandaed +verandah +verandahed +verandahs +verandas +verapamil +verapamils +veratria +veratrias +veratridine +veratridines +veratrin +veratrine +veratrines +veratrins +veratrum +veratrums +verb +verbal +verbalism +verbalisms +verbalist +verbalistic +verbalists +verbalization +verbalizations +verbalize +verbalized +verbalizer +verbalizers +verbalizes +verbalizing +verbally +verbals +verbatim +verbena +verbenas +verbiage +verbiages +verbicide +verbicides +verbid +verbids +verbified +verbifies +verbify +verbifying +verbigeration +verbigerations +verbile +verbiles +verbless +verbose +verbosely +verboseness +verbosenesses +verbosities +verbosity +verboten +verbs +verdancies +verdancy +verdant +verdantly +verderer +verderers +verderor +verderors +verdict +verdicts +verdigris +verdigrises +verdin +verdins +verditer +verditers +verdure +verdured +verdures +verdurous +verecund +verge +verged +vergence +vergences +verger +vergers +verges +verging +verglas +verglases +veridic +veridical +veridicalities +veridicality +veridically +verier +veriest +verifiabilities +verifiability +verifiable +verifiableness +verifiablenesses +verification +verifications +verified +verifier +verifiers +verifies +verify +verifying +verily +verisimilar +verisimilarly +verisimilitude +verisimilitudes +verisimilitudinous +verism +verismo +verismos +verisms +verist +veristic +verists +veritable +veritableness +veritablenesses +veritably +veritas +veritates +verite +verites +verities +verity +verjuice +verjuices +vermeil +vermeils +vermes +vermian +vermicelli +vermicellis +vermicide +vermicides +vermicular +vermiculate +vermiculated +vermiculation +vermiculations +vermiculite +vermiculites +vermiform +vermifuge +vermifuges +vermilion +vermilions +vermillion +vermillions +vermin +verminous +vermis +vermoulu +vermouth +vermouths +vermuth +vermuths +vernacle +vernacles +vernacular +vernacularism +vernacularisms +vernacularly +vernaculars +vernal +vernalization +vernalizations +vernalize +vernalized +vernalizes +vernalizing +vernally +vernation +vernations +vernicle +vernicles +vernier +verniers +vernissage +vernissages +vernix +vernixes +veronica +veronicas +verruca +verrucae +verrucose +versal +versant +versants +versatile +versatilely +versatileness +versatilenesses +versatilities +versatility +verse +versed +verseman +versemen +verser +versers +verses +verset +versets +versicle +versicles +versicular +versification +versifications +versified +versifier +versifiers +versifies +versify +versifying +versine +versines +versing version +versional +versions +verso +versos +verst +verste +verstes +versts +versus +vert +vertebra +vertebrae +vertebral +vertebras +vertebrate +vertebrates +vertex +vertexes vertical +verticalities +verticality +vertically +verticalness +verticalnesses +verticals +vertices +verticil +verticillate +verticils +vertigines +vertiginous +vertiginously +vertigo +vertigoes +vertigos +verts +vertu +vertus +vervain +vervains +verve +verves +vervet +vervets very +vesica +vesicae +vesical +vesicant +vesicants +vesicate +vesicated +vesicates +vesicating +vesicle +vesicles +vesicula +vesiculae +vesicular +vesicularities +vesicularity +vesiculate +vesiculated +vesiculates +vesiculating +vesiculation +vesiculations +vesper +vesperal +vesperals +vespers +vespertilian +vespertine +vespiaries +vespiary +vespid +vespids +vespine +vessel +vesseled +vessels vest +vesta +vestal +vestally +vestals +vestas +vested +vestee +vestees +vestiaries +vestiary +vestibular +vestibule +vestibuled +vestibules +vestige +vestiges +vestigia +vestigial +vestigially +vestigium +vesting +vestings +vestless +vestlike +vestment +vestmental +vestments +vestral +vestries +vestry +vestryman +vestrymen +vests +vestural +vesture +vestured +vestures +vesturing +vesuvian +vesuvianite +vesuvianites +vesuvians +vet +vetch +vetches +vetchling +vetchlings +veteran +veterans +veterinarian +veterinarians +veterinaries +veterinary +vetiver +vetivers +vetivert +vetiverts +veto +vetoed +vetoer +vetoers +vetoes +vetoing +vets +vetted +vetting +vex +vexation +vexations +vexatious +vexatiously +vexatiousness +vexatiousnesses +vexed +vexedly +vexer +vexers +vexes +vexil +vexilla +vexillar +vexillologic +vexillological +vexillologies +vexillologist +vexillologists +vexillology +vexillum +vexils +vexing +vexingly +vext via +viabilities +viability +viable +viably +viaduct +viaducts +vial +vialed +vialing +vialled +vialling +vials +viand +viands +viatic +viatica +viatical +viaticum +viaticums +viator +viatores +viators +vibe +vibes +vibist +vibists +vibraharp +vibraharpist +vibraharpists +vibraharps +vibrance +vibrances +vibrancies +vibrancy +vibrant +vibrantly +vibrants +vibraphone +vibraphones +vibraphonist +vibraphonists +vibrate +vibrated +vibrates +vibratile +vibrating +vibration +vibrational +vibrationless +vibrations +vibrato +vibratoless +vibrator +vibrators +vibratory +vibratos +vibrio +vibrioid +vibrion +vibrionic +vibrions +vibrios +vibrioses +vibriosis +vibrissa +vibrissae +vibronic +viburnum +viburnums +vicar +vicarage +vicarages +vicarate +vicarates +vicarial +vicariance +vicariances +vicariant +vicariants +vicariate +vicariates +vicarious +vicariously +vicariousness +vicariousnesses +vicarly +vicars +vicarship +vicarships vice +viced +vicegerencies +vicegerency +vicegerent +vicegerents +viceless +vicenary +vicennial +viceregal +viceregally +vicereine +vicereines +viceroy +viceroyalties +viceroyalty +viceroys +viceroyship +viceroyships +vices +vichies +vichy +vichyssoise +vichyssoises +vicinage +vicinages +vicinal +vicing +vicinities +vicinity +vicious +viciously +viciousness +viciousnesses +vicissitude +vicissitudes +vicissitudinous +vicomte +vicomtes victim +victimhood +victimhoods +victimise +victimised +victimises +victimising +victimization +victimizations +victimize +victimized +victimizer +victimizers +victimizes +victimizing +victimless +victimologies +victimologist +victimologists +victimology +victims +victor +victoria +victorias +victories +victorious +victoriously +victoriousness +victoriousnesses +victors victory +victress +victresses +victual +victualed +victualer +victualers +victualing +victualled +victualler +victuallers +victualling +victuals +vicugna +vicugnas +vicuna +vicunas +vide +videlicet video +videocassette +videocassettes +videoconference +videoconferences +videoconferencing +videoconferencings +videodisc +videodiscs +videodisk +videodisks +videographer +videographers +videographies +videography +videoland +videolands +videophile +videophiles videophone +videophones +videos +videotape +videotaped +videotapes +videotaping +videotex +videotexes +videotext +videotexts +vidette +videttes +vidicon +vidicons +viduities +viduity +vie +vied +vier +viers +vies view +viewable +viewdata +viewdatas +viewed +viewer +viewers +viewership +viewerships +viewfinder +viewfinders +viewier +viewiest +viewing +viewings +viewless +viewlessly +viewpoint +viewpoints +views +viewy +vig +viga +vigas +vigesimal +vigil +vigilance +vigilances +vigilant +vigilante +vigilantes +vigilantism +vigilantisms +vigilantly +vigils +vigintillion +vigintillions +vigneron +vignerons +vignette +vignetted +vignetter +vignetters +vignettes +vignetting +vignettist +vignettists +vigor +vigorish +vigorishes +vigoroso +vigorous +vigorously +vigorousness +vigorousnesses +vigors +vigour +vigours +vigs +viking +vikings +vilayet +vilayets +vile +vilely +vileness +vilenesses +viler +vilest +vilification +vilifications +vilified +vilifier +vilifiers +vilifies +vilify +vilifying +vilipend +vilipended +vilipending +vilipends +vill +villa +villadom +villadoms +villae village villager +villageries +villagers +villagery +villages +villain +villainess +villainesses +villainies +villainous +villainously +villainousness +villainousnesses +villains +villainy +villanella +villanelle +villanelles +villas +villatic +villein +villeins +villenage +villenages +villi +villiform +villose +villosities +villosity +villous +vills +villus +vim +vimen +vimina +viminal +vims +vina +vinaceous +vinaigrette +vinaigrettes +vinal +vinals +vinas +vinasse +vinasses +vinblastine +vinblastines +vinca +vincas +vincible +vincibly +vincristine +vincristines +vincula +vinculum +vinculums +vindaloo +vindaloos +vindicable +vindicate +vindicated +vindicates +vindicating +vindication +vindications +vindicative +vindicator +vindicators +vindicatory +vindictive +vindictively +vindictiveness +vindictivenesses +vine +vineal +vined +vinedresser +vinedressers vinegar +vinegared +vinegarish +vinegars +vinegary +vineries +vinery +vines +vineyard +vineyardist +vineyardists +vineyards +vinic +viniculture +vinicultures +vinier +viniest +vinifera +viniferas +vinification +vinifications +vinified +vinifies +vinify +vinifying +vining +vino +vinos +vinosities +vinosity +vinous +vinously +vintage +vintager +vintagers +vintages +vintner +vintners +viny +vinyl +vinylic +vinylidene +vinylidenes +vinyls +viol +viola +violabilities +violability +violable +violableness +violablenesses +violably +violaceous +violas violate +violated +violater +violaters +violates +violating +violation +violations +violative +violator +violators violence +violences violent +violently +violet +violets violin violinist +violinistic +violinists +violins +violist +violists +violoncelli +violoncellist +violoncellists +violoncello +violoncellos +violone +violones +viols +viomycin +viomycins +viper +viperine +viperish +viperous +viperously +vipers +viraginous +virago +viragoes +viragos +viral +virally +virelai +virelais +virelay +virelays +viremia +viremias +viremic +vireo +vireos +vires +virescence +virescences +virescent +virga +virgas +virgate +virgates +virgin +virginal +virginalist +virginalists +virginally +virginals +virginities +virginity +virgins +virgule +virgules +viricidal +viricide +viricides +virid +viridescent +viridian +viridians +viridities +viridity +virile +virilely +virilism +virilisms +virilities +virility +virion +virions +virl +virls +viroid +viroids +virologic +virological +virologically +virologies +virologist +virologists +virology +viroses +virosis +virtu +virtual +virtualities +virtuality +virtually virtue +virtueless +virtues +virtuosa +virtuosas +virtuose +virtuosi +virtuosic +virtuosities +virtuosity +virtuoso +virtuosos +virtuous +virtuously +virtuousness +virtuousnesses +virtus +virucidal +virucide +virucides +virulence +virulences +virulencies +virulency +virulent +virulently +viruliferous virus +viruses +vis visa +visaed +visage +visaged +visages +visaing +visard +visards +visas +viscacha +viscachas +viscera +visceral +viscerally +viscid +viscidities +viscidity +viscidly +viscoelastic +viscoelasticities +viscoelasticity +viscoid +viscometer +viscometers +viscometric +viscometries +viscometry +viscose +viscoses +viscosimeter +viscosimeters +viscosimetric +viscosities +viscosity +viscount +viscountcies +viscountcy +viscountess +viscountesses +viscounties +viscounts +viscounty +viscous +viscously +viscousness +viscousnesses +viscus +vise +vised +viseed +viseing +viselike +vises +visibilities +visibility +visible +visibleness +visiblenesses +visibly +vising +vision +visional +visionally +visionaries +visionariness +visionarinesses +visionary +visioned +visioning +visionless +visions visit +visitable +visitant +visitants +visitation +visitations +visitatorial +visited +visiter +visiters +visiting visitor +visitors +visits +visive +visor +visored +visoring +visorless +visors +vista +vistaed +vistas visual +visualise +visualised +visualises +visualising +visualization +visualizations +visualize +visualized +visualizer +visualizers +visualizes +visualizing +visually +visuals +vita +vitae vital +vitalise +vitalised +vitalises +vitalising +vitalism +vitalisms +vitalist +vitalistic +vitalists +vitalities +vitality +vitalization +vitalizations +vitalize +vitalized +vitalizes +vitalizing +vitally +vitals +vitamer +vitamers +vitamin +vitamine +vitamines +vitamins +vitellin +vitelline +vitellins +vitellogeneses +vitellogenesis +vitellus +vitelluses +vitesse +vitesses +vitiable +vitiate +vitiated +vitiates +vitiating +vitiation +vitiations +vitiator +vitiators +viticultural +viticulturally +viticulture +viticultures +viticulturist +viticulturists +vitiligo +vitiligos +vitrain +vitrains +vitrectomies +vitrectomy +vitreous +vitreouses +vitric +vitrics +vitrifiable +vitrification +vitrifications +vitrified +vitrifies +vitrify +vitrifying +vitrine +vitrines +vitriol +vitrioled +vitriolic +vitrioling +vitriolled +vitriolling +vitriols +vitta +vittae +vittate +vittle +vittled +vittles +vittling +vituline +vituperate +vituperated +vituperates +vituperating +vituperation +vituperations +vituperative +vituperatively +vituperator +vituperators +vituperatory +viva +vivace +vivaces +vivacious +vivaciously +vivaciousness +vivaciousnesses +vivacities +vivacity +vivandiere +vivandieres +vivaria +vivaries +vivarium +vivariums +vivary +vivas +vive +viverrid +viverrids +vivers vivid +vivider +vividest +vividly +vividness +vividnesses +vivific +vivification +vivifications +vivified +vivifier +vivifiers +vivifies +vivify +vivifying +vivipara +viviparities +viviparity +viviparous +viviparously +vivisect +vivisected +vivisecting +vivisection +vivisectional +vivisectionist +vivisectionists +vivisections +vivisector +vivisectors +vivisects +vixen +vixenish +vixenly +vixens +vizard +vizarded +vizards +vizcacha +vizcachas +vizier +vizierate +vizierates +vizierial +viziers +viziership +vizierships +vizir +vizirate +vizirates +vizirial +vizirs +vizor +vizored +vizoring +vizors +vizsla +vizslas +vocable +vocables +vocably +vocabular +vocabularies vocabulary +vocal +vocalic +vocalically +vocalics +vocalise +vocalised +vocalises +vocalising +vocalism +vocalisms +vocalist +vocalists +vocalities +vocality +vocalization +vocalizations +vocalize +vocalized +vocalizer +vocalizers +vocalizes +vocalizing +vocally +vocals +vocation +vocational +vocationalism +vocationalisms +vocationalist +vocationalists +vocationally +vocations +vocative +vocatively +vocatives +voces +vociferant +vociferate +vociferated +vociferates +vociferating +vociferation +vociferations +vociferator +vociferators +vociferous +vociferously +vociferousness +vociferousnesses +vocoder +vocoders +vodka +vodkas +vodoun +vodouns +vodun +voduns +voe +voes +vogie +vogue +vogued +vogueing +voguer +voguers +vogues +voguing +voguish +voguishness +voguishnesses voice +voiced +voiceful +voicefulness +voicefulnesses +voiceless +voicelessly +voicelessness +voicelessnesses +voiceprint +voiceprints +voicer +voicers +voices +voicing +void +voidable +voidableness +voidablenesses +voidance +voidances +voided +voider +voiders +voiding +voidness +voidnesses +voids +voila +voile +voiles +volant +volante +volar +volatile +volatileness +volatilenesses +volatiles +volatilise +volatilised +volatilises +volatilising +volatilities +volatility +volatilizable +volatilization +volatilizations +volatilize +volatilized +volatilizes +volatilizing +volcanic +volcanically +volcanicities +volcanicity +volcanics +volcanism +volcanisms volcano +volcanoes +volcanologic +volcanological +volcanologies +volcanologist +volcanologists +volcanology +volcanos +vole +voled +voleries +volery +voles +voling +volitant +volition +volitional +volitions +volitive +volkslied +volkslieder +volley volleyball +volleyballs +volleyed +volleyer +volleyers +volleying +volleys +volost +volosts +volplane +volplaned +volplanes +volplaning +volt +volta +voltage +voltages +voltaic +voltaism +voltaisms +volte +voltes +volti +voltmeter +voltmeters +volts +volubilities +volubility +voluble +volubleness +volublenesses +volubly +volume +volumed +volumes +volumeter +volumeters +volumetric +volumetrically +voluming +voluminosities +voluminosity +voluminous +voluminously +voluminousness +voluminousnesses +voluntaries +voluntarily +voluntariness +voluntarinesses +voluntarism +voluntarisms +voluntarist +voluntaristic +voluntarists voluntary +voluntaryism +voluntaryisms +voluntaryist +voluntaryists volunteer +volunteered +volunteering +volunteerism +volunteerisms +volunteers +voluptuaries +voluptuary +voluptuous +voluptuously +voluptuousness +voluptuousnesses +volute +voluted +volutes +volutin +volutins +volution +volutions +volva +volvas +volvate +volvox +volvoxes +volvuli +volvulus +volvuluses +vomer +vomerine +vomers +vomica +vomicae +vomit +vomited +vomiter +vomiters +vomiting +vomitive +vomitives +vomito +vomitories +vomitory +vomitos +vomitous +vomits +vomitus +vomituses +voodoo +voodooed +voodooing +voodooism +voodooisms +voodooist +voodooistic +voodooists +voodoos +voracious +voraciously +voraciousness +voraciousnesses +voracities +voracity +vorlage +vorlages +vortex +vortexes +vortical +vortically +vorticella +vorticellae +vorticellas +vortices +vorticism +vorticisms +vorticist +vorticists +vorticities +vorticity +vorticose +votable +votaress +votaresses +votaries +votarist +votarists +votary vote +voteable +voted +voteless +voter +voters +votes +voting +votive +votively +votiveness +votivenesses +votress +votresses +vouch +vouched +vouchee +vouchees +voucher +vouchered +vouchering +vouchers +vouches +vouching +vouchsafe +vouchsafed +vouchsafement +vouchsafements +vouchsafes +vouchsafing +voussoir +voussoirs +vouvray +vouvrays +vow +vowed +vowel +vowelize +vowelized +vowelizes +vowelizing +vowels +vower +vowers +vowing +vowless +vows +vox voyage +voyaged +voyager +voyagers +voyages +voyageur +voyageurs +voyaging +voyeur +voyeurism +voyeurisms +voyeuristic +voyeuristically +voyeurs +vroom +vroomed +vrooming +vrooms +vrouw +vrouws +vrow +vrows +vug +vugg +vuggier +vuggiest +vuggs +vuggy +vugh +vughs +vugs +vulcanian +vulcanic +vulcanicities +vulcanicity +vulcanisate +vulcanisates +vulcanisation +vulcanisations +vulcanise +vulcanised +vulcanises +vulcanising +vulcanism +vulcanisms +vulcanizate +vulcanizates +vulcanization +vulcanizations +vulcanize +vulcanized +vulcanizer +vulcanizers +vulcanizes +vulcanizing +vulcanologies +vulcanologist +vulcanologists +vulcanology +vulgar +vulgarer +vulgarest +vulgarian +vulgarians +vulgarise +vulgarised +vulgarises +vulgarising +vulgarism +vulgarisms +vulgarities +vulgarity +vulgarization +vulgarizations +vulgarize +vulgarized +vulgarizer +vulgarizers +vulgarizes +vulgarizing +vulgarly +vulgars +vulgate +vulgates +vulgo +vulgus +vulguses +vulnerabilities +vulnerability +vulnerable +vulnerableness +vulnerablenesses +vulnerably +vulneraries +vulnerary +vulpine +vulture +vultures +vulturine +vulturish +vulturous +vulva +vulvae +vulval +vulvar +vulvas +vulvate +vulvitis +vulvitises +vulvovaginitis +vulvovaginitises +vying +vyingly +wab +wabble +wabbled +wabbler +wabblers +wabbles +wabblier +wabbliest +wabbling +wabbly +wabs +wack +wacke +wackes +wackier +wackiest +wackily +wackiness +wackinesses +wacko +wackos +wacks +wacky +wad +wadable +wadded +wadder +wadders +waddie +waddied +waddies +wadding +waddings +waddle +waddled +waddler +waddlers +waddles +waddling +waddly +waddy +waddying +wade +wadeable +waded +wader +waders +wades +wadi +wadies +wading +wadis +wadmaal +wadmaals +wadmal +wadmals +wadmel +wadmels +wadmol +wadmoll +wadmolls +wadmols +wads +wadset +wadsets +wadsetted +wadsetting +wady +wae +waeful +waeness +waenesses +waes +waesuck +waesucks +wafer +wafered +wafering +wafers +wafery +waff +waffed +waffie +waffies +waffing +waffle +waffled +waffler +wafflers +waffles +wafflestomper +wafflestompers +waffling +wafflings +waffs +waft +waftage +waftages +wafted +wafter +wafters +wafting +wafts +wafture +waftures wag wage +waged +wageless +wager +wagered +wagerer +wagerers +wagering +wagers +wages +wageworker +wageworkers +wagged +wagger +waggeries +waggers +waggery +wagging +waggish +waggishly +waggishness +waggishnesses +waggle +waggled +waggles +waggling +waggly +waggon +waggoned +waggoner +waggoners +waggoning +waggons +waging +wagon +wagonage +wagonages +wagoned +wagoner +wagoners +wagonette +wagonettes +wagoning +wagons +wags +wagsome +wagtail +wagtails +wahconda +wahcondas +wahine +wahines +wahoo +wahoos +waif +waifed +waifing +waiflike +waifs +wail +wailed +wailer +wailers +wailful +wailfully +wailing +wails +wailsome +wain +wains +wainscot +wainscoted +wainscoting +wainscotings +wainscots +wainscotted +wainscotting +wainscottings +wainwright +wainwrights +wair +waired +wairing +wairs waist +waistband +waistbands +waistcoat +waistcoated +waistcoats +waisted +waister +waisters +waisting +waistings +waistline +waistlines +waists wait +waited waiter -waitingroom +waiters +waiting +waitings +waitperson +waitpersons waitress +waitressed +waitresses +waitressing +waits +waive +waived +waiver +waivers +waives +waiving +wakanda +wakandas wake +waked +wakeful +wakefully +wakefulness +wakefulnesses +wakeless +waken +wakened +wakener +wakeners +wakening +wakenings +wakens +waker +wakerife +wakers +wakes +wakiki +wakikis +waking +wale +waled +waler +walers +wales +walies +waling walk +walkable +walkabout +walkabouts +walkathon +walkathons +walkaway +walkaways +walked +walker +walkers +walking +walkings +walkingstick +walkingsticks +walkout +walkouts +walkover +walkovers +walks +walkup +walkups +walkway +walkways +walkyrie +walkyries wall +walla +wallabies +wallaby +wallah +wallahs +wallaroo +wallaroos +wallas +wallboard +wallboards +walled wallet +wallets +walleye +walleyed +walleyes +wallflower +wallflowers +wallie +wallies +walling +wallop +walloped +walloper +wallopers +walloping +wallops +wallow +wallowed +wallower +wallowers +wallowing +wallows +wallpaper +wallpapered +wallpapering +wallpapers +walls +wally +wallydraigle +wallydraigles walnut +walnuts +walrus +walruses +waltz +waltzed +waltzer +waltzers +waltzes +waltzing +waly +wamble +wambled +wambles +wamblier +wambliest +wambling +wambly +wame +wamefou +wamefous +wameful +wamefuls +wames +wammus +wammuses +wampish +wampished +wampishes +wampishing +wampum +wampumpeag +wampumpeags +wampums +wampus +wampuses +wamus +wamuses +wan +wand wander +wandered +wanderer +wanderers +wandering +wanderings +wanderlust +wanderlusts +wanderoo +wanderoos +wanders +wandle +wands +wane +waned +wanes +waney +wangan +wangans +wangle +wangled +wangler +wanglers +wangles +wangling +wangun +wanguns +wanier +waniest +wanigan +wanigans +waning +wanion +wanions +wanly +wanned +wanner +wanness +wannesses +wannest +wannigan +wannigans +wanning +wans want +wantage +wantages +wanted +wanter +wanters +wanting +wanton +wantoned +wantoner +wantoners +wantoning +wantonly +wantonness +wantonnesses +wantons +wants +wany +wap +wapentake +wapentakes +wapiti +wapitis +wapped +wappenschawing +wappenschawings +wapping +waps war +warble +warbled +warbler +warblers +warbles +warbling +warbonnet +warbonnets +warcraft +warcrafts ward +warded +warden +wardenries +wardenry +wardens +wardenship +wardenships +warder +warders +warding +wardress +wardresses +wardrobe +wardrobes +wardroom +wardrooms +wards +wardship +wardships +ware +wared warehouse +warehoused +warehouseman +warehousemen +warehouser +warehousers +warehouses +warehousing +wareroom +warerooms +wares +warfare +warfares +warfarin +warfarins +warhead +warheads +warhorse +warhorses +warier +wariest +warily +wariness +warinesses +waring +warison +warisons +wark +warked +warking +warks +warless +warlike +warlock +warlocks +warlord +warlordism +warlordisms +warlords warm +warmaker +warmakers +warmblooded +warmed +warmer +warmers +warmest +warmhearted +warmheartedness +warmheartednesses +warming +warmish +warmly +warmness +warmnesses +warmonger +warmongering +warmongerings +warmongers +warmouth +warmouths +warms warmth +warmths +warmup +warmups warn +warned +warner +warners +warning +warningly +warnings +warns +warp +warpage +warpages +warpath +warpaths +warped +warper +warpers +warping +warplane +warplanes +warpower +warpowers +warps +warpwise +warragal +warragals +warrant +warrantable +warrantableness +warrantablenesses +warrantably +warranted +warrantee +warrantees +warranter +warranters +warranties +warranting +warrantless +warrantor +warrantors +warrants +warranty +warred +warren +warrener +warreners +warrens +warrigal +warrigals +warring +warrior +warriors +wars +warsaw +warsaws +warship +warships +warsle +warsled +warsler +warslers +warsles +warsling +warstle +warstled +warstler +warstlers +warstles +warstling +wart +warted +warthog +warthogs +wartier +wartiest +wartime +wartimes +wartless +wartlike +warts +warty +warwork +warworks +warworn +wary +was +wasabi +wasabis wash +washabilities +washability +washable +washables +washateria +washaterias +washbasin +washbasins +washboard +washboards +washbowl +washbowls +washcloth +washcloths +washday +washdays +washed +washer +washerman +washermen +washers +washerwoman +washerwomen +washes +washeteria +washeterias +washhouse +washhouses +washier +washiest +washing +washings +washout +washouts +washrag +washrags washroom +washrooms +washstand +washstands +washtub +washtubs +washup +washups +washwoman +washwomen +washy +wasp +waspier +waspiest +waspily +waspish +waspishly +waspishness +waspishnesses +wasplike +wasps +waspy +wassail +wassailed +wassailer +wassailers +wassailing +wassails +wast +wastable +wastage +wastages waste +wastebasket +wastebaskets +wasted +wasteful +wastefully +wastefulness +wastefulnesses +wasteland +wastelands +wastelot +wastelots +wastepaper +wastepapers +waster +wasterie +wasteries +wasters +wastery +wastes +wastewater +wastewaters +wasteway +wasteways +wasting +wastrel +wastrels +wastrie +wastries +wastry +wasts +wat +watap +watape +watapes +wataps watch +watchable +watchables +watchband +watchbands +watchcase +watchcases +watchcries +watchcry +watchdog +watchdogged +watchdogging +watchdogs +watched +watcher +watchers +watches +watcheye +watcheyes +watchful +watchfully +watchfulness +watchfulnesses +watching +watchmaker +watchmakers +watchmaking +watchmakings +watchman +watchmen +watchout +watchouts +watchtower +watchtowers +watchword +watchwords water +waterage +waterages +waterbed +waterbeds +waterbird +waterbirds +waterborne +waterbuck +waterbucks +watercolor +watercolorist +watercolorists +watercolors +watercooler +watercoolers +watercourse +watercourses +watercraft +watercrafts +watercress +watercresses +waterdog +waterdogs +watered +waterer +waterers +waterfall +waterfalls +waterflood +waterflooded +waterflooding +waterfloods +waterfowl +waterfowler +waterfowlers +waterfowling +waterfowlings +waterfowls +waterfront +waterfronts +waterier +wateriest +waterily +wateriness +waterinesses +watering +waterings +waterish +waterishness +waterishnesses +waterleaf +waterleafs +waterless +waterlessness +waterlessnesses +waterline +waterlines +waterlog +waterlogged +waterlogging +waterlogs +waterloo +waterloos +waterman +watermanship +watermanships +watermark +watermarked +watermarking +watermarks watermelon +watermelons +watermen +waterpower +waterpowers +waterproof +waterproofed +waterproofer +waterproofers +waterproofing +waterproofings +waterproofness +waterproofnesses +waterproofs +waters +waterscape +waterscapes +watershed +watersheds +waterside +watersides +waterskiing +waterskiings +waterspout +waterspouts +waterthrush +waterthrushes +watertight +watertightness +watertightnesses +waterway +waterways +waterweed +waterweeds +waterwheel +waterwheels +waterworks +waterworn +watery +waterzooi +waterzoois +wats +watt +wattage +wattages +wattape +wattapes +watter +wattest +watthour +watthours +wattle +wattlebird +wattlebirds +wattled +wattles +wattless +wattling +wattmeter +wattmeters +watts +waucht +wauchted +wauchting +wauchts +waugh +waught +waughted +waughting +waughts +wauk +wauked +wauking +wauks +waul +wauled +wauling +wauls +waur wave +waveband +wavebands +waved +waveform +waveforms +waveguide +waveguides +wavelength +wavelengths +waveless +wavelessly +wavelet +wavelets +wavelike +waveoff +waveoffs +waver +wavered +waverer +waverers +wavering +waveringly +wavers +wavery +waves +waveshape +waveshapes +wavey +waveys +wavier +wavies +waviest +wavily +waviness +wavinesses +waving +wavy +waw +wawl +wawled +wawling +wawls +waws wax +waxberries +waxberry +waxbill +waxbills +waxed +waxen +waxer +waxers +waxes +waxier +waxiest +waxily +waxiness +waxinesses +waxing +waxings +waxlike +waxplant +waxplants +waxweed +waxweeds +waxwing +waxwings +waxwork +waxworks +waxworm +waxworms +waxy way +waybill +waybills +wayfarer +wayfarers +wayfaring +waygoing +waygoings +waylaid +waylay +waylayer +waylayers +waylaying +waylays +wayless +ways +wayside +waysides +wayward +waywardly +waywardness +waywardnesses +wayworn we weak +weaken +weakened +weakener +weakeners +weakening +weakens +weaker +weakest +weakfish +weakfishes +weakhearted +weakish +weaklier +weakliest +weakliness +weaklinesses +weakling +weaklings +weakly weakness +weaknesses +weakside +weaksides +weal +weald +wealds +weals wealth +wealthier +wealthiest +wealthily +wealthiness +wealthinesses +wealths wealthy +wean +weaned +weaner +weaners +weaning +weanling +weanlings +weans +weapon +weaponed +weaponing +weaponless +weaponries +weaponry +weapons wear +wearabilities +wearability +wearable +wearables +wearer +wearers +wearied +wearier +wearies +weariest +weariful +wearifully +wearifulness +wearifulnesses +weariless +wearilessly +wearily +weariness +wearinesses +wearing +wearingly +wearish +wearisome +wearisomely +wearisomeness +wearisomenesses +wears +weary +wearying +weasand +weasands +weasel +weaseled +weaseling +weaselled +weaselling +weaselly +weasels +weasely +weason +weasons weather +weatherabilities +weatherability +weatherboard +weatherboarded +weatherboarding +weatherboardings +weatherboards +weathercast +weathercaster +weathercasters +weathercasts +weathercock +weathercocks +weathered +weatherglass +weatherglasses +weathering +weatherings +weatherization +weatherizations +weatherize +weatherized +weatherizes +weatherizing +weatherly +weatherman +weathermen +weatherperson +weatherpersons +weatherproof +weatherproofed +weatherproofing +weatherproofness +weatherproofnesses +weatherproofs +weathers +weatherworn +weave +weaved +weaver +weaverbird +weaverbirds +weavers +weaves +weaving +weazand +weazands web -website +webbed +webbier +webbiest +webbing +webbings +webby +weber +webers +webfed +webfeet +webfoot +webless +weblike +webs +webster +websters +webwork +webworks +webworm +webworms +wecht +wechts +wed +wedded +wedder +wedders wedding +weddings +wedel +wedeled +wedeling +wedeln +wedelns +wedels +wedge +wedged +wedges +wedgie +wedgier +wedgies +wedgiest +wedging +wedgy +wedlock +wedlocks +weds +wee weed +weeded +weeder +weeders +weedier +weediest +weedily +weediness +weedinesses +weeding +weedless +weedlike +weeds +weedy week weekday +weekdays weekend +weekended +weekender +weekenders +weekending +weekends +weeklies +weeklong weekly +weeknight +weeknights +weeks +weel +ween +weened +weenie +weenier +weenies +weeniest +weening +weens +weensier +weensiest +weensy +weeny weep +weeper +weepers +weepie +weepier +weepies +weepiest +weeping +weepings +weeps +weepy +weer +wees +weest +weet +weeted +weeting +weets +weever +weevers +weevil +weeviled +weevilly +weevils +weevily +weewee +weeweed +weeweeing +weewees +weft +wefts +weftwise +weigela +weigelas +weigelia +weigelias weigh +weighable +weighed +weigher +weighers +weighing +weighman +weighmen +weighs weight +weighted +weighter +weighters +weightier +weightiest +weightily +weightiness +weightinesses +weighting +weightless +weightlessly +weightlessness +weightlessnesses +weightlifter +weightlifters +weightlifting +weightliftings +weights +weighty +weimaraner +weimaraners +weiner +weiners +weir +weird +weirder +weirdest +weirdie +weirdies +weirdly +weirdness +weirdnesses +weirdo +weirdoes +weirdos +weirds +weirdy +weirs +weisenheimer +weisenheimers +weka +wekas +welch +welched +welcher +welchers +welches +welching welcome +welcomed +welcomely +welcomeness +welcomenesses +welcomer +welcomers +welcomes +welcoming +weld +weldable +welded +welder +welders +welding +weldless +weldment +weldments +weldor +weldors +welds welfare +welfares +welfarism +welfarisms +welfarist +welfarists +welkin +welkins well +welladay +welladays +wellaway +wellaways +wellborn +wellcurb +wellcurbs +welldoer +welldoers +welled +wellhead +wellheads +wellhole +wellholes +wellie +wellies +welling +wellness +wellnesses +wells +wellsite +wellsites +wellspring +wellsprings +welly +welsh +welshed +welsher +welshers +welshes +welshing +welt +weltanschauung +weltanschauungen +weltanschauungs +welted +welter +weltered +weltering +welters +welterweight +welterweights +welting +weltings +welts +weltschmerz +weltschmerzes +wen +wench +wenched +wencher +wenchers +wenches +wenching +wend +wended +wendigo +wendigos +wending +wends +wennier +wenniest +wennish +wenny +wens +went +wentletrap +wentletraps +wept +were +weregild +weregilds +werewolf +werewolves +wergeld +wergelds +wergelt +wergelts +wergild +wergilds +wert +werwolf +werwolves +weskit +weskits +wessand +wessands west +westbound +wester +westered +westering +westerlies +westerly western +westerner +westerners +westernisation +westernisations +westernise +westernised +westernises +westernising +westernization +westernizations +westernize +westernized +westernizes +westernizing +westernmost +westerns +westers +westing +westings +westmost +wests westward westwards wet +wetback +wetbacks +wether +wethers +wetland +wetlands +wetly +wetness +wetnesses +wetproof +wets +wettabilities +wettability +wettable +wetted +wetter +wetters +wettest +wetting +wettings +wettish +wha +whack +whacked +whacker +whackers +whackier +whackiest +whacking +whacko +whackos +whacks +whacky whale +whaleback +whalebacks +whaleboat +whaleboats +whalebone +whalebones +whaled +whalelike +whaleman +whalemen +whaler +whalers +whales +whaling +whalings +wham +whammed +whammies +whamming +whammo +whammy +whamo +whams +whang +whanged +whangee +whangees +whanging +whangs +whap +whapped +whapper +whappers +whapping +whaps +wharf +wharfage +wharfages +wharfed +wharfing +wharfinger +wharfingers +wharfmaster +wharfmasters +wharfs +wharve +wharves what +whatchamacallit +whatchamacallits whatever +whatness +whatnesses +whatnot +whatnots +whats +whatsis +whatsises +whatsit +whatsits +whatsoever +whaup +whaups +wheal +wheals wheat +wheatear +wheatears +wheaten +wheatens +wheats +whee +wheedle +wheedled +wheedler +wheedlers +wheedles +wheedling wheel +wheelbarrow +wheelbarrowed +wheelbarrowing +wheelbarrows +wheelbase +wheelbases +wheelchair +wheelchairs +wheeled +wheeler +wheelers +wheelhorse +wheelhorses +wheelhouse +wheelhouses +wheelie +wheelies +wheeling +wheelings +wheelless +wheelman +wheelmen +wheels +wheelsman +wheelsmen +wheelwork +wheelworks +wheelwright +wheelwrights +wheen +wheens +wheep +wheeped +wheeping +wheeple +wheepled +wheeples +wheepling +wheeps +wheeze +wheezed +wheezer +wheezers +wheezes +wheezier +wheeziest +wheezily +wheeziness +wheezinesses +wheezing +wheezy +whelk +whelkier +whelkiest +whelks +whelky +whelm +whelmed +whelming +whelms +whelp +whelped +whelping +whelps when +whenas +whence +whencesoever whenever +whens +whensoever where +whereabout +whereabouts +whereas +whereases +whereat +whereby +wherefore +wherefores +wherefrom +wherein +whereinto +whereof +whereon +wheres +wheresoever +wherethrough +whereto +whereunto +whereupon wherever +wherewith +wherewithal +wherewithals +wherried +wherries +wherry +wherrying +wherve +wherves +whet whether +whets +whetstone +whetstones +whetted +whetter +whetters +whetting +whew +whews +whey +wheyey +wheyface +wheyfaces +wheyish +wheylike +wheys which whichever +whichsoever +whicker +whickered +whickering +whickers +whid +whidah +whidahs +whidded +whidding +whids +whiff +whiffed +whiffer +whiffers +whiffet +whiffets +whiffing +whiffle +whiffled +whiffler +whifflers +whiffles +whiffletree +whiffletrees +whiffling +whiffs +whig +whigmaleerie +whigmaleeries +whigs while +whiled +whiles +whiling +whilom +whilst +whim +whimbrel +whimbrels +whimper +whimpered +whimpering +whimpers +whims +whimsey +whimseys +whimsical +whimsicalities +whimsicality +whimsically +whimsicalness +whimsicalnesses +whimsied +whimsies +whimsy +whin +whinchat +whinchats +whine +whined +whiner +whiners +whines +whiney +whinge +whinged +whingeing +whinges +whinging +whinier +whiniest +whining +whiningly +whinnied +whinnier +whinnies +whinniest +whinny +whinnying +whins +whinstone +whinstones +whiny +whip +whipcord +whipcords +whiplash +whiplashes +whiplike +whipped +whipper +whippers +whippersnapper +whippersnappers +whippet +whippets +whippier +whippiest +whipping +whippings +whippletree +whippletrees +whippoorwill +whippoorwills +whippy +whipray +whiprays +whips +whipsaw +whipsawed +whipsawing +whipsawn +whipsaws +whipstitch +whipstitched +whipstitches +whipstitching +whipstock +whipstocks +whipt +whiptail +whiptails +whipworm +whipworms +whir +whirl +whirled +whirler +whirlers +whirlier +whirlies +whirliest +whirligig +whirligigs +whirling +whirlpool +whirlpools +whirls +whirlwind +whirlwinds +whirly +whirlybird +whirlybirds +whirr +whirred +whirried +whirries +whirring +whirrs +whirry +whirrying +whirs +whish +whished +whishes +whishing +whisht +whishted +whishting +whishts +whisk +whisked +whisker +whiskered +whiskers +whiskery +whiskey +whiskeys +whiskies +whisking +whisks +whisky whisper +whispered +whisperer +whisperers +whispering +whisperingly +whisperings +whispers +whispery +whist +whisted +whisting whistle +whistleable +whistleblower +whistleblowers +whistleblowing +whistleblowings +whistled +whistler +whistlers +whistles +whistling +whistlings +whists +whit white +whitebait +whitebaits +whitebeard +whitebeards +whitecap +whitecaps +whited +whiteface +whitefaces +whitefish +whitefishes +whiteflies +whitefly +whitehead +whiteheads +whitely +whiten +whitened +whitener +whiteners +whiteness +whitenesses +whitening +whitenings +whitens +whiteout +whiteouts +whiter +whites +whitesmith +whitesmiths +whitest +whitetail +whitetails +whitethroat +whitethroats +whitewall +whitewalls +whitewash +whitewashed +whitewasher +whitewashers +whitewashes +whitewashing +whitewashings +whitewing +whitewings +whitewood +whitewoods +whitey +whiteys +whither +whithersoever +whitherward +whitier +whities +whitiest +whiting +whitings +whitish +whitlow +whitlows +whitrack +whitracks +whits +whitter +whitters +whittle +whittled +whittler +whittlers +whittles +whittling +whittlings +whittret +whittrets +whity +whiz +whizbang +whizbangs +whizz +whizzbang +whizzbangs +whizzed +whizzer +whizzers +whizzes +whizzing who +whoa +whodunit +whodunits +whodunnit +whodunnits +whoever whole +wholehearted +wholeheartedly +wholeness +wholenesses +wholes +wholesale +wholesaled +wholesaler +wholesalers +wholesales +wholesaling +wholesome +wholesomely +wholesomeness +wholesomenesses +wholism +wholisms +wholistic +wholly whom +whomever +whomp +whomped +whomping +whomps +whomso +whomsoever +whoof +whoofed +whoofing +whoofs +whoop +whooped +whoopee +whoopees +whooper +whoopers +whooping +whoopla +whooplas +whoops +whoosh +whooshed +whooshes +whooshing +whoosis +whoosises +whop +whopped +whopper +whoppers +whopping +whops +whore +whored +whoredom +whoredoms +whorehouse +whorehouses +whoremaster +whoremasters +whoremonger +whoremongers +whores +whoreson +whoresons +whoring +whorish +whorl +whorled +whorls +whort +whortle +whortleberries +whortleberry +whortles +whorts whose +whosesoever +whosever +whosis +whosises +whoso +whosoever +whump +whumped +whumping +whumps why +whydah +whydahs +whys +wich +wiches +wick +wickape +wickapes +wicked +wickeder +wickedest +wickedly +wickedness +wickednesses +wicker +wickers +wickerwork +wickerworks +wicket +wickets +wicking +wickings +wickiup +wickiups +wicks +wickyup +wickyups +wicopies +wicopy +widder +widders +widdershins +widdie +widdies +widdle +widdled +widdles +widdling +widdy wide +wideawake +wideawakes +wideband +widely +widemouthed +widen +widened +widener +wideners +wideness +widenesses +widening +widens +wideout +wideouts +wider +wides widespread +widest +widgeon +widgeons +widget +widgets +widish widow +widowed +widower +widowerhood +widowerhoods +widowers +widowhood +widowhoods +widowing +widows +width +widths +widthway +wield +wielded +wielder +wielders +wieldier +wieldiest +wielding +wields +wieldy +wiener +wieners +wienerwurst +wienerwursts +wienie +wienies wife +wifed +wifedom +wifedoms +wifehood +wifehoods +wifeless +wifelier +wifeliest +wifelike +wifeliness +wifelinesses +wifely +wifes +wifing +wiftier +wiftiest +wifty +wig +wigan +wigans +wigeon +wigeons +wigged +wiggeries +wiggery +wiggier +wiggiest +wigging +wiggings +wiggle +wiggled +wiggler +wigglers +wiggles +wigglier +wiggliest +wiggling +wiggly +wiggy +wight +wights +wigless +wiglet +wiglets +wiglike +wigmaker +wigmakers +wigs +wigwag +wigwagged +wigwagging +wigwags +wigwam +wigwams +wikiup +wikiups +wilco wild +wildcat +wildcats +wildcatted +wildcatter +wildcatters +wildcatting +wildebeest +wildebeests +wilder +wildered +wildering +wilderment +wilderments +wilderness +wildernesses +wilders +wildest +wildfire +wildfires +wildflower +wildflowers +wildfowl +wildfowler +wildfowlers +wildfowling +wildfowlings +wildfowls +wilding +wildings +wildish +wildland +wildlands wildlife +wildling +wildlings +wildly +wildness +wildnesses +wilds +wildwood +wildwoods +wile +wiled +wiles +wilful +wilfully +wilier +wiliest +wilily +wiliness +wilinesses +wiling will +willable +willed +willemite +willemites +willer +willers +willet +willets +willful +willfully +willfulness +willfulnesses +willied +willies willing +willinger +willingest +willingly +willingness +willingnesses +williwau +williwaus +williwaw +williwaws +willow +willowed +willower +willowers +willowier +willowiest +willowing +willowlike +willows +willowware +willowwares +willowy +willpower +willpowers +wills +willy +willyard +willyart +willying +willywaw +willywaws +wilt +wilted +wilting +wilts +wily +wimble +wimbled +wimbles +wimbling +wimp +wimpier +wimpiest +wimpiness +wimpinesses +wimpish +wimpishness +wimpishnesses +wimple +wimpled +wimples +wimpling +wimps +wimpy win +wince +winced +wincer +wincers +winces +wincey +winceys +winch +winched +wincher +winchers +winches +winching +wincing wind +windable +windage +windages +windbag +windbags +windblast +windblasts +windblown +windbreak +windbreaker +windbreakers +windbreaks +windburn +windburned +windburning +windburns +windburnt +windchill +windchills +winded +winder +winders +windfall +windfalls +windflaw +windflaws +windflower +windflowers +windgall +windgalls +windhover +windhovers +windier +windiest +windigo +windigos +windily +windiness +windinesses +winding +windings +windjammer +windjammers +windjamming +windjammings +windlass +windlassed +windlasses +windlassing +windle +windled +windles +windless +windlessly +windlestraw +windlestraws +windling +windlings +windmill +windmilled +windmilling +windmills window +windowed +windowing +windowless +windowpane +windowpanes +windows +windowsill +windowsills +windpipe +windpipes +windproof +windrow +windrowed +windrowing +windrows +winds +windscreen +windscreens +windshield +windshields +windsock +windsocks +windstorm +windstorms +windsurf +windsurfed +windsurfing +windsurfings +windsurfs +windswept +windthrow +windthrows +windup +windups +windward +windwards +windway +windways windy wine +wined +wineglass +wineglasses +winegrower +winegrowers +wineless +winemaker +winemakers +winemaking +winemakings +winepress +winepresses +wineries +winery +wines +wineshop +wineshops +wineskin +wineskins +winesop +winesops +winey wing +wingback +wingbacks +wingbow +wingbows +wingding +wingdings +winged +wingedly +winger +wingers +wingier +wingiest +winging +wingless +winglessness +winglessnesses +winglet +winglets +winglike +wingman +wingmen +wingover +wingovers +wings +wingspan +wingspans +wingspread +wingspreads +wingtip +wingtips +wingy +winier +winiest +wining +winish +wink +winked +winker +winkers +winking +winkle +winkled +winkles +winkling +winks +winless +winnable +winned winner +winners +winning +winningly +winnings +winnock +winnocks +winnow +winnowed +winnower +winnowers +winnowing +winnows +wino +winoes +winos +wins +winsome +winsomely +winsomeness +winsomenesses +winsomer +winsomest winter +winterberries +winterberry +wintered +winterer +winterers +wintergreen +wintergreens +winterier +winteriest +wintering +winterization +winterizations +winterize +winterized +winterizes +winterizing +winterkill +winterkills +winterly +winters +wintertide +wintertides +wintertime +wintertimes +wintery +wintle +wintled +wintles +wintling +wintrier +wintriest +wintrily +wintriness +wintrinesses +wintry +winy +winze +winzes wipe +wiped +wipeout +wipeouts +wiper +wipers +wipes +wiping +wirable wire +wired +wiredraw +wiredrawer +wiredrawers +wiredrawing +wiredrawn +wiredraws +wiredrew +wirehair +wirehaired +wirehairs +wireless +wirelessed +wirelesses +wirelessing +wirelike +wireman +wiremen +wirephoto +wirephotos +wirer +wirers +wires +wiretap +wiretapped +wiretapper +wiretappers +wiretapping +wiretaps +wireway +wireways +wirework +wireworks +wireworm +wireworms +wirier +wiriest +wirily +wiriness +wirinesses +wiring +wirings +wirra +wiry +wis wisdom +wisdoms wise +wiseacre +wiseacres +wiseass +wiseasses +wisecrack +wisecracked +wisecracker +wisecrackers +wisecracking +wisecracks +wised +wiselier +wiseliest +wisely +wiseness +wisenesses +wisenheimer +wisenheimers +wisent +wisents +wiser +wises +wisest +wisewoman +wisewomen wish +wisha +wishbone +wishbones +wished +wisher +wishers +wishes +wishful +wishfully +wishfulness +wishfulnesses +wishing +wishless +wising +wisp +wisped +wispier +wispiest +wispily +wispiness +wispinesses +wisping +wispish +wisplike +wisps +wispy +wiss +wissed +wisses +wissing +wist +wistaria +wistarias +wisted +wisteria +wisterias +wistful +wistfully +wistfulness +wistfulnesses +wisting +wists +wit +witan +witch +witchcraft +witchcrafts +witched +witcheries +witchery +witches +witchgrass +witchgrasses +witchier +witchiest +witching +witchings +witchlike +witchweed +witchweeds +witchy +wite +wited +witenagemot +witenagemote +witenagemotes +witenagemots +wites with +withal withdraw +withdrawable +withdrawal +withdrawals +withdrawing +withdrawn +withdrawnness +withdrawnnesses +withdraws +withdrew +withe +withed +wither +withered +witherer +witherers +withering +witheringly +witherite +witherites +withers +withershins +withes +withheld +withhold +withholder +withholders +withholding +withholds +withier +withies +withiest within +withindoors +withing +withins without +withoutdoors +withouts +withstand +withstanding +withstands +withstood +withy +witing +witless +witlessly +witlessness +witlessnesses +witling +witlings +witloof +witloofs witness +witnessed +witnesses +witnessing +witney +witneys +wits +witted +witticism +witticisms +wittier +wittiest +wittily +wittiness +wittinesses +witting +wittingly +wittings +wittol +wittols +witty +wive +wived +wiver +wivern +wiverns +wivers +wives +wiving +wiz +wizard +wizardly +wizardries +wizardry +wizards +wizen +wizened +wizening +wizens +wizes +wizzen +wizzens +wo +woad +woaded +woads +woadwax +woadwaxes +woald +woalds +wobble +wobbled +wobbler +wobblers +wobbles +wobblier +wobblies +wobbliest +wobbliness +wobblinesses +wobbling +wobbly +wobegone +wodge +wodges +woe +woebegone +woebegoneness +woebegonenesses +woeful +woefuller +woefullest +woefully +woefulness +woefulnesses +woeness +woenesses +woes +woesome +woful +wofully +wog +wogs +wok +woke +woken +woks +wold +wolds wolf +wolfberries +wolfberry +wolfed +wolfer +wolfers +wolffish +wolffishes +wolfhound +wolfhounds +wolfing +wolfish +wolfishly +wolfishness +wolfishnesses +wolflike +wolfram +wolframite +wolframites +wolframs +wolfs +wolfsbane +wolfsbanes +wollastonite +wollastonites +wolver +wolverine +wolverines +wolvers +wolves woman +womaned +womanhood +womanhoods +womaning +womanise +womanised +womanises +womanish +womanishly +womanishness +womanishnesses +womanising +womanize +womanized +womanizer +womanizers +womanizes +womanizing +womankind +womanless +womanlier +womanliest +womanlike +womanliness +womanlinesses +womanly +womanpower +womanpowers +womans +womb +wombat +wombats +wombed +wombier +wombiest +wombs +womby +women +womenfolk +womenfolks +womenkind +womera +womeras +wommera +wommeras +won wonder +wondered +wonderer +wonderers wonderful +wonderfully +wonderfulness +wonderfulnesses +wondering +wonderland +wonderlands +wonderment +wonderments +wonders +wonderwork +wonderworks +wondrous +wondrously +wondrousness +wondrousnesses +wonk +wonkier +wonkiest +wonks +wonky +wonned +wonner +wonners +wonning +wons +wont +wonted +wontedly +wontedness +wontednesses +wonting +wonton +wontons +wonts +woo wood +woodbin +woodbind +woodbinds +woodbine +woodbines +woodbins +woodblock +woodblocks +woodbox +woodboxes +woodcarver +woodcarvers +woodcarving +woodcarvings +woodchat +woodchats +woodchopper +woodchoppers +woodchuck +woodchucks +woodcock +woodcocks +woodcraft +woodcrafts +woodcut +woodcuts +woodcutter +woodcutters +woodcutting +woodcuttings +wooded +wooden +woodener +woodenest +woodenhead +woodenheaded +woodenheads +woodenly +woodenness +woodennesses +woodenware +woodenwares +woodhen +woodhens +woodie +woodier +woodies +woodiest +woodiness +woodinesses +wooding +woodland +woodlander +woodlanders +woodlands +woodlark +woodlarks +woodless +woodlore +woodlores +woodlot +woodlots +woodman +woodmen +woodnote +woodnotes +woodpecker +woodpeckers +woodpile +woodpiles +woodruff +woodruffs +woods +woodshed +woodshedded +woodshedding +woodsheds +woodsia +woodsias +woodsier +woodsiest +woodsman +woodsmen +woodstove +woodstoves +woodsy +woodwax +woodwaxes +woodwind +woodwinds +woodwork +woodworker +woodworkers +woodworking +woodworkings +woodworks +woodworm +woodworms +woody +wooed +wooer +wooers +woof +woofed +woofer +woofers +woofing +woofs +wooing +wooingly wool +wooled woolen +woolens +wooler +woolers +woolfell +woolfells +woolgatherer +woolgatherers +woolgathering +woolgatherings +woolhat +woolhats +woolie +woolier +woolies +wooliest +woolled woollen +woollens +woollier +woollies +woolliest +woollike +woollily +woolliness +woollinesses +woolly +woolman +woolmen +woolpack +woolpacks +wools +woolsack +woolsacks +woolshed +woolsheds +woolskin +woolskins +woolwork +woolworks +wooly +woomera +woomeras +woops +woopsed +woopses +woopsing +woorali +wooralis +woorari +wooraris +woos +woosh +wooshed +wooshes +wooshing +woozier +wooziest +woozily +wooziness +woozinesses +woozy +wop +wops word +wordage +wordages +wordbook +wordbooks +worded +wordier +wordiest +wordily +wordiness +wordinesses +wording +wordings +wordless +wordlessly +wordlessness +wordlessnesses +wordmonger +wordmongers +wordplay +wordplays +words +wordsmith +wordsmitheries +wordsmithery +wordsmiths +wordy +wore work +workabilities +workability +workable +workableness +workablenesses +workaday +workaholic +workaholics +workaholism +workaholisms +workbag +workbags +workbasket +workbaskets +workbench +workbenches +workboat +workboats +workbook +workbooks +workbox +workboxes +workday +workdays +worked worker +workers +workfare +workfares +workfolk +workfolks +workforce +workforces +workhorse +workhorses +workhouse +workhouses +working +workingman +workingmen +workings +workingwoman +workingwomen +workless +worklessness +worklessnesses +workload +workloads +workman +workmanlike +workmanly +workmanship +workmanships +workmate +workmates +workmen +workout +workouts +workpeople +workpiece +workpieces +workplace +workplaces +workroom +workrooms +works +worksheet +worksheets +workshop +workshops +workstation +workstations +worktable +worktables +workup +workups +workweek +workweeks +workwoman +workwomen world +worldlier +worldliest +worldliness +worldlinesses +worldling +worldlings +worldly +worlds +worldview +worldviews worldwide worm +wormed +wormer +wormers +wormhole +wormholes +wormier +wormiest +wormil +wormils +worming +wormish +wormlike +wormroot +wormroots +worms +wormseed +wormseeds +wormwood +wormwoods +wormy worn +wornness +wornnesses worried +worriedly +worrier +worriers +worries +worriment +worriments +worrisome +worrisomely +worrisomeness +worrisomenesses +worrit +worrited +worriting +worrits worry +worrying +worrywart +worrywarts +worse +worsen +worsened +worsening +worsens +worser +worses +worset +worsets +worship +worshiped +worshiper +worshipers +worshipful +worshipfully +worshipfulness +worshipfulnesses +worshiping +worshipless +worshipped +worshipper +worshippers +worshipping +worships +worst +worsted +worsteds +worsting +worsts +wort worth +worthed +worthful +worthier +worthies +worthiest +worthily +worthiness +worthinesses +worthing +worthless +worthlessly +worthlessness +worthlessnesses +worths worthwhile +worthwhileness +worthwhilenesses worthy +worts +wos +wost +wot +wots +wotted +wotting would +wouldest +wouldst wound +wounded +wounding +woundless +wounds +wove +woven +wovens +wow +wowed +wowing +wows +wowser +wowsers +wrack +wracked +wrackful +wracking +wracks +wraith +wraithlike +wraiths +wrang +wrangle +wrangled +wrangler +wranglers +wrangles +wrangling +wrangs +wrap +wraparound +wraparounds +wrapped +wrapper +wrappers +wrapping +wrappings +wraps +wrapt +wrasse +wrasses +wrassle +wrassled +wrassles +wrassling +wrastle +wrastled +wrastles +wrastling +wrath +wrathed +wrathful +wrathfully +wrathfulness +wrathfulnesses +wrathier +wrathiest +wrathily +wrathing +wraths +wrathy +wreak +wreaked +wreaker +wreakers +wreaking +wreaks +wreath +wreathe +wreathed +wreathen +wreathes +wreathing +wreaths +wreathy +wreck +wreckage +wreckages +wrecked +wrecker +wreckers +wreckful +wrecking +wreckings +wrecks +wren +wrench +wrenched +wrenches +wrenching +wrenchingly +wrens +wrest +wrested +wrester +wresters +wresting wrestle +wrestled +wrestler +wrestlers +wrestles +wrestling +wrestlings +wrests +wretch +wretched +wretcheder +wretchedest +wretchedly +wretchedness +wretchednesses +wretches +wrick +wricked +wricking +wricks +wried +wrier +wries +wriest +wriggle +wriggled +wriggler +wrigglers +wriggles +wrigglier +wriggliest +wriggling +wriggly +wright +wrights +wring +wringed +wringer +wringers +wringing +wrings wrinkle +wrinkled +wrinkles +wrinklier +wrinkliest +wrinkling +wrinkly wrist +wristband +wristbands +wristier +wristiest +wristlet +wristlets +wristlock +wristlocks +wrists +wristwatch +wristwatches +wristy +writ +writable write +writer +writerly +writers +writes +writhe +writhed +writhen +writher +writhers +writhes +writhing +writing +writings +writs +written wrong -xray +wrongdoer +wrongdoers +wrongdoing +wrongdoings +wronged +wronger +wrongers +wrongest +wrongful +wrongfully +wrongfulness +wrongfulnesses +wrongheaded +wrongheadedly +wrongheadedness +wrongheadednesses +wronging +wrongly +wrongness +wrongnesses +wrongs +wrote +wroth +wrothful +wrought +wrung +wry +wryer +wryest +wrying +wryly +wryneck +wrynecks +wryness +wrynesses +wud +wulfenite +wulfenites +wunderkind +wunderkinder +wurst +wursts +wurzel +wurzels +wuss +wusses +wussier +wussies +wussiest +wussy +wuther +wuthered +wuthering +wuthers +wyandotte +wyandottes +wych +wyches +wye +wyes +wyle +wyled +wyles +wyliecoat +wyliecoats +wyling +wyn +wynd +wynds +wynn +wynns +wyns +wyte +wyted +wytes +wyting +wyvern +wyverns +xanthan +xanthans +xanthate +xanthates +xanthein +xantheins +xanthene +xanthenes +xanthic +xanthin +xanthine +xanthines +xanthins +xanthoma +xanthomas +xanthomata +xanthone +xanthones +xanthophyll +xanthophylls +xanthous +xebec +xebecs +xenia +xenial +xenias +xenic +xenobiotic +xenobiotics +xenodiagnoses +xenodiagnosis +xenodiagnostic +xenogamies +xenogamy +xenogeneic +xenogenies +xenogeny +xenograft +xenografts +xenolith +xenolithic +xenoliths +xenon +xenons +xenophile +xenophiles +xenophobe +xenophobes +xenophobia +xenophobias +xenophobic +xenophobically +xenotropic +xerarch +xeric +xerographic +xerographically +xerographies +xerography +xerophile +xerophilies +xerophilous +xerophily +xerophthalmia +xerophthalmias +xerophthalmic +xerophyte +xerophytes +xerophytic +xerophytism +xerophytisms +xeroradiographies +xeroradiography +xerosere +xeroseres +xeroses +xerosis +xerothermic +xerotic +xerox +xeroxed +xeroxes +xeroxing +xerus +xeruses +xi +xiphisterna +xiphisternum +xiphoid +xiphoids +xis +xu +xylan +xylans +xylem +xylems +xylene +xylenes +xylidin +xylidine +xylidines +xylidins +xylitol +xylitols +xylocarp +xylocarps +xylograph +xylographer +xylographers +xylographic +xylographical +xylographies +xylographs +xylography +xyloid +xylol +xylols +xylophagous +xylophone +xylophones +xylophonist +xylophonists +xylose +xyloses +xylotomies +xylotomy +xylyl +xylyls +xyst +xyster +xysters +xysti +xystoi +xystos +xysts +xystus +ya +yabber +yabbered +yabbering +yabbers +yacht +yachted +yachter +yachters +yachting +yachtings +yachtman +yachtmen +yachts +yachtsman +yachtsmen +yack +yacked +yacking +yacks +yaff +yaffed +yaffing +yaffs +yager +yagers +yagi +yagis +yah +yahoo +yahooism +yahooisms +yahoos +yahrzeit +yahrzeits +yaird +yairds +yak +yakitori +yakitoris +yakked +yakker +yakkers +yakking +yaks +yald +yam +yamalka +yamalkas +yamen +yamens +yammer +yammered +yammerer +yammerers +yammering +yammers +yams +yamulka +yamulkas +yamun +yamuns +yang +yangs +yank +yanked +yanking +yanks +yanqui +yanquis +yantra +yantras +yap +yapock +yapocks +yapok +yapoks +yapon +yapons +yapped +yapper +yappers +yapping +yaps +yar yard +yardage +yardages +yardarm +yardarms +yardbird +yardbirds +yarded +yarding +yardland +yardlands +yardman +yardmaster +yardmasters +yardmen +yards +yardstick +yardsticks +yardwand +yardwands +yardwork +yardworks +yare +yarely +yarer +yarest +yarmelke +yarmelkes +yarmulke +yarmulkes +yarn +yarned +yarner +yarners +yarning +yarns +yarrow +yarrows +yashmac +yashmacs +yashmak +yashmaks +yasmak +yasmaks +yatagan +yatagans +yataghan +yataghans +yatter +yattered +yattering +yatters +yaud +yauds +yauld +yaup +yauped +yauper +yaupers +yauping +yaupon +yaupons +yaups +yautia +yautias +yaw +yawed +yawing +yawl +yawled +yawling +yawls +yawmeter +yawmeters yawn +yawned +yawner +yawners +yawning +yawningly +yawns +yawp +yawped +yawper +yawpers +yawping +yawpings +yawps +yaws +yay +yays +ycleped +yclept +ye +yea +yeah +yealing +yealings +yean +yeaned +yeaning +yeanling +yeanlings +yeans year +yearbook +yearbooks +yearend +yearends +yearlies +yearling +yearlings +yearlong +yearly +yearn +yearned +yearner +yearners +yearning +yearningly +yearnings +yearns +years +yeas +yeasayer +yeasayers +yeast +yeasted +yeastier +yeastiest +yeastily +yeastiness +yeastinesses +yeasting +yeasts +yeasty +yecch +yecchs +yech +yechs +yechy +yeelin +yeelins +yegg +yeggman +yeggmen +yeggs +yeh +yeld +yelk +yelks yell +yelled +yeller +yellers +yelling yellow +yellowed +yellower +yellowest +yellowfin +yellowfins +yellowhammer +yellowhammers +yellowing +yellowish +yellowlegs +yellowly +yellows +yellowtail +yellowtails +yellowthroat +yellowthroats +yellowware +yellowwares +yellowwood +yellowwoods +yellowy +yells +yelp +yelped +yelper +yelpers +yelping +yelps +yen +yenned +yenning +yens +yenta +yentas +yente +yentes +yeoman +yeomanly +yeomanries +yeomanry +yeomen +yep +yerba +yerbas +yerk +yerked +yerking +yerks yes +yeses +yeshiva +yeshivah +yeshivahs +yeshivas +yeshivot +yeshivoth +yessed +yesses +yessing +yester yesterday +yesterdays +yestern +yesternight +yesternights +yesteryear +yesteryears +yestreen +yestreens yet +yeti +yetis +yett +yetts +yeuk +yeuked +yeuking +yeuks +yeuky +yew +yews +yid +yids +yield +yielded +yielder +yielders +yielding +yields +yikes +yill +yills +yin +yince +yins +yip +yipe +yipes +yipped +yippee +yippie +yippies +yipping +yips +yird +yirds +yirr +yirred +yirring +yirrs +yirth +yirths +ylem +ylems +yo +yob +yobbo +yobboes +yobbos +yobs +yock +yocked +yocking +yocks +yod +yodel +yodeled +yodeler +yodelers +yodeling +yodelled +yodeller +yodellers +yodelling +yodels +yodh +yodhs +yodle +yodled +yodler +yodlers +yodles +yodling +yods +yoga +yogas +yogee +yogees +yogh +yoghourt +yoghourts +yoghs yoghurt +yoghurts +yogi +yogic +yogin +yogini +yoginis +yogins +yogis +yogurt +yogurts +yohimbine +yohimbines +yoicks +yok +yoke +yoked +yokefellow +yokefellows +yokel +yokeless +yokelish +yokels +yokemate +yokemates +yokes +yoking +yokozuna +yokozunas +yoks +yolk +yolked +yolkier +yolkiest +yolks +yolky +yom +yomim +yon +yond +yonder +yoni +yonic +yonis +yonker +yonkers +yore +yores you young +youngberries +youngberry +younger +youngers +youngest +youngish +youngling +younglings +youngness +youngnesses +youngs +youngster +youngsters +younker +younkers +youpon +youpons your +yourn yours yourself +yourselves +youse youth +youthen +youthened +youthening +youthens +youthful +youthfully +youthfulness +youthfulnesses +youthquake +youthquakes +youths +yow +yowe +yowed +yowes +yowie +yowies +yowing +yowl +yowled +yowler +yowlers +yowling +yowls +yows +yperite +yperites +ytterbia +ytterbias +ytterbic +ytterbium +ytterbiums +yttria +yttrias +yttric +yttrium +yttriums +yuan +yuans +yuca +yucas +yucca +yuccas +yucch +yuch +yuck +yucked +yuckier +yuckiest +yucking +yucks +yucky +yuga +yugas +yuk +yukked +yukking +yuks +yulan +yulans +yule +yules +yuletide +yuletides +yum +yummier +yummies +yummiest yummy +yup +yupon +yupons +yuppie +yuppies +yups +yurt +yurta +yurts +ywis +zabaglione +zabagliones +zabaione +zabaiones +zabajone +zabajones +zacaton +zacatons +zaddick +zaddik +zaddikim +zaffar +zaffars +zaffer +zaffers +zaffir +zaffirs +zaffre +zaffres +zaftig +zag +zagged +zagging +zags +zaibatsu +zaikai +zaikais +zaire +zaires +zamarra +zamarras +zamarro +zamarros +zamia +zamias +zamindar +zamindari +zamindaris +zamindars +zanana +zananas +zander +zanders +zanier +zanies +zaniest +zanily +zaniness +zaninesses +zany +zanyish +zanza +zanzas +zap +zapateado +zapateados +zapateo +zapateos +zapped +zapper +zappers +zappier +zappiest +zapping +zappy +zaps +zaptiah +zaptiahs +zaptieh +zaptiehs +zaratite +zaratites +zareba +zarebas +zareeba +zareebas +zarf +zarfs +zariba +zaribas +zarzuela +zarzuelas +zastruga +zastrugi +zax +zaxes +zayin +zayins +zazen +zazens +zeal +zealot +zealotries +zealotry +zealots +zealous +zealously +zealousness +zealousnesses +zeals +zeatin +zeatins +zebec +zebeck +zebecks +zebecs zebra +zebraic +zebras +zebrass +zebrasses +zebrawood +zebrawoods +zebrine +zebroid +zebu +zebus +zecchin +zecchini +zecchino +zecchinos +zecchins +zechin +zechins +zed +zedoaries +zedoary +zeds +zee +zees +zein +zeins +zeitgeber +zeitgebers +zeitgeist +zeitgeists +zek +zeks +zelkova +zelkovas +zemindar +zemindaries +zemindars +zemindary +zemstva +zemstvo +zemstvos +zenaida +zenaidas +zenana +zenanas +zenith +zenithal +zeniths +zeolite +zeolites +zeolitic +zephyr +zephyrs +zeppelin +zeppelins +zerk +zerks zero +zeroed +zeroes +zeroing +zeros +zeroth +zest +zested +zester +zesters +zestful +zestfully +zestfulness +zestfulnesses +zestier +zestiest +zesting +zestless +zests +zesty +zeta +zetas +zeugma +zeugmas +zibeline +zibelines +zibelline +zibellines +zibet +zibeth +zibeths +zibets +zidovudine +zidovudines +zig +zigged +zigging +ziggurat +ziggurats +zigs +zigzag +zigzagged +zigzagging +zigzags +zikkurat +zikkurats +zikurat +zikurats +zilch +zilches +zill +zillah +zillahs +zillion +zillionaire +zillionaires +zillions +zillionth +zills +zin +zinc +zincate +zincates +zinced +zincic +zincified +zincifies +zincify +zincifying +zincing +zincite +zincites +zincked +zincking +zincky +zincoid +zincous +zincs +zincy +zineb +zinebs +zinfandel +zinfandels +zing +zingani +zingano +zingara +zingare +zingari +zingaro +zinged +zinger +zingers +zingier +zingiest +zinging +zings +zingy +zinkified +zinkifies +zinkify +zinkifying +zinky +zinnia +zinnias +zins zip +zipless +zipped zipper +zippered +zippering +zippers +zippier +zippiest +zipping +zippy +zips +ziram +zirams +zircon +zirconia +zirconias +zirconic +zirconium +zirconiums +zircons +zit +zither +zitherist +zitherists +zithern +zitherns +zithers +ziti +zitis +zits +zizit +zizith +zizzle +zizzled +zizzles +zizzling +zlote +zloties +zloty +zlotych +zlotys +zoa +zoantharian +zoantharians +zoaria +zoarial +zoarium +zodiac +zodiacal +zodiacs +zoea +zoeae +zoeal +zoeas +zoecia +zoecium +zoftig +zoic +zoisite +zoisites +zombi +zombie +zombielike +zombies +zombification +zombifications +zombified +zombifies +zombify +zombifying +zombiism +zombiisms +zombis +zonal +zonally +zonary +zonate +zonated +zonation +zonations zone +zoned +zoneless +zoner +zoners +zones +zonetime +zonetimes +zoning +zonk +zonked +zonking +zonks +zonula +zonulae +zonular +zonulas +zonule +zonules zoo +zoochore +zoochores +zooecia +zooecium +zoogenic +zoogeographer +zoogeographers +zoogeographic +zoogeographical +zoogeographically +zoogeographies +zoogeography +zooglea +zoogleae +zoogleal +zoogleas +zoogloea +zoogloeae +zoogloeas +zooid +zooidal +zooids +zookeeper +zookeepers +zooks +zoolater +zoolaters +zoolatries +zoolatry +zoologic +zoological +zoologically +zoologies +zoologist +zoologists +zoology zoom +zoomania +zoomanias +zoomed +zoometries +zoometry +zooming +zoomorph +zoomorphic +zoomorphs +zooms +zoon +zoonal +zoonoses +zoonosis +zoonotic +zoons +zoophile +zoophiles +zoophilic +zoophilies +zoophilous +zoophily +zoophobe +zoophobes +zoophyte +zoophytes +zooplankter +zooplankters +zooplankton +zooplanktonic +zooplanktons +zoos +zoosperm +zoosperms +zoosporangia +zoosporangium +zoospore +zoospores +zoosporic +zoosterol +zoosterols +zootechnical +zootechnics +zootier +zootiest +zootomic +zootomies +zootomy +zooty +zooxanthella +zooxanthellae +zori +zoril +zorilla +zorillas +zorille +zorilles +zorillo +zorillos +zorils +zoris +zoster +zosters +zouave +zouaves +zounds +zowie +zoysia +zoysias +zucchetto +zucchettos +zucchini +zucchinis +zwieback +zwiebacks +zwitterion +zwitterionic +zwitterions +zydeco +zydecos +zygapophyses +zygapophysis +zygodactyl +zygodactylous +zygoid +zygoma +zygomas +zygomata +zygomatic +zygomorphic +zygomorphies +zygomorphy +zygose +zygoses +zygosis +zygosities +zygosity +zygospore +zygospores +zygote +zygotene +zygotenes +zygotes +zygotic +zymase +zymases +zyme +zymes +zymogen +zymogene +zymogenes +zymogens +zymogram +zymograms +zymologies +zymology +zymosan +zymosans +zymoses +zymosis +zymotic +zymurgies +zymurgy +zyzzyva +zyzzyvas From 5b01b67ebc99bab18d8a757dde159712ea5f8c28 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 24 Sep 2023 00:38:20 +0200 Subject: [PATCH 126/272] remove keys --- .env | 2 ++ src/services/jackett.ts | 5 +++-- src/services/prowlarr.ts | 7 ++++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.env b/.env index fe63d77..3781893 100644 --- a/.env +++ b/.env @@ -8,4 +8,6 @@ MDBLIST_KEY=abc123 DATABASE_URL="mysql://username:password@aws.connect.psdb.cloud/database?sslaccept=strict" JACKETT="http://localhost:9117" +JACKETT_KEY=abc123 PROWLARR="http://localhost:9696" +PROWLARR_KEY=abc123 diff --git a/src/services/jackett.ts b/src/services/jackett.ts index ea90694..d13e53b 100644 --- a/src/services/jackett.ts +++ b/src/services/jackett.ts @@ -3,7 +3,8 @@ import bencode from 'bencode'; import { createHash } from 'crypto'; import { ScrapeSearchResult } from './mediasearch'; -const JACKETT = process.env.JACKETT ?? 'http://localhost:9117'; +const jackettHost = process.env.JACKETT ?? 'http://localhost:9117'; +const apikey = process.env.JACKETT_KEY ?? 'abc123'; function isFoundDateRecent(foundString: string, date: string): boolean { const foundDate = new Date(foundString); @@ -13,7 +14,7 @@ function isFoundDateRecent(foundString: string, date: string): boolean { } const createSearchUrl = (finalQuery: string) => - `${JACKETT}/api/v2.0/indexers/all/results?apikey=2gzag8296wygpbvezrguhc8y2rnezvos&Query=${encodeURIComponent( + `${jackettHost}/api/v2.0/indexers/all/results?apikey=${apikey}&Query=${encodeURIComponent( finalQuery )}`; diff --git a/src/services/prowlarr.ts b/src/services/prowlarr.ts index d55a43c..2da4e6d 100644 --- a/src/services/prowlarr.ts +++ b/src/services/prowlarr.ts @@ -3,7 +3,8 @@ import bencode from 'bencode'; import { createHash } from 'crypto'; import { ScrapeSearchResult } from './mediasearch'; -const PROWLARR = process.env.PROWLARR ?? 'http://localhost:9696'; +const prowlarrHost = process.env.PROWLARR ?? 'http://localhost:9696'; +const apikey = process.env.PROWLARR_KEY ?? 'abc123'; function isFoundDateRecent(foundString: string, date: string): boolean { const foundDate = new Date(foundString); @@ -13,9 +14,9 @@ function isFoundDateRecent(foundString: string, date: string): boolean { } const createSearchUrl = (finalQuery: string) => - `${PROWLARR}/api/v1/search?query=${encodeURIComponent( + `${prowlarrHost}/api/v1/search?query=${encodeURIComponent( finalQuery - )}&indexerIds=-2&categories[]=2000&categories[]=5000&type=search&apikey=2475bf3fd3964fdf9983cbfacac7d5fd`; + )}&indexerIds=-2&categories[]=2000&categories[]=5000&type=search&apikey=${apikey}`; function extractHashFromMagnetLink(magnetLink: string) { const regex = /urn:btih:([A-Fa-f0-9]+)/; From a9b8f03a3c7eec0017975719211063a5022dfbf0 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sun, 24 Sep 2023 02:54:41 +0200 Subject: [PATCH 127/272] 3.5.0 (#72) * mdblist scrape improvements * olderthen input * correct logic * fix logic * add skip * update word list * remove keys * dark mode * version bump --- .env | 2 + package-lock.json | 4 +- package.json | 2 +- src/pages/api/scrape.ts | 4 +- src/pages/api/searchlist.ts | 11 +- src/pages/api/singlelist.ts | 9 +- src/pages/index.tsx | 43 +- src/pages/library.tsx | 8 +- src/pages/movie/[imdbid].tsx | 21 +- src/pages/search.tsx | 12 +- src/pages/show/[imdbid]/[seasonNum].tsx | 21 +- src/services/jackett.ts | 5 +- src/services/movieScraper.ts | 18 +- src/services/planetscale.ts | 22 + src/services/prowlarr.ts | 7 +- src/styles/globals.css | 6 + wordlist.txt | 169472 ++++++++++++++++++++- 17 files changed, 169562 insertions(+), 105 deletions(-) diff --git a/.env b/.env index fe63d77..3781893 100644 --- a/.env +++ b/.env @@ -8,4 +8,6 @@ MDBLIST_KEY=abc123 DATABASE_URL="mysql://username:password@aws.connect.psdb.cloud/database?sslaccept=strict" JACKETT="http://localhost:9117" +JACKETT_KEY=abc123 PROWLARR="http://localhost:9696" +PROWLARR_KEY=abc123 diff --git a/package-lock.json b/package-lock.json index ca9c812..1a42aee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "3.4.7", + "version": "3.5.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "3.4.7", + "version": "3.5.0", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index a2b49be..1ef3902 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "3.4.7", + "version": "3.5.0", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/api/scrape.ts b/src/pages/api/scrape.ts index bc1cda5..0691b9e 100644 --- a/src/pages/api/scrape.ts +++ b/src/pages/api/scrape.ts @@ -2,7 +2,7 @@ import { ScrapeResponse, generateScrapeJobs } from '@/services/scrapeJobs'; import { NextApiRequest, NextApiResponse } from 'next'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { imdbId, scrapePassword, override } = req.query; + const { imdbId, scrapePassword } = req.query; if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { res.status(403).json({ status: 'error', @@ -16,5 +16,5 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< return; } - await generateScrapeJobs(res, imdbId.toString().trim(), override === 'true'); + await generateScrapeJobs(res, imdbId.toString().trim(), true); } diff --git a/src/pages/api/searchlist.ts b/src/pages/api/searchlist.ts index 4ccb19a..5e53619 100644 --- a/src/pages/api/searchlist.ts +++ b/src/pages/api/searchlist.ts @@ -6,7 +6,7 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword, search, override } = req.query; + const { scrapePassword, search, olderThanMins, skipMs } = req.query; if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { res.status(403).json({ status: 'error', @@ -27,10 +27,17 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< for await (let listId of scrapeInput.byLists(search)) { for await (let imdbId of scrapeInput.byListId(listId)) { const isProcessing = await db.keyExists(`processing:${imdbId}`); - if (isProcessing && override !== 'true') { + if (isProcessing) { console.log(`[searchlist] Already processing ${imdbId}, skipping`); continue; } + if (!(await db.isOlderThan(imdbId, parseInt(olderThanMins as string) || 60 * 24))) { + console.log(`[searchlist] ${imdbId} was scraped recently, skipping`); + await new Promise((resolve) => + setTimeout(resolve, parseInt(skipMs as string) || 1000) + ); + continue; + } await generateScrapeJobs(res, imdbId, true); } } diff --git a/src/pages/api/singlelist.ts b/src/pages/api/singlelist.ts index 4d01475..8f16835 100644 --- a/src/pages/api/singlelist.ts +++ b/src/pages/api/singlelist.ts @@ -6,7 +6,7 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword, listId, override } = req.query; + const { scrapePassword, listId, olderThanMins, skipMs } = req.query; if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { res.status(403).json({ status: 'error', @@ -26,10 +26,15 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< for await (let imdbId of scrapeInput.byListId(listId)) { const isProcessing = await db.keyExists(`processing:${imdbId}`); - if (isProcessing && override !== 'true') { + if (isProcessing) { console.log(`[singlelist] Already processing ${imdbId}, skipping`); continue; } + if (!(await db.isOlderThan(imdbId, parseInt(olderThanMins as string) || 60 * 24))) { + console.log(`[singlelist] ${imdbId} was scraped recently, skipping`); + await new Promise((resolve) => setTimeout(resolve, parseInt(skipMs as string) || 1000)); + continue; + } await generateScrapeJobs(res, imdbId, true); } } diff --git a/src/pages/index.tsx b/src/pages/index.tsx index d443ddf..7bc5690 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -16,13 +16,23 @@ function IndexPage() { router.push('/search'); }; - const handleLogout = () => { + const handleLogout = (prefix?: string) => { if (typeof window === 'undefined') { // Running on the server, return null return null; } - localStorage.clear(); - router.push('/start'); + if (prefix) { + for (let i = 0; i < localStorage.length; i++) { + const key = localStorage.key(i); + if (key && key.startsWith(prefix)) { + localStorage.removeItem(key); + } + } + router.reload(); + } else { + localStorage.clear(); + router.push('/start'); + } }; return ( @@ -72,6 +82,9 @@ function IndexPage() { )}

+

+ 7+ million individual torrents collected from all corners of the web +


- + {rdUser && ( + + )} + {adUser && ( + + )}
diff --git a/src/pages/library.tsx b/src/pages/library.tsx index 1c0b8e7..f6f0af3 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -336,7 +336,9 @@ function TorrentsPage() { } } return query - ? unfiltered.filter((t) => regexFilters.every((regex) => regex.test(t.filename))) + ? unfiltered.filter((t) => + regexFilters.every((regex) => regex.test(t.filename) || regex.test(t.id)) + ) : unfiltered; } @@ -657,7 +659,7 @@ function TorrentsPage() {
{torrent.id} diff --git a/src/pages/movie/[imdbid].tsx b/src/pages/movie/[imdbid].tsx index 065a1d6..6c09fa5 100644 --- a/src/pages/movie/[imdbid].tsx +++ b/src/pages/movie/[imdbid].tsx @@ -98,7 +98,7 @@ const MovieSearch: FunctionComponent = ({ title, description, try { if (!rdKey) throw new Error('no_rd_key'); const id = await addHashAsMagnet(rdKey, hash); - if (!disableToast) toast.success('Successfully added as magnet!'); + if (!disableToast) toast('Successfully added as magnet!', searchToastOptions); rdCacheAdder.single(`rd:${id}`, hash, instantDownload ? 'downloaded' : 'downloading'); handleSelectFiles(`rd:${id}`, true); // add rd: to account for substr(3) in handleSelectFiles } catch (error) { @@ -118,7 +118,7 @@ const MovieSearch: FunctionComponent = ({ title, description, const resp = await uploadMagnet(adKey, [hash]); if (resp.data.magnets.length === 0 || resp.data.magnets[0].error) throw new Error('no_magnets'); - if (!disableToast) toast.success('Successfully added as magnet!'); + if (!disableToast) toast('Successfully added as magnet!', searchToastOptions); adCacheAdder.single( `ad:${resp.data.magnets[0].id}`, hash, @@ -136,7 +136,7 @@ const MovieSearch: FunctionComponent = ({ title, description, if (!rdKey && !adKey) throw new Error('no_keys'); if (rdKey && id.startsWith('rd:')) await deleteTorrent(rdKey, id.substring(3)); if (adKey && id.startsWith('ad:')) await deleteMagnet(adKey, id.substring(3)); - if (!disableToast) toast.success(`Download canceled (${id})`); + if (!disableToast) toast(`Download canceled (${id})`, searchToastOptions); if (id.startsWith('rd:')) removeFromRdCache(id); if (id.startsWith('ad:')) removeFromAdCache(id); } catch (error) { @@ -209,7 +209,7 @@ const MovieSearch: FunctionComponent = ({ title, description,

{title}

-

{description}

+

{description}

@@ -322,23 +322,22 @@ const MovieSearch: FunctionComponent = ({ title, description,
-

+

{r.title}

-

+

Size: {(r.fileSize / 1024).toFixed(2)} GB

diff --git a/src/pages/search.tsx b/src/pages/search.tsx index 917a1a0..1346a1b 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -69,7 +69,7 @@ function Search() {
{searchResults.map((result: MdbSearchResult) => ( -
+

{result.title}

-

Year: {result.year}

-

Score: {result.score}

+

Year: {result.year}

+

Score: {result.score}

{result.type === 'movie' ? ( ๐ŸŽฅ @@ -130,7 +130,7 @@ function Search() { = ({ try { if (!rdKey) throw new Error('no_rd_key'); const id = await addHashAsMagnet(rdKey, hash); - if (!disableToast) toast.success('Successfully added as magnet!'); + if (!disableToast) toast('Successfully added as magnet!', searchToastOptions); rdCacheAdder.single(`rd:${id}`, hash, instantDownload ? 'downloaded' : 'downloading'); handleSelectFiles(`rd:${id}`, true); // add rd: to account for substr(3) in handleSelectFiles } catch (error) { @@ -129,7 +129,7 @@ const TvSearch: FunctionComponent = ({ const resp = await uploadMagnet(adKey, [hash]); if (resp.data.magnets.length === 0 || resp.data.magnets[0].error) throw new Error('no_magnets'); - if (!disableToast) toast.success('Successfully added as magnet!'); + if (!disableToast) toast('Successfully added as magnet!', searchToastOptions); adCacheAdder.single( `ad:${resp.data.magnets[0].id}`, hash, @@ -147,7 +147,7 @@ const TvSearch: FunctionComponent = ({ if (!rdKey && !adKey) throw new Error('no_keys'); if (rdKey && id.startsWith('rd:')) await deleteTorrent(rdKey, id.substring(3)); if (adKey && id.startsWith('ad:')) await deleteMagnet(adKey, id.substring(3)); - if (!disableToast) toast.success(`Download canceled (${id})`); + if (!disableToast) toast(`Download canceled (${id})`, searchToastOptions); if (id.startsWith('rd:')) removeFromRdCache(id); if (id.startsWith('ad:')) removeFromAdCache(id); } catch (error) { @@ -224,7 +224,7 @@ const TvSearch: FunctionComponent = ({

{title} - Season {seasonNum}

-

{description}

+

{description}

<> {Array.from({ length: season_count || 0 }, (_, i) => i + 1).map( (season) => { @@ -369,23 +369,22 @@ const TvSearch: FunctionComponent = ({
-

+

{r.title}

-

+

Size: {(r.fileSize / 1024).toFixed(2)} GB

diff --git a/src/services/jackett.ts b/src/services/jackett.ts index ea90694..d13e53b 100644 --- a/src/services/jackett.ts +++ b/src/services/jackett.ts @@ -3,7 +3,8 @@ import bencode from 'bencode'; import { createHash } from 'crypto'; import { ScrapeSearchResult } from './mediasearch'; -const JACKETT = process.env.JACKETT ?? 'http://localhost:9117'; +const jackettHost = process.env.JACKETT ?? 'http://localhost:9117'; +const apikey = process.env.JACKETT_KEY ?? 'abc123'; function isFoundDateRecent(foundString: string, date: string): boolean { const foundDate = new Date(foundString); @@ -13,7 +14,7 @@ function isFoundDateRecent(foundString: string, date: string): boolean { } const createSearchUrl = (finalQuery: string) => - `${JACKETT}/api/v2.0/indexers/all/results?apikey=2gzag8296wygpbvezrguhc8y2rnezvos&Query=${encodeURIComponent( + `${jackettHost}/api/v2.0/indexers/all/results?apikey=${apikey}&Query=${encodeURIComponent( finalQuery )}`; diff --git a/src/services/movieScraper.ts b/src/services/movieScraper.ts index 3503cbd..4f84818 100644 --- a/src/services/movieScraper.ts +++ b/src/services/movieScraper.ts @@ -107,7 +107,11 @@ export async function scrapeMovies( mdbData: any, db: PlanetScaleCache ): Promise { - console.log(`๐Ÿน Scraping movie: ${tmdbData.title} (${imdbId})...`); + console.log( + `๐Ÿน Scraping movie: ${tmdbData.title} (${imdbId}) (uncommon: ${countUncommonWordsInTitle( + tmdbData.title + )})...` + ); const cleanTitle = cleanSearchQuery(tmdbData.title); const year = mdbData.year ?? mdbData.released?.substring(0, 4) ?? tmdbData.release_date?.substring(0, 4); @@ -139,7 +143,11 @@ export async function scrapeMovies( .trim() .toLowerCase(); if (tomatoTitle !== processedTitle) { - console.log('๐ŸŽฏ Found another title (1):', tomatoTitle); + console.log( + '๐ŸŽฏ Found another title (1):', + tomatoTitle, + `(uncommon: ${countUncommonWordsInTitle(tomatoTitle)})` + ); cleanedTitle = tomatoTitle; } } @@ -159,7 +167,11 @@ export async function scrapeMovies( .trim() .toLowerCase(); if (metacriticTitle !== processedTitle && metacriticTitle !== cleanedTitle) { - console.log('๐ŸŽฏ Found another title (2):', metacriticTitle); + console.log( + '๐ŸŽฏ Found another title (2):', + metacriticTitle, + `(uncommon: ${countUncommonWordsInTitle(metacriticTitle)})` + ); anotherTitle = metacriticTitle; } } diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index 3420471..a2526d7 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -31,6 +31,28 @@ export class PlanetScaleCache { return cacheEntry !== null; } + public async isOlderThan(imdbId: string, minutesAgo: number): Promise { + const cacheEntry = await this.prisma.scraped.findFirst({ + where: { + OR: [ + { key: { startsWith: `movie:${imdbId}` } }, + { key: { startsWith: `tv:${imdbId}` } }, + ], + }, + select: { updatedAt: true }, + }); + + if (!cacheEntry || !cacheEntry.updatedAt) { + return true; // If it doesn't exist, assume it's old + } + + const currentTime = new Date(); + const updatedAt = new Date(cacheEntry.updatedAt); + const ageInMillis = currentTime.getTime() - updatedAt.getTime(); + const minutesAgoMillis = minutesAgo * 60 * 1000; + return ageInMillis >= minutesAgoMillis; + } + public async getOldestRequest( olderThan: Date | null = null ): Promise<{ key: string; updatedAt: Date } | null> { diff --git a/src/services/prowlarr.ts b/src/services/prowlarr.ts index d55a43c..2da4e6d 100644 --- a/src/services/prowlarr.ts +++ b/src/services/prowlarr.ts @@ -3,7 +3,8 @@ import bencode from 'bencode'; import { createHash } from 'crypto'; import { ScrapeSearchResult } from './mediasearch'; -const PROWLARR = process.env.PROWLARR ?? 'http://localhost:9696'; +const prowlarrHost = process.env.PROWLARR ?? 'http://localhost:9696'; +const apikey = process.env.PROWLARR_KEY ?? 'abc123'; function isFoundDateRecent(foundString: string, date: string): boolean { const foundDate = new Date(foundString); @@ -13,9 +14,9 @@ function isFoundDateRecent(foundString: string, date: string): boolean { } const createSearchUrl = (finalQuery: string) => - `${PROWLARR}/api/v1/search?query=${encodeURIComponent( + `${prowlarrHost}/api/v1/search?query=${encodeURIComponent( finalQuery - )}&indexerIds=-2&categories[]=2000&categories[]=5000&type=search&apikey=2475bf3fd3964fdf9983cbfacac7d5fd`; + )}&indexerIds=-2&categories[]=2000&categories[]=5000&type=search&apikey=${apikey}`; function extractHashFromMagnetLink(magnetLink: string) { const regex = /urn:btih:([A-Fa-f0-9]+)/; diff --git a/src/styles/globals.css b/src/styles/globals.css index b5c61c9..ac1c2b0 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -1,3 +1,9 @@ @tailwind base; @tailwind components; @tailwind utilities; +@tailwind dark; + +body{ + background: hsl(0, 0%, 12%); + color: azure; +} diff --git a/wordlist.txt b/wordlist.txt index 4a42ef5..15995c9 100644 --- a/wordlist.txt +++ b/wordlist.txt @@ -1,3445 +1,172823 @@ -a +aa +aah +aahed +aahing +aahs +aal +aalii +aaliis +aals +aardvark +aardvarks +aardwolf +aardwolves +aargh +aarrgh +aarrghh +aas +aasvogel +aasvogels +ab +aba +abaca +abacas +abaci +aback +abacterial +abacus +abacuses +abaft +abaka +abakas +abalone +abalones +abamp +abampere +abamperes +abamps abandon +abandoned +abandoner +abandoners +abandoning +abandonment +abandonments +abandons +abapical +abas +abase +abased +abasedly +abasement +abasements +abaser +abasers +abases +abash +abashed +abashes +abashing +abashment +abashments +abasia +abasias +abasing +abatable +abate +abated +abatement +abatements +abater +abaters +abates +abating +abatis +abatises +abator +abators +abattis +abattises +abattoir +abattoirs +abaxial +abaxile +abba +abbacies +abbacy +abbas +abbatial +abbe +abbes +abbess +abbesses +abbey +abbeys +abbot +abbotcies +abbotcy +abbots +abbreviate +abbreviated +abbreviates +abbreviating +abbreviation +abbreviations +abbreviator +abbreviators +abdicable +abdicate +abdicated +abdicates +abdicating +abdication +abdications +abdicator +abdicators +abdomen +abdomens +abdomina +abdominal +abdominally +abduce +abduced +abducens +abducent +abducentes +abduces +abducing +abduct +abducted +abducting +abduction +abductions +abductor +abductores +abductors +abducts +abeam +abecedarian +abecedarians +abed +abele +abeles +abelia +abelian +abelias +abelmosk +abelmosks +aberrance +aberrances +aberrancies +aberrancy +aberrant +aberrantly +aberrants +aberrated +aberration +aberrational +aberrations +abet +abetment +abetments +abets +abettal +abettals +abetted +abetter +abetters +abetting +abettor +abettors +abeyance +abeyances +abeyancies +abeyancy +abeyant +abfarad +abfarads +abhenries +abhenry +abhenrys +abhor +abhorred +abhorrence +abhorrences +abhorrent +abhorrently +abhorrer +abhorrers +abhorring +abhors +abidance +abidances +abide +abided +abider +abiders +abides +abiding +abidingly +abigail +abigails +abilities ability +abiogeneses +abiogenesis +abiogenic +abiogenically +abiogenist +abiogenists +abiological +abioses +abiosis +abiotic +abiotically +abject +abjection +abjections +abjectly +abjectness +abjectnesses +abjuration +abjurations +abjure +abjured +abjurer +abjurers +abjures +abjuring +ablate +ablated +ablates +ablating +ablation +ablations +ablative +ablatively +ablatives +ablaut +ablauts +ablaze able +ablegate +ablegates +abler +ables +ablest +ablings +ablins +abloom +abluent +abluents +ablush +abluted +ablution +ablutionary +ablutions +ably +abmho +abmhos +abnegate +abnegated +abnegates +abnegating +abnegation +abnegations +abnegator +abnegators abnormal +abnormalities +abnormality +abnormally +abnormals +abo aboard +abode +aboded +abodes +aboding +abohm +abohms +aboideau +aboideaus +aboideaux +aboil +aboiteau +aboiteaus +aboiteaux abolish +abolishable +abolished +abolisher +abolishers +abolishes +abolishing +abolishment +abolishments +abolition +abolitionary +abolitionism +abolitionisms +abolitionist +abolitionists +abolitions +abolla +abollae +aboma +abomas +abomasa +abomasal +abomasi +abomasum +abomasus +abominable +abominably +abominate +abominated +abominates +abominating +abomination +abominations +abominator +abominators +aboon +aboral +aborally +aboriginal +aboriginally +aboriginals +aborigine +aborigines +aborning +abort +aborted +aborter +aborters +abortifacient +abortifacients +aborting abortion +abortionist +abortionists +abortions +abortive +abortively +abortiveness +abortivenesses +aborts +abos +abought +aboulia +aboulias +aboulic +abound +abounded +abounding +abounds about above +aboveboard +aboveground +aboves +abracadabra +abracadabras +abrachia +abrachias +abradable +abradant +abradants +abrade +abraded +abrader +abraders +abrades +abrading +abrasion +abrasions +abrasive +abrasively +abrasiveness +abrasivenesses +abrasives +abreact +abreacted +abreacting +abreaction +abreactions +abreacts +abreast +abri +abridge +abridged +abridgement +abridgements +abridger +abridgers +abridges +abridging +abridgment +abridgments +abris +abroach abroad +abrogate +abrogated +abrogates +abrogating +abrogation +abrogations +abrosia +abrosias abrupt +abrupter +abruptest +abruption +abruptions +abruptly +abruptness +abruptnesses +abs +abscess +abscessed +abscesses +abscessing +abscise +abscised +abscises +abscisin +abscising +abscisins +abscissa +abscissae +abscissas +abscission +abscissions +abscond +absconded +absconder +absconders +absconding +absconds +abseil +abseiled +abseiling +abseils absence +absences absent +absented +absentee +absenteeism +absenteeisms +absentees +absenter +absenters +absenting +absently +absentminded +absentmindedly +absentmindedness +absentmindednesses +absents +absinth +absinthe +absinthes +absinths absolute +absolutely +absoluteness +absolutenesses +absoluter +absolutes +absolutest +absolution +absolutions +absolutism +absolutisms +absolutist +absolutistic +absolutists +absolutive +absolutize +absolutized +absolutizes +absolutizing +absolve +absolved +absolver +absolvers +absolves +absolving +absonant absorb +absorbabilities +absorbability +absorbable +absorbance +absorbances +absorbancies +absorbancy +absorbant +absorbants +absorbed +absorbencies +absorbency +absorbent +absorbents +absorber +absorbers +absorbing +absorbingly +absorbs +absorptance +absorptances +absorption +absorptions +absorptive +absorptivities +absorptivity +absquatulate +absquatulated +absquatulates +absquatulating +abstain +abstained +abstainer +abstainers +abstaining +abstains +abstemious +abstemiously +abstemiousness +abstemiousnesses +abstention +abstentions +abstentious +absterge +absterged +absterges +absterging +abstinence +abstinences +abstinent +abstinently abstract +abstractable +abstracted +abstractedly +abstractedness +abstractednesses +abstracter +abstracters +abstractest +abstracting +abstraction +abstractional +abstractionism +abstractionisms +abstractionist +abstractionists +abstractions +abstractive +abstractly +abstractness +abstractnesses +abstractor +abstractors +abstracts +abstrict +abstricted +abstricting +abstricts +abstruse +abstrusely +abstruseness +abstrusenesses +abstruser +abstrusest +abstrusities +abstrusity absurd +absurder +absurdest +absurdism +absurdisms +absurdist +absurdists +absurdities +absurdity +absurdly +absurdness +absurdnesses +absurds +abubble +abuilding +abulia +abulias +abulic +abundance +abundances abundant +abundantly +abusable abuse +abused +abuser +abusers +abuses +abusing +abusive +abusively +abusiveness +abusivenesses +abut +abutilon +abutilons +abutment +abutments +abuts +abuttal +abuttals +abutted +abutter +abutters +abutting +abuzz +abvolt +abvolts +abwatt +abwatts +aby +abye +abyes +abying +abys +abysm +abysmal +abysmally +abysms +abyss +abyssal +abysses +acacia +acacias +academe +academes +academia +academias academic +academical +academically +academician +academicians +academicism +academicisms +academics +academies +academism +academisms academy +acajou +acajous +acaleph +acalephae +acalephe +acalephes +acalephs +acanthi +acanthocephalan +acanthocephalans +acanthus +acanthuses +acapnia +acapnias +acari +acariases +acariasis +acaricidal +acaricide +acaricides +acarid +acaridan +acaridans +acarids +acarine +acarines +acaroid +acarpous +acarus +acatalectic +acatalectics +acaudal +acaudate +acaulescent +acauline +acaulose +acaulous +accede +acceded +acceder +acceders +accedes +acceding +accelerando +accelerandos +accelerant +accelerants accelerate +accelerated +accelerates +accelerating +acceleratingly +acceleration +accelerations +accelerative +accelerator +accelerators +accelerometer +accelerometers accent +accented +accenting +accentless +accentor +accentors +accents +accentual +accentually +accentuate +accentuated +accentuates +accentuating +accentuation +accentuations accept +acceptabilities +acceptability +acceptable +acceptableness +acceptablenesses +acceptably +acceptance +acceptances +acceptant +acceptation +acceptations +accepted +acceptedly +acceptee +acceptees +accepter +accepters +accepting +acceptingly +acceptingness +acceptingnesses +acceptive +acceptor +acceptors +accepts access +accessaries +accessary +accessed +accesses +accessibilities +accessibility accessible +accessibleness +accessiblenesses +accessibly +accessing +accession +accessional +accessioned +accessioning +accessions +accessorial +accessories +accessorise +accessorised +accessorises +accessorising +accessorize +accessorized +accessorizes +accessorizing +accessory +acciaccatura +acciaccaturas +accidence +accidences accident +accidental +accidentally +accidentalness +accidentalnesses +accidentals +accidently +accidents +accidia +accidias +accidie +accidies +accipiter +accipiters +accipitrine +accipitrines +acclaim +acclaimed +acclaimer +acclaimers +acclaiming +acclaims +acclamation +acclamations +acclimate +acclimated +acclimates +acclimating +acclimation +acclimations +acclimatise +acclimatised +acclimatises +acclimatising +acclimatization +acclimatizations +acclimatize +acclimatized +acclimatizer +acclimatizers +acclimatizes +acclimatizing +acclivities +acclivity +accolade +accolades +accommodate +accommodated +accommodates +accommodating +accommodatingly accommodation +accommodational +accommodationist +accommodationists +accommodations +accommodative +accommodativeness +accommodativenesses +accommodator +accommodators +accompanied +accompanies +accompaniment +accompaniments +accompanist +accompanists accompany +accompanying +accomplice +accomplices accomplish +accomplishable +accomplished +accomplisher +accomplishers +accomplishes +accomplishing +accomplishment +accomplishments +accord +accordance +accordances +accordant +accordantly +accorded +accorder +accorders +according +accordingly +accordion +accordionist +accordionists +accordions +accords +accost +accosted +accosting +accosts +accouchement +accouchements +accoucheur +accoucheurs account +accountabilities +accountability +accountable +accountableness +accountablenesses +accountably +accountancies +accountancy accountant +accountants +accountantship +accountantships +accounted +accounting +accountings +accounts +accouter +accoutered +accoutering +accouterment +accouterments +accouters +accoutre +accoutred +accoutrement +accoutrements +accoutres +accoutring +accredit +accreditable +accreditation +accreditations +accredited +accrediting +accredits +accrete +accreted +accretes +accreting +accretion +accretionary +accretions +accretive +accruable +accrual +accruals +accrue +accrued +accruement +accruements +accrues +accruing +acculturate +acculturated +acculturates +acculturating +acculturation +acculturational +acculturations +acculturative accumulate +accumulated +accumulates +accumulating +accumulation +accumulations +accumulative +accumulatively +accumulativeness +accumulativenesses +accumulator +accumulators +accuracies accuracy accurate +accurately +accurateness +accuratenesses +accursed +accursedly +accursedness +accursednesses +accurst +accusal +accusals +accusant +accusants +accusation +accusations +accusative +accusatives +accusatory accuse +accused +accuser +accusers +accuses +accusing +accusingly +accustom +accustomation +accustomations accustomed +accustomedness +accustomednesses +accustoming +accustoms +ace +aced +acedia +acedias +aceldama +aceldamas +acellular +acentric +acephalous +acequia +acequias +acerate +acerated +acerb +acerbate +acerbated +acerbates +acerbating +acerber +acerbest +acerbic +acerbically +acerbities +acerbity +acerola +acerolas +acerose +acerous +acervate +acervuli +acervulus +aces +acescent +acescents +aceta +acetabula +acetabular +acetabulum +acetabulums +acetal +acetaldehyde +acetaldehydes +acetals +acetamid +acetamide +acetamides +acetamids +acetaminophen +acetaminophens +acetanilid +acetanilide +acetanilides +acetanilids +acetate +acetated +acetates +acetazolamide +acetazolamides +acetic +acetification +acetifications +acetified +acetifies +acetify +acetifying +acetin +acetins +acetone +acetones +acetonic +acetonitrile +acetonitriles +acetophenetidin +acetophenetidins +acetose +acetous +acetoxyl +acetoxyls +acetum +acetyl +acetylate +acetylated +acetylates +acetylating +acetylation +acetylations +acetylative +acetylcholine +acetylcholines +acetylcholinesterase +acetylcholinesterases +acetylene +acetylenes +acetylenic +acetylic +acetyls +acetylsalicylate +acetylsalicylates +achalasia +achalasias ache +ached +achene +achenes +achenial +aches +achier +achiest +achievable achieve +achieved achievement +achievements +achiever +achievers +achieves +achieving +achillea +achilleas +achiness +achinesses +aching +achingly +achiote +achiotes +achlorhydria +achlorhydrias +achlorhydric +acholia +acholias +achondrite +achondrites +achondritic +achondroplasia +achondroplasias +achondroplastic +achoo +achromat +achromatic +achromatically +achromatism +achromatisms +achromatize +achromatized +achromatizes +achromatizing +achromats +achromic +achy +acicula +aciculae +acicular +aciculas +aciculum +aciculums acid +acidemia +acidemias +acidhead +acidheads +acidic +acidification +acidifications +acidified +acidifier +acidifiers +acidifies +acidify +acidifying +acidimeter +acidimeters +acidimetric +acidimetries +acidimetry +acidities +acidity +acidly +acidness +acidnesses +acidophil +acidophile +acidophiles +acidophilic +acidophils +acidoses +acidosis +acidotic +acids +acidulate +acidulated +acidulates +acidulating +acidulation +acidulations +acidulent +acidulous +aciduria +acidurias +acidy +acierate +acierated +acierates +acierating +aciform +acinar +acing +acini +acinic +acinose +acinous +acinus +ackee +ackees acknowledge +acknowledged +acknowledgedly +acknowledgement +acknowledgements +acknowledges +acknowledging +acknowledgment +acknowledgments +aclinic +acmatic +acme +acmes +acmic +acne +acned +acnes +acnode +acnodes +acock +acoelomate +acoelomates +acold +acolyte +acolytes +aconite +aconites +aconitic +aconitum +aconitums +acorn +acorns +acoustic +acoustical +acoustically +acoustician +acousticians +acoustics +acquaint acquaintance +acquaintances +acquaintanceship +acquaintanceships +acquainted +acquainting +acquaints +acquest +acquests +acquiesce +acquiesced +acquiescence +acquiescences +acquiescent +acquiescently +acquiesces +acquiescing +acquirable acquire +acquired +acquirement +acquirements +acquirer +acquirers +acquires +acquiring acquisition +acquisitional +acquisitions +acquisitive +acquisitively +acquisitiveness +acquisitivenesses +acquisitor +acquisitors +acquit +acquits +acquittal +acquittals +acquittance +acquittances +acquitted +acquitter +acquitters +acquitting +acrasia +acrasias +acrasin +acrasins acre +acreage +acreages +acred +acres +acrid +acrider +acridest +acridine +acridines +acridities +acridity +acridly +acridness +acridnesses +acriflavine +acriflavines +acrimonies +acrimonious +acrimoniously +acrimoniousness +acrimoniousnesses +acrimony +acritarch +acritarchs +acrobat +acrobatic +acrobatically +acrobatics +acrobats +acrocentric +acrocentrics +acrodont +acrodonts +acrogen +acrogens +acrolect +acrolects +acrolein +acroleins +acrolith +acroliths +acromegalic +acromegalics +acromegalies +acromegaly +acromia +acromial +acromion +acromions +acronic +acronym +acronymic +acronymically +acronyms +acropetal +acropetally +acrophobe +acrophobes +acrophobia +acrophobias +acropolis +acropolises +acrosomal +acrosome +acrosomes across +acrostic +acrostical +acrostically +acrostics +acrotic +acrotism +acrotisms +acrylamide +acrylamides +acrylate +acrylates +acrylic +acrylics +acrylonitrile +acrylonitriles act +acta +actabilities +actability +actable +acted +actin +actinal +acting +actings +actinia +actiniae +actinian +actinians +actinias +actinic +actinically +actinide +actinides +actinism +actinisms +actinium +actiniums +actinoid +actinoids +actinolite +actinolites +actinometer +actinometers +actinometric +actinometries +actinometry +actinomorphic +actinomorphies +actinomorphy +actinomyces +actinomycete +actinomycetes +actinomycetous +actinomycin +actinomycins +actinomycoses +actinomycosis +actinomycotic +actinon +actinons +actins action +actionable +actionably +actionless +actions +activate +activated +activates +activating +activation +activations +activator +activators active +actively +activeness +activenesses +actives +activism +activisms +activist +activistic +activists +activities activity +activize +activized +activizes +activizing +actomyosin +actomyosins actor +actorish +actors actress +actresses +actressy +acts actual +actualities +actuality +actualization +actualizations +actualize +actualized +actualizes +actualizing +actually +actuarial +actuarially +actuaries +actuary +actuate +actuated +actuates +actuating +actuation +actuations +actuator +actuators +acuate +acuities +acuity +aculeate +aculei +aculeus +acumen +acumens +acuminate +acupressure +acupressures +acupuncture +acupunctures +acupuncturist +acupuncturists +acutance +acutances acute +acutely +acuteness +acutenesses +acuter +acutes +acutest +acyclic +acyclovir +acyclovirs +acyl +acylate +acylated +acylates +acylating +acylation +acylations +acyloin +acyloins +acyls ad +adage +adages +adagial +adagio +adagios +adamance +adamances +adamancies +adamancy +adamant +adamantine +adamantly +adamants +adamsite +adamsites adapt +adaptabilities +adaptability +adaptable adaptation +adaptational +adaptationally +adaptations +adapted +adaptedness +adaptednesses +adapter +adapters +adapting +adaption +adaptions +adaptive +adaptively +adaptiveness +adaptivenesses +adaptivities +adaptivity +adaptor +adaptors +adapts +adaxial add +addable +addax +addaxes +added +addedly +addend +addenda +addends +addendum +adder +adders +addible +addict addicted +addicting +addiction +addictions +addictive +addicts +adding addition +additional +additionally +additions +additive +additively +additives +additivities +additivity +additory +addle +addled +addlepated +addles +addling address +addressabilities +addressability +addressable +addressed +addressee +addressees +addresser +addressers +addresses +addressing +addrest +adds +adduce +adduced +adducent +adducer +adducers +adduces +adducing +adduct +adducted +adducting +adduction +adductions +adductive +adductor +adductors +adducts +adeem +adeemed +adeeming +adeems +adenine +adenines +adenitis +adenitises +adenocarcinoma +adenocarcinomas +adenocarcinomata +adenocarcinomatous +adenohypophyseal +adenohypophyses +adenohypophysial +adenohypophysis +adenoid +adenoidal +adenoids +adenoma +adenomas +adenomata +adenomatous +adenoses +adenosine +adenosines +adenosis +adenoviral +adenovirus +adenoviruses +adenyl +adenyls +adept +adepter +adeptest +adeptly +adeptness +adeptnesses +adepts +adequacies +adequacy adequate +adequately +adequateness +adequatenesses +adhere +adhered +adherence +adherences +adherend +adherends +adherent +adherently +adherents +adherer +adherers +adheres +adhering +adhesion +adhesional +adhesions +adhesive +adhesively +adhesiveness +adhesivenesses +adhesives +adhibit +adhibited +adhibiting +adhibits +adiabatic +adiabatically +adieu +adieus +adieux +adios +adipic +adipocyte +adipocytes +adipose +adiposes +adiposis +adiposities +adiposity +adipous +adit +adits +adjacencies +adjacency +adjacent +adjacently +adjectival +adjectivally +adjective +adjectively +adjectives +adjoin +adjoined +adjoining +adjoins +adjoint +adjoints +adjourn +adjourned +adjourning +adjournment +adjournments +adjourns +adjudge +adjudged +adjudges +adjudging +adjudicate +adjudicated +adjudicates +adjudicating +adjudication +adjudications +adjudicative +adjudicator +adjudicators +adjudicatory +adjunct +adjunction +adjunctions +adjunctive +adjunctly +adjuncts +adjuration +adjurations +adjuratory +adjure +adjured +adjurer +adjurers +adjures +adjuring +adjuror +adjurors adjust +adjustabilities +adjustability +adjustable +adjusted +adjuster +adjusters +adjusting +adjustive adjustment +adjustmental +adjustments +adjustor +adjustors +adjusts +adjutancies +adjutancy +adjutant +adjutants +adjuvant +adjuvants +adman +admass +admeasure +admeasured +admeasurement +admeasurements +admeasures +admeasuring +admen +administer +administered +administering +administers +administrable +administrant +administrants +administrate +administrated +administrates +administrating administration +administrations +administrative +administratively +administrator +administrators +administratrices +administratrix +admirabilities +admirability admirable +admirableness +admirablenesses +admirably +admiral +admirals +admiralties +admiralty +admiration +admirations admire +admired +admirer +admirers +admires +admiring +admiringly +admissibilities +admissibility +admissible admission +admissions +admissive admit +admits +admittance +admittances +admitted +admittedly +admitter +admitters +admitting +admix +admixed +admixes +admixing +admixt +admixture +admixtures +admonish +admonished +admonisher +admonishers +admonishes +admonishing +admonishingly +admonishment +admonishments +admonition +admonitions +admonitorily +admonitory +adnate +adnation +adnations +adnexa +adnexal +adnoun +adnouns +ado +adobe +adobelike +adobes +adobo +adobos adolescence +adolescences adolescent +adolescently +adolescents +adonis +adonises adopt +adoptabilities +adoptability +adoptable +adopted +adoptee +adoptees +adopter +adopters +adoptianism +adoptianisms +adopting +adoption +adoptionism +adoptionisms +adoptionist +adoptionists +adoptions +adoptive +adoptively +adopts +adorabilities +adorability +adorable +adorableness +adorablenesses +adorably +adoration +adorations adore +adored +adorer +adorers +adores +adoring +adoringly +adorn +adorned +adorner +adorners +adorning +adornment +adornments +adorns +ados +adown +adoze +adrenal +adrenalectomies +adrenalectomized +adrenalectomy +adrenaline +adrenalines +adrenals +adrenergic +adrenergically +adrenochrome +adrenochromes +adrenocortical +adrenocorticosteroid +adrenocorticosteroids +adrenocorticotrophic +adrenocorticotrophin +adrenocorticotrophins +adrenocorticotropic +adrenocorticotropin +adrenocorticotropins +adrift +adroit +adroiter +adroitest +adroitly +adroitness +adroitnesses +ads +adscititious +adscript +adscripts +adsorb +adsorbable +adsorbate +adsorbates +adsorbed +adsorbent +adsorbents +adsorber +adsorbers +adsorbing +adsorbs +adsorption +adsorptions +adsorptive +adularia +adularias +adulate +adulated +adulates +adulating +adulation +adulations +adulator +adulators +adulatory adult +adulterant +adulterants +adulterate +adulterated +adulterates +adulterating +adulteration +adulterations +adulterator +adulterators +adulterer +adulterers +adulteress +adulteresses +adulteries +adulterine +adulterous +adulterously +adultery +adulthood +adulthoods +adultlike +adultly +adultness +adultnesses +adults +adumbral +adumbrate +adumbrated +adumbrates +adumbrating +adumbration +adumbrations +adumbrative +adumbratively +adunc +aduncate +aduncous +adust advance +advanced +advancement +advancements +advancer +advancers +advances +advancing advantage +advantaged +advantageous +advantageously +advantageousness +advantageousnesses +advantages +advantaging +advect +advected +advecting +advection +advections +advective +advects +advent +adventitia +adventitial +adventitias +adventitious +adventitiously +adventive +adventives +advents adventure +adventured +adventurer +adventurers +adventures +adventuresome +adventuresomeness +adventuresomenesses +adventuress +adventuresses +adventuring +adventurism +adventurisms +adventurist +adventuristic +adventurists +adventurous +adventurously +adventurousness +adventurousnesses +adverb +adverbial +adverbially +adverbials +adverbs +adversarial +adversaries +adversariness +adversarinesses +adversary +adversative +adversatively +adversatives +adverse +adversely +adverseness +adversenesses +adversities +adversity +advert +adverted +advertence +advertences +advertencies +advertency +advertent +advertently +adverting advertise +advertised advertisement +advertisements +advertiser +advertisers +advertises +advertising +advertisings +advertize +advertized +advertizement +advertizements +advertizes +advertizing +advertorial +advertorials +adverts advice +advices +advisabilities +advisability +advisable +advisableness +advisablenesses +advisably advise +advised +advisedly +advisee +advisees +advisement +advisements +adviser +advisers +advises +advising +advisor +advisories +advisors +advisory +advocacies +advocacy advocate +advocated +advocates +advocating +advocation +advocations +advocative +advocator +advocators +advowson +advowsons +adynamia +adynamias +adynamic +adyta +adytum +adz +adze +adzes +adzuki +adzukis +ae +aecia +aecial +aecidia +aecidial +aecidium +aeciospore +aeciospores +aecium +aedes +aedile +aediles +aedine +aegis +aegises +aeneous +aeneus +aeolian +aeon +aeonian +aeonic +aeons +aepyornis +aepyornises +aequorin +aequorins +aerate +aerated +aerates +aerating +aeration +aerations +aerator +aerators +aerenchyma +aerenchymas +aerenchymata +aerial +aerialist +aerialists +aerially +aerials +aerie +aeried +aerier +aeries +aeriest +aerified +aerifies +aeriform +aerify +aerifying +aerily +aero +aerobatic +aerobatics +aerobe +aerobes +aerobia +aerobic +aerobically +aerobics +aerobiological +aerobiologies +aerobiology +aerobioses +aerobiosis +aerobium +aerobrake +aerobraked +aerobrakes +aerobraking +aerodrome +aerodromes +aeroduct +aeroducts +aerodynamic +aerodynamical +aerodynamically +aerodynamicist +aerodynamicists +aerodynamics +aerodyne +aerodynes +aeroelastic +aeroelasticities +aeroelasticity +aeroembolism +aeroembolisms +aerofoil +aerofoils +aerogel +aerogels +aerogram +aerogramme +aerogrammes +aerograms +aerolite +aerolites +aerolith +aeroliths +aerologies +aerology +aeromagnetic +aeromechanics +aeromedical +aeromedicine +aeromedicines +aerometer +aerometers +aeronaut +aeronautic +aeronautical +aeronautically +aeronautics +aeronauts +aeronomer +aeronomers +aeronomic +aeronomical +aeronomies +aeronomist +aeronomists +aeronomy +aeroplane +aeroplanes +aerosat +aerosats +aerosol +aerosolization +aerosolizations +aerosolize +aerosolized +aerosolizes +aerosolizing +aerosols +aerospace +aerospaces +aerostat +aerostatics +aerostats +aerothermodynamic +aerothermodynamics +aerugo +aerugos +aery +aesthete +aesthetes +aesthetic +aesthetical +aesthetically +aesthetician +aestheticians +aestheticism +aestheticisms +aestheticize +aestheticized +aestheticizes +aestheticizing +aesthetics +aestival +aestivate +aestivated +aestivates +aestivating +aestivation +aestivations +aether +aetheric +aethers +aetiologies +aetiology +afar +afars +afeard +afeared +afebrile +aff +affabilities +affability +affable +affably affair +affaire +affaires +affairs affect +affectabilities +affectability +affectable +affectation +affectations +affected +affectedly +affectedness +affectednesses +affecter +affecters +affecting +affectingly affection +affectional +affectionally +affectionate +affectionately +affectioned +affectionless +affections +affective +affectively +affectivities +affectivity +affectless +affectlessness +affectlessnesses +affects +affenpinscher +affenpinschers +afferent +afferently +afferents +affiance +affianced +affiances +affiancing +affiant +affiants +affiche +affiches +afficionado +afficionados +affidavit +affidavits +affiliate +affiliated +affiliates +affiliating +affiliation +affiliations +affinal +affine +affined +affinely +affines +affinities +affinity +affirm +affirmable +affirmance +affirmances +affirmation +affirmations +affirmative +affirmatively +affirmatives +affirmed +affirmer +affirmers +affirming +affirms +affix +affixable +affixal +affixation +affixations +affixed +affixer +affixers +affixes +affixial +affixing +affixment +affixments +afflatus +afflatuses +afflict +afflicted +afflicting +affliction +afflictions +afflictive +afflictively +afflicts +affluence +affluences +affluencies +affluency +affluent +affluently +affluents +afflux +affluxes afford +affordabilities +affordability +affordable +affordably +afforded +affording +affords +afforest +afforestation +afforestations +afforested +afforesting +afforests +affray +affrayed +affrayer +affrayers +affraying +affrays +affricate +affricates +affricative +affricatives +affright +affrighted +affrighting +affrights +affront +affronted +affronting +affronts +affusion +affusions +afghan +afghani +afghanis +afghans +aficionada +aficionadas +aficionado +aficionados +afield +afire +aflame +aflatoxin +aflatoxins +afloat +aflutter +afoot +afore +aforementioned +aforesaid +aforethought +afoul afraid -africa -african +afreet +afreets +afresh +afrit +afrits +aft after +afterbirth +afterbirths +afterburner +afterburners +aftercare +aftercares +afterclap +afterclaps +afterdeck +afterdecks +aftereffect +aftereffects +afterglow +afterglows +afterimage +afterimages +afterlife +afterlives +aftermarket +aftermarkets +aftermath +aftermaths +aftermost afternoon +afternoons +afterpiece +afterpieces +afters +aftershave +aftershaves +aftershock +aftershocks +aftertaste +aftertastes +aftertax +afterthought +afterthoughts +aftertime +aftertimes afterward afterwards +afterword +afterwords +afterworld +afterworlds +aftmost +aftosa +aftosas +ag +aga again against +agalloch +agallochs +agalwood +agalwoods +agama +agamas +agamete +agametes +agamic +agammaglobulinemia +agammaglobulinemias +agammaglobulinemic +agamospermies +agamospermy +agamous +agapae +agapai +agapanthus +agapanthuses +agape +agapeic +agar +agaric +agarics +agarose +agaroses +agars +agas +agate +agates +agatize +agatized +agatizes +agatizing +agatoid +agave +agaves +agaze age +aged +agedly +agedness +agednesses +agee +ageing +ageings +ageism +ageisms +ageist +ageists +ageless +agelessly +agelessness +agelessnesses +agelong +agencies agency agenda +agendaless +agendas +agendum +agendums +agene +agenes +ageneses +agenesia +agenesias +agenesis +agenetic +agenize +agenized +agenizes +agenizing agent +agential +agenting +agentings +agentive +agentives +agentries +agentry +agents +ager +ageratum +ageratums +agers +ages +aggadic +agger +aggers +aggie +aggies +aggiornamento +aggiornamentos +agglomerate +agglomerated +agglomerates +agglomerating +agglomeration +agglomerations +agglomerative +agglutinabilities +agglutinability +agglutinable +agglutinate +agglutinated +agglutinates +agglutinating +agglutination +agglutinations +agglutinative +agglutinin +agglutinins +agglutinogen +agglutinogenic +agglutinogens +aggradation +aggradations +aggrade +aggraded +aggrades +aggrading +aggrandise +aggrandised +aggrandises +aggrandising +aggrandize +aggrandized +aggrandizement +aggrandizements +aggrandizer +aggrandizers +aggrandizes +aggrandizing +aggravate +aggravated +aggravates +aggravating +aggravation +aggravations +aggregate +aggregated +aggregately +aggregateness +aggregatenesses +aggregates +aggregating +aggregation +aggregational +aggregations +aggregative +aggregatively +aggress +aggressed +aggresses +aggressing +aggression +aggressions aggressive +aggressively +aggressiveness +aggressivenesses +aggressivities +aggressivity +aggressor +aggressors +aggrieve +aggrieved +aggrievedly +aggrievement +aggrievements +aggrieves +aggrieving +aggro +aggros +agha +aghas +aghast +agile +agilely +agilities +agility +agin +aging +agings +aginner +aginners +agio +agios +agiotage +agiotages +agism +agisms +agist +agisted +agisting +agists +agitable +agitate +agitated +agitatedly +agitates +agitating +agitation +agitational +agitations +agitative +agitato +agitator +agitators +agitprop +agitprops +aglare +agleam +aglee +aglet +aglets +agley +aglimmer +aglitter +aglow +agly +aglycon +aglycone +aglycones +aglycons +agma +agmas +agminate +agnail +agnails +agnate +agnates +agnatic +agnation +agnations +agnize +agnized +agnizes +agnizing +agnomen +agnomens +agnomina +agnosia +agnosias +agnostic +agnosticism +agnosticisms +agnostics ago +agog +agon +agonal +agone +agones +agonic +agonies +agonise +agonised +agonises +agonising +agonist +agonistic +agonistically +agonists +agonize +agonized +agonizes +agonizing +agonizingly +agons +agony +agora +agorae +agoraphobe +agoraphobes +agoraphobia +agoraphobias +agoraphobic +agoraphobics +agoras +agorot +agoroth +agouti +agouties +agoutis +agouty +agrafe +agrafes +agraffe +agraffes +agranulocyte +agranulocytes +agranulocytoses +agranulocytosis +agrapha +agraphia +agraphias +agraphic +agrarian +agrarianism +agrarianisms +agrarians +agravic agree +agreeabilities +agreeability +agreeable +agreeableness +agreeablenesses +agreeably +agreed +agreeing agreement +agreements +agrees +agrestal +agrestic +agria +agrias +agribusiness +agribusinesses +agribusinessman +agribusinessmen +agrichemical +agrichemicals agricultural +agriculturalist +agriculturalists +agriculturally agriculture +agricultures +agriculturist +agriculturists +agrimonies +agrimony +agrochemical +agrochemicals +agroforester +agroforesters +agroforestries +agroforestry +agrologies +agrology +agronomic +agronomically +agronomies +agronomist +agronomists +agronomy +aground +agrypnia +agrypnias +ague +aguelike +agues +agueweed +agueweeds +aguish +aguishly +ah +aha +ahchoo ahead +ahem +ahimsa +ahimsas +ahistoric +ahistorical +ahold +aholds +ahorse +ahoy +ahull +ai +aiblins aid +aide +aided +aider +aiders +aides +aidful +aiding +aidless +aidman +aidmen aids +aiglet +aiglets +aigret +aigrets +aigrette +aigrettes +aiguille +aiguilles +aiguillette +aiguillettes +aikido +aikidos +ail +ailanthus +ailanthuses +ailed +aileron +ailerons +ailing +ailment +ailments +ails +ailurophile +ailurophiles +ailurophobe +ailurophobes +ailurophobia +ailurophobias aim +aimed +aimer +aimers +aimful +aimfully +aiming +aimless +aimlessly +aimlessness +aimlessnesses +aims +ain +ains +ainsell +ainsells +aioli +aiolis air +airboat +airboats +airborne +airbound +airbrush +airbrushed +airbrushes +airbrushing +airburst +airbursts +airbus +airbuses +airbusses +aircheck +airchecks +aircoach +aircoaches aircraft +aircrew +aircrews +airdate +airdates +airdrome +airdromes +airdrop +airdropped +airdropping +airdrops +aired +airer +airers +airest +airfare +airfares +airfield +airfields +airflow +airflows +airfoil +airfoils +airframe +airframes +airfreight +airfreighted +airfreighting +airfreights +airglow +airglows +airhead +airheaded +airheads +airhole +airholes +airier +airiest +airily +airiness +airinesses +airing +airings +airless +airlessness +airlessnesses +airlift +airlifted +airlifting +airlifts +airlike airline +airliner +airliners +airlines airmail +airmailed +airmailing +airmails +airman +airmanship +airmanships +airmen +airmobile +airn +airns +airpark +airparks airplane +airplanes +airplay +airplays airport +airports +airpost +airposts +airpower +airpowers +airproof +airproofed +airproofing +airproofs +airs +airscape +airscapes +airscrew +airscrews +airshed +airsheds +airship +airships +airsick +airsickness +airsicknesses airspace +airspaces +airspeed +airspeeds +airstream +airstreams +airstrip +airstrips +airt +airted +airth +airthed +airthing +airths +airtight +airtightness +airtightnesses +airtime +airtimes +airting +airts +airward +airwave +airwaves +airway +airways +airwise +airwoman +airwomen +airworthier +airworthiest +airworthiness +airworthinesses +airworthy +airy +ais +aisle +aisled +aisles +aisleway +aisleways +ait +aitch +aitchbone +aitchbones +aitches +aits +aiver +aivers +ajar +ajee +ajiva +ajivas +ajowan +ajowans +ajuga +ajugas +akee +akees +akela +akelas +akene +akenes +akimbo +akin +akvavit +akvavits +al +ala +alabaster +alabasters +alabastrine +alack +alacrities +alacritous +alacrity +alae +alameda +alamedas +alamo +alamode +alamodes +alamos +alan +aland +alands +alane +alang +alanin +alanine +alanines +alanins +alans +alant +alants +alanyl +alanyls +alar alarm +alarmed +alarming +alarmingly +alarmism +alarmisms +alarmist +alarmists +alarms +alarum +alarumed +alaruming +alarums +alary +alas +alaska +alaskas +alastor +alastors +alate +alated +alates +alation +alations +alb +alba +albacore +albacores +albas +albata +albatas +albatross +albatrosses +albedo +albedoes +albedos +albeit +albicore +albicores +albinal +albinic +albinism +albinisms +albinistic +albino +albinos +albinotic +albite +albites +albitic +albizia +albizias +albizzia +albizzias +albs album +albumen +albumens +albumin +albuminous +albumins +albuminuria +albuminurias +albuminuric +albumose +albumoses +albums +alburnum +alburnums +alcade +alcades +alcahest +alcahests +alcaic +alcaics +alcaide +alcaides +alcalde +alcaldes +alcayde +alcaydes +alcazar +alcazars +alchemic +alchemical +alchemically +alchemies +alchemist +alchemistic +alchemistical +alchemists +alchemize +alchemized +alchemizes +alchemizing +alchemy +alchymies +alchymy +alcid +alcidine +alcids alcohol alcoholic +alcoholically +alcoholics +alcoholism +alcoholisms +alcohols +alcove +alcoved +alcoves +alcyonarian +alcyonarians +aldehyde +aldehydes +aldehydic +alder +alderflies +alderfly +alderman +aldermanic +aldermen +alders +alderwoman +alderwomen +aldol +aldolase +aldolases +aldolization +aldolizations +aldols +aldose +aldoses +aldosterone +aldosterones +aldosteronism +aldosteronisms +aldrin +aldrins +ale +aleatoric +aleatory +alec +alecs +alee +alef +alefs +alegar +alegars +alehouse +alehouses +alembic +alembics +alencon +alencons +aleph +alephs +alert +alerted +alerter +alertest +alerting +alertly +alertness +alertnesses +alerts +ales +aleuron +aleurone +aleurones +aleurons +alevin +alevins +alewife +alewives +alexander +alexanders +alexandrine +alexandrines +alexandrite +alexandrites +alexia +alexias +alexin +alexine +alexines +alexins +alfa +alfaki +alfakis +alfalfa +alfalfas +alfaqui +alfaquin +alfaquins +alfaquis +alfas +alfilaria +alfilarias +alforja +alforjas +alfresco +alga +algae +algaecide +algaecides +algal +algaroba +algarobas +algarroba +algarrobas +algas algebra +algebraic +algebraically +algebraist +algebraists +algebras +algerine +algerines +algicidal +algicide +algicides +algid +algidities +algidity +algin +alginate +alginates +algins +algoid +algolagnia +algolagniac +algolagniacs +algolagnias +algological +algologies +algologist +algologists +algology +algor +algorism +algorisms +algorithm +algorithmic +algorithmically +algorithms +algors +algum +algums +alias +aliases +alibi +alibied +alibies +alibiing +alibis +alible +alicyclic +alidad +alidade +alidades +alidads +alien +alienabilities +alienability +alienable +alienage +alienages +alienate +alienated +alienates +alienating +alienation +alienations +alienator +alienators +aliened +alienee +alienees +aliener +alieners +aliening +alienism +alienisms +alienist +alienists +alienly +alienness +aliennesses +alienor +alienors +aliens +alif +aliform +alifs +alight +alighted +alighting +alightment +alightments +alights +align +aligned +aligner +aligners +aligning +alignment +alignments +aligns alike +alikeness +alikenesses +aliment +alimentary +alimentation +alimentations +alimented +alimenting +aliments +alimonies +alimony +aline +alined +alinement +alinements +aliner +aliners +alines +alining +aliped +alipeds +aliphatic +aliquant +aliquot +aliquots +alist +alit +aliteracies +aliteracy +aliterate +aliterates +aliunde alive +aliveness +alivenesses +aliya +aliyah +aliyahs +aliyas +aliyos +aliyot +alizarin +alizarins +alkahest +alkahestic +alkahests +alkali +alkalic +alkalies +alkalified +alkalifies +alkalify +alkalifying +alkalimeter +alkalimeters +alkalimetries +alkalimetry +alkalin +alkaline +alkalinities +alkalinity +alkalinization +alkalinizations +alkalinize +alkalinized +alkalinizes +alkalinizing +alkalis +alkalise +alkalised +alkalises +alkalising +alkalize +alkalized +alkalizes +alkalizing +alkaloid +alkaloidal +alkaloids +alkaloses +alkalosis +alkalotic +alkane +alkanes +alkanet +alkanets +alkene +alkenes +alkies +alkine +alkines +alkoxide +alkoxides +alkoxy +alky +alkyd +alkyds +alkyl +alkylate +alkylated +alkylates +alkylating +alkylation +alkylations +alkylic +alkyls +alkyne +alkynes all +allanite +allanites +allantoic +allantoides +allantoin +allantoins +allantois +allargando +allay +allayed +allayer +allayers +allaying +allays +allee +allees +allegation +allegations +allege +alleged +allegedly +alleger +allegers +alleges +allegiance +allegiances +allegiant +alleging +allegorical +allegorically +allegoricalness +allegoricalnesses +allegories +allegorise +allegorised +allegorises +allegorising +allegorist +allegorists +allegorization +allegorizations +allegorize +allegorized +allegorizer +allegorizers +allegorizes +allegorizing +allegory +allegretto +allegrettos +allegro +allegros +allele +alleles +allelic +allelism +allelisms +allelomorph +allelomorphic +allelomorphism +allelomorphisms +allelomorphs +allelopathic +allelopathies +allelopathy +alleluia +alleluias +allemande +allemandes +allergen +allergenic +allergenicities +allergenicity +allergens allergic +allergies +allergin +allergins +allergist +allergists +allergy +allethrin +allethrins +alleviate +alleviated +alleviates +alleviating +alleviation +alleviations +alleviator +alleviators alley +alleys +alleyway +alleyways +allheal +allheals +alliable +alliaceous +alliance +alliances +allicin +allicins +allied +allies +alligator +alligators +alliterate +alliterated +alliterates +alliterating +alliteration +alliterations +alliterative +alliteratively +allium +alliums +alloantibodies +alloantibody +alloantigen +alloantigens +allobar +allobars +allocable +allocatable allocate +allocated +allocates +allocating +allocation +allocations +allocator +allocators +allocution +allocutions +allod +allodia +allodial +allodium +allods +allogamies +allogamous +allogamy +allogeneic +allogenic +allograft +allografted +allografting +allografts +allograph +allographic +allographs +allometric +allometries +allometry +allomorph +allomorphic +allomorphism +allomorphisms +allomorphs +allonge +allonges +allonym +allonyms +allopath +allopaths +allopatric +allopatrically +allopatries +allopatry +allophane +allophanes +allophone +allophones +allophonic +allopolyploid +allopolyploidies +allopolyploids +allopolyploidy +allopurinol +allopurinols +allosaurus +allosauruses +allosteric +allosterically +allosteries +allostery +allot +allotetraploid +allotetraploidies +allotetraploids +allotetraploidy +allotment +allotments +allotrope +allotropes +allotropic +allotropies +allotropy +allots +allotted +allottee +allottees +allotter +allotters +allotting +allotype +allotypes +allotypic +allotypically +allotypies +allotypy +allover +allovers allow +allowable +allowably allowance +allowanced +allowances +allowancing +allowed +allowedly +allowing +allows +alloxan +alloxans +alloy +alloyed +alloying +alloys +alls +allseed +allseeds +allspice +allspices +allude +alluded +alludes +alluding +allure +allured +allurement +allurements +allurer +allurers +allures +alluring +alluringly +allusion +allusions +allusive +allusively +allusiveness +allusivenesses +alluvia +alluvial +alluvials +alluvion +alluvions +alluvium +alluviums +ally +allying +allyl +allylic +allyls +alma +almagest +almagests +almah +almahs +almanac +almanacs +almandine +almandines +almandite +almandites +almas +alme +almeh +almehs +almemar +almemars +almes +almightiness +almightinesses +almighty +almner +almners +almond +almonds +almoner +almoners +almonries +almonry almost +alms +almsgiver +almsgivers +almsgiving +almsgivings +almshouse +almshouses +almsman +almsmen +almuce +almuces +almud +almude +almudes +almuds +almug +almugs +alnico +alnicoes +alodia +alodial +alodium +aloe +aloes +aloetic +aloft +alogical +alogically +aloha +alohas +aloin +aloins alone +aloneness +alonenesses along +alongshore alongside +aloof +aloofly +aloofness +aloofnesses +alopecia +alopecias +alopecic aloud +alow +alp +alpaca +alpacas +alpenglow +alpenglows +alpenhorn +alpenhorns +alpenstock +alpenstocks +alpha alphabet +alphabeted +alphabetic +alphabetical +alphabetically +alphabeting +alphabetization +alphabetizations +alphabetize +alphabetized +alphabetizer +alphabetizers +alphabetizes +alphabetizing +alphabets +alphameric +alphanumeric +alphanumerical +alphanumerically +alphanumerics +alphas +alphorn +alphorns +alphosis +alphosises +alphyl +alphyls +alpine +alpinely +alpines +alpinism +alpinisms +alpinist +alpinists +alps already +alright +als +alsike +alsikes also +alt +altar +altarpiece +altarpieces +altars +altazimuth +altazimuths +alter +alterabilities +alterability +alterable +alterably +alterant +alterants +alteration +alterations +altercate +altercated +altercates +altercating +altercation +altercations +altered +alterer +alterers +altering +alternate +alternated +alternately +alternates +alternating +alternation +alternations alternative +alternatively +alternativeness +alternativenesses +alternatives +alternator +alternators +alters +althaea +althaeas +althea +altheas +altho +althorn +althorns although +altimeter +altimeters +altimetries +altimetry +altiplano +altiplanos altitude +altitudes +altitudinal +altitudinous +alto +altocumuli +altocumulus altogether +altogethers +altoist +altoists +altos +altostrati +altostratus +altricial +altruism +altruisms +altruist +altruistic +altruistically +altruists +alts +aludel +aludels +alula +alulae +alular +alum +alumin +alumina +aluminas +aluminate +aluminates +alumine +alumines +aluminic +aluminium +aluminiums +aluminize +aluminized +aluminizes +aluminizing +aluminosilicate +aluminosilicates +aluminous +alumins aluminum +aluminums +alumna +alumnae +alumni +alumnus +alumroot +alumroots +alums +alunite +alunites +alveolar +alveolarly +alveolars +alveolate +alveoli +alveolus +alvine +alway always +alyssum +alyssums am +ama +amadavat +amadavats +amadou +amadous +amah +amahs +amain +amalgam +amalgamate +amalgamated +amalgamates +amalgamating +amalgamation +amalgamations +amalgamator +amalgamators +amalgams +amandine +amanita +amanitas +amanitin +amanitins +amantadine +amantadines +amanuenses +amanuensis +amaranth +amaranthine +amaranths +amarelle +amarelles +amaretti +amaretto +amarettos +amarna +amaryllis +amaryllises +amas +amass +amassed +amasser +amassers +amasses +amassing +amassment +amassments amateur +amateurish +amateurishly +amateurishness +amateurishnesses +amateurism +amateurisms +amateurs +amative +amatively +amativeness +amativenesses +amatol +amatols +amatory +amauroses +amaurosis +amaurotic amaze +amazed +amazedly +amazement +amazements +amazes amazing +amazingly +amazon +amazonite +amazonites +amazons +amazonstone +amazonstones +ambage +ambages +ambari +ambaries +ambaris +ambary ambassador +ambassadorial +ambassadors +ambassadorship +ambassadorships ambassadress +ambassadresses +ambeer +ambeers +amber +ambergris +ambergrises +amberies +amberina +amberinas +amberjack +amberjacks +amberoid +amberoids +ambers +ambery +ambiance +ambiances +ambidexterities +ambidexterity +ambidextrous +ambidextrously +ambience +ambiences +ambient +ambients +ambiguities +ambiguity ambiguous +ambiguously +ambiguousness +ambiguousnesses +ambisexual +ambisexualities +ambisexuality +ambisexuals +ambit ambition +ambitioned +ambitioning +ambitionless +ambitions +ambitious +ambitiously +ambitiousness +ambitiousnesses +ambits +ambivalence +ambivalences +ambivalent +ambivalently +ambiversion +ambiversions +ambivert +ambiverts +amble +ambled +ambler +amblers +ambles +ambling +amblygonite +amblygonites +amblyopia +amblyopias +amblyopic +ambo +amboina +amboinas +ambones +ambos +amboyna +amboynas +ambries +ambroid +ambroids +ambrosia +ambrosial +ambrosially +ambrosias +ambrotype +ambrotypes +ambry +ambsace +ambsaces +ambulacra +ambulacral +ambulacrum ambulance -america +ambulances +ambulant +ambulate +ambulated +ambulates +ambulating +ambulation +ambulations +ambulatories +ambulatorily +ambulatory +ambuscade +ambuscaded +ambuscader +ambuscaders +ambuscades +ambuscading +ambush +ambushed +ambusher +ambushers +ambushes +ambushing +ambushment +ambushments +ameba +amebae +ameban +amebas +amebean +amebiases +amebiasis +amebic +amebocyte +amebocytes +ameboid +ameer +ameerate +ameerates +ameers +amelcorn +amelcorns +ameliorate +ameliorated +ameliorates +ameliorating +amelioration +ameliorations +ameliorative +ameliorator +ameliorators +amelioratory +ameloblast +ameloblasts +amen +amenabilities +amenability +amenable +amenably +amend +amendable +amendatory +amended +amender +amenders +amending +amendment +amendments +amends +amenities +amenity +amenorrhea +amenorrheas +amenorrheic +amens +ament +amentia +amentias +amentiferous +aments +amerce +amerced +amercement +amercements +amercer +amercers +amerces +amerciable +amercing +americium +americiums +amesace +amesaces +amethyst +amethystine +amethysts +ametropia +ametropias +ametropic +ami +amia +amiabilities +amiability +amiable +amiableness +amiablenesses +amiably +amiantus +amiantuses +amias +amicabilities +amicability +amicable +amicableness +amicablenesses +amicably +amice +amices +amici +amicus +amid +amidase +amidases +amide +amides +amidic +amidin +amidine +amidines +amidins +amido +amidogen +amidogens +amidol +amidols +amidone +amidones +amids +amidship +amidships +amidst +amie +amies +amiga +amigas +amigo +amigos +amin +amine +amines +aminic +aminities +aminity +amino +aminoaciduria +aminoacidurias +aminopeptidase +aminopeptidases +aminophylline +aminophyllines +aminopterin +aminopterins +aminopyrine +aminopyrines +aminotransferase +aminotransferases +amins +amir +amirate +amirates +amirs +amis +amiss +amities +amitoses +amitosis +amitotic +amitotically +amitriptyline +amitriptylines +amitrole +amitroles +amity +ammeter +ammeters +ammine +ammines +ammino +ammo +ammocete +ammocetes +ammonal +ammonals +ammonia +ammoniac +ammoniacal +ammoniacs +ammonias +ammoniate +ammoniated +ammoniates +ammoniating +ammoniation +ammoniations +ammonic +ammonification +ammonifications +ammonified +ammonifies +ammonify +ammonifying +ammonite +ammonites +ammonitic +ammonium +ammoniums +ammono +ammonoid +ammonoids +ammos +ammunition +ammunitions +amnesia +amnesiac +amnesiacs +amnesias +amnesic +amnesics +amnestic +amnestied +amnesties +amnesty +amnestying +amnia +amnic +amniocenteses +amniocentesis +amnion +amnionic +amnions +amniote +amniotes +amniotic +amobarbital +amobarbitals +amoeba +amoebae +amoeban +amoebas +amoebean +amoebiases +amoebiasis +amoebic +amoebocyte +amoebocytes +amoeboid +amok +amoks +amole +amoles among +amongst +amontillado +amontillados +amoral +amoralism +amoralisms +amoralities +amorality +amorally +amoretti +amoretto +amorettos +amorini +amorino +amorist +amoristic +amorists +amoroso +amorous +amorously +amorousness +amorousnesses +amorphous +amorphously +amorphousness +amorphousnesses +amort +amortise +amortised +amortises +amortising +amortizable +amortization +amortizations +amortize +amortized +amortizes +amortizing +amosite +amosites +amotion +amotions amount +amounted +amounting +amounts +amour +amours +amoxicillin +amoxicillins +amoxycillin +amoxycillins +amp +amperage +amperages +ampere +amperes +amperometric +ampersand +ampersands +amphetamine +amphetamines +amphibia +amphibian +amphibians +amphibious +amphibiously +amphibiousness +amphibiousnesses +amphibole +amphiboles +amphibolies +amphibolite +amphibolites +amphibologies +amphibology +amphiboly +amphibrach +amphibrachic +amphibrachs +amphictyonic +amphictyonies +amphictyony +amphidiploid +amphidiploidies +amphidiploids +amphidiploidy +amphimacer +amphimacers +amphimixes +amphimixis +amphioxi +amphioxus +amphioxuses +amphipathic +amphiphile +amphiphiles +amphiphilic +amphiploid +amphiploidies +amphiploids +amphiploidy +amphipod +amphipods +amphiprostyle +amphiprostyles +amphisbaena +amphisbaenas +amphisbaenic +amphitheater +amphitheaters +amphitheatric +amphitheatrical +amphitheatrically +amphora +amphorae +amphoral +amphoras +amphoteric +ampicillin +ampicillins ample +ampleness +amplenesses +ampler +amplest +amplexus +amplexuses +amplidyne +amplidynes +amplification +amplifications +amplified +amplifier +amplifiers +amplifies +amplify +amplifying +amplitude +amplitudes +amply +ampoule +ampoules +amps +ampul +ampule +ampules +ampulla +ampullae +ampullar +ampullary +ampuls +amputate +amputated +amputates +amputating +amputation +amputations +amputee +amputees +amreeta +amreetas +amrita +amritas +amtrac +amtrack +amtracks +amtracs +amu +amuck +amucks +amulet +amulets +amus +amusable amuse +amused +amusedly amusement +amusements +amuser +amusers +amuses +amusia +amusias +amusing +amusingly +amusingness +amusingnesses +amusive +amygdala +amygdalae +amygdale +amygdales +amygdalin +amygdalins +amygdaloid +amygdaloidal +amygdaloids +amygdule +amygdules +amyl +amylase +amylases +amylene +amylenes +amylic +amylogen +amylogens +amyloid +amyloidoses +amyloidosis +amyloidosises +amyloids +amylolytic +amylopectin +amylopectins +amyloplast +amyloplasts +amylopsin +amylopsins +amylose +amyloses +amyls +amylum +amylums +amyotonia +amyotonias an +ana +anabaena +anabaenas +anabaptism +anabaptisms +anabas +anabases +anabasis +anabatic +anableps +anablepses +anabolic +anabolism +anabolisms +anachronic +anachronism +anachronisms +anachronistic +anachronistically +anachronous +anachronously +anaclitic +anacolutha +anacoluthic +anacoluthically +anacoluthon +anacoluthons +anaconda +anacondas +anacreontic +anacreontics +anacruses +anacrusis +anadem +anadems +anadiploses +anadiplosis +anadromous +anaemia +anaemias +anaemic +anaerobe +anaerobes +anaerobic +anaerobically +anaerobioses +anaerobiosis +anaesthesia +anaesthesias +anaesthetic +anaesthetics +anageneses +anagenesis +anaglyph +anaglyphic +anaglyphs +anagnorises +anagnorisis +anagoge +anagoges +anagogic +anagogical +anagogically +anagogies +anagogy +anagram +anagrammatic +anagrammatical +anagrammatically +anagrammatization +anagrammatizations +anagrammatize +anagrammatized +anagrammatizes +anagrammatizing +anagrammed +anagramming +anagrams +anal +analcime +analcimes +analcite +analcites +analecta +analects +analemma +analemmas +analemmata +analemmatic +analeptic +analeptics +analgesia +analgesias +analgesic +analgesics +analgetic +analgetics +analgia +analgias +analities +anality +anally +analog +analogic +analogical +analogically +analogies +analogist +analogists +analogize +analogized +analogizes +analogizing +analogous +analogously +analogousness +analogousnesses +analogs +analogue +analogues +analogy +analphabet +analphabetic +analphabetics +analphabetism +analphabetisms +analphabets +analysand +analysands analyse +analysed +analyser +analysers +analyses +analysing analysis +analyst +analysts +analytic +analytical +analytically +analyticities +analyticity +analytics +analyzabilities +analyzability +analyzable +analyzation +analyzations +analyze +analyzed +analyzer +analyzers +analyzes +analyzing +anamneses +anamnesis +anamnestic +anamorphic +ananke +anankes +anapaest +anapaests +anapest +anapestic +anapestics +anapests +anaphase +anaphases +anaphasic +anaphor +anaphora +anaphoras +anaphoric +anaphorically +anaphors +anaphrodisiac +anaphrodisiacs +anaphylactic +anaphylactically +anaphylactoid +anaphylaxes +anaphylaxis +anaplasia +anaplasias +anaplasmoses +anaplasmosis +anaplastic +anarch +anarchic +anarchical +anarchically +anarchies +anarchism +anarchisms +anarchist +anarchistic +anarchists +anarchs +anarchy +anas +anasarca +anasarcas +anasarcous +anastigmat +anastigmatic +anastigmats +anastomose +anastomosed +anastomoses +anastomosing +anastomosis +anastomotic +anastrophe +anastrophes +anatase +anatases +anathema +anathemas +anathemata +anathematize +anathematized +anathematizes +anathematizing +anatomic +anatomical +anatomically +anatomies +anatomise +anatomised +anatomises +anatomising +anatomist +anatomists +anatomize +anatomized +anatomizes +anatomizing +anatomy +anatoxin +anatoxins +anatropous +anatto +anattos ancestor +ancestored +ancestoring +ancestors +ancestral +ancestrally +ancestress +ancestresses +ancestries +ancestry anchor +anchorage +anchorages +anchored +anchoress +anchoresses +anchoret +anchorets +anchoring +anchorite +anchorites +anchoritic +anchoritically +anchorless +anchorman +anchormen +anchorpeople +anchorperson +anchorpersons +anchors +anchorwoman +anchorwomen +anchoveta +anchovetas +anchovetta +anchovettas +anchovies +anchovy +anchusa +anchusas +anchusin +anchusins ancient +ancienter +ancientest +anciently +ancientness +ancientnesses +ancientries +ancientry +ancients +ancilla +ancillae +ancillaries +ancillary +ancillas +ancon +anconal +ancone +anconeal +ancones +anconoid +ancress +ancresses +ancylostomiases +ancylostomiasis and +andalusite +andalusites +andante +andantes +andantino +andantinos +andesite +andesites +andesitic +andesyte +andesytes +andiron +andirons +andouille +andouilles +andouillette +andouillettes +andradite +andradites +androcentric +androecia +androecium +androgen +androgeneses +androgenesis +androgenetic +androgenic +androgens +androgyne +androgynes +androgynies +androgynous +androgyny +android +androids +andromeda +andromedas +androsterone +androsterones +ands +ane +anear +aneared +anearing +anears +anecdota +anecdotage +anecdotages +anecdotal +anecdotalism +anecdotalisms +anecdotalist +anecdotalists +anecdotally anecdote +anecdotes +anecdotic +anecdotical +anecdotically +anecdotist +anecdotists +anechoic +anelastic +anelasticities +anelasticity +anele +aneled +aneles +aneling +anemia +anemias +anemic +anemically +anemograph +anemographs +anemometer +anemometers +anemometries +anemometry +anemone +anemones +anemophilous +anemoses +anemosis +anencephalic +anencephalies +anencephaly +anenst +anent +anergia +anergias +anergic +anergies +anergy +aneroid +aneroids +anes +anesthesia +anesthesias +anesthesiologies +anesthesiologist +anesthesiologists +anesthesiology +anesthetic +anesthetically +anesthetics +anesthetist +anesthetists +anesthetize +anesthetized +anesthetizes +anesthetizing +anestri +anestrous +anestrus +anestruses +anethol +anethole +anetholes +anethols +aneuploid +aneuploidies +aneuploids +aneuploidy +aneurin +aneurins +aneurism +aneurisms +aneurysm +aneurysmal +aneurysms +anew +anfractuosities +anfractuosity +anfractuous +anga +angakok +angakoks +angaria +angarias +angaries +angary +angas +angel +angeled +angelfish +angelfishes +angelic +angelica +angelical +angelically +angelicas +angeling +angelologies +angelologist +angelologists +angelology +angels +angelus +angeluses anger +angered +angering +angerless +angerly +angers +angina +anginal +anginas +anginose +anginous +angiocardiographic +angiocardiographies +angiocardiography +angiogeneses +angiogenesis +angiogenic +angiogram +angiograms +angiographic +angiographies +angiography +angioma +angiomas +angiomata +angiomatous +angioplasties +angioplasty +angiosperm +angiospermous +angiosperms +angiotensin +angiotensins angle +angled +anglepod +anglepods +angler +anglerfish +anglerfishes +anglers +angles +anglesite +anglesites +angleworm +angleworms +anglice +anglicise +anglicised +anglicises +anglicising +anglicism +anglicisms +anglicization +anglicizations +anglicize +anglicized +anglicizes +anglicizing +angling +anglings +anglophone +angora +angoras +angrier +angriest +angrily +angriness +angrinesses angry +angst +angstrom +angstroms +angsts +anguine +anguish +anguished +anguishes +anguishing +angular +angularities +angularity +angularly +angulate +angulated +angulates +angulating +angulation +angulations +angulose +angulous +anhedonia +anhedonias +anhedonic +anhinga +anhingas +anhydride +anhydrides +anhydrite +anhydrites +anhydrous +ani +anil +anile +anilin +anilinctus +anilinctuses +aniline +anilines +anilingus +anilinguses +anilins +anilities +anility +anils +anima +animadversion +animadversions +animadvert +animadverted +animadverting +animadverts animal +animalcula +animalcule +animalcules +animalculum +animalic +animalier +animaliers +animalism +animalisms +animalistic +animalities +animality +animalization +animalizations +animalize +animalized +animalizes +animalizing +animallike +animally +animals +animas +animate +animated +animatedly +animately +animateness +animatenesses +animater +animaters +animates +animating +animation +animations +animato +animator +animators +anime +animes +animi +animis +animism +animisms +animist +animistic +animists +animosities +animosity +animus +animuses +anion +anionic +anions +anis +anise +aniseed +aniseeds +aniseikonia +aniseikonias +aniseikonic +anises +anisette +anisettes +anisic +anisogamies +anisogamous +anisogamy +anisole +anisoles +anisometropia +anisometropias +anisometropic +anisotropic +anisotropically +anisotropies +anisotropism +anisotropisms +anisotropy +ankerite +ankerites +ankh +ankhs ankle +anklebone +anklebones +ankled +ankles +anklet +anklets +ankling +ankus +ankuses +ankush +ankushes +ankylosaur +ankylosaurs +ankylosaurus +ankylosauruses +ankylose +ankylosed +ankyloses +ankylosing +ankylosis +ankylostomiases +ankylostomiasis +ankylotic +anlace +anlaces +anlage +anlagen +anlages +anlas +anlases +anna +annal +annalist +annalistic +annalists +annals +annas +annates +annatto +annattos +anneal +annealed +annealer +annealers +annealing +anneals +annelid +annelidan +annelidans +annelids +annex +annexation +annexational +annexationist +annexationists +annexations +annexe +annexed +annexes +annexing +annihilate +annihilated +annihilates +annihilating +annihilation +annihilations +annihilator +annihilators +annihilatory +anniversaries anniversary +annotate +annotated +annotates +annotating +annotation +annotations +annotative +annotator +annotators announce +announced +announcement +announcements +announcer +announcers +announces +announcing annoy +annoyance +annoyances +annoyed +annoyer +annoyers +annoying +annoyingly +annoys annual +annualize +annualized +annualizes +annualizing +annually +annuals +annuitant +annuitants +annuities +annuity +annul +annular +annulate +annulation +annulations +annulet +annulets +annuli +annulled +annulling +annulment +annulments +annulose +annuls +annulus +annuluses +annunciate +annunciated +annunciates +annunciating +annunciation +annunciations +annunciator +annunciators +annunciatory +anoa +anoas +anodal +anodally +anode +anodes +anodic +anodically +anodization +anodizations +anodize +anodized +anodizes +anodizing +anodyne +anodynes +anodynic +anoint +anointed +anointer +anointers +anointing +anointment +anointments +anoints +anole +anoles +anolyte +anolytes +anomalies +anomalous +anomalously +anomalousness +anomalousnesses +anomaly +anomic +anomie +anomies +anomy +anon +anonym +anonymities +anonymity +anonymous +anonymously +anonymousness +anonymousnesses +anonyms +anoopsia +anoopsias +anopheles +anopheline +anophelines +anopia +anopias +anopsia +anopsias +anorak +anoraks +anorectic +anorectics +anoretic +anoretics +anorexia +anorexias +anorexic +anorexics +anorexies +anorexigenic +anorexy +anorthic +anorthite +anorthites +anorthitic +anorthosite +anorthosites +anorthositic +anosmia +anosmias +anosmic another +anovular +anovulatory +anoxemia +anoxemias +anoxemic +anoxia +anoxias +anoxic +ansa +ansae +ansate +ansated +anserine +anserines +anserous answer +answerable +answered +answerer +answerers +answering +answers ant +anta +antacid +antacids +antae +antagonism +antagonisms +antagonist +antagonistic +antagonistically +antagonists +antagonize +antagonized +antagonizes +antagonizing +antalgic +antalgics antarctic +antas +antbear +antbears +ante +anteater +anteaters +antebellum +antecede +anteceded +antecedence +antecedences +antecedent +antecedently +antecedents +antecedes +anteceding +antecessor +antecessors +antechamber +antechambers +antechapel +antechapels +antechoir +antechoirs +anted +antedate +antedated +antedates +antedating +antediluvian +antediluvians +anteed +antefix +antefixa +antefixae +antefixes +anteing +antelope +antelopes +antemortem +antenatal +antenatally +antenna +antennae +antennal +antennas +antennular +antennule +antennules +antenuptial +antepast +antepasts +antependia +antependium +antependiums +antepenult +antepenultima +antepenultimas +antepenultimate +antepenultimates +antepenults +anterior +anteriorly +anteroom +anterooms +antes +antetype +antetypes +antevert +anteverted +anteverting +anteverts +anthelia +anthelices +anthelion +anthelions +anthelix +anthelixes +anthelmintic +anthelmintics +anthem +anthemed +anthemia +antheming +anthemion +anthems +anther +antheral +antherid +antheridia +antheridial +antheridium +antherids +anthers +antheses +anthesis +anthill +anthills +anthocyan +anthocyanin +anthocyanins +anthocyans +anthodia +anthodium +anthoid +anthological +anthologies +anthologist +anthologists +anthologize +anthologized +anthologizer +anthologizers +anthologizes +anthologizing +anthology +anthophilous +anthophyllite +anthophyllites +anthozoan +anthozoans +anthracene +anthracenes +anthraces +anthracite +anthracites +anthracitic +anthracnose +anthracnoses +anthranilate +anthranilates +anthraquinone +anthraquinones +anthrax +anthropic +anthropical +anthropocentric +anthropocentrically +anthropocentricities +anthropocentricity +anthropocentrism +anthropocentrisms +anthropogenic +anthropoid +anthropoids +anthropological +anthropologically +anthropologies +anthropologist +anthropologists +anthropology +anthropometric +anthropometries +anthropometry +anthropomorph +anthropomorphic +anthropomorphically +anthropomorphism +anthropomorphisms +anthropomorphist +anthropomorphists +anthropomorphization +anthropomorphizations +anthropomorphize +anthropomorphized +anthropomorphizes +anthropomorphizing +anthropomorphs +anthropopathism +anthropopathisms +anthropophagi +anthropophagies +anthropophagous +anthropophagus +anthropophagy +anthroposophies +anthroposophy +anthurium +anthuriums +anti +antiabortion +antiabortionist +antiabortionists +antiacademic +antiacademics +antiadministration +antiaggression +antiaging +antiair +antiaircraft +antiaircrafts +antialcohol +antialcoholism +antialcoholisms +antialien +antiallergenic +antiallergenics +antianemia +antianxiety +antiapartheid +antiapartheids +antiaphrodisiac +antiaphrodisiacs +antiar +antiarin +antiarins +antiaristocratic +antiarrhythmic +antiarrhythmics +antiars +antiarthritic +antiarthritics +antiarthritis +antiassimilation +antiassimilations +antiasthma +antiatom +antiatoms +antiauthoritarian +antiauthoritarianism +antiauthoritarianisms +antiauthority +antiauxin +antiauxins +antibacklash +antibacterial +antibacterials +antibaryon +antibaryons +antibias +antibillboard +antibioses +antibiosis +antibiotic +antibiotically +antibiotics +antiblack +antiblackism +antiblackisms +antibodies +antibody +antiboss +antibourgeois +antiboycott +antiboycotts +antibug +antibureaucratic +antiburglar +antiburglary +antibusiness +antibusing +antic +anticaking +antically +anticancer +anticapitalism +anticapitalisms +anticapitalist +anticapitalists +anticar +anticarcinogen +anticarcinogenic +anticarcinogens +anticaries +anticatalyst +anticatalysts +anticathode +anticathodes +anticellulite +anticensorship +anticholesterol +anticholinergic +anticholinergics +anticholinesterase +anticholinesterases +antichurch +anticigarette +anticipant +anticipants +anticipatable +anticipate +anticipated +anticipates +anticipating +anticipation +anticipations +anticipator +anticipators +anticipatory +anticity +antick +anticked +anticking +anticks +anticlassical +anticlerical +anticlericalism +anticlericalisms +anticlericalist +anticlericalists +anticlericals +anticlimactic +anticlimactical +anticlimactically +anticlimax +anticlimaxes +anticlinal +anticline +anticlines +anticling +anticlockwise +anticlotting +anticly +anticoagulant +anticoagulants +anticodon +anticodons +anticold +anticollision +anticolonial +anticolonialism +anticolonialisms +anticolonialist +anticolonialists +anticolonials +anticommercial +anticommercialism +anticommercialisms +anticommunism +anticommunisms +anticommunist +anticommunists +anticompetitive +anticonglomerate +anticonservation +anticonservationist +anticonservationists +anticonservations +anticonsumer +anticonsumers +anticonventional +anticonvulsant +anticonvulsants +anticonvulsive +anticonvulsives +anticorporate +anticorrosion +anticorrosive +anticorrosives +anticorruption +anticorruptions +anticounterfeiting +anticrack +anticreative +anticrime +anticruelty +antics +anticult +anticultural +anticyclone +anticyclones +anticyclonic +antidandruff +antidefamation +antidemocratic +antidepressant +antidepressants +antidepression +antidepressions +antiderivative +antiderivatives +antidesegregation +antidesertification +antidesiccant +antidesiccants +antidevelopment +antidiabetic +antidiarrheal +antidilution +antidiscrimination +antidogmatic +antidora +antidotal +antidotally +antidote +antidoted +antidotes +antidoting +antidraft +antidromic +antidromically +antidrug +antidumping +antieconomic +antieducational +antiegalitarian +antielectron +antielectrons +antielite +antielites +antielitism +antielitisms +antielitist +antielitists +antiemetic +antiemetics +antientropic +antiepilepsy +antiepileptic +antiepileptics +antierotic +antiestablishment +antiestrogen +antiestrogens +antievolution +antievolutionary +antievolutionism +antievolutionisms +antievolutionist +antievolutionists +antifamily +antifascism +antifascisms +antifascist +antifascists +antifashion +antifashionable +antifashions +antifat +antifatigue +antifederalist +antifederalists +antifemale +antifeminine +antifeminism +antifeminisms +antifeminist +antifeminists +antiferromagnet +antiferromagnetic +antiferromagnetically +antiferromagnetism +antiferromagnetisms +antiferromagnets +antifertility +antifilibuster +antifilibusters +antiflu +antifluoridationist +antifluoridationists +antifoam +antifoaming +antifogging +antiforeclosure +antiforeign +antiforeigner +antiformalist +antiformalists +antifouling +antifraud +antifreeze +antifreezes +antifriction +antifrictions +antifungal +antifungals +antifur +antigambling +antigay +antigen +antigene +antigenes +antigenic +antigenically +antigenicities +antigenicity +antigens +antiglare +antiglobulin +antiglobulins +antigovernment +antigravities +antigravity +antigrowth +antiguerrilla +antiguerrillas +antigun +antihero +antiheroes +antiheroic +antiheroine +antiheroines +antiherpes +antihierarchical +antihijack +antihistamine +antihistamines +antihistaminic +antihistaminics +antihistorical +antihomosexual +antihuman +antihumanism +antihumanisms +antihumanistic +antihumanitarian +antihumanitarians +antihunter +antihunting +antihuntings +antihypertensive +antihypertensives +antihysteric +antihysterics +antijam +antijamming +antikickback +antiking +antikings +antiknock +antiknocks +antilabor +antileak +antileft +antileprosy +antilepton +antileptons +antileukemic +antiliberal +antiliberalism +antiliberalisms +antiliberals +antilibertarian +antilibertarians +antilife +antiliterate +antiliterates +antilitter +antilittering +antilock +antilog +antilogarithm +antilogarithmic +antilogarithms +antilogical +antilogies +antilogs +antilogy +antilynching +antimacassar +antimacassars +antimacho +antimagnetic +antimalaria +antimalarial +antimalarials +antimale +antiman +antimanagement +antimanagements +antimarijuana +antimarket +antimask +antimasks +antimaterialism +antimaterialisms +antimaterialist +antimaterialists +antimatter +antimatters +antimechanist +antimechanists +antimere +antimeres +antimerger +antimetabolic +antimetabolics +antimetabolite +antimetabolites +antimetaphysical +antimicrobial +antimicrobials +antimilitarism +antimilitarisms +antimilitarist +antimilitarists +antimilitary +antimiscegenation +antimissile +antimissiles +antimitotic +antimitotics +antimodern +antimodernist +antimodernists +antimoderns +antimonarchical +antimonarchist +antimonarchists +antimonial +antimonials +antimonide +antimonides +antimonies +antimonopolist +antimonopolists +antimonopoly +antimony +antimosquito +antimusical +antimycin +antimycins +antinarrative +antinational +antinationalist +antinationalists +antinatural +antinature +antinatures +antinausea +antineoplastic +antinepotism +antinepotisms +antineutrino +antineutrinos +antineutron +antineutrons +anting +antings +antinodal +antinode +antinodes +antinoise +antinomian +antinomianism +antinomianisms +antinomians +antinomic +antinomies +antinomy +antinovel +antinovelist +antinovelists +antinovels +antinuclear +antinucleon +antinucleons +antinuke +antiobesities +antiobesity +antiobscenities +antiobscenity +antiorganization +antiorganizations +antioxidant +antioxidants +antiozonant +antiozonants +antipapal +antiparallel +antiparasitic +antiparasitics +antiparticle +antiparticles +antiparty +antipasti +antipasto +antipastos +antipathetic +antipathetically +antipathies +antipathy +antiperiodic +antipersonnel +antiperspirant +antiperspirants +antipesticide +antiphlogistic +antiphon +antiphonal +antiphonally +antiphonals +antiphonaries +antiphonary +antiphonies +antiphons +antiphony +antiphrases +antiphrasis +antipill +antipiracies +antipiracy +antiplague +antiplagues +antiplaque +antipleasure +antipleasures +antipoaching +antipodal +antipodals +antipode +antipodean +antipodeans +antipodes +antipoetic +antipole +antipoles +antipolice +antipolitical +antipolitics +antipollution +antipollutions +antipope +antipopes +antipopular +antiporn +antipornographic +antipornography +antipot +antipoverty +antipredator +antipredators +antipress +antiprofiteering +antiprogressive +antiprostitution +antiproton +antiprotons +antipruritic +antipruritics +antipsychotic +antipsychotics +antipyic +antipyics +antipyreses +antipyresis +antipyretic +antipyretics +antipyrine +antipyrines +antiquarian +antiquarianism +antiquarianisms +antiquarians +antiquaries +antiquark +antiquarks +antiquary +antiquate +antiquated +antiquates +antiquating +antiquation +antiquations antique +antiqued +antiquer +antiquers +antiques +antiquing +antiquities +antiquity +antirabies +antirachitic +antiracism +antiracisms +antiracist +antiracists +antiracketeering +antiradar +antiradical +antiradicalism +antiradicalisms +antirape +antirational +antirationalism +antirationalisms +antirationalist +antirationalists +antirationalities +antirationality +antirealism +antirealisms +antirealist +antirealists +antirecession +antirecessionary +antirecessions +antired +antireductionism +antireductionisms +antireductionist +antireductionists +antireflection +antireflective +antireform +antiregulatory +antirejection +antireligion +antireligious +antirevolutionaries +antirevolutionary +antirheumatic +antirheumatics +antiriot +antiritualism +antiritualisms +antirock +antiroll +antiromantic +antiromanticism +antiromanticisms +antiromantics +antiroyalist +antiroyalists +antirrhinum +antirrhinums +antirust +antirusts +antis +antisag +antisatellite +antischizophrenia +antischizophrenic +antiscience +antisciences +antiscientific +antiscorbutic +antiscorbutics +antisecrecy +antisegregation +antiseizure +antisense +antisentimental +antiseparatist +antiseparatists +antisepses +antisepsis +antiseptic +antiseptically +antiseptics +antisera +antiserum +antiserums +antisex +antisexist +antisexists +antisexual +antisexualities +antisexuality +antishark +antiship +antishock +antishoplifting +antiskid +antislaveries +antislavery +antisleep +antislip +antismog +antismoke +antismoker +antismokers +antismoking +antismuggling +antismut +antisnob +antisocial +antisocialist +antisocialists +antisocially +antisolar +antispasmodic +antispasmodics +antispeculation +antispeculative +antispending +antistat +antistate +antistatic +antistick +antistories +antistory +antistress +antistrike +antistrophe +antistrophes +antistrophic +antistrophically +antistudent +antisubmarine +antisubsidy +antisubversion +antisubversions +antisubversive +antisubversives +antisuicide +antisymmetric +antisyphilitic +antisyphilitics +antitakeover +antitank +antitarnish +antitax +antitechnological +antitechnologies +antitechnology +antiterrorism +antiterrorisms +antiterrorist +antiterrorists +antitheft +antitheoretical +antitheses +antithesis +antithetic +antithetical +antithetically +antithrombin +antithrombins +antithyroid +antitobacco +antitotalitarian +antitoxic +antitoxin +antitoxins +antitrades +antitraditional +antitrust +antitruster +antitrusters +antitubercular +antituberculosis +antituberculous +antitumor +antitumoral +antitussive +antitussives +antitype +antitypes +antityphoid +antiulcer +antiunemployment +antiunion +antiuniversities +antiuniversity +antiurban +antivenin +antivenins +antiviolence +antiviral +antivirus +antivitamin +antivitamins +antivivisection +antivivisectionist +antivivisectionists +antiwar +antiwear +antiweed +antiwelfare +antiwhaling +antiwhite +antiwoman +antiwrinkle +antler +antlered +antlers +antlike +antlion +antlions +antonomasia +antonomasias +antonym +antonymic +antonymies +antonymous +antonyms +antonymy +antra +antral +antre +antres +antrorse +antrum +antrums +ants +antsier +antsiest +antsy +anural +anuran +anurans +anureses +anuresis +anuretic +anuria +anurias +anuric +anurous +anus +anuses +anvil +anviled +anviling +anvilled +anvilling +anvils +anviltop +anviltops +anxieties anxiety +anxiolytic +anxiolytics anxious +anxiously +anxiousness +anxiousnesses any +anybodies anybody anyhow +anymore anyone +anyplace anything +anythings +anytime anyway +anyways anywhere +anywheres +anywise +aorist +aoristic +aoristically +aorists +aorta +aortae +aortal +aortas +aortic +aortographic +aortographies +aortography +aoudad +aoudads +apace +apache +apaches +apagoge +apagoges +apagogic +apanage +apanages +aparejo +aparejos apart +apartheid +apartheids apartment +apartmental +apartments +apartness +apartnesses +apatetic +apathetic +apathetically +apathies +apathy +apatite +apatites +apatosaurus +apatosauruses +ape +apeak +aped +apeek +apelike +aper +apercu +apercus +aperient +aperients +aperies +aperiodic +aperiodically +aperiodicities +aperiodicity +aperitif +aperitifs +apers +aperture +apertures +apery +apes +apetalies +apetalous +apetaly +apex +apexes +aphaereses +aphaeresis +aphaeretic +aphagia +aphagias +aphanite +aphanites +aphanitic +aphasia +aphasiac +aphasiacs +aphasias +aphasic +aphasics +aphelia +aphelian +aphelion +aphelions +aphereses +apheresis +apheses +aphesis +aphetic +aphetically +aphid +aphides +aphidian +aphidians +aphids +aphis +apholate +apholates +aphonia +aphonias +aphonic +aphonics +aphorise +aphorised +aphorises +aphorising +aphorism +aphorisms +aphorist +aphoristic +aphoristically +aphorists +aphorize +aphorized +aphorizes +aphorizing +aphotic +aphrodisiac +aphrodisiacal +aphrodisiacs +aphtha +aphthae +aphthous +aphyllies +aphylly +apian +apiarian +apiarians +apiaries +apiarist +apiarists +apiary +apical +apically +apicals +apices +apiculate +apiculi +apicultural +apiculture +apicultures +apiculturist +apiculturists +apiculus +apiece +apimania +apimanias +aping +apiologies +apiology +apish +apishly +apishness +apishnesses +aplanatic +aplasia +aplasias +aplastic +aplenty +aplite +aplites +aplitic +aplomb +aplombs +apnea +apneal +apneas +apneic +apnoea +apnoeal +apnoeas +apnoeic +apoapsides +apoapsis +apocalypse +apocalypses +apocalyptic +apocalyptical +apocalyptically +apocalypticism +apocalypticisms +apocalyptism +apocalyptisms +apocalyptist +apocalyptists +apocarp +apocarpies +apocarps +apocarpy +apochromatic +apocope +apocopes +apocopic +apocrine +apocrypha +apocryphal +apocryphally +apocryphalness +apocryphalnesses +apod +apodal +apodeictic +apodictic +apodictically +apodoses +apodosis +apodous +apods +apoenzyme +apoenzymes +apogamic +apogamies +apogamous +apogamy +apogeal +apogean +apogee +apogees +apogeic +apolipoprotein +apolipoproteins +apolitical +apolitically +apollo +apollos +apolog +apologal +apologetic +apologetically +apologetics +apologia +apologiae +apologias +apologies +apologise +apologised +apologises +apologising +apologist +apologists apologize +apologized +apologizer +apologizers +apologizes +apologizing +apologs +apologue +apologues apology +apolune +apolunes +apomict +apomictic +apomictically +apomicts +apomixes +apomixis +apomorphine +apomorphines +aponeuroses +aponeurosis +aponeurotic +apophonies +apophony +apophthegm +apophthegms +apophyge +apophyges +apophyllite +apophyllites +apophyseal +apophyses +apophysis +apoplectic +apoplectically +apoplexies +apoplexy +aport +aposematic +aposematically +aposiopeses +aposiopesis +aposiopetic +apospories +aposporous +apospory +apostacies +apostacy +apostasies +apostasy +apostate +apostates +apostatise +apostatised +apostatises +apostatising +apostatize +apostatized +apostatizes +apostatizing +apostil +apostils +apostle +apostles +apostleship +apostleships +apostolate +apostolates +apostolic +apostolicities +apostolicity +apostrophe +apostrophes +apostrophic +apostrophise +apostrophised +apostrophises +apostrophising +apostrophize +apostrophized +apostrophizes +apostrophizing +apothecaries +apothecary +apothece +apotheces +apothecia +apothecial +apothecium +apothegm +apothegmatic +apothegms +apothem +apothems +apotheoses +apotheosis +apotheosize +apotheosized +apotheosizes +apotheosizing +apotropaic +apotropaically +appal +appall +appalled +appalling +appallingly +appalls +appals +appanage +appanages +apparat +apparatchik +apparatchiki +apparatchiks +apparats +apparatus +apparatuses +apparel +appareled +appareling +apparelled +apparelling +apparels apparent +apparently +apparentness +apparentnesses +apparition +apparitional +apparitions +apparitor +apparitors appeal +appealabilities +appealability +appealable +appealed +appealer +appealers +appealing +appealingly +appeals appear appearance +appearances +appeared +appearing +appears +appeasable +appease +appeased +appeasement +appeasements +appeaser +appeasers +appeases +appeasing +appel +appellant +appellants +appellate +appellation +appellations +appellative +appellatively +appellatives +appellee +appellees +appellor +appellors +appels +append +appendage +appendages +appendant +appendants +appendectomies +appendectomy +appended +appendicectomies +appendicectomy +appendices +appendicites +appendicitides +appendicitis +appendicitises +appendicular +appending appendix +appendixes +appends +apperceive +apperceived +apperceives +apperceiving +apperception +apperceptions +apperceptive +appertain +appertained +appertaining +appertains +appestat +appestats +appetence +appetences +appetencies +appetency +appetent +appetiser +appetisers +appetising appetite +appetites +appetitive +appetizer +appetizers +appetizing +appetizingly applaud +applaudable +applaudably +applauded +applauder +applauders +applauding +applauds +applause +applauses apple +applecart +applecarts +applejack +applejacks +apples +applesauce +applesauces +appliance +appliances +applicabilities +applicability +applicable applicant +applicants application +applications +applicative +applicatively +applicator +applicators +applicatory +applied +applier +appliers +applies +applique +appliqued +appliqueing +appliques apply +applying +appoggiatura +appoggiaturas appoint +appointed +appointee +appointees +appointing +appointive appointment +appointments +appoints +apportion +apportionable +apportioned +apportioning +apportionment +apportionments +apportions +appose +apposed +apposer +apposers +apposes +apposing +apposite +appositely +appositeness +appositenesses +apposition +appositional +appositions +appositive +appositively +appositives +appraisal +appraisals +appraise +appraised +appraisee +appraisees +appraisement +appraisements +appraiser +appraisers +appraises +appraising +appraisingly +appraisive +appreciable +appreciably appreciate +appreciated +appreciates +appreciating appreciation +appreciations +appreciative +appreciatively +appreciativeness +appreciativenesses +appreciator +appreciators +appreciatory +apprehend +apprehended +apprehending +apprehends +apprehensible +apprehensibly +apprehension +apprehensions +apprehensive +apprehensively +apprehensiveness +apprehensivenesses +apprentice +apprenticed +apprentices +apprenticeship +apprenticeships +apprenticing +appressed +appressoria +appressorium +apprise +apprised +appriser +apprisers +apprises +apprising +apprize +apprized +apprizer +apprizers +apprizes +apprizing +approach +approachabilities +approachability +approachable +approached +approaches +approaching +approbate +approbated +approbates +approbating +approbation +approbations +approbatory +appropriable appropriate +appropriated +appropriately +appropriateness +appropriatenesses +appropriates +appropriating +appropriation +appropriations +appropriative +appropriator +appropriators +approvable +approvably approval +approvals approve +approved +approver +approvers +approves +approving +approvingly +approximate +approximated approximately +approximates +approximating +approximation +approximations +approximative +appulse +appulses +appurtenance +appurtenances +appurtenant +appurtenants +apractic +apraxia +apraxias +apraxic +apres +apricot +apricots +apriorities +apriority apron +aproned +aproning +aprons +apropos +aprotic +apse +apses +apsidal +apsides +apsis +apt +apter +apteral +apteria +apterium +apterous +apteryx +apteryxes +aptest +aptitude +aptitudes +aptitudinal +aptitudinally +aptly +aptness +aptnesses +apyrase +apyrases +apyretic +aqua +aquacade +aquacades +aquacultural +aquaculture +aquacultures +aquaculturist +aquaculturists +aquae +aquamarine +aquamarines +aquanaut +aquanauts +aquaplane +aquaplaned +aquaplaner +aquaplaners +aquaplanes +aquaplaning +aquarelle +aquarelles +aquarellist +aquarellists +aquaria +aquarial +aquarian +aquarians +aquarist +aquarists +aquarium +aquariums +aquas +aquatic +aquatically +aquatics +aquatint +aquatinted +aquatinter +aquatinters +aquatinting +aquatintist +aquatintists +aquatints +aquatone +aquatones +aquavit +aquavits +aqueduct +aqueducts +aqueous +aquiculture +aquicultures +aquifer +aquiferous +aquifers +aquilegia +aquilegias +aquiline +aquilinities +aquilinity +aquiver +ar +arabesk +arabesks +arabesque +arabesques +arabic +arabica +arabicas +arabicization +arabicizations +arabicize +arabicized +arabicizes +arabicizing +arabilities +arability +arabinose +arabinoses +arabinoside +arabinosides +arabize +arabized +arabizes +arabizing +arable +arables +araceous +arachnid +arachnids +arachnoid +arachnoids +aragonite +aragonites +aragonitic +arak +araks +aramid +aramids +araneid +araneids +arapaima +arapaimas +araroba +ararobas +araucaria +araucarian +araucarias +arb +arbalest +arbalests +arbalist +arbalists +arbelest +arbelests +arbiter +arbiters +arbitrable +arbitrage +arbitraged +arbitrager +arbitragers +arbitrages +arbitrageur +arbitrageurs +arbitraging +arbitral +arbitrament +arbitraments +arbitrarily +arbitrariness +arbitrarinesses arbitrary +arbitrate +arbitrated +arbitrates +arbitrating +arbitration +arbitrational +arbitrations +arbitrative +arbitrator +arbitrators +arbor +arboreal +arboreally +arbored +arboreous +arbores +arborescence +arborescences +arborescent +arboreta +arboretum +arboretums +arboricultural +arboriculture +arboricultures +arborist +arborists +arborization +arborizations +arborize +arborized +arborizes +arborizing +arborous +arbors +arborvitae +arborvitaes +arbour +arboured +arbours +arbovirus +arboviruses +arbs +arbuscle +arbuscles +arbute +arbutean +arbutes +arbutus +arbutuses +arc +arcade +arcaded +arcades +arcadia +arcadian +arcadians +arcadias +arcading +arcadings +arcana +arcane +arcanum +arcanums +arcature +arcatures +arccosine +arccosines +arced arch +archaebacteria +archaebacterium +archaeoastronomies +archaeoastronomy +archaeological +archaeologically +archaeologies +archaeologist +archaeologists +archaeology +archaeopteryx +archaeopteryxes +archaic +archaically +archaise +archaised +archaises +archaising +archaism +archaisms +archaist +archaistic +archaists +archaize +archaized +archaizes +archaizing +archangel +archangelic +archangels +archbishop +archbishopric +archbishoprics +archbishops +archconservative +archconservatives +archdeacon +archdeaconries +archdeaconry +archdeacons +archdiocesan +archdiocese +archdioceses +archducal +archduchess +archduchesses +archduchies +archduchy +archduke +archdukedom +archdukedoms +archdukes +arched +archegonia +archegonial +archegoniate +archegoniates +archegonium +archenemies +archenemy +archenteron +archenterons +archeological +archeologically +archeologies +archeologist +archeologists +archeology +archer +archerfish +archerfishes +archeries +archers +archery +arches +archesporia +archesporial +archesporium +archetypal +archetypally +archetype +archetypes +archetypical +archfiend +archfiends +archidiaconal +archiepiscopal +archiepiscopally +archiepiscopate +archiepiscopates +archil +archils +archimandrite +archimandrites +archine +archines +arching +archings +archipelagic +archipelago +archipelagoes +archipelagos +architect +architectonic +architectonically +architectonics +architects +architectural +architecturally architecture +architectures +architrave +architraves +archival +archive +archived +archives +archiving +archivist +archivists +archivolt +archivolts +archly +archness +archnesses +archon +archons +archosaur +archosaurian +archosaurs +archpriest +archpriests +archway +archways +arciform +arcing +arcked +arcking +arco +arcs +arcsine +arcsines +arctangent +arctangents arctic +arctically +arctics +arcuate +arcuated +arcuately +arcus +arcuses +ardeb +ardebs +ardencies +ardency +ardent +ardently +ardor +ardors +ardour +ardours +arduous +arduously +arduousness +arduousnesses are area +areae +areal +areally +areas +areaway +areaways +areca +arecas +arecoline +arecolines +areic +arena +arenaceous +arenas +arenicolous +arenite +arenites +arenose +arenous +areocentric +areola +areolae +areolar +areolas +areolate +areole +areoles +areologies +areology +ares +arete +aretes +arethusa +arethusas +arf +arfs +argal +argala +argalas +argali +argalis +argals +argent +argental +argentic +argentiferous +argentine +argentines +argentite +argentites +argents +argentum +argentums +argil +argillaceous +argillite +argillites +argils +arginase +arginases +arginine +arginines +argle +argled +argles +argling +argol +argols +argon +argonaut +argonauts +argons +argosies +argosy +argot +argotic +argots +arguable +arguably argue +argued +arguer +arguers +argues +argufied +argufier +argufiers +argufies +argufy +argufying +arguing argument +argumenta +argumentation +argumentations +argumentative +argumentatively +argumentive +arguments +argumentum +argus +arguses +argyle +argyles +argyll +argylls +arhat +arhats +arhatship +arhatships +aria +arias +ariboflavinoses +ariboflavinosis +ariboflavinosises +arid +arider +aridest +aridities +aridity +aridly +aridness +aridnesses +ariel +ariels +arietta +ariettas +ariette +ariettes +aright +aril +ariled +arillate +arillode +arillodes +arilloid +arils +ariose +ariosi +arioso +ariosos arise +arisen +arises +arising +arista +aristae +aristas +aristate +aristo +aristocracies +aristocracy +aristocrat +aristocratic +aristocratically +aristocrats +aristos arithmetic +arithmetical +arithmetically +arithmetician +arithmeticians +arithmetics +ark +arkose +arkoses +arkosic +arks +arles arm +armada +armadas +armadillo +armadillos +armagnac +armagnacs +armament +armamentaria +armamentarium +armaments +armature +armatured +armatures +armaturing +armband +armbands armchair +armchairs +armed +armer +armers +armet +armets +armful +armfuls +armhole +armholes +armies +armiger +armigeral +armigero +armigeros +armigerous +armigers +armilla +armillae +armillas +arming +armings +armistice +armistices +armless +armlet +armlets +armlike +armload +armloads +armlock +armlocks +armoire +armoires +armonica +armonicas +armor +armored +armorer +armorers +armorial +armorially +armorials +armories +armoring +armorless +armors +armory +armour +armoured +armourer +armourers +armouries +armouring +armours +armoury +armpit +armpits +armrest +armrests +arms +armsful +armure +armures army +armyworm +armyworms +arnatto +arnattos +arnica +arnicas +arnotto +arnottos +aroid +aroids +aroint +arointed +arointing +aroints +aroma +aromas +aromatherapies +aromatherapist +aromatherapists +aromatherapy +aromatic +aromatically +aromaticities +aromaticity +aromatics +aromatization +aromatizations +aromatize +aromatized +aromatizes +aromatizing +arose around +arousal +arousals +arouse +aroused +arouser +arousers +arouses +arousing +aroynt +aroynted +aroynting +aroynts +arpeggiate +arpeggiated +arpeggiates +arpeggiating +arpeggio +arpeggios +arpen +arpens +arpent +arpents +arquebus +arquebuses +arrack +arracks +arraign +arraigned +arraigning +arraignment +arraignments +arraigns arrange +arranged arrangement +arrangements +arranger +arrangers +arranges +arranging +arrant +arrantly +arras +arrased +array +arrayal +arrayals +arrayed +arrayer +arrayers +arraying +arrays +arrear +arrearage +arrearages +arrears arrest +arrestant +arrestants +arrested +arrestee +arrestees +arrester +arresters +arresting +arrestingly +arrestment +arrestments +arrestor +arrestors +arrests +arrhizal +arrhythmia +arrhythmias +arrhythmic +arris +arrises arrival +arrivals arrive +arrived +arriver +arrivers +arrives +arriving +arriviste +arrivistes +arroba +arrobas +arrogance +arrogances +arrogant +arrogantly +arrogate +arrogated +arrogates +arrogating +arrogation +arrogations +arrondissement +arrondissements arrow +arrowed +arrowhead +arrowheads +arrowing +arrowroot +arrowroots +arrows +arrowwood +arrowwoods +arrowworm +arrowworms +arrowy +arroyo +arroyos +ars +arse +arsenal +arsenals +arsenate +arsenates +arsenic +arsenical +arsenicals +arsenics +arsenide +arsenides +arsenious +arsenite +arsenites +arseno +arsenopyrite +arsenopyrites +arsenous +arses +arshin +arshins +arsine +arsines +arsino +arsis +arson +arsonist +arsonists +arsonous +arsons +arsphenamine +arsphenamines art +artal +artefact +artefacts +artel +artels +artemisia +artemisias +arterial +arterially +arterials +arteries +arteriogram +arteriograms +arteriographic +arteriographies +arteriography +arteriolar +arteriole +arterioles +arterioscleroses +arteriosclerosis +arteriosclerotic +arteriosclerotics +arteriovenous +arteritides +arteritis +artery +artful +artfully +artfulness +artfulnesses +arthralgia +arthralgias +arthralgic +arthritic +arthritically +arthritics +arthritides +arthritis +arthrodeses +arthrodesis +arthropathies +arthropathy +arthropod +arthropodan +arthropods +arthroscope +arthroscopes +arthroscopic +arthroscopies +arthroscopy +arthroses +arthrosis +arthrospore +arthrospores +artichoke +artichokes article +articled +articles +articling +articulable +articulacies +articulacy +articular +articulate +articulated +articulately +articulateness +articulatenesses +articulates +articulating +articulation +articulations +articulative +articulator +articulators +articulatory +artier +artiest +artifact +artifacts +artifactual +artifice +artificer +artificers +artifices artificial +artificialities +artificiality +artificially +artificialness +artificialnesses +artilleries +artillerist +artillerists +artillery +artilleryman +artillerymen +artily +artiness +artinesses +artiodactyl +artiodactyls +artisan +artisanal +artisans +artisanship +artisanships artist +artiste +artistes +artistic +artistically +artistries +artistry +artists +artless +artlessly +artlessness +artlessnesses +arts +artsier +artsiest +artsy +artwork +artworks +arty +arugola +arugolas +arugula +arugulas +arum +arums +aruspex +aruspices +arval +arvo +arvos +aryl +aryls +arytenoid +arytenoids +arythmia +arythmias +arythmic as +asafetida +asafetidas +asafoetida +asafoetidas +asana +asanas +asarum +asarums +asbestic +asbestos +asbestoses +asbestosis +asbestus +asbestuses +ascariases +ascariasis +ascarid +ascarides +ascarids +ascaris +ascend +ascendable +ascendance +ascendances +ascendancies +ascendancy +ascendant +ascendantly +ascendants +ascended +ascendence +ascendences +ascendencies +ascendency +ascendent +ascendents +ascender +ascenders +ascendible +ascending +ascends +ascension +ascensional +ascensions +ascensive +ascent +ascents +ascertain +ascertainable +ascertained +ascertaining +ascertainment +ascertainments +ascertains +asceses +ascesis +ascetic +ascetical +ascetically +asceticism +asceticisms +ascetics +asci +ascidia +ascidian +ascidians +ascidium +ascites +ascitic +asclepiad +asclepiads +ascocarp +ascocarpic +ascocarps +ascogonia +ascogonium +ascomycete +ascomycetes +ascomycetous +ascorbate +ascorbates +ascorbic +ascospore +ascospores +ascosporic +ascot +ascots +ascribable +ascribe +ascribed +ascribes +ascribing +ascription +ascriptions +ascriptive +ascus +asdic +asdics +asea +asepses +asepsis +aseptic +aseptically +asexual +asexualities +asexuality +asexually ash ashamed -asia -asian +ashamedly +ashcan +ashcans +ashed +ashen +ashes +ashfall +ashfalls +ashier +ashiest +ashiness +ashinesses +ashing +ashlar +ashlared +ashlaring +ashlars +ashler +ashlered +ashlering +ashlers +ashless +ashman +ashmen +ashore +ashplant +ashplants +ashram +ashrams +ashtray +ashtrays +ashy aside +asides +asinine +asininely +asininities +asininity ask +askance +askant +asked +asker +askers +askeses +askesis +askew +askewness +askewnesses +asking +askings +askoi +askos +asks +aslant asleep +aslope +asocial +asp +asparagine +asparagines +asparagus +asparkle +aspartame +aspartames +aspartate +aspartates aspect +aspects +aspectual +aspen +aspens +asper +asperate +asperated +asperates +asperating +asperges +aspergilla +aspergilli +aspergilloses +aspergillosis +aspergillum +aspergillums +aspergillus +asperities +asperity +aspers +asperse +aspersed +asperser +aspersers +asperses +aspersing +aspersion +aspersions +aspersor +aspersors +asphalt +asphalted +asphaltic +asphalting +asphaltite +asphaltites +asphalts +asphaltum +asphaltums +aspheric +aspherical +asphodel +asphodels +asphyxia +asphyxias +asphyxiate +asphyxiated +asphyxiates +asphyxiating +asphyxiation +asphyxiations +asphyxies +asphyxy +aspic +aspics +aspidistra +aspidistras +aspirant +aspirants +aspirata +aspiratae +aspirate +aspirated +aspirates +aspirating +aspiration +aspirational +aspirations +aspirator +aspirators +aspire +aspired +aspirer +aspirers +aspires +aspirin +aspiring +aspirins +aspis +aspises +aspish +asps +asquint +asrama +asramas +ass +assagai +assagaied +assagaiing +assagais +assai +assail +assailable +assailant +assailants +assailed +assailer +assailers +assailing +assails +assais +assassin +assassinate +assassinated +assassinates +assassinating +assassination +assassinations +assassinator +assassinators +assassins +assault +assaulted +assaulter +assaulters +assaulting +assaultive +assaultively +assaultiveness +assaultivenesses +assaults +assay +assayed +assayer +assayers +assaying +assays +assegai +assegaied +assegaiing +assegais +assemblage +assemblages +assemblagist +assemblagists +assemble +assembled +assembler +assemblers +assembles +assemblies +assembling +assembly +assemblyman +assemblymen +assemblywoman +assemblywomen +assent +assentation +assentations +assented +assenter +assenters +assenting +assentor +assentors +assents +assert +asserted +assertedly +asserter +asserters +asserting +assertion +assertions +assertive +assertively +assertiveness +assertivenesses +assertor +assertors +asserts +asses assess +assessable +assessed +assesses +assessing assessment +assessments +assessor +assessors +asset +assets +asseverate +asseverated +asseverates +asseverating +asseveration +asseverations +asseverative +asshole +assholes +assiduities +assiduity +assiduous +assiduously +assiduousness +assiduousnesses +assign +assignabilities +assignability +assignable +assignat +assignation +assignations +assignats +assigned +assignee +assignees +assigner +assigners +assigning +assignment +assignments +assignor +assignors +assigns +assimilabilities +assimilability +assimilable +assimilate +assimilated +assimilates +assimilating +assimilation +assimilationism +assimilationisms +assimilationist +assimilationists +assimilations +assimilative +assimilator +assimilators +assimilatory assist assistance +assistances assistant +assistants +assistantship +assistantships +assisted +assister +assisters +assisting +assistor +assistors +assists +assize +assizes +asslike associate +associated +associates +associateship +associateships +associating association +associational +associationism +associationisms +associationist +associationistic +associationists +associations +associative +associatively +associativities +associativity +assoil +assoiled +assoiling +assoilment +assoilments +assoils +assonance +assonances +assonant +assonantal +assonants +assort +assortative +assortatively +assorted +assorter +assorters +assorting +assortment +assortments +assorts +assuage +assuaged +assuagement +assuagements +assuages +assuaging +assuasive +assumabilities +assumability +assumable +assumably assume +assumed +assumer +assumers +assumes +assuming +assumpsit +assumpsits assumption +assumptions +assumptive +assurance +assurances +assure +assured +assuredly +assuredness +assurednesses +assureds +assurer +assurers +assures +assurgent +assuring +assuror +assurors +asswage +asswaged +asswages +asswaging +astarboard +astasia +astasias +astatic +astatine +astatines +aster +asteria +asterias +asteriated +asterisk +asterisked +asterisking +asteriskless +asterisks +asterism +asterisms +astern +asternal +asteroid +asteroidal +asteroids +asters +asthenia +asthenias +asthenic +asthenics +asthenies +asthenosphere +asthenospheres +asthenospheric +astheny +asthma +asthmas +asthmatic +asthmatically +asthmatics +astigmatic +astigmatics +astigmatism +astigmatisms +astigmia +astigmias +astilbe +astilbes +astir +astomous +astonied +astonies astonish +astonished +astonishes +astonishing +astonishingly +astonishment +astonishments +astony +astonying +astound +astounded +astounding +astoundingly +astounds +astraddle +astragal +astragals +astrakhan +astrakhans +astral +astrally +astrals +astray +astrict +astricted +astricting +astricts +astride +astringe +astringed +astringencies +astringency +astringent +astringently +astringents +astringes +astringing +astrobiologies +astrobiologist +astrobiologists +astrobiology +astrocyte +astrocytes +astrocytic +astrocytoma +astrocytomas +astrocytomata +astrodome +astrodomes +astrolabe +astrolabes +astrologer +astrologers +astrological +astrologically +astrologies +astrology +astrometric +astrometries +astrometry astronaut +astronautic +astronautical +astronautically +astronautics +astronauts astronomer +astronomers +astronomic +astronomical +astronomically +astronomies astronomy +astrophotograph +astrophotographer +astrophotographers +astrophotographies +astrophotographs +astrophotography +astrophysical +astrophysically +astrophysicist +astrophysicists +astrophysics +astute +astutely +astuteness +astutenesses +astylar +asunder +aswarm +aswirl +aswoon +asyla +asylum +asylums +asymmetric +asymmetrical +asymmetrically +asymmetries +asymmetry +asymptomatic +asymptomatically +asymptote +asymptotes +asymptotic +asymptotically +asynapses +asynapsis +asynchronies +asynchronism +asynchronisms +asynchronous +asynchronously +asynchrony +asyndeta +asyndetic +asyndetically +asyndeton +asyndetons at +atabal +atabals +atactic +ataghan +ataghans +atalaya +atalayas +ataman +atamans +atamasco +atamascos +atap +ataps +ataractic +ataractics +ataraxia +ataraxias +ataraxic +ataraxics +ataraxies +ataraxy +atavic +atavism +atavisms +atavist +atavistic +atavistically +atavists +ataxia +ataxias +ataxic +ataxics +ataxies +ataxy +ate +atechnic +atelectases +atelectasis +atelic +atelier +ateliers +atemoya +atemoyas +atemporal +ates +athanasies +athanasy +atheism +atheisms +atheist +atheistic +atheistical +atheistically +atheists +atheling +athelings +athenaeum +athenaeums +atheneum +atheneums +atheoretical +atherogeneses +atherogenesis +atherogenic +atheroma +atheromas +atheromata +atheromatous +atheroscleroses +atherosclerosis +atherosclerotic +athetoid +athirst athlete +athletes athletic -atlantic +athletically +athleticism +athleticisms +athletics +athodyd +athodyds +athrocyte +athrocytes +athwart +athwartship +athwartships +atilt +atingle +atlantes +atlas +atlases +atlatl +atlatls +atma +atman +atmans +atmas +atmometer +atmometers atmosphere +atmosphered +atmospheres +atmospheric +atmospherically +atmospherics +atoll +atolls atom +atomic +atomical +atomically +atomics +atomies +atomise +atomised +atomiser +atomisers +atomises +atomising +atomism +atomisms +atomist +atomistic +atomistically +atomists +atomization +atomizations +atomize +atomized +atomizer +atomizers +atomizes +atomizing +atoms +atomy +atonable +atonal +atonalism +atonalisms +atonalist +atonalists +atonalities +atonality +atonally +atone +atoned +atonement +atonements +atoner +atoners +atones +atonic +atonics +atonies +atoning +atony +atop +atopic +atopies +atopy +atrabilious +atrabiliousness +atrabiliousnesses +atrazine +atrazines +atremble +atresia +atresias +atria +atrial +atrioventricular +atrip +atrium +atriums +atrocious +atrociously +atrociousness +atrociousnesses +atrocities +atrocity +atrophia +atrophias +atrophic +atrophied +atrophies +atrophy +atrophying +atropin +atropine +atropines +atropins +atropism +atropisms +att +attaboy attach +attachable +attache +attached +attacher +attachers +attaches +attaching +attachment +attachments attack +attacked +attacker +attackers +attacking +attackman +attackmen +attacks attain +attainabilities +attainability +attainable +attainder +attainders +attained +attainer +attainers +attaining +attainment +attainments +attains +attaint +attainted +attainting +attaints +attar +attars +attemper +attempered +attempering +attempers attempt +attemptable +attempted +attempting +attempts attend +attendance +attendances +attendant +attendants +attended +attendee +attendees +attender +attenders +attending +attends +attent attention +attentional +attentions +attentive +attentively +attentiveness +attentivenesses +attenuate +attenuated +attenuates +attenuating +attenuation +attenuations +attenuator +attenuators +attest +attestation +attestations +attested +attester +attesters +attesting +attestor +attestors +attests +attic +atticism +atticisms +atticist +atticists +attics +attire +attired +attires +attiring attitude +attitudes +attitudinal +attitudinally +attitudinise +attitudinised +attitudinises +attitudinising +attitudinize +attitudinized +attitudinizes +attitudinizing +attorn +attorned +attorney +attorneys +attorneyship +attorneyships +attorning +attornment +attornments +attorns attract +attractance +attractances +attractancies +attractancy +attractant +attractants +attracted +attracting attraction +attractions attractive +attractively +attractiveness +attractivenesses +attractor +attractors +attracts +attributable +attribute +attributed +attributes +attributing +attribution +attributional +attributions +attributive +attributively +attributives +attrite +attrited +attrition +attritional +attritions +attune +attuned +attunement +attunements +attunes +attuning +atwain +atween +atwitter +atypic +atypical +atypicalities +atypicality +atypically +aubade +aubades +auberge +auberges +aubergine +aubergines +aubretia +aubretias +aubrieta +aubrietas +auburn +auburns +auction +auctioned +auctioneer +auctioneers +auctioning +auctions +auctorial +aucuba +aucubas +audacious +audaciously +audaciousness +audaciousnesses +audacities +audacity +audad +audads +audial +audibilities +audibility +audible +audibles +audibly audience +audiences +audient +audients +audile +audiles +auding +audings +audio +audiocassette +audiocassettes +audiogenic +audiogram +audiograms +audiologic +audiological +audiologies +audiologist +audiologists +audiology +audiometer +audiometers +audiometric +audiometries +audiometry +audiophile +audiophiles +audios +audiotape +audiotapes +audiovisual +audiovisuals +audit +auditable +audited +auditing +audition +auditioned +auditioning +auditions +auditive +auditives +auditor +auditoria +auditories +auditorily +auditorium +auditoriums +auditors +auditory +audits +augend +augends +auger +augers +aught +aughts +augite +augites +augitic +augment +augmentation +augmentations +augmentative +augmentatives +augmented +augmenter +augmenters +augmenting +augmentor +augmentors +augments +augur +augural +augured +augurer +augurers +auguries +auguring +augurs +augury +august +auguster +augustest +augustly +augustness +augustnesses +auk +auklet +auklets +auks +auld +aulder +auldest +aulic aunt +aunthood +aunthoods +auntie +aunties +auntlier +auntliest +auntlike +auntly +aunts +aunty +aura +aurae +aural +aurally +aurar +auras +aurate +aurated +aureate +aurei +aureola +aureolae +aureolas +aureole +aureoled +aureoles +aureoling +aures +aureus +auric +auricle +auricled +auricles +auricula +auriculae +auricular +auriculas +auriculate +auriferous +auriform +auris +aurist +aurists +aurochs +aurochses +aurora +aurorae +auroral +auroras +aurorean +aurous +aurum +aurums +auscultate +auscultated +auscultates +auscultating +auscultation +auscultations +auscultatory +ausform +ausformed +ausforming +ausforms +auslander +auslanders +auspex +auspice +auspices +auspicious +auspiciously +auspiciousness +auspiciousnesses +austenite +austenites +austenitic +austere +austerely +austereness +austerenesses +austerer +austerest +austerities +austerity +austral +australes +australopithecine +australopithecines +australs +ausubo +ausubos +autacoid +autacoids +autarchic +autarchical +autarchies +autarchy +autarkic +autarkical +autarkies +autarky +autecism +autecisms +autecological +autecologies +autecology +auteur +auteurist +auteurists +auteurs authentic +authentically +authenticate +authenticated +authenticates +authenticating +authentication +authentications +authenticator +authenticators +authenticities +authenticity author +authored +authoress +authoresses +authorial +authoring +authorise +authorised +authorises +authorising +authoritarian +authoritarianism +authoritarianisms +authoritarians +authoritative +authoritatively +authoritativeness +authoritativenesses +authorities authority +authorization +authorizations +authorize +authorized +authorizer +authorizers +authorizes +authorizing +authors +authorship +authorships +autism +autisms +autistic +autistically +autistics +auto +autoantibodies +autoantibody +autobahn +autobahnen +autobahns +autobiographer +autobiographers +autobiographic +autobiographical +autobiographically +autobiographies +autobiography +autobus +autobuses +autobusses +autocade +autocades +autocatalyses +autocatalysis +autocatalytic +autocatalytically +autocephalies +autocephalous +autocephaly +autochthon +autochthones +autochthonous +autochthonously +autochthons +autoclave +autoclaved +autoclaves +autoclaving +autocoid +autocoids +autocorrelation +autocorrelations +autocracies +autocracy +autocrat +autocratic +autocratical +autocratically +autocrats +autocross +autocrosses +autodidact +autodidactic +autodidacts +autodyne +autodynes +autoecious +autoeciously +autoecism +autoecisms +autoed +autoerotic +autoeroticism +autoeroticisms +autoerotism +autoerotisms +autogamies +autogamous +autogamy +autogenic +autogenies +autogenous +autogenously +autogeny +autogiro +autogiros +autograft +autografted +autografting +autografts +autograph +autographed +autographic +autographically +autographies +autographing +autographs +autography +autogyro +autogyros +autohypnoses +autohypnosis +autohypnotic +autoimmune +autoimmunities +autoimmunity +autoimmunization +autoimmunizations +autoinfection +autoinfections +autoing +autointoxication +autointoxications +autoloading +autologous +autolysate +autolysates +autolyse +autolysed +autolyses +autolysing +autolysis +autolytic +autolyzate +autolyzates +autolyze +autolyzed +autolyzes +autolyzing +automaker +automakers +automan +automata +automatable +automate +automated +automates automatic +automatically +automaticities +automaticity +automatics +automating +automation +automations +automatism +automatisms +automatist +automatists +automatization +automatizations +automatize +automatized +automatizes +automatizing +automaton +automatons +automen +automobile +automobiled +automobiles +automobiling +automobilist +automobilists +automobilities +automobility +automorphism +automorphisms +automotive +autonomic +autonomically +autonomies +autonomist +autonomists autonomous +autonomously +autonomy +autopilot +autopilots +autopolyploid +autopolyploidies +autopolyploids +autopolyploidy +autopsic +autopsied +autopsies +autopsy +autopsying +autoradiogram +autoradiograms +autoradiograph +autoradiographic +autoradiographies +autoradiographs +autoradiography +autorotate +autorotated +autorotates +autorotating +autorotation +autorotations +autoroute +autoroutes +autos +autosexing +autosomal +autosomally +autosome +autosomes +autostrada +autostradas +autostrade +autosuggest +autosuggested +autosuggesting +autosuggestion +autosuggestions +autosuggests +autotelic +autotetraploid +autotetraploidies +autotetraploids +autotetraploidy +autotomies +autotomize +autotomized +autotomizes +autotomizing +autotomous +autotomy +autotransformer +autotransformers +autotransfusion +autotransfusions +autotroph +autotrophic +autotrophically +autotrophies +autotrophs +autotrophy +autotype +autotypes +autotypies +autotypy +autoworker +autoworkers +autoxidation +autoxidations autumn +autumnal +autumnally +autumns +autunite +autunites +auxeses +auxesis +auxetic +auxetics +auxiliaries +auxiliary +auxin +auxinic +auxins +auxotroph +auxotrophic +auxotrophies +auxotrophs +auxotrophy +ava +avadavat +avadavats +avail +availabilities +availability available +availableness +availablenesses +availably +availed +availing +avails +avalanche +avalanched +avalanches +avalanching +avant +avarice +avarices +avaricious +avariciously +avariciousness +avariciousnesses +avascular +avascularities +avascularity +avast +avatar +avatars +avaunt +ave +avellan +avellane +avenge +avenged +avenger +avengers +avenges +avenging +avens +avenses +aventail +aventails +aventurine +aventurines avenue +avenues +aver average +averaged +averagely +averageness +averagenesses +averages +averaging +averment +averments +averred +averring +avers +averse +aversely +averseness +aversenesses +aversion +aversions +aversive +aversively +aversiveness +aversivenesses +avert +averted +averting +averts +aves +avgas +avgases +avgasses +avgolemono +avgolemonos +avian +avianize +avianized +avianizes +avianizing +avians +aviaries +aviarist +aviarists +aviary +aviate +aviated +aviates +aviating +aviation +aviations +aviator +aviators +aviatrices +aviatrix +aviatrixes +avicular +aviculture +avicultures +aviculturist +aviculturists +avid +avidin +avidins +avidities +avidity +avidly +avidness +avidnesses +avifauna +avifaunae +avifaunal +avifaunas +avigator +avigators +avion +avionic +avionics +avions +avirulent +aviso +avisos +avitaminoses +avitaminosis +avitaminotic +avo +avocado +avocadoes +avocados +avocation +avocational +avocationally +avocations +avocet +avocets +avodire +avodires avoid +avoidable +avoidably +avoidance +avoidances +avoided +avoider +avoiders +avoiding +avoids +avoirdupois +avoirdupoises +avos +avoset +avosets +avouch +avouched +avoucher +avouchers +avouches +avouching +avouchment +avouchments +avow +avowable +avowably +avowal +avowals +avowed +avowedly +avower +avowers +avowing +avows +avulse +avulsed +avulses +avulsing +avulsion +avulsions +avuncular +avuncularities +avuncularity +avuncularly +aw +awa +await +awaited +awaiter +awaiters +awaiting +awaits awake +awaked +awaken +awakened +awakener +awakeners +awakening +awakens +awakes +awaking award +awardable +awarded +awardee +awardees +awarder +awarders +awarding +awards aware +awareness +awarenesses +awash away +awayness +awaynesses +awe +aweary +aweather +awed +awee +aweigh +aweing +aweless +awes awesome +awesomely +awesomeness +awesomenesses +awestricken +awestruck awful +awfuller +awfullest +awfully +awfulness +awfulnesses +awhile +awhirl +awing awkward +awkwarder +awkwardest +awkwardly +awkwardness +awkwardnesses +awl +awless +awls +awlwort +awlworts +awmous +awn +awned +awning +awninged +awnings +awnless +awns +awny +awoke +awoken +awol +awols +awry +ax +axal +axe +axed +axel +axels +axeman +axemen +axenic +axenically +axes +axial +axialities +axiality +axially +axil +axile +axilla +axillae +axillar +axillaries +axillars +axillary +axillas +axils +axing +axiological +axiologically +axiologies +axiology +axiom +axiomatic +axiomatically +axiomatisation +axiomatisations +axiomatization +axiomatizations +axiomatize +axiomatized +axiomatizes +axiomatizing +axioms +axion +axions +axis +axised +axises +axisymmetric +axisymmetrical +axisymmetries +axisymmetry +axite +axites +axle +axled +axles +axletree +axletrees +axlike +axman +axmen +axolotl +axolotls +axon +axonal +axone +axonemal +axoneme +axonemes +axones +axonic +axonometric +axons +axoplasm +axoplasmic +axoplasms +axseed +axseeds +ay +ayah +ayahs +ayahuasca +ayahuascas +ayatollah +ayatollahs +aye +ayes +ayin +ayins +ays +ayurveda +ayurvedas +azalea +azaleas +azan +azans +azathioprine +azathioprines +azeotrope +azeotropes +azide +azides +azido +azidothymidine +azidothymidines +azimuth +azimuthal +azimuthally +azimuths +azine +azines +azlon +azlons +azo +azoic +azole +azoles +azon +azonal +azonic +azons +azoospermia +azoospermias +azote +azoted +azotemia +azotemias +azotemic +azotes +azoth +azoths +azotic +azotise +azotised +azotises +azotising +azotize +azotized +azotizes +azotizing +azotobacter +azotobacters +azoturia +azoturias +azure +azures +azurite +azurites +azygos +azygoses +azygous +ba +baa +baaed +baaing +baal +baalim +baalism +baalisms +baals +baas +baases +baaskaap +baaskaaps +baba +babas +babassu +babassus +babbitt +babbitted +babbitting +babbitts +babble +babbled +babblement +babblements +babbler +babblers +babbles +babbling +babblings +babe +babel +babels +babes +babesia +babesias +babesioses +babesiosis +babesiosises +babiche +babiches +babied +babies +babirusa +babirusas +babka +babkas +baboo +babool +babools +baboon +baboons +baboos +babu +babul +babuls +babus +babushka +babushkas baby +babyhood +babyhoods +babying +babyish +babysitter +babysitters +bacalao +bacalaos +bacca +baccae +baccalaureate +baccalaureates +baccara +baccaras +baccarat +baccarats +baccate +baccated +bacchanal +bacchanalia +bacchanalian +bacchanalians +bacchanals +bacchant +bacchante +bacchantes +bacchants +bacchic +bacchii +bacchius +bach +bached bachelor +bachelordom +bachelordoms +bachelorette +bachelorettes +bachelorhood +bachelorhoods +bachelors +baches +baching +bacillar +bacillary +bacilli +bacillus +bacitracin +bacitracins back +backache +backaches +backbeat +backbeats +backbench +backbencher +backbenchers +backbenches +backbend +backbends +backbit +backbite +backbiter +backbiters +backbites +backbiting +backbitings +backbitten +backblock +backblocks +backboard +backboards +backbone +backbones +backbreaker +backbreakers +backbreaking +backcast +backcasts +backchat +backchats +backcloth +backcloths +backcountries +backcountry +backcourt +backcourtman +backcourtmen +backcourts +backcross +backcrossed +backcrosses +backcrossing +backdate +backdated +backdates +backdating +backdoor +backdrop +backdropped +backdropping +backdrops +backdropt +backed +backer +backers +backfield +backfields +backfill +backfilled +backfilling +backfills +backfire +backfired +backfires +backfiring +backfit +backfits +backfitted +backfitting +backflow +backflows +backgammon +backgammons background +backgrounded +backgrounder +backgrounders +backgrounding +backgrounds +backhand +backhanded +backhandedly +backhander +backhanders +backhanding +backhands +backhaul +backhauled +backhauling +backhauls +backhoe +backhoes +backhouse +backhouses +backing +backings +backland +backlands +backlash +backlashed +backlasher +backlashers +backlashes +backlashing +backless +backlight +backlighted +backlighting +backlights +backlist +backlisted +backlisting +backlists +backlit +backlog +backlogged +backlogging +backlogs +backmost +backout +backouts +backpack +backpacked +backpacker +backpackers +backpacking +backpacks +backpedal +backpedaled +backpedaling +backpedalled +backpedalling +backpedals +backrest +backrests +backroom +backrooms +backrush +backrushes +backs +backsaw +backsaws +backscatter +backscattered +backscattering +backscatterings +backscatters +backseat +backseats +backset +backsets +backside +backsides +backslap +backslapped +backslapper +backslappers +backslapping +backslaps +backslash +backslashes +backslid +backslidden +backslide +backslider +backsliders +backslides +backsliding +backspace +backspaced +backspaces +backspacing +backspin +backspins +backsplash +backsplashes +backstab +backstabbed +backstabber +backstabbers +backstabbing +backstabbings +backstabs +backstage +backstairs +backstay +backstays +backstitch +backstitched +backstitches +backstitching +backstop +backstopped +backstopping +backstops +backstreet +backstreets +backstretch +backstretches +backstroke +backstrokes +backswept +backswing +backswings +backsword +backswords +backtrack +backtracked +backtracking +backtracks +backup +backups backward +backwardly +backwardness +backwardnesses backwards +backwash +backwashed +backwashes +backwashing +backwater +backwaters +backwood +backwoods +backwoodsman +backwoodsmen +backwoodsy +backwrap +backwraps +backyard +backyards bacon +bacons +bacteremia +bacteremias +bacteremic bacteria +bacterial +bacterially +bacterias +bactericidal +bactericidally +bactericide +bactericides +bacterin +bacterins +bacteriochlorophyll +bacteriochlorophylls +bacteriocin +bacteriocins +bacteriologic +bacteriological +bacteriologically +bacteriologies +bacteriologist +bacteriologists +bacteriology +bacteriolyses +bacteriolysis +bacteriolytic +bacteriophage +bacteriophages +bacteriophagies +bacteriophagy +bacteriorhodopsin +bacteriorhodopsins +bacteriostases +bacteriostasis +bacteriostat +bacteriostatic +bacteriostats +bacterium +bacteriuria +bacteriurias +bacterization +bacterizations +bacterize +bacterized +bacterizes +bacterizing +bacteroid +bacteroids +bacula +baculine +baculum +baculums bad +badass +badassed +badasses +badder +baddest +baddie +baddies +baddy +bade +badge +badged +badger +badgered +badgering +badgerly +badgers +badges +badging +badinage +badinaged +badinages +badinaging +badland +badlands +badly +badman +badmen badminton +badmintons +badmouth +badmouthed +badmouthing +badmouths +badness +badnesses +bads +baff +baffed +baffies +baffing +baffle +baffled +bafflegab +bafflegabs +bafflement +bafflements +baffler +bafflers +baffles +baffling +bafflingly +baffs +baffy bag +bagass +bagasse +bagasses +bagatelle +bagatelles +bagel +bagels +bagful +bagfuls baggage +baggages +bagged +bagger +baggers +baggie +baggier +baggies +baggiest +baggily +bagginess +bagginesses +bagging +baggings +baggy +baghouse +baghouses +bagman +bagmen +bagnio +bagnios +bagpipe +bagpiper +bagpipers +bagpipes +bags +bagsful +baguet +baguets +baguette +baguettes +bagwig +bagwigs +bagworm +bagworms +bah +bahadur +bahadurs +baht +bahts +baidarka +baidarkas +bail +bailable +bailed +bailee +bailees +bailer +bailers +bailey +baileys +bailie +bailies +bailiff +bailiffs +bailiffship +bailiffships +bailing +bailiwick +bailiwicks +bailment +bailments +bailor +bailors +bailout +bailouts +bails +bailsman +bailsmen +bairn +bairnish +bairnlier +bairnliest +bairnly +bairns +bait +baited +baiter +baiters +baith +baiting +baits +baiza +baizas +baize +baizes +bake +baked +bakemeat +bakemeats +baker +bakeries +bakers bakery +bakes +bakeshop +bakeshops +baking +bakings +baklava +baklavas +baklawa +baklawas +baksheesh +baksheeshes +bakshish +bakshished +bakshishes +bakshishing +bal +balaclava +balaclavas +balalaika +balalaikas balance +balanced +balancer +balancers +balances +balancing +balas +balases +balata +balatas +balboa +balboas +balbriggan +balbriggans +balconied +balconies balcony +bald +baldachin +baldachino +baldachinos +baldachins +balded +balder +balderdash +balderdashes +baldest +baldhead +baldheaded +baldheads +baldies +balding +baldish +baldly +baldness +baldnesses +baldpate +baldpates +baldric +baldrick +baldricks +baldrics +balds +baldy +bale +baled +baleen +baleens +balefire +balefires +baleful +balefully +balefulness +balefulnesses +baler +balers +bales +baling +balisaur +balisaurs +balk +balkanization +balkanizations +balkanize +balkanized +balkanizes +balkanizing +balked +balker +balkers +balkier +balkiest +balkily +balkiness +balkinesses +balking +balkline +balklines +balks +balky ball +ballad +ballade +balladeer +balladeers +ballades +balladic +balladist +balladists +balladries +balladry +ballads +ballast +ballasted +ballasting +ballasts +ballcarrier +ballcarriers +balled +baller +ballerina +ballerinas +ballers ballet +balletic +balletomane +balletomanes +balletomania +balletomanias +ballets +ballgame +ballgames +ballhandling +ballhandlings +ballhawk +ballhawks +ballies +balling +ballista +ballistae +ballistic +ballistically +ballistics +ballon +ballonet +ballonets +ballonne +ballonnes +ballons balloon +ballooned +ballooning +balloonings +balloonist +balloonists +balloons +ballot +balloted +balloter +balloters +balloting +ballots +ballpark +ballparks +ballplayer +ballplayers +ballpoint +ballpoints +ballroom +ballrooms +balls +ballsier +ballsiest +ballsy +ballute +ballutes +bally +ballyhoo +ballyhooed +ballyhooing +ballyhoos +ballyrag +ballyragged +ballyragging +ballyrags +balm +balmacaan +balmacaans +balmier +balmiest +balmily +balminess +balminesses +balmlike +balmoral +balmorals +balms +balmy +balneal +balneologies +balneology +baloney +baloneys +bals +balsa +balsam +balsamed +balsamic +balsaming +balsams +balsas +baluster +balusters +balustrade +balustraded +balustrades +bam +bambini +bambino +bambinos bamboo +bamboos +bamboozle +bamboozled +bamboozlement +bamboozlements +bamboozles +bamboozling +bammed +bamming +bams ban +banal +banalities +banality +banalize +banalized +banalizes +banalizing +banally banana +bananas +banausic +banco +bancos +band bandage +bandaged +bandager +bandagers +bandages +bandaging +bandana +bandanas +bandanna +bandannas +bandbox +bandboxes +bandeau +bandeaus +bandeaux +banded +bander +banderilla +banderillas +banderillero +banderilleros +banderol +banderole +banderoles +banderols +banders +bandicoot +bandicoots +bandied +bandies +banding +bandit +banditries +banditry +bandits +banditti +bandleader +bandleaders +bandmaster +bandmasters +bandog +bandogs +bandoleer +bandoleers +bandolier +bandoliers +bandora +bandoras +bandore +bandores +bands +bandsman +bandsmen +bandstand +bandstands +bandwagon +bandwagons +bandwidth +bandwidths +bandy +bandying +bane +baneberries +baneberry +baned +baneful +banefully +banes +bang +banged +banger +bangers +banging +bangkok +bangkoks +bangle +bangles +bangs +bangtail +bangtails +bani +banian +banians +baning +banish +banished +banisher +banishers +banishes +banishing +banishment +banishments +banister +banistered +banisters +banjax +banjaxed +banjaxes +banjaxing +banjo +banjoes +banjoist +banjoists +banjos bank +bankabilities +bankability +bankable +bankbook +bankbooks +bankcard +bankcards +banked +banker +bankerly +bankers +banking +bankings +banknote +banknotes +bankroll +bankrolled +bankroller +bankrollers +bankrolling +bankrolls +bankrupt +bankruptcies +bankruptcy +bankrupted +bankrupting +bankrupts +banks +banksia +banksias +bankside +banksides +banned +banner +bannered +banneret +bannerets +bannerette +bannerettes +bannering +bannerol +bannerols +banners +bannet +bannets +banning +bannister +bannisters +bannock +bannocks +banns +banquet +banqueted +banqueter +banqueters +banqueting +banquets +banquette +banquettes +bans +banshee +banshees +banshie +banshies +bantam +bantams +bantamweight +bantamweights +banteng +bantengs +banter +bantered +banterer +banterers +bantering +banteringly +banters +banties +bantling +bantlings +banty +banyan +banyans +banzai +banzais +baobab +baobabs +bap +baps +baptise +baptised +baptises +baptisia +baptisias +baptising +baptism +baptismal +baptismally +baptisms +baptist +baptisteries +baptistery +baptistries +baptistry +baptists +baptize +baptized +baptizer +baptizers +baptizes +baptizing bar +barathea +baratheas +barb +barbal +barbarian +barbarianism +barbarianisms +barbarians +barbaric +barbarically +barbarism +barbarisms +barbarities +barbarity +barbarization +barbarizations +barbarize +barbarized +barbarizes +barbarizing +barbarous +barbarously +barbarousness +barbarousnesses +barbasco +barbascoes +barbascos +barbate +barbe barbecue +barbecued +barbecuer +barbecuers +barbecues +barbecuing +barbed +barbel +barbell +barbells +barbels +barbeque +barbequed +barbeques +barbequing barber +barbered +barbering +barberries +barberry +barbers barbershop +barbershops +barbes +barbet +barbets +barbette +barbettes +barbican +barbicans +barbicel +barbicels +barbing +barbital +barbitals +barbitone +barbitones +barbiturate +barbiturates +barbless +barbs +barbule +barbules +barbut +barbuts +barbwire +barbwires +barcarole +barcaroles +barcarolle +barcarolles +barchan +barchans +bard +barde +barded +bardes +bardic +barding +bardolater +bardolaters +bardolatries +bardolatry +bards bare +bareback +barebacked +bareboat +bareboats +bared +barefaced +barefacedly +barefacedness +barefacednesses +barefit +barefoot +barefooted +barege +bareges +barehead +bareheaded +barely +bareness +barenesses +barer +bares +baresark +baresarks +barest +barf +barfed +barfing +barflies +barfly +barfs bargain +bargained +bargainer +bargainers +bargaining +bargains +barge +bargeboard +bargeboards +barged +bargee +bargees +bargello +bargellos +bargeman +bargemen +barges +barghest +barghests +barging +barguest +barguests +barhop +barhopped +barhopping +barhops +baric +barilla +barillas +baring +barite +barites +baritonal +baritone +baritones +barium +bariums bark +barked +barkeep +barkeeper +barkeepers +barkeeps +barkentine +barkentines +barker +barkers +barkier +barkiest +barking +barkless +barks +barky +barleduc +barleducs +barless +barley +barleycorn +barleycorns +barleys +barlow +barlows +barm +barmaid +barmaids +barman +barmen +barmie +barmier +barmiest +barms +barmy +barn +barnacle +barnacled +barnacles +barnier +barniest +barnlike +barns +barnstorm +barnstormed +barnstormer +barnstormers +barnstorming +barnstorms +barny +barnyard +barnyards +baroceptor +baroceptors +barogram +barograms +barograph +barographic +barographs +barometer +barometers +barometric +barometrically +barometries +barometry +baron +baronage +baronages +baroness +baronesses +baronet +baronetage +baronetages +baronetcies +baronetcy +baronets +barong +barongs +baronial +baronies +baronne +baronnes +barons +barony +baroque +baroquely +baroques +baroreceptor +baroreceptors +barouche +barouches +barque +barquentine +barquentines +barques +barquette +barquettes +barrable +barrack +barracked +barracker +barrackers +barracking +barracks +barracoon +barracoons +barracouta +barracoutas +barracuda +barracudas +barrage +barraged +barrages +barraging +barramunda +barramundas +barramundi +barramundis +barranca +barrancas +barranco +barrancos +barrater +barraters +barrator +barrators +barratries +barratry +barre +barred +barrel +barrelage +barrelages +barreled +barrelful +barrelfuls +barrelhead +barrelheads +barrelhouse +barrelhouses +barreling +barrelled +barrelling +barrels +barrelsful +barren +barrener +barrenest +barrenly +barrenness +barrennesses +barrens +barres +barret +barretor +barretors +barretries +barretry +barrets +barrette +barrettes +barricade +barricaded +barricades +barricading +barricado +barricadoed +barricadoes +barricadoing barrier +barriers +barring +barrio +barrios +barrister +barristers +barroom +barrooms +barrow +barrows +bars +barstool +barstools +bartend +bartended +bartender +bartenders +bartending +bartends +barter +bartered +barterer +barterers +bartering +barters +bartisan +bartisans +bartizan +bartizans +barware +barwares +barye +baryes +baryon +baryonic +baryons +baryta +barytas +baryte +barytes +barytic +barytone +barytones +bas +basal +basally +basalt +basaltes +basaltic +basalts +bascule +bascules base baseball +baseballs +baseboard +baseboards +baseborn +based +baseless +baseline +baseliner +baseliners +baselines +basely +baseman +basemen basement +basementless +basements +baseness +basenesses +basenji +basenjis +baser +baserunning +baserunnings +bases +basest +bash +bashaw +bashaws +bashed +basher +bashers +bashes +bashful +bashfully +bashfulness +bashfulnesses +bashing +bashlyk +bashlyks basic +basically +basicities +basicity +basics +basidia +basidial +basidiomycete +basidiomycetes +basidiomycetous +basidiospore +basidiospores +basidium +basification +basifications +basified +basifier +basifiers +basifies +basify +basifying +basil +basilar +basilary +basilic +basilica +basilicae +basilican +basilicas +basilisk +basilisks +basils basin +basinal +basined +basinet +basinets +basinful +basinfuls +basing +basins +basion +basions +basipetal +basipetally basis +bask +basked basket basketball +basketballs +basketful +basketfuls +basketlike +basketries +basketry +baskets +basketsful +basketwork +basketworks +basking +basks +basmati +basmatis +basophil +basophile +basophiles +basophilia +basophilias +basophilic +basophils +basque +basques +bass +basses +basset +basseted +basseting +bassets +bassett +bassetted +bassetting +bassetts +bassi +bassinet +bassinets +bassist +bassists +bassly +bassness +bassnesses +basso +bassoon +bassoonist +bassoonists +bassoons +bassos +basswood +basswoods +bassy +bast +bastard +bastardies +bastardise +bastardised +bastardises +bastardising +bastardization +bastardizations +bastardize +bastardized +bastardizes +bastardizing +bastardly +bastards +bastardy +baste +basted +baster +basters +bastes +bastile +bastiles +bastille +bastilles +bastinade +bastinades +bastinado +bastinadoed +bastinadoes +bastinadoing +basting +bastings +bastion +bastioned +bastions +basts bat +batboy +batboys +batch +batched +batcher +batchers +batches +batching +bate +bateau +bateaux +bated +bates +batfish +batfishes +batfowl +batfowled +batfowling +batfowls bath bathe +bathed +bather +bathers +bathes +bathetic +bathetically +bathhouse +bathhouses +bathing +bathless +bathmat +bathmats +batholith +batholithic +batholiths +bathos +bathoses +bathrobe +bathrobes bathroom +bathrooms +baths bathtub +bathtubs +bathwater +bathwaters +bathyal +bathymetric +bathymetrical +bathymetrically +bathymetries +bathymetry +bathypelagic +bathyscaph +bathyscaphe +bathyscaphes +bathyscaphs +bathysphere +bathyspheres +bathythermograph +bathythermographs +batik +batiks +bating +batiste +batistes +batlike +batman +batmen +baton +batons +batrachian +batrachians +bats +batsman +batsmen +batt +battailous +battalia +battalias +battalion +battalions +batteau +batteaux +batted +battement +battements +batten +battened +battener +batteners +battening +battens +batter +battered +batterie +batteries +battering +batters battery +battier +battiest +battik +battiks +battiness +battinesses +batting +battings battle +battled +battlefield +battlefields +battlefront +battlefronts +battleground +battlegrounds +battlement +battlemented +battlements +battler +battlers +battles +battleship +battleships +battlewagon +battlewagons +battling +batts +battu +battue +battues +batty +batwing +baubee +baubees +bauble +baubles +baud +baudekin +baudekins +baudrons +baudronses +bauds +bauhinia +bauhinias +baulk +baulked +baulkier +baulkiest +baulking +baulks +baulky +bausond +bauxite +bauxites +bauxitic +bawbee +bawbees +bawcock +bawcocks +bawd +bawdier +bawdies +bawdiest +bawdily +bawdiness +bawdinesses +bawdric +bawdrics +bawdries +bawdry +bawds +bawdy +bawdyhouse +bawdyhouses +bawl +bawled +bawler +bawlers +bawling +bawls +bawsunt +bawtie +bawties +bawty bay -bc +bayadeer +bayadeers +bayadere +bayaderes +bayamo +bayamos +bayard +bayards +bayberries +bayberry +bayed +baying +bayman +baymen +bayonet +bayoneted +bayoneting +bayonets +bayonetted +bayonetting +bayou +bayous +bays +baywood +baywoods +bazaar +bazaars +bazar +bazars +bazoo +bazooka +bazookas +bazooms +bazoos +bdellium +bdelliums be beach +beachboy +beachboys +beachcomb +beachcombed +beachcomber +beachcombers +beachcombing +beachcombs +beached +beaches +beachfront +beachfronts +beachgoer +beachgoers +beachhead +beachheads +beachier +beachiest +beaching +beachside +beachwear +beachy +beacon +beaconed +beaconing +beacons +bead +beaded +beadier +beadiest +beadily +beading +beadings +beadle +beadles +beadlike +beadman +beadmen +beadroll +beadrolls +beads +beadsman +beadsmen +beadwork +beadworks +beady +beagle +beagles +beak +beaked +beaker +beakers +beakier +beakiest +beakless +beaklike +beaks +beaky +beam +beamed +beamier +beamiest +beamily +beaming +beamish +beamishly +beamless +beamlike +beams +beamy bean +beanbag +beanbags +beanball +beanballs +beaned +beaneries +beanery +beanie +beanies +beaning +beanlike +beano +beanos +beanpole +beanpoles +beans +beanstalk +beanstalks bear +bearabilities +bearability +bearable +bearably +bearbaiting +bearbaitings +bearberries +bearberry +bearcat +bearcats beard +bearded +beardedness +beardednesses +bearding +beardless +beards +beardtongue +beardtongues +bearer +bearers +bearhug +bearhugs +bearing +bearings +bearish +bearishly +bearishness +bearishnesses +bearlike +bears +bearskin +bearskins +bearwood +bearwoods beast +beastie +beasties +beastings +beastlier +beastliest +beastliness +beastlinesses +beastly +beasts beat +beatable +beaten +beater +beaters +beatific +beatifically +beatification +beatifications +beatified +beatifies +beatify +beatifying +beating +beatings +beatitude +beatitudes +beatless +beatnik +beatniks +beats +beau +beaucoup +beauish +beaus +beaut +beauteous +beauteously +beauteousness +beauteousnesses +beautician +beauticians +beauties +beautification +beautifications +beautified +beautifier +beautifiers +beautifies beautiful +beautifuler +beautifulest +beautifully +beautifulness +beautifulnesses +beautify +beautifying +beauts beauty +beaux +beaver +beaverboard +beaverboards +beavered +beavering +beavers +bebeeru +bebeerus +beblood +beblooded +beblooding +bebloods +bebop +bebopper +beboppers +bebops +becalm +becalmed +becalming +becalms +became +becap +becapped +becapping +becaps +becarpet +becarpeted +becarpeting +becarpets because +bechalk +bechalked +bechalking +bechalks +bechamel +bechamels +bechance +bechanced +bechances +bechancing +becharm +becharmed +becharming +becharms +beck +becked +becket +beckets +becking +beckon +beckoned +beckoner +beckoners +beckoning +beckons +becks +beclamor +beclamored +beclamoring +beclamors +beclasp +beclasped +beclasping +beclasps +becloak +becloaked +becloaking +becloaks +beclog +beclogged +beclogging +beclogs +beclothe +beclothed +beclothes +beclothing +becloud +beclouded +beclouding +beclouds +beclown +beclowned +beclowning +beclowns become +becomes +becoming +becomingly +becomings +becoward +becowarded +becowarding +becowards +becrawl +becrawled +becrawling +becrawls +becrime +becrimed +becrimes +becriming +becrowd +becrowded +becrowding +becrowds +becrust +becrusted +becrusting +becrusts +becudgel +becudgeled +becudgeling +becudgelled +becudgelling +becudgels +becurse +becursed +becurses +becursing +becurst bed +bedabble +bedabbled +bedabbles +bedabbling +bedamn +bedamned +bedamning +bedamns +bedarken +bedarkened +bedarkening +bedarkens +bedaub +bedaubed +bedaubing +bedaubs +bedazzle +bedazzled +bedazzlement +bedazzlements +bedazzles +bedazzling +bedbug +bedbugs +bedchair +bedchairs +bedchamber +bedchambers +bedclothes +bedcover +bedcovering +bedcoverings +bedcovers +beddable +bedded +bedder +bedders +bedding beddings +bedeafen +bedeafened +bedeafening +bedeafens +bedeck +bedecked +bedecking +bedecks +bedel +bedell +bedells +bedels +bedeman +bedemen +bedesman +bedesmen +bedevil +bedeviled +bedeviling +bedevilled +bedevilling +bedevilment +bedevilments +bedevils +bedew +bedewed +bedewing +bedews +bedfast +bedfellow +bedfellows +bedframe +bedframes +bedgown +bedgowns +bediaper +bediapered +bediapering +bediapers +bedight +bedighted +bedighting +bedights +bedim +bedimmed +bedimming +bedimple +bedimpled +bedimples +bedimpling +bedims +bedirtied +bedirties +bedirty +bedirtying +bedizen +bedizened +bedizening +bedizenment +bedizenments +bedizens +bedlam +bedlamite +bedlamites +bedlamp +bedlamps +bedlams +bedless +bedlike +bedmaker +bedmakers +bedmate +bedmates +bedotted +bedouin +bedouins +bedpan +bedpans +bedplate +bedplates +bedpost +bedposts +bedquilt +bedquilts +bedraggle +bedraggled +bedraggles +bedraggling +bedrail +bedrails +bedrape +bedraped +bedrapes +bedraping +bedrench +bedrenched +bedrenches +bedrenching +bedrid +bedridden +bedrivel +bedriveled +bedriveling +bedrivelled +bedrivelling +bedrivels +bedrock +bedrocks +bedroll +bedrolls bedroom +bedroomed +bedrooms +bedrug +bedrugged +bedrugging +bedrugs +beds +bedsheet +bedsheets +bedside +bedsides +bedsit +bedsits +bedsonia +bedsoniae +bedsonias +bedsore +bedsores +bedspread +bedspreads +bedspring +bedsprings +bedstand +bedstands +bedstead +bedsteads +bedstraw +bedstraws +bedtick +bedticks +bedtime +bedtimes +bedu +beduin +beduins +bedumb +bedumbed +bedumbing +bedumbs +bedunce +bedunced +bedunces +beduncing +bedward +bedwards +bedwarf +bedwarfed +bedwarfing +bedwarfs bee +beebee +beebees +beebread +beebreads +beech +beechdrops +beechen +beeches +beechier +beechiest +beechnut +beechnuts +beechy beef +beefalo +beefaloes +beefalos +beefcake +beefcakes +beefeater +beefeaters +beefed +beefier +beefiest +beefily +beefing +beefless +beefs +beefsteak +beefsteaks +beefwood +beefwoods +beefy +beehive +beehives +beekeeper +beekeepers +beekeeping +beekeepings +beelike +beeline +beelined +beelines +beelining +been +beep +beeped +beeper +beepers +beeping +beeps beer +beerier +beeriest +beers +beery +bees +beestings +beeswax +beeswaxes +beeswing +beeswings +beet +beetle +beetled +beetler +beetlers +beetles +beetling +beetroot +beetroots +beets +beeves +beeyard +beeyards +beezer +beezers +befall +befallen +befalling +befalls +befell +befinger +befingered +befingering +befingers +befit +befits +befitted +befitting +befittingly +beflag +beflagged +beflagging +beflags +beflea +befleaed +befleaing +befleas +befleck +beflecked +beflecking +beflecks +beflower +beflowered +beflowering +beflowers +befog +befogged +befogging +befogs +befool +befooled +befooling +befools before +beforehand +beforetime +befoul +befouled +befouler +befoulers +befouling +befouls +befret +befrets +befretted +befretting +befriend +befriended +befriending +befriends +befringe +befringed +befringes +befringing +befuddle +befuddled +befuddlement +befuddlements +befuddles +befuddling beg +begall +begalled +begalling +begalls +began +begat +begaze +begazed +begazes +begazing +beget +begets +begetter +begetters +begetting +beggar +beggared +beggaries +beggaring +beggarliness +beggarlinesses +beggarly +beggars +beggarweed +beggarweeds +beggary +begged +begging begin +beginner +beginners +beginning +beginnings +begins +begird +begirded +begirding +begirdle +begirdled +begirdles +begirdling +begirds +begirt +begirting +beglad +begladded +begladding +beglads +beglamor +beglamored +beglamoring +beglamors +beglamour +beglamoured +beglamouring +beglamours +begloom +begloomed +beglooming +beglooms +begone +begonia +begonias +begorah +begorra +begorrah +begot +begotten +begrim +begrime +begrimed +begrimes +begriming +begrimmed +begrimming +begrims +begroan +begroaned +begroaning +begroans +begrudge +begrudged +begrudges +begrudging +begrudgingly +begs +beguile +beguiled +beguilement +beguilements +beguiler +beguilers +beguiles +beguiling +beguilingly +beguine +beguines +begulf +begulfed +begulfing +begulfs +begum +begums +begun behalf +behalves behave +behaved +behaver +behavers +behaves +behaving behavior +behavioral +behaviorally +behaviorism +behaviorisms +behaviorist +behavioristic +behaviorists +behaviors behaviour +behaviours +behead +beheaded +beheading +beheadings +beheads +beheld +behemoth +behemoths +behest +behests behind +behindhand +behinds +behold +beholden +beholder +beholders +beholding +beholds +behoof +behoove +behooved +behooves +behooving +behove +behoved +behoves +behoving +behowl +behowled +behowling +behowls +beige +beiges +beignet +beignets +beigy being +beings +bejabers +bejeezus +bejesus +bejewel +bejeweled +bejeweling +bejewelled +bejewelling +bejewels +bejumble +bejumbled +bejumbles +bejumbling +bekiss +bekissed +bekisses +bekissing +beknight +beknighted +beknighting +beknights +beknot +beknots +beknotted +beknotting +bel +belabor +belabored +belaboring +belabors +belabour +belaboured +belabouring +belabours +belaced +beladied +beladies +belady +beladying +belated +belatedly +belatedness +belatednesses +belaud +belauded +belauding +belauds +belay +belayed +belaying +belays +belch +belched +belcher +belchers +belches +belching +beldam +beldame +beldames +beldams +beleaguer +beleaguered +beleaguering +beleaguerment +beleaguerments +beleaguers +beleap +beleaped +beleaping +beleaps +beleapt +belemnite +belemnites +belfried +belfries +belfry +belga +belgas +belie +belied belief +beliefs +belier +beliers +belies +believabilities +believability +believable +believably believe +believed +believer +believers +believes +believing +belike +beliquor +beliquored +beliquoring +beliquors +belittle +belittled +belittlement +belittlements +belittler +belittlers +belittles +belittling +belive bell +belladonna +belladonnas +bellbird +bellbirds +bellboy +bellboys +belle +belled +belleek +belleeks +belles +belletrist +belletristic +belletrists +bellflower +bellflowers +bellhop +bellhops +bellicose +bellicosely +bellicosities +bellicosity +bellied +bellies +belligerence +belligerences +belligerencies +belligerency +belligerent +belligerently +belligerents +belling +bellman +bellmen +bellow +bellowed +bellower +bellowers +bellowing +bellows +bellpull +bellpulls +bells +bellwether +bellwethers +bellwort +bellworts belly +bellyache +bellyached +bellyacher +bellyachers +bellyaches +bellyaching +bellyband +bellybands +bellybutton +bellybuttons +bellyful +bellyfuls +bellying belong +belonged +belonging +belongingness +belongingnesses +belongings +belongs +beloved +beloveds below +belowdecks +belowground +belows +bels belt +belted +belter +belters +belting +beltings +beltless +beltline +beltlines +belts +beltway +beltways +beluga +belugas +belvedere +belvederes +belying +bema +bemadam +bemadamed +bemadaming +bemadams +bemadden +bemaddened +bemaddening +bemaddens +bemas +bemata +bemean +bemeaned +bemeaning +bemeans +bemedaled +bemedalled +bemingle +bemingled +bemingles +bemingling +bemire +bemired +bemires +bemiring +bemist +bemisted +bemisting +bemists +bemix +bemixed +bemixes +bemixing +bemixt +bemoan +bemoaned +bemoaning +bemoans +bemock +bemocked +bemocking +bemocks +bemuddle +bemuddled +bemuddles +bemuddling +bemurmur +bemurmured +bemurmuring +bemurmurs +bemuse +bemused +bemusedly +bemusement +bemusements +bemuses +bemusing +bemuzzle +bemuzzled +bemuzzles +bemuzzling +ben +bename +benamed +benames +benaming bench +benched +bencher +benchers +benches +benching +benchland +benchlands +benchmark +benchmarks +benchwarmer +benchwarmers bend +bendable +benday +bendayed +bendaying +bendays +bended +bendee +bendees +bender +benders +bending +bends +bendways +bendwise +bendy +bendys +bene beneath +benedick +benedicks +benedict +benediction +benedictions +benedictory +benedicts +benefaction +benefactions +benefactor +benefactors +benefactress +benefactresses +benefic +benefice +beneficed +beneficence +beneficences +beneficent +beneficently +benefices beneficial +beneficially +beneficialness +beneficialnesses +beneficiaries +beneficiary +beneficiate +beneficiated +beneficiates +beneficiating +beneficiation +beneficiations +beneficing benefit +benefited +benefiter +benefiters +benefiting +benefits +benefitted +benefitting +benempt +benempted +benes +benevolence +benevolences +benevolent +benevolently +benevolentness +benevolentnesses +bengaline +bengalines +benighted +benightedly +benightedness +benightednesses +benign +benignancies +benignancy +benignant +benignantly +benignities +benignity +benignly +benison +benisons +benjamin +benjamins +benne +bennes +bennet +bennets +benni +bennies +bennis +benny +benomyl +benomyls +bens bent +benthal +benthic +benthonic +benthos +benthoses +bentonite +bentonites +bentonitic +bents +bentwood +bentwoods +benumb +benumbed +benumbing +benumbs +benzal +benzaldehyde +benzaldehydes +benzanthracene +benzanthracenes +benzene +benzenes +benzenoid +benzidin +benzidine +benzidines +benzidins +benzimidazole +benzimidazoles +benzin +benzine +benzines +benzins +benzoapyrene +benzoapyrenes +benzoate +benzoates +benzocaine +benzocaines +benzodiazepine +benzodiazepines +benzofuran +benzofurans +benzoic +benzoin +benzoins +benzol +benzole +benzoles +benzols +benzophenone +benzophenones +benzoyl +benzoyls +benzyl +benzylic +benzyls +bepaint +bepainted +bepainting +bepaints +bepimple +bepimpled +bepimples +bepimpling +bequeath +bequeathal +bequeathals +bequeathed +bequeathing +bequeaths +bequest +bequests +berake +beraked +berakes +beraking +berascal +berascaled +berascaling +berascals +berate +berated +berates +berating +berberin +berberine +berberines +berberins +berberis +berberises +berceuse +berceuses +berdache +berdaches +bereave +bereaved +bereavement +bereavements +bereaver +bereavers +bereaves +bereaving +bereft +beret +berets +beretta +berettas +berg +bergamot +bergamots +bergere +bergeres +bergs +berhyme +berhymed +berhymes +berhyming +beribboned +beriberi +beriberis +berime +berimed +berimes +beriming +beringed +berkelium +berkeliums +berlin +berline +berlines +berlins +berm +berme +bermes +berms +bermudas +bernicle +bernicles +berobed +berouged +berretta +berrettas +berried +berries +berry +berrying +berrylike +berseem +berseems +berserk +berserker +berserkers +berserkly +berserks +berth +bertha +berthas +berthed +berthing +berths +beryl +beryline +beryllium +berylliums +beryls +bescorch +bescorched +bescorches +bescorching +bescour +bescoured +bescouring +bescours +bescreen +bescreened +bescreening +bescreens +beseech +beseeched +beseeches +beseeching +beseechingly +beseem +beseemed +beseeming +beseems +beset +besetment +besetments +besets +besetter +besetters +besetting +beshadow +beshadowed +beshadowing +beshadows +beshame +beshamed +beshames +beshaming +beshiver +beshivered +beshivering +beshivers +beshout +beshouted +beshouting +beshouts +beshrew +beshrewed +beshrewing +beshrews +beshroud +beshrouded +beshrouding +beshrouds beside besides +besiege +besieged +besieger +besiegers +besieges +besieging +beslaved +beslime +beslimed +beslimes +besliming +besmear +besmeared +besmearing +besmears +besmile +besmiled +besmiles +besmiling +besmirch +besmirched +besmirches +besmirching +besmoke +besmoked +besmokes +besmoking +besmooth +besmoothed +besmoothing +besmooths +besmudge +besmudged +besmudges +besmudging +besmut +besmuts +besmutted +besmutting +besnow +besnowed +besnowing +besnows +besom +besoms +besoothe +besoothed +besoothes +besoothing +besot +besots +besotted +besotting +besought +bespake +bespatter +bespattered +bespattering +bespatters +bespeak +bespeaking +bespeaks +bespectacled +bespoke +bespoken +bespouse +bespoused +bespouses +bespousing +bespread +bespreading +bespreads +besprent +besprinkle +besprinkled +besprinkles +besprinkling +best +bestead +besteaded +besteading +besteads +bested +bestial +bestialities +bestiality +bestialize +bestialized +bestializes +bestializing +bestially +bestiaries +bestiary +besting +bestir +bestirred +bestirring +bestirs +bestow +bestowal +bestowals +bestowed +bestowing +bestows +bestrew +bestrewed +bestrewing +bestrewn +bestrews +bestrid +bestridden +bestride +bestrides +bestriding +bestrode +bestrow +bestrowed +bestrowing +bestrown +bestrows +bests +bestseller +bestsellerdom +bestsellerdoms +bestsellers +bestud +bestudded +bestudding +bestuds +beswarm +beswarmed +beswarming +beswarms +bet +beta +betaine +betaines +betake +betaken +betakes +betaking +betas +betatron +betatrons +betatter +betattered +betattering +betatters +betaxed +betel +betelnut +betelnuts +betels +beth +bethank +bethanked +bethanking +bethanks +bethel +bethels +bethesda +bethesdas +bethink +bethinking +bethinks +bethorn +bethorned +bethorning +bethorns +bethought +beths +bethump +bethumped +bethumping +bethumps +betide +betided +betides +betiding +betime +betimes +betise +betises +betoken +betokened +betokening +betokens +beton +betonies +betons +betony +betook betray +betrayal +betrayals +betrayed +betrayer +betrayers +betraying +betrays +betroth +betrothal +betrothals +betrothed +betrotheds +betrothing +betroths +bets +betta +bettas +betted +better +bettered +bettering +betterment +betterments +betters +betting +bettor +bettors between +betweenbrain +betweenbrains +betweenness +betweennesses +betweentimes +betweenwhiles +betwixt +beuncled +bevatron +bevatrons +bevel +beveled +beveler +bevelers +beveling +bevelled +beveller +bevellers +bevelling +bevels +beverage +beverages +bevies +bevomit +bevomited +bevomiting +bevomits +bevor +bevors +bevy +bewail +bewailed +bewailer +bewailers +bewailing +bewails +beware +bewared +bewares +bewaring +bewearied +bewearies +beweary +bewearying +beweep +beweeping +beweeps +bewept +bewhiskered +bewig +bewigged +bewigging +bewigs +bewilder +bewildered +bewilderedly +bewilderedness +bewilderednesses +bewildering +bewilderingly +bewilderment +bewilderments +bewilders +bewinged +bewitch +bewitched +bewitcheries +bewitchery +bewitches +bewitching +bewitchingly +bewitchment +bewitchments +beworm +bewormed +beworming +beworms +beworried +beworries +beworry +beworrying +bewrap +bewrapped +bewrapping +bewraps +bewrapt +bewray +bewrayed +bewrayer +bewrayers +bewraying +bewrays +bey +beylic +beylics +beylik +beyliks beyond +beyonds +beys +bezant +bezants +bezazz +bezazzes +bezel +bezels +bezil +bezils +bezique +beziques +bezoar +bezoars +bezzant +bezzants +bhakta +bhaktas +bhakti +bhaktis +bhang +bhangs +bharal +bharals +bheestie +bheesties +bheesty +bhistie +bhisties +bhoot +bhoots +bhut +bhuts +bi +biacetyl +biacetyls +biali +bialis +bialy +bialys +biannual +biannually +bias +biased +biasedly +biases +biasing +biasness +biasnesses +biassed +biasses +biassing +biathlete +biathletes +biathlon +biathlons +biaxal +biaxial +biaxially +bib +bibasic +bibb +bibbed +bibber +bibberies +bibbers +bibbery +bibbing +bibbs +bibcock +bibcocks +bibelot +bibelots +bible +bibles +bibless +biblical +biblically +biblicism +biblicisms +biblicist +biblicists +biblike +bibliographer +bibliographers +bibliographic +bibliographical +bibliographically +bibliographies +bibliography +bibliolater +bibliolaters +bibliolatries +bibliolatrous +bibliolatry +bibliologies +bibliology +bibliomania +bibliomaniac +bibliomaniacal +bibliomaniacs +bibliomanias +bibliopegic +bibliopegies +bibliopegist +bibliopegists +bibliopegy +bibliophile +bibliophiles +bibliophilic +bibliophilies +bibliophilism +bibliophilisms +bibliophily +bibliopole +bibliopoles +bibliopolist +bibliopolists +bibliotheca +bibliothecae +bibliothecal +bibliothecas +bibliotherapies +bibliotherapy +bibliotic +bibliotics +bibliotist +bibliotists +biblist +biblists +bibs +bibulous +bibulously +bibulousness +bibulousnesses +bicameral +bicameralism +bicameralisms +bicarb +bicarbonate +bicarbonates +bicarbs +bicaudal +bice +bicentenaries +bicentenary +bicentennial +bicentennials +biceps +bicepses +bices +bichromate +bichromated +bichromates +bichrome +bicipital +bicker +bickered +bickerer +bickerers +bickering +bickers +bicoastal +bicolor +bicolored +bicolors +bicolour +bicolours +bicomponent +biconcave +biconcavities +biconcavity +biconditional +biconditionals +biconvex +biconvexities +biconvexity +bicorn +bicorne +bicornes +bicron +bicrons +bicultural +biculturalism +biculturalisms +bicuspid +bicuspids bicycle +bicycled +bicycler +bicyclers +bicycles +bicyclic +bicycling +bicyclist +bicyclists bid +bidarka +bidarkas +bidarkee +bidarkees +biddabilities +biddability +biddable +biddably +bidden +bidder +bidders +biddies +bidding +biddings +biddy +bide +bided +bidental +bider +biders +bides +bidet +bidets +bidialectal +bidialectalism +bidialectalisms +biding +bidirectional +bidirectionally +bidonville +bidonvilles +bids +bield +bielded +bielding +bields +biennale +biennales +biennia +biennial +biennially +biennials +biennium +bienniums +bier +biers +biface +bifaces +bifacial +bifacially +biff +biffed +biffies +biffin +biffing +biffins +biffs +biffy +bifid +bifidities +bifidity +bifidly +bifilar +bifilarly +biflagellate +biflex +bifocal +bifocals +bifold +biforate +biforked +biform +biformed +bifunctional +bifurcate +bifurcated +bifurcates +bifurcating +bifurcation +bifurcations big +bigamies +bigamist +bigamists +bigamous +bigamously +bigamy +bigarade +bigarades +bigaroon +bigaroons +bigeminal +bigeminies +bigeminy +bigeneric +bigeye +bigeyes +bigfeet +bigfoot +bigfoots +bigger +biggest +biggety +biggie +biggies +biggin +bigging +biggings +biggins +biggish +biggity +bighead +bigheaded +bigheads +bighearted +bigheartedly +bigheartedness +bigheartednesses +bighorn +bighorns +bight +bighted +bighting +bights +bigly +bigmouth +bigmouthed +bigmouths +bigness +bignesses +bignonia +bignonias +bigot +bigoted +bigotedly +bigotries +bigotry +bigots +bigs +bigwig +bigwigs +bihourly +bijection +bijections +bijective +bijou +bijous +bijouterie +bijouteries +bijoux +bijugate +bijugous bike +biked +biker +bikers +bikes +bikeway +bikeways +bikie +bikies +biking +bikini +bikinied +bikinis +bilabial +bilabials +bilabiate +bilander +bilanders +bilateral +bilateralism +bilateralisms +bilaterally +bilayer +bilayers +bilberries +bilberry +bilbo +bilboa +bilboas +bilboes +bilbos +bildungsroman +bildungsromane +bildungsromans +bile +biles +bilge +bilged +bilges +bilgewater +bilgewaters +bilgier +bilgiest +bilging +bilgy +bilharzia +bilharzial +bilharzias +bilharziases +bilharziasis +biliary +bilinear +bilingual +bilingualism +bilingualisms +bilingually +bilinguals +bilious +biliously +biliousness +biliousnesses +bilirubin +bilirubins +biliverdin +biliverdins +bilk +bilked +bilker +bilkers +bilking +bilks bill +billable +billabong +billabongs +billboard +billboarded +billboarding +billboards +billbug +billbugs +billed +biller +billers +billet +billeted +billeter +billeters +billeting +billets +billfish +billfishes +billfold +billfolds +billhead +billheads +billhook +billhooks +billiard +billiards +billie +billies +billing +billings +billingsgate +billingsgates +billion +billionaire +billionaires +billions +billionth +billionths +billon +billons +billow +billowed +billowier +billowiest +billowing +billows +billowy +bills +billy +billycan +billycans +billycock +billycocks +bilobate +bilobed +bilocation +bilocations +bilsted +bilsteds +biltong +biltongs +bima +bimah +bimahs +bimanous +bimanual +bimanually +bimas +bimbo +bimboes +bimbos +bimensal +bimester +bimesters +bimetal +bimetallic +bimetallics +bimetallism +bimetallisms +bimetallist +bimetallistic +bimetallists +bimetals +bimethyl +bimethyls +bimillenaries +bimillenary +bimillennial +bimillennials +bimodal +bimodalities +bimodality +bimolecular +bimolecularly +bimonthlies +bimonthly +bimorph +bimorphemic +bimorphs +bin +binal +binaries +binary +binate +binately +binational +binaural +binaurally +bind +bindable +binder +binderies +binders +bindery +bindi +binding +bindingly +bindingness +bindingnesses +bindings +bindis +bindle +bindles +binds +bindweed +bindweeds +bine +bines +binge +binged +bingeing +binger +bingers +binges +binging bingo +bingos +binit +binits +binnacle +binnacles +binned +binning +binocle +binocles +binocs +binocular +binocularities +binocularity +binocularly +binoculars +binomial +binomially +binomials +bins +bint +bints +binucleate +binucleated +bio +bioacoustics +bioactive +bioactivities +bioactivity +bioassay +bioassayed +bioassaying +bioassays +bioavailabilities +bioavailability +bioavailable +biocenoses +biocenosis +biochemical +biochemically +biochemicals +biochemist +biochemistries biochemistry +biochemists +biochip +biochips +biocidal +biocide +biocides +bioclean +bioclimatic +biocoenoses +biocoenosis +biocompatibilities +biocompatibility +biocompatible +biocontrol +biocontrols +bioconversion +bioconversions +biocycle +biocycles +biodegradabilities +biodegradability +biodegradable +biodegradation +biodegradations +biodegrade +biodegraded +biodegrades +biodegrading +biodeterioration +biodeteriorations +biodiversities +biodiversity +biodynamic +bioelectric +bioelectrical +bioelectricities +bioelectricity +bioenergetic +bioenergetics +bioengineer +bioengineered +bioengineering +bioengineerings +bioengineers +bioethic +bioethical +bioethicist +bioethicists +bioethics +biofeedback +biofeedbacks +biofouling +biofoulings +biogas +biogases +biogasses +biogen +biogeneses +biogenesis +biogenetic +biogenetically +biogenic +biogenies +biogenous +biogens +biogeny +biogeochemical +biogeochemicals +biogeochemistries +biogeochemistry +biogeographer +biogeographers +biogeographic +biogeographical +biogeographies +biogeography +biographee +biographees +biographer +biographers +biographic +biographical +biographically +biographies biography +biohazard +biohazards +bioherm +bioherms +biologic +biological +biologically +biologicals +biologics +biologies +biologism +biologisms +biologist +biologistic +biologists biology +bioluminescence +bioluminescences +bioluminescent +biolyses +biolysis +biolytic +biomass +biomasses +biomaterial +biomaterials +biomathematical +biomathematician +biomathematicians +biomathematics +biome +biomechanical +biomechanically +biomechanics +biomedical +biomedicine +biomedicines +biomes +biometeorological +biometeorologies +biometeorology +biometric +biometrical +biometrician +biometricians +biometrics +biometries +biometry +biomolecular +biomolecule +biomolecules +biomorphic +bionic +bionics +bionomic +bionomics +bionomies +bionomy +biont +biontic +bionts +biophysical +biophysicist +biophysicists +biophysics +biopic +biopics +bioplasm +bioplasms +biopolymer +biopolymers +biopsic +biopsied +biopsies +biopsy +biopsying +bioptic +bioreactor +bioreactors +biorhythm +biorhythmic +biorhythms +bios +biosafeties +biosafety +bioscience +biosciences +bioscientific +bioscientist +bioscientists +bioscope +bioscopes +bioscopies +bioscopy +biosensor +biosensors +biosocial +biosocially +biosphere +biospheres +biospheric +biostatistical +biostatistician +biostatisticians +biostatistics +biostratigraphic +biostratigraphies +biostratigraphy +biosyntheses +biosynthesis +biosynthetic +biosynthetically +biosystematic +biosystematics +biosystematist +biosystematists +biota +biotas +biotech +biotechnical +biotechnological +biotechnologies +biotechnologist +biotechnologists +biotechnology +biotechs +biotelemetric +biotelemetries +biotelemetry +biotic +biotical +biotics +biotin +biotins +biotite +biotites +biotitic +biotope +biotopes +biotoxin +biotoxins +biotransformation +biotransformations +biotron +biotrons +biotype +biotypes +biotypic +biovular +bipack +bipacks +biparental +biparentally +biparous +biparted +bipartisan +bipartisanism +bipartisanisms +bipartisanship +bipartisanships +bipartite +bipartitely +bipartition +bipartitions +biparty +biped +bipedal +bipedalism +bipedalisms +bipedalities +bipedality +bipedally +bipeds +biphasic +biphenyl +biphenyls +bipinnate +bipinnately +biplane +biplanes +bipod +bipods +bipolar +bipolarities +bipolarity +bipolarization +bipolarizations +bipolarize +bipolarized +bipolarizes +bipolarizing +bipropellant +bipropellants +bipyramid +bipyramidal +bipyramids +biquadratic +biquadratics +biracial +biracialism +biracialisms +biradial +biramose +biramous +birch +birched +birchen +birches +birching bird +birdbath +birdbaths +birdbrain +birdbrained +birdbrains +birdcage +birdcages +birdcall +birdcalls +birded +birder +birders +birdfarm +birdfarms +birdhouse +birdhouses +birdie +birdied +birdieing +birdies +birding +birdings +birdlike +birdlime +birdlimed +birdlimes +birdliming +birdman +birdmen +birds +birdseed +birdseeds +birdseye +birdseyes +birdshot +birdshots +birdsong +birdsongs +birdwatcher +birdwatchers +birefringence +birefringences +birefringent +bireme +biremes +biretta +birettas +birk +birkie +birkies +birks +birl +birle +birled +birler +birlers +birles +birling +birlings +birls +birr +birred +birretta +birrettas +birring +birrotch +birrs +birse +birses birth +birthdate +birthdates birthday +birthdays +birthed +birthing +birthmark +birthmarks birthplace +birthplaces +birthrate +birthrates +birthright +birthrights +birthroot +birthroots +births +birthstone +birthstones +birthwort +birthworts +bis biscuit +biscuits +bise +bisect +bisected +bisecting +bisection +bisectional +bisectionally +bisections +bisector +bisectors +bisects +bises +bisexual +bisexualities +bisexuality +bisexually +bisexuals bishop +bishoped +bishoping +bishopric +bishoprics +bishops +bisk +bisks +bismuth +bismuthic +bismuths +bisnaga +bisnagas +bison +bisons +bisontine +bisque +bisques +bistate +bister +bistered +bisters +bistort +bistorts +bistouries +bistoury +bistre +bistred +bistres +bistro +bistroic +bistros +bisulfate +bisulfates +bisulfide +bisulfides +bisulfite +bisulfites bit +bitable +bitartrate +bitartrates +bitch +bitched +bitcheries +bitchery +bitches +bitchier +bitchiest +bitchily +bitchiness +bitchinesses +bitching +bitchy bite +biteable +biter +biters +bites +bitewing +bitewings +biting +bitingly +bits +bitstock +bitstocks +bitsy +bitt +bitted +bitten bitter +bitterbrush +bitterbrushes +bittered +bitterer +bitterest +bittering +bitterish +bitterly +bittern +bitterness +bitternesses +bitterns +bitterroot +bitterroots +bitters +bittersweet +bittersweetly +bittersweetness +bittersweetnesses +bittersweets +bitterweed +bitterweeds +bittier +bittiest +bitting +bittings +bittock +bittocks +bitts +bitty +bitumen +bitumens +bituminization +bituminizations +bituminize +bituminized +bituminizes +bituminizing +bituminous +biunique +biuniqueness +biuniquenesses +bivalent +bivalents +bivalve +bivalved +bivalves +bivariate +bivinyl +bivinyls +bivouac +bivouacked +bivouacking +bivouacks +bivouacs +biweeklies +biweekly +biyearly +biz +bizarre +bizarrely +bizarreness +bizarrenesses +bizarrerie +bizarreries +bizarres +bize +bizes +biznaga +biznagas +bizonal +bizone +bizones +bizzes +blab +blabbed +blabber +blabbered +blabbering +blabbermouth +blabbermouths +blabbers +blabbing +blabby +blabs black +blackamoor +blackamoors +blackball +blackballed +blackballing +blackballs +blackberries +blackberry +blackbird +blackbirded +blackbirder +blackbirders +blackbirding +blackbirds blackboard +blackboards +blackbodies +blackbody +blackboy +blackboys +blackcap +blackcaps +blackcock +blackcocks +blacked +blacken +blackened +blackener +blackeners +blackening +blackenings +blackens +blacker +blackest +blackface +blackfaces +blackfin +blackfins +blackfish +blackfishes +blackflies +blackfly +blackguard +blackguarded +blackguarding +blackguardism +blackguardisms +blackguardly +blackguards +blackgum +blackgums +blackhander +blackhanders +blackhead +blackheads +blackheart +blackhearts +blacking +blackings +blackish +blackjack +blackjacked +blackjacking +blackjacks +blackland +blacklands +blacklead +blackleads +blackleg +blacklegs +blacklist +blacklisted +blacklister +blacklisters +blacklisting +blacklists +blackly +blackmail +blackmailed +blackmailer +blackmailers +blackmailing +blackmails +blackness +blacknesses +blackout +blackouts +blackpoll +blackpolls +blacks +blacksmith +blacksmithing +blacksmithings +blacksmiths +blacksnake +blacksnakes +blacktail +blacktails +blackthorn +blackthorns +blacktop +blacktopped +blacktopping +blacktops +blackwater +blackwaters +blackwood +blackwoods +bladder +bladderlike +bladdernut +bladdernuts +bladders +bladderwort +bladderworts +bladdery +blade +bladed +bladelike +blades +blae +blaeberries +blaeberry +blah +blahs +blain +blains +blam +blamable +blamably blame +blamed +blameful +blamefully +blameless +blamelessly +blamelessness +blamelessnesses +blamer +blamers +blames +blameworthiness +blameworthinesses +blameworthy +blaming +blams +blanch +blanched +blancher +blanchers +blanches +blanching +blancmange +blancmanges +bland +blander +blandest +blandish +blandished +blandisher +blandishers +blandishes +blandishing +blandishment +blandishments +blandly +blandness +blandnesses blank +blanked +blanker +blankest blanket +blanketed +blanketflower +blanketflowers +blanketing +blanketlike +blankets +blanking +blankly +blankness +blanknesses +blanks +blanquette +blanquettes +blare +blared +blares +blaring +blarney +blarneyed +blarneying +blarneys +blase +blaspheme +blasphemed +blasphemer +blasphemers +blasphemes +blasphemies +blaspheming +blasphemous +blasphemously +blasphemousness +blasphemousnesses +blasphemy +blast +blasted +blastema +blastemal +blastemas +blastemata +blastematic +blaster +blasters +blastie +blastier +blasties +blastiest +blasting +blastings +blastment +blastments +blastocoel +blastocoele +blastocoeles +blastocoelic +blastocoels +blastocyst +blastocysts +blastoderm +blastoderms +blastodisc +blastodiscs +blastoff +blastoffs +blastoma +blastomas +blastomata +blastomere +blastomeres +blastomycoses +blastomycosis +blastopore +blastopores +blastoporic +blastospore +blastospores +blasts +blastula +blastulae +blastulas +blastulation +blastulations +blasty +blat +blatancies +blatancy +blatant +blatantly +blate +blather +blathered +blatherer +blatherers +blathering +blathers +blatherskite +blatherskites +blats +blatted +blatter +blattered +blattering +blatters +blatting +blaubok +blauboks +blaw +blawed +blawing +blawn +blaws +blaxploitation +blaxploitations +blaze +blazed +blazer +blazers +blazes +blazing +blazingly +blazon +blazoned +blazoner +blazoners +blazoning +blazonings +blazonries +blazonry +blazons +bleach +bleachable +bleached +bleacher +bleacherite +bleacherites +bleachers +bleaches +bleaching +bleak +bleaker +bleakest +bleakish +bleakly +bleakness +bleaknesses +bleaks +blear +bleared +blearier +bleariest +blearily +bleariness +blearinesses +blearing +blears +bleary +bleat +bleated +bleater +bleaters +bleating +bleats +bleb +blebby +blebs +bled bleed +bleeder +bleeders +bleeding +bleedings +bleeds +bleep +bleeped +bleeping +bleeps +blellum +blellums +blemish +blemished +blemishes +blemishing +blench +blenched +blencher +blenchers +blenches +blenching +blend +blende +blended +blender +blenders +blendes +blending +blends +blennies +blenny +blent +blepharoplast +blepharoplasties +blepharoplasts +blepharoplasty +blepharospasm +blepharospasms +blesbok +blesboks +blesbuck +blesbucks bless +blessed +blesseder +blessedest +blessedly +blessedness +blessednesses +blesser +blessers +blesses +blessing +blessings +blest +blet +blether +blethered +blethering +blethers +blets +blew +blight +blighted +blighter +blighters +blighties +blighting +blights +blighty +blimey +blimp +blimpish +blimpishly +blimpishness +blimpishnesses +blimps +blimy +blin blind +blindage +blindages +blinded +blinder +blinders +blindest +blindfish +blindfishes +blindfold +blindfolded +blindfolding +blindfolds +blinding +blindingly +blindly +blindness +blindnesses +blinds +blindside +blindsided +blindsides +blindsiding +blindworm +blindworms +blini +blinis +blink +blinkard +blinkards +blinked +blinker +blinkered +blinkering +blinkers +blinking +blinks +blintz +blintze +blintzes +blip +blipped +blipping +blips +bliss +blissed +blisses +blissful +blissfully +blissfulness +blissfulnesses +blissing +blister +blistered +blistering +blisteringly +blisters +blistery +blite +blites +blithe +blithely +blither +blithered +blithering +blithers +blithesome +blithesomely +blithest +blitz +blitzed +blitzes +blitzing +blitzkrieg +blitzkriegs +blizzard +blizzardly +blizzards +blizzardy +bloat +bloated +bloater +bloaters +bloating +bloats +blob +blobbed +blobbing +blobs +bloc block +blockade +blockaded +blockader +blockaders +blockades +blockading +blockage +blockages +blockbuster +blockbusters +blockbusting +blockbustings +blocked +blocker +blockers +blockhead +blockheads +blockhouse +blockhouses +blockier +blockiest +blocking +blockish +blocks +blocky +blocs +bloke +blokes +blond +blonde +blonder +blondes +blondest +blondish +blonds blood +bloodbath +bloodbaths +bloodcurdling +blooded +bloodfin +bloodfins +bloodguilt +bloodguiltiness +bloodguiltinesses +bloodguilts +bloodguilty +bloodhound +bloodhounds +bloodied +bloodier +bloodies +bloodiest +bloodily +bloodiness +bloodinesses +blooding +bloodings +bloodless +bloodlessly +bloodlessness +bloodlessnesses +bloodletting +bloodlettings +bloodline +bloodlines +bloodmobile +bloodmobiles +bloodred +bloodroot +bloodroots +bloods +bloodshed +bloodsheds +bloodshot +bloodstain +bloodstained +bloodstains +bloodstock +bloodstocks +bloodstone +bloodstones +bloodstream +bloodstreams +bloodsucker +bloodsuckers +bloodsucking +bloodthirstily +bloodthirstiness +bloodthirstinesses +bloodthirsty +bloodworm +bloodworms +bloody +bloodying +blooey +blooie +bloom +bloomed +bloomer +bloomeries +bloomers +bloomery +bloomier +bloomiest +blooming +blooms +bloomy +bloop +blooped +blooper +bloopers +blooping +bloops +blossom +blossomed +blossoming +blossoms +blossomy +blot +blotch +blotched +blotches +blotchier +blotchiest +blotchily +blotching +blotchy +blotless +blots +blotted +blotter +blotters +blottier +blottiest +blotting +blotto +blotty blouse +bloused +blouses +blousier +blousiest +blousily +blousing +blouson +blousons +blousy +bloviate +bloviated +bloviates +bloviating blow +blowback +blowbacks +blowball +blowballs +blowby +blowbys +blowdown +blowdowns +blowed +blower +blowers +blowfish +blowfishes +blowflies +blowfly +blowgun +blowguns +blowhard +blowhards +blowhole +blowholes +blowier +blowiest +blowing +blowjob +blowjobs +blown +blowoff +blowoffs +blowout +blowouts +blowpipe +blowpipes +blows +blowsed +blowsier +blowsiest +blowsily +blowsy +blowtorch +blowtorches +blowtube +blowtubes +blowup +blowups +blowy +blowzed +blowzier +blowziest +blowzily +blowzy +blub +blubbed +blubber +blubbered +blubbering +blubbers +blubbery +blubbing +blubs +blucher +bluchers +bludgeon +bludgeoned +bludgeoning +bludgeons +bludger +bludgers blue +blueball +blueballs +bluebeard +bluebeards +bluebell +bluebells +blueberries +blueberry +bluebill +bluebills +bluebird +bluebirds +bluebonnet +bluebonnets +bluebook +bluebooks +bluebottle +bluebottles +bluecap +bluecaps +bluecoat +bluecoats +blued +bluefin +bluefins +bluefish +bluefishes +bluegill +bluegills +bluegrass +bluegrasses +bluegum +bluegums +bluehead +blueheads +blueing +blueings +blueish +bluejack +bluejacket +bluejackets +bluejacks +bluejay +bluejays +bluejeans +blueline +bluelines +bluely +blueness +bluenesses +bluenose +bluenoses +bluepoint +bluepoints +blueprint +blueprinted +blueprinting +blueprints +bluer +blues +blueshift +blueshifted +blueshifts +bluesier +bluesiest +bluesman +bluesmen +bluest +bluestem +bluestems +bluestocking +bluestockings +bluestone +bluestones +bluesy +bluet +bluetick +blueticks +bluetongue +bluetongues +bluets +blueweed +blueweeds +bluewood +bluewoods +bluey +blueys +bluff +bluffed +bluffer +bluffers +bluffest +bluffing +bluffly +bluffness +bluffnesses +bluffs +bluing +bluings +bluish +bluishness +bluishnesses +blume +blumed +blumes +bluming +blunder +blunderbuss +blunderbusses +blundered +blunderer +blunderers +blundering +blunderingly +blunders +blunge +blunged +blunger +blungers +blunges +blunging +blunt +blunted +blunter +bluntest +blunting +bluntly +bluntness +bluntnesses +blunts +blur +blurb +blurbed +blurbing +blurbs +blurred +blurrier +blurriest +blurrily +blurriness +blurrinesses +blurring +blurringly +blurry +blurs +blurt +blurted +blurter +blurters +blurting +blurts +blush +blushed +blusher +blushers +blushes +blushful +blushing +blushingly +bluster +blustered +blusterer +blusterers +blustering +blusteringly +blusterous +blusters +blustery +blype +blypes +bo +boa +boar board +boarded +boarder +boarders +boarding +boardinghouse +boardinghouses +boardings +boardlike +boardman +boardmen +boardroom +boardrooms +boards +boardsailing +boardsailings +boardsailor +boardsailors +boardwalk +boardwalks +boarfish +boarfishes +boarish +boars +boart +boarts +boas +boast +boasted +boaster +boasters +boastful +boastfully +boastfulness +boastfulnesses +boasting +boasts boat +boatable +boatbill +boatbills +boatbuilder +boatbuilders +boatbuilding +boatbuildings +boated +boatel +boatels +boater +boaters +boatful +boatfuls +boathook +boathooks +boathouse +boathouses +boating +boatings +boatlike +boatload +boatloads +boatman +boatmen +boats +boatsman +boatsmen +boatswain +boatswains +boatyard +boatyards +bob +bobbed +bobber +bobberies +bobbers +bobbery +bobbies +bobbin +bobbinet +bobbinets +bobbing +bobbins +bobble +bobbled +bobbles +bobbling +bobby +bobcat +bobcats +bobeche +bobeches +bobolink +bobolinks +bobs +bobsled +bobsledded +bobsledder +bobsledders +bobsledding +bobsleddings +bobsleds +bobstay +bobstays +bobtail +bobtailed +bobtailing +bobtails +bobwhite +bobwhites +bocaccio +bocaccios +bocce +bocces +bocci +boccia +boccias +boccie +boccies +boccis +boche +boches +bock +bocks +bod +bodacious +bodaciously +boddhisattva +boddhisattvas +bode +boded +bodega +bodegas +bodement +bodements +bodes +bodhisattva +bodhisattvas +bodhran +bodhrans +bodice +bodices +bodied +bodies +bodiless +bodily +boding +bodingly +bodings +bodkin +bodkins +bods body +bodybuilder +bodybuilders +bodybuilding +bodybuildings +bodycheck +bodychecked +bodychecking +bodychecks +bodyguard +bodyguards +bodying +bodysuit +bodysuits +bodysurf +bodysurfed +bodysurfer +bodysurfers +bodysurfing +bodysurfs +bodywork +bodyworks +boehmite +boehmites +boff +boffin +boffins +boffo +boffola +boffolas +boffos +boffs +bog +bogan +bogans +bogbean +bogbeans +bogey +bogeyed +bogeying +bogeyman +bogeymen +bogeys +bogged +boggier +boggiest +bogging +boggish +boggle +boggled +boggler +bogglers +boggles +boggling +boggy +bogie +bogies +bogle +bogles +bogs +bogus +bogwood +bogwoods +bogy +bogyism +bogyisms +bogyman +bogymen +bohea +boheas +bohemia +bohemian +bohemianism +bohemianisms +bohemians +bohemias +bohunk +bohunks boil +boilable +boiled +boiler +boilermaker +boilermakers +boilerplate +boilerplates +boilers +boilersuit +boilersuits +boiling +boiloff +boiloffs +boils +boing +boiserie +boiseries +boisterous +boisterously +boisterousness +boisterousnesses +boite +boites +bola +bolar +bolas +bolases +bold +bolder +boldest +boldface +boldfaced +boldfaces +boldfacing +boldly +boldness +boldnesses +bolds +bole +bolero +boleros +boles +bolete +boletes +boleti +boletus +boletuses +bolide +bolides +bolivar +bolivares +bolivars +bolivia +boliviano +bolivianos +bolivias +boll +bollard +bollards +bolled +bolling +bollix +bollixed +bollixes +bollixing +bollocks +bollox +bolloxed +bolloxes +bolloxing +bolls +bollworm +bollworms +bolo +bologna +bolognas +bolometer +bolometers +bolometric +bolometrically +boloney +boloneys +bolos +bolshevism +bolshevisms +bolshevize +bolshevized +bolshevizes +bolshevizing +bolshie +bolshies +bolshy +bolson +bolsons +bolster +bolstered +bolsterer +bolsterers +bolstering +bolsters +bolt +bolted +bolter +bolters +bolthead +boltheads +bolthole +boltholes +bolting +boltonia +boltonias +boltrope +boltropes +bolts +bolus +boluses bomb +bombard +bombarded +bombardier +bombardiers +bombarding +bombardment +bombardments +bombardon +bombardons +bombards +bombast +bombastic +bombastically +bombasts +bombax +bombazine +bombazines +bombe +bombed +bomber +bombers +bombes +bombesin +bombesins +bombinate +bombinated +bombinates +bombinating +bombination +bombinations +bombing +bombings +bombload +bombloads +bombproof +bombs +bombshell +bombshells +bombsight +bombsights +bombycid +bombycids +bombyx +bombyxes +bonaci +bonacis +bonanza +bonanzas +bonbon +bonbons bond +bondable +bondage +bondages +bonded +bonder +bonders +bondholder +bondholders +bonding +bondings +bondmaid +bondmaids +bondman +bondmen +bonds +bondsman +bondsmen +bondstone +bondstones +bonduc +bonducs +bondwoman +bondwomen bone +boned +bonefish +bonefishes +bonefishing +bonefishings +bonehead +boneheaded +boneheadedness +boneheadednesses +boneheads +boneless +bonemeal +bonemeals +boner +boners +bones +boneset +bonesets +bonesetter +bonesetters +boney +boneyard +boneyards +bonfire +bonfires +bong +bonged +bonging +bongo +bongoes +bongoist +bongoists +bongos +bongs +bonhomie +bonhomies +bonhomous +bonier +boniest +boniface +bonifaces +boniness +boninesses +boning +bonita +bonitas +bonito +bonitoes +bonitos +bonk +bonked +bonkers +bonking +bonks +bonne +bonnes +bonnet +bonneted +bonneting +bonnets +bonnie +bonnier +bonniest +bonnily +bonnock +bonnocks +bonny +bonnyclabber +bonnyclabbers +bonsai +bonspell +bonspells +bonspiel +bonspiels +bontebok +bonteboks bonus +bonuses +bony +bonze +bonzer +bonzes +boo +boob +boobed +boobie +boobies +boobing +boobish +booboisie +booboisies +booboo +booboos +boobs +booby +boodle +boodled +boodler +boodlers +boodles +boodling +booed +booger +boogerman +boogermen +boogers +boogey +boogeyed +boogeying +boogeyman +boogeymen +boogeys +boogie +boogied +boogies +boogy +boogying +boogyman +boogymen +boohoo +boohooed +boohooing +boohoos +booing book +bookable +bookbinder +bookbinderies +bookbinders +bookbindery +bookbinding +bookbindings +bookcase +bookcases +booked +bookend +bookends +booker +bookers +bookful +bookfuls +bookie +bookies +booking +bookings +bookish +bookishly +bookishness +bookishnesses +bookkeeper +bookkeepers +bookkeeping +bookkeepings +booklet +booklets +booklice +booklore +booklores +booklouse +bookmaker +bookmakers +bookmaking +bookmakings +bookman +bookmark +bookmarker +bookmarkers +bookmarks +bookmen +bookmobile +bookmobiles +bookplate +bookplates +bookrack +bookracks +bookrest +bookrests +books +bookseller +booksellers +bookselling +booksellings +bookshelf +bookshelves +bookshop +bookshops +bookstall +bookstalls +bookstore +bookstores +bookworm +bookworms boom +boombox +boomboxes +boomed +boomer +boomerang +boomeranged +boomeranging +boomerangs +boomers +boomier +boomiest +booming +boomkin +boomkins +boomlet +boomlets +booms +boomtown +boomtowns +boomy +boon +boondock +boondocks +boondoggle +boondoggled +boondoggler +boondogglers +boondoggles +boondoggling +boonies +boons +boor +boorish +boorishly +boorishness +boorishnesses +boors +boos +boost +boosted +booster +boosterism +boosterisms +boosters +boosting +boosts boot +bootable +bootblack +bootblacks +booted +bootee +bootees +booteries +bootery booth +booths +bootie +booties +booting +bootjack +bootjacks +bootlace +bootlaces +bootleg +bootlegged +bootlegger +bootleggers +bootlegging +bootlegs +bootless +bootlessly +bootlessness +bootlessnesses +bootlick +bootlicked +bootlicker +bootlickers +bootlicking +bootlicks +boots +bootstrap +bootstrapped +bootstrapping +bootstraps +booty +booze +boozed +boozer +boozers +boozes +boozier +booziest +boozily +boozing +boozy +bop +bopeep +bopeeps +bopped +bopper +boppers +bopping +bops +bora +boraces +boracic +boracite +boracites +borage +borages +boral +borals +borane +boranes +boras +borate +borated +borates +borating +borax +boraxes +borborygmi +borborygmus +bordeaux +bordel +bordello +bordellos +bordels border +bordereau +bordereaux +bordered +borderer +borderers +bordering +borderland +borderlands +borderline +borderlines +borders +bordure +bordures +bore +boreal +borecole +borecoles bored +boredom +boredoms +boreen +boreens +borehole +boreholes +borer +borers +bores +borescope +borescopes +boresome +boric +boride +borides boring +boringly +boringness +boringnesses +borings born +borne +borneol +borneols +bornite +bornites +borohydride +borohydrides +boron +boronic +borons +borosilicate +borosilicates +borough +boroughs borrow +borrowed +borrower +borrowers +borrowing +borrowings +borrows +borsch +borsches +borscht +borschts +borsht +borshts +borstal +borstals +bort +borts +borty +bortz +bortzes +borzoi +borzois +bos +boscage +boscages +boschbok +boschboks +bosh +boshbok +boshboks +boshes +boshvark +boshvarks +bosk +boskage +boskages +bosker +bosket +boskets +boskier +boskiest +bosks +bosky +bosom +bosomed +bosoming +bosoms +bosomy +boson +bosons +bosque +bosques +bosquet +bosquets boss +bossdom +bossdoms +bossed +bosses +bossier +bossies +bossiest +bossily +bossiness +bossinesses +bossing +bossism +bossisms +bossy +boston +bostons +bosun +bosuns +bot +bota +botanic +botanica botanical +botanically +botanicals +botanicas +botanies +botanise +botanised +botanises +botanising +botanist +botanists +botanize +botanized +botanizes +botanizing botany +botas +botch +botched +botcher +botcheries +botchers +botchery +botches +botchier +botchiest +botchily +botching +botchy +botel +botels +botflies +botfly both bother +botheration +botherations +bothered +bothering +bothers +bothersome +bothies +bothria +bothrium +bothriums +bothy +botonee +botonnee +botryoid +botryoidal +botryose +botrytis +botrytises +bots +bott bottle +bottlebrush +bottlebrushes +bottled +bottleful +bottlefuls +bottleneck +bottlenecked +bottlenecking +bottlenecks +bottler +bottlers +bottles +bottling +bottlings bottom +bottomed +bottomer +bottomers +bottoming +bottomland +bottomlands +bottomless +bottomlessly +bottomlessness +bottomlessnesses +bottommost +bottomries +bottomry +bottoms +botts +botulin +botulinal +botulins +botulinum +botulinums +botulinus +botulinuses +botulism +botulisms +boubou +boubous +bouchee +bouchees +boucle +boucles +boudoir +boudoirs +bouffant +bouffants +bouffe +bouffes +bougainvillaea +bougainvillaeas +bougainvillea +bougainvilleas +bough +boughed +boughpot +boughpots +boughs +bought +boughten +bougie +bougies +bouillabaisse +bouillabaisses +bouillon +bouillons +boulder +bouldered +boulders +bouldery +boule +boules +boulevard +boulevardier +boulevardiers +boulevards +bouleversement +bouleversements +boulle +boulles bounce +bounced +bouncer +bouncers +bounces +bouncier +bounciest +bouncily +bouncing +bouncingly +bouncy bound +boundaries boundary +bounded +boundedness +boundednesses +bounden +bounder +bounderish +bounders +bounding +boundless +boundlessly +boundlessness +boundlessnesses +bounds +bounteous +bounteously +bounteousness +bounteousnesses +bountied +bounties +bountiful +bountifully +bountifulness +bountifulnesses +bounty +bouquet +bouquets +bourbon +bourbonism +bourbonisms +bourbons +bourdon +bourdons +bourg +bourgeois +bourgeoise +bourgeoises +bourgeoisie +bourgeoisies +bourgeoisification +bourgeoisifications +bourgeoisified +bourgeoisifies +bourgeoisify +bourgeoisifying +bourgeon +bourgeoned +bourgeoning +bourgeons +bourgs +bourguignon +bourguignonne +bourn +bourne +bournes +bourns +bourree +bourrees +bourride +bourrides +bourse +bourses +bourtree +bourtrees +bouse +boused +bouses +bousing +bousouki +bousoukia +bousoukis +boustrophedon +boustrophedonic +boustrophedons +bousy +bout +boutique +boutiques +bouton +boutonniere +boutonnieres +boutons +bouts +bouvier +bouviers +bouzouki +bouzoukia +bouzoukis +bovid +bovids +bovine +bovinely +bovines +bovinities +bovinity bow +bowdlerise +bowdlerised +bowdlerises +bowdlerising +bowdlerization +bowdlerizations +bowdlerize +bowdlerized +bowdlerizer +bowdlerizers +bowdlerizes +bowdlerizing +bowed +bowel +boweled +boweling +bowelled +bowelless +bowelling +bowels +bower +bowerbird +bowerbirds +bowered +boweries +bowering +bowers +bowery +bowfin +bowfins +bowfront +bowhead +bowheads +bowing +bowingly +bowings +bowknot +bowknots bowl +bowlder +bowlders +bowled +bowleg +bowlegged +bowlegs +bowler +bowlers +bowless +bowlful +bowlfuls +bowlike +bowline +bowlines bowling +bowlings +bowllike +bowls +bowman +bowmen +bowpot +bowpots +bows +bowse +bowsed +bowses +bowshot +bowshots +bowsing +bowsprit +bowsprits +bowstring +bowstrings +bowwow +bowwowed +bowwowing +bowwows +bowyer +bowyers box +boxberries +boxberry +boxboard +boxboards +boxcar +boxcars +boxed +boxer +boxers +boxes +boxfish +boxfishes +boxful +boxfuls +boxhaul +boxhauled +boxhauling +boxhauls +boxier +boxiest +boxiness +boxinesses boxing +boxings +boxlike +boxthorn +boxthorns +boxwood +boxwoods +boxy boy +boyar +boyard +boyards +boyarism +boyarisms +boyars +boychick +boychicks +boychik +boychiks boycott +boycotted +boycotter +boycotters +boycotting +boycotts +boyfriend +boyfriends +boyhood +boyhoods +boyish +boyishly +boyishness +boyishnesses +boyla +boylas +boyo +boyos +boys +boysenberries +boysenberry +bozo +bozos +bra +brabble +brabbled +brabbler +brabblers +brabbles +brabbling +brace +braced +bracelet +bracelets +bracer +bracero +braceros +bracers +braces +brach +braches +brachet +brachets +brachia +brachial +brachials +brachiate +brachiated +brachiates +brachiating +brachiation +brachiations +brachiator +brachiators +brachiopod +brachiopods +brachium +brachs +brachycephalic +brachycephalies +brachycephaly +brachypterous +bracing +bracingly +bracings +braciola +braciolas +braciole +bracioles +bracken +brackens +bracket +bracketed +bracketing +brackets +brackish +brackishness +brackishnesses +braconid +braconids +bract +bracteal +bracteate +bracted +bracteole +bracteoles +bractlet +bractlets +bracts +brad +bradawl +bradawls +bradded +bradding +bradoon +bradoons +brads +bradycardia +bradycardias +bradykinin +bradykinins +brae +braes +brag +braggadocio +braggadocios +braggart +braggarts +bragged +bragger +braggers +braggest +braggier +braggiest +bragging +braggy +brags +brahma +brahmas +braid +braided +braider +braiders +braiding +braidings +braids +brail +brailed +brailing +braille +brailled +brailles +braillewriter +braillewriters +brailling +braillist +braillists +brails brain +braincase +braincases +brainchild +brainchildren +brained +brainier +brainiest +brainily +braininess +braininesses +braining +brainish +brainless +brainlessly +brainlessness +brainlessnesses +brainpan +brainpans +brainpower +brainpowers +brains +brainsick +brainsickly +brainstorm +brainstormed +brainstormer +brainstormers +brainstorming +brainstormings +brainstorms +brainteaser +brainteasers +brainwash +brainwashed +brainwasher +brainwashers +brainwashes +brainwashing +brainwashings +brainy +braise +braised +braises +braising +braize +braizes brake +brakeage +brakeages +braked +brakeless +brakeman +brakemen +brakes +brakier +brakiest +braking +braky +braless +bramble +brambled +brambles +bramblier +brambliest +brambling +brambly +bran branch +branched +branches +branchia +branchiae +branchial +branchier +branchiest +branching +branchiopod +branchiopods +branchless +branchlet +branchlets +branchline +branchlines +branchy brand +branded +brander +branders +brandied +brandies +branding +brandish +brandished +brandishes +brandishing +brands +brandy +brandying +brank +branks +branned +branner +branners +brannier +branniest +brannigan +brannigans +branning +branny +brans +brant +brantail +brantails +brants +bras +brash +brasher +brashes +brashest +brashier +brashiest +brashly +brashness +brashnesses +brashy +brasier +brasiers +brasil +brasilin +brasilins +brasils +brass +brassage +brassages +brassard +brassards +brassart +brassarts +brassbound +brassed +brasserie +brasseries +brasses +brassica +brassicas +brassie +brassier +brassiere +brassieres +brassies +brassiest +brassily +brassiness +brassinesses +brassing +brassish +brassy +brat +brats +brattice +bratticed +brattices +bratticing +brattier +brattiest +brattiness +brattinesses +brattish +brattle +brattled +brattles +brattling +bratty +bratwurst +bratwursts +braunite +braunites +braunschweiger +braunschweigers +brava +bravado +bravadoes +bravados +bravas brave +braved +bravely +braver +braveries +bravers bravery +braves +bravest +bravi +braving +bravo +bravoed +bravoes +bravoing +bravos +bravura +bravuras +bravure +braw +brawer +brawest +brawl +brawled +brawler +brawlers +brawlie +brawlier +brawliest +brawling +brawls +brawly +brawn +brawnier +brawniest +brawnily +brawniness +brawninesses +brawns +brawny +braws +braxies +braxy +bray +brayed +brayer +brayers +braying +brays +braza +brazas +braze +brazed +brazen +brazened +brazening +brazenly +brazenness +brazennesses +brazens +brazer +brazers +brazes +brazier +braziers +brazil +brazilin +brazilins +brazils +brazilwood +brazilwoods +brazing +breach +breached +breacher +breachers +breaches +breaching bread +breadbasket +breadbaskets +breadboard +breadboarded +breadboarding +breadboards +breadbox +breadboxes +breaded +breadfruit +breadfruits +breading +breadline +breadlines +breadnut +breadnuts +breads +breadstuff +breadstuffs +breadth +breadths +breadthwise +breadwinner +breadwinners +breadwinning +breadwinnings +bready break +breakable +breakables +breakage +breakages +breakaway +breakaways +breakdown +breakdowns +breaker +breakers +breakeven +breakevens breakfast +breakfasted +breakfaster +breakfasters +breakfasting +breakfasts +breakfront +breakfronts +breaking +breakings +breakneck +breakout +breakouts +breaks +breaksaway breakthrough +breakthroughs +breakup +breakups +breakwater +breakwaters +bream +breamed +breaming +breams breast +breastbone +breastbones +breasted +breasting +breastplate +breastplates +breasts +breaststroke +breaststroker +breaststrokers +breaststrokes +breastwork +breastworks breath +breathabilities +breathability +breathable breathe +breathed +breather +breathers +breathes +breathier +breathiest +breathily +breathiness +breathinesses +breathing +breathings breathless +breathlessly +breathlessness +breathlessnesses +breaths +breathtaking +breathtakingly +breathy +breccia +breccial +breccias +brecciate +brecciated +brecciates +brecciating +brecciation +brecciations +brecham +brechams +brechan +brechans +bred +brede +bredes +bree +breech +breechblock +breechblocks +breechcloth +breechcloths +breechclout +breechclouts +breeched +breeches +breeching +breechings +breechloader +breechloaders +breed +breeder +breeders +breeding +breedings +breeds +breeks +brees +breeze +breezed +breezeless +breezes +breezeway +breezeways +breezier +breeziest +breezily +breeziness +breezinesses +breezing +breezy +bregma +bregmata +bregmate +bremsstrahlung +bremsstrahlungs +bren +brens +brent +brents +brethren +breve +breves +brevet +brevetcies +brevetcy +breveted +breveting +brevets +brevetted +brevetting +breviaries +breviary +brevier +breviers +brevities +brevity +brew +brewage +brewages +brewed +brewer +breweries +brewers brewery +brewing +brewings +brewis +brewises +brews +briar +briard +briards +briars +briary +bribable +bribe +bribed +bribee +bribees +briber +briberies +bribers +bribery +bribes +bribing brick +brickbat +brickbats +bricked +brickfield +brickfields +brickier +brickiest +bricking +bricklayer +bricklayers +bricklaying +bricklayings +brickle +brickles +bricks +brickwork +brickworks +bricky +brickyard +brickyards +bricolage +bricolages +bricole +bricoles +bridal +bridally +bridals bride bridegroom +bridegrooms +brides +bridesmaid +bridesmaids +bridewell +bridewells bridge +bridgeable +bridged +bridgehead +bridgeheads +bridgeless +bridges +bridgework +bridgeworks +bridging +bridgings +bridle +bridled +bridler +bridlers +bridles +bridling +bridoon +bridoons +brie brief +briefcase +briefcases +briefed +briefer +briefers +briefest +briefing +briefings +briefless +briefly +briefness +briefnesses +briefs +brier +briers +briery +bries +brig +brigade +brigaded +brigades +brigadier +brigadiers +brigading +brigand +brigandage +brigandages +brigandine +brigandines +brigands +brigantine +brigantines bright +brighten +brightened +brightener +brighteners +brightening +brightens +brighter +brightest +brightly +brightness +brightnesses +brights +brightwork +brightworks +brigs +brill +brilliance +brilliances +brilliancies +brilliancy brilliant +brilliantine +brilliantines +brilliantly +brilliants +brills +brim +brimful +brimfull +brimless +brimmed +brimmer +brimmers +brimming +brims +brimstone +brimstones +brin +brinded +brindle +brindled +brindles +brine +brined +briner +briners +brines bring +bringdown +bringdowns +bringer +bringers +bringing +brings +brinier +brinies +briniest +brininess +brininesses +brining +brinish +brink +brinkmanship +brinkmanships +brinks +brinksmanship +brinksmanships +brins +briny +brio +brioche +brioches +briolette +briolettes +brionies +briony +brios +briquet +briquets +briquette +briquetted +briquettes +briquetting +bris +brisance +brisances +brisant +brisk +brisked +brisker +briskest +brisket +briskets +brisking +briskly +briskness +brisknesses +brisks +brisling +brislings +brisses +bristle +bristled +bristlelike +bristles +bristletail +bristletails +bristlier +bristliest +bristling +bristly +bristol +bristols +brit +britches +brits +britska +britskas +britt +brittle +brittled +brittlely +brittleness +brittlenesses +brittler +brittles +brittlest +brittling +brittly +britts +britzka +britzkas +britzska +britzskas +bro +broach +broached +broacher +broachers +broaches +broaching broad +broadax +broadaxe +broadaxes +broadband broadcast +broadcasted +broadcaster +broadcasters +broadcasting +broadcasts +broadcloth +broadcloths +broaden +broadened +broadening +broadens +broader +broadest +broadish +broadleaf +broadloom +broadlooms +broadly +broadness +broadnesses +broads +broadscale +broadsheet +broadsheets +broadside +broadsided +broadsides +broadsiding +broadsword +broadswords +broadtail +broadtails +brocade +brocaded +brocades +brocading +brocatel +brocatelle +brocatelles +brocatels +broccoli +broccolis +broche +brochette +brochettes brochure +brochures +brock +brockage +brockages +brocket +brockets +brocks +brocoli +brocolis +brogan +brogans +brogue +brogueries +broguery +brogues +broguish +broider +broidered +broideries +broidering +broiders +broidery +broil +broiled +broiler +broilers +broiling +broils +brokage +brokages +broke broken +brokenhearted +brokenly +brokenness +brokennesses +broker +brokerage +brokerages +brokered +brokering +brokerings +brokers +broking +brokings +brollies +brolly +bromal +bromals +bromate +bromated +bromates +bromating +brome +bromegrass +bromegrasses +bromelain +bromelains +bromeliad +bromeliads +bromelin +bromelins +bromes +bromic +bromid +bromide +bromides +bromidic +bromids +bromin +brominate +brominated +brominates +brominating +bromination +brominations +bromine +bromines +bromins +bromism +bromisms +bromize +bromized +bromizes +bromizing +bromo +bromocriptine +bromocriptines +bromos +bromouracil +bromouracils +bronc +bronchi +bronchia +bronchial +bronchially +bronchiectases +bronchiectasis +bronchiolar +bronchiole +bronchioles +bronchites +bronchitic +bronchitides +bronchitis +bronchitises +bronchium +broncho +bronchodilator +bronchodilators +bronchogenic +bronchopneumonia +bronchopneumonias +bronchos +bronchoscope +bronchoscopes +bronchoscopic +bronchoscopies +bronchoscopist +bronchoscopists +bronchoscopy +bronchospasm +bronchospasms +bronchospastic +bronchus +bronco +broncobuster +broncobusters +broncos +broncs +brontosaur +brontosaurs +brontosaurus +brontosauruses +bronze +bronzed +bronzer +bronzers +bronzes +bronzier +bronziest +bronzing +bronzings +bronzy +broo +brooch +brooches +brood +brooded +brooder +brooders +broodier +broodiest +broodily +broodiness +broodinesses +brooding +broodingly +broodmare +broodmares +broods +broody +brook +brooked +brookie +brookies +brooking +brookite +brookites +brooklet +brooklets +brooks broom +broomball +broomballer +broomballers +broomballs +broomcorn +broomcorns +broomed +broomier +broomiest +brooming +broomrape +broomrapes +brooms +broomstick +broomsticks +broomy +broos +bros +brose +broses +brosy +broth +brothel +brothels brother +brothered +brotherhood +brotherhoods +brothering +brotherliness +brotherlinesses +brotherly +brothers +broths +brothy +brougham +broughams +brought +brouhaha +brouhahas +brow +browband +browbands +browbeat +browbeaten +browbeating +browbeats +browed +browless brown +browned +browner +brownest +brownie +brownier +brownies +browniest +browning +brownish +brownnose +brownnosed +brownnoser +brownnosers +brownnoses +brownnosing +brownout +brownouts +browns +brownshirt +brownshirts +brownstone +brownstones +browny +browridge +browridges +brows +browse +browsed +browser +browsers +browses +browsing +brr +brrr +brucella +brucellae +brucellas +brucelloses +brucellosis +brucin +brucine +brucines +brucins +brugh +brughs +bruin +bruins +bruise +bruised +bruiser +bruisers +bruises +bruising +bruit +bruited +bruiter +bruiters +bruiting +bruits +brulot +brulots +brulyie +brulyies +brulzie +brulzies +brumal +brumbies +brumby +brume +brumes +brummagem +brummagems +brumous brunch +brunched +brunches +brunching +brunet +brunets +brunette +brunettes +brunizem +brunizems +brunt +brunts brush -buddhism +brushabilities +brushability +brushback +brushbacks +brushed +brusher +brushers +brushes +brushfire +brushier +brushiest +brushing +brushland +brushlands +brushoff +brushoffs +brushup +brushups +brushwood +brushwoods +brushwork +brushworks +brushy +brusk +brusker +bruskest +brusque +brusquely +brusqueness +brusquenesses +brusquer +brusquerie +brusqueries +brusquest +brut +brutal +brutalise +brutalised +brutalises +brutalising +brutalities +brutality +brutalization +brutalizations +brutalize +brutalized +brutalizes +brutalizing +brutally +brute +bruted +brutely +brutes +brutified +brutifies +brutify +brutifying +bruting +brutish +brutishly +brutishness +brutishnesses +brutism +brutisms +bruxism +bruxisms +bryological +bryologies +bryologist +bryologists +bryology +bryonies +bryony +bryophyllum +bryophyllums +bryophyte +bryophytes +bryophytic +bryozoan +bryozoans +bub +bubal +bubale +bubales +bubaline +bubalis +bubalises +bubals +bubbies +bubble +bubbled +bubblegum +bubblegums +bubblehead +bubbleheaded +bubbleheads +bubbler +bubblers +bubbles +bubblier +bubblies +bubbliest +bubbling +bubbly +bubby +bubinga +bubingas +bubo +buboed +buboes +bubonic +bubs +buccal +buccally +buccaneer +buccaneered +buccaneering +buccaneerish +buccaneers +buccinator +buccinators +buck +buckaroo +buckaroos +buckayro +buckayros +buckbean +buckbeans +buckboard +buckboards +bucked +buckeen +buckeens +bucker +buckeroo +buckeroos +buckers +bucket +bucketed +bucketful +bucketfuls +bucketing +buckets +bucketsful +buckeye +buckeyes +bucking +buckish +buckle +buckled +buckler +bucklered +bucklering +bucklers +buckles +buckling +buckminsterfullerene +buckminsterfullerenes +bucko +buckoes +buckra +buckram +buckramed +buckraming +buckrams +buckras +bucks +bucksaw +bucksaws +buckshee +buckshees +buckshot +buckshots +buckskin +buckskinned +buckskins +bucktail +bucktails +buckteeth +buckthorn +buckthorns +bucktooth +bucktoothed +buckwheat +buckwheats +buckyball +buckyballs +bucolic +bucolically +bucolics +bud +budded +budder +budders +buddied +buddies +budding +buddings +buddle +buddleia +buddleias +buddles +buddy +buddying +budge +budged +budger +budgerigar +budgerigars +budgers +budges budget +budgetary +budgeted +budgeteer +budgeteers +budgeter +budgeters +budgeting +budgets +budgie +budgies +budging +budless +budlike +buds +budworm +budworms +buff +buffable +buffalo +buffaloberries +buffaloberry +buffaloed +buffaloes +buffalofish +buffalofishes +buffaloing +buffalos +buffed +buffer +buffered +buffering +buffers buffet +buffeted +buffeter +buffeters +buffeting +buffets +buffi +buffier +buffiest +buffing +bufflehead +buffleheads +buffo +buffoon +buffooneries +buffoonery +buffoonish +buffoons +buffos +buffs +buffy +bug +bugaboo +bugaboos +bugbane +bugbanes +bugbear +bugbears +bugeye +bugeyes +bugged +bugger +buggered +buggeries +buggering +buggers +buggery +buggier +buggies +buggiest +bugging +buggy +bughouse +bughouses +bugle +bugled +bugler +buglers +bugles +bugleweed +bugleweeds +bugling +bugloss +buglosses +bugs +bugseed +bugseeds +bugsha +bugshas +buhl +buhls +buhlwork +buhlworks +buhr +buhrs +buhrstone +buhrstones build +buildable +builded +builder +builders building +buildings +builds +buildup +buildups +built +buirdly +bulb +bulbar +bulbed +bulbel +bulbels +bulbil +bulbils +bulblet +bulblets +bulbous +bulbously +bulbs +bulbul +bulbuls +bulge +bulged +bulger +bulgers +bulges +bulgier +bulgiest +bulging +bulgur +bulgurs +bulgy +bulimia +bulimiac +bulimias +bulimic +bulimics +bulk +bulkage +bulkages +bulked +bulkhead +bulkheads +bulkier +bulkiest +bulkily +bulkiness +bulkinesses +bulking +bulks +bulky +bull +bulla +bullace +bullaces +bullae +bullate +bullbaiting +bullbaitings +bullbat +bullbats +bulldog +bulldogged +bulldogger +bulldoggers +bulldogging +bulldoggings +bulldogs +bulldoze +bulldozed +bulldozer +bulldozers +bulldozes +bulldozing +bulled +bullet +bulleted +bulletin +bulletined +bulleting +bulletining +bulletins +bulletproof +bullets +bullfight +bullfighter +bullfighters +bullfighting +bullfightings +bullfights +bullfinch +bullfinches +bullfrog +bullfrogs +bullhead +bullheaded +bullheadedly +bullheadedness +bullheadednesses +bullheads +bullhorn +bullhorns +bullied +bullier +bullies +bulliest +bulling +bullion +bullions +bullish +bullishly +bullishness +bullishnesses +bullmastiff +bullmastiffs +bullneck +bullnecked +bullnecks +bullnose +bullnoses +bullock +bullocks +bullocky +bullous +bullpen +bullpens +bullpout +bullpouts +bullring +bullrings +bullrush +bullrushes +bulls +bullshit +bullshits +bullshitted +bullshitting +bullshot +bullshots +bullterrier +bullterriers +bullweed +bullweeds +bullwhip +bullwhipped +bullwhipping +bullwhips +bully +bullyboy +bullyboys +bullying +bullyrag +bullyragged +bullyragging +bullyrags +bulrush +bulrushes +bulwark +bulwarked +bulwarking +bulwarks +bum +bumbershoot +bumbershoots +bumble +bumblebee +bumblebees +bumbled +bumbler +bumblers +bumbles +bumbling +bumblingly +bumblings +bumboat +bumboats +bumf +bumfs +bumkin +bumkins +bummed +bummer +bummers +bummest +bumming +bump +bumped +bumper +bumpered +bumpering +bumpers +bumph +bumphs +bumpier +bumpiest +bumpily +bumpiness +bumpinesses +bumping +bumpkin +bumpkinish +bumpkinly +bumpkins +bumps +bumptious +bumptiously +bumptiousness +bumptiousnesses +bumpy +bums +bun bunch +bunchberries +bunchberry +bunched +bunches +bunchgrass +bunchgrasses +bunchier +bunchiest +bunchily +bunching +bunchy +bunco +buncoed +buncoing +buncombe +buncombes +buncos +bund +bundist +bundists +bundle +bundled +bundler +bundlers +bundles +bundling +bundlings +bunds +bundt +bundts +bung bungalow +bungalows +bunged +bungee +bungees +bunghole +bungholes +bunging +bungle +bungled +bungler +bunglers +bungles +bunglesome +bungling +bunglingly +bunglings +bungs +bunion +bunions +bunk +bunked +bunker +bunkered +bunkering +bunkers +bunkhouse +bunkhouses +bunking +bunkmate +bunkmates +bunko +bunkoed +bunkoing +bunkos +bunks +bunkum +bunkums +bunn +bunnies +bunns +bunny +bunraku +bunrakus +buns +bunt +bunted +bunter +bunters +bunting +buntings +buntline +buntlines +bunts +bunya +bunyas +buoy +buoyage +buoyages +buoyance +buoyances +buoyancies +buoyancy +buoyant +buoyantly +buoyed +buoying +buoys +buppie +buppies +buqsha +buqshas +bur +bura +buran +burans +buras +burble +burbled +burbler +burblers +burbles +burblier +burbliest +burbling +burbly +burbot +burbots +burbs +burd burden +burdened +burdener +burdeners +burdening +burdens +burdensome +burdie +burdies +burdock +burdocks +burds +bureau +bureaucracies +bureaucracy +bureaucrat +bureaucratese +bureaucrateses bureaucratic +bureaucratically +bureaucratise +bureaucratised +bureaucratises +bureaucratising +bureaucratism +bureaucratisms +bureaucratization +bureaucratizations +bureaucratize +bureaucratized +bureaucratizes +bureaucratizing +bureaucrats +bureaus +bureaux +buret +burets +burette +burettes +burg +burgage +burgages +burgee +burgees +burgeon +burgeoned +burgeoning +burgeons +burger +burgers +burgess +burgesses +burgh +burghal +burgher +burghers +burghs burglar +burglaries +burglarious +burglariously +burglarize +burglarized +burglarizes +burglarizing +burglarproof +burglars +burglary +burgle +burgled +burgles +burgling +burgomaster +burgomasters +burgonet +burgonets +burgoo +burgoos +burgout +burgouts +burgrave +burgraves +burgs +burgundies +burgundy +burial +burials +buried +burier +buriers +buries +burin +burins +burke +burked +burker +burkers +burkes +burking +burkite +burkites +burl +burladero +burladeros +burlap +burlaps +burled +burler +burlers +burlesk +burlesks +burlesque +burlesqued +burlesquely +burlesquer +burlesquers +burlesques +burlesquing +burley +burleys +burlier +burliest +burlily +burliness +burlinesses +burling +burls +burly burn +burnable +burnables +burned +burner +burners +burnet +burnets +burnie +burnies +burning +burningly +burnings +burnish +burnished +burnisher +burnishers +burnishes +burnishing +burnishings +burnoose +burnoosed +burnooses +burnous +burnouses +burnout +burnouts +burns +burnsides +burnt +burp +burped +burping +burps +burr +burred +burrer +burrers +burrier +burriest +burring +burrito +burritos +burro +burros +burrow +burrowed +burrower +burrowers +burrowing +burrows +burrs +burrstone +burrstones +burry +burs +bursa +bursae +bursal +bursar +bursaries +bursars +bursary +bursas +bursate +burse +burseed +burseeds +bursera +burses +bursitis +bursitises +burst +bursted +burster +bursters +bursting +burstone +burstones +bursts +burthen +burthened +burthening +burthens +burton +burtons +burweed +burweeds bury +burying bus +busbar +busbars +busbies +busboy +busboys +busby +bused +buses bush +bushbuck +bushbucks +bushed +bushel +busheled +busheler +bushelers +busheling +bushelled +bushelling +bushels +busher +bushers +bushes +bushfire +bushfires +bushgoat +bushgoats +bushido +bushidos +bushier +bushiest +bushily +bushiness +bushinesses +bushing +bushings +bushland +bushlands +bushless +bushlike +bushman +bushmaster +bushmasters +bushmen +bushpig +bushpigs +bushranger +bushrangers +bushranging +bushrangings +bushtit +bushtits +bushwa +bushwah +bushwahs +bushwas +bushwhack +bushwhacked +bushwhacker +bushwhackers +bushwhacking +bushwhacks +bushy +busied +busier +busies +busiest +busily business +businesses +businesslike businessman +businessmen +businesspeople +businessperson +businesspersons businesswoman +businesswomen +busing +busings +busk +busked +busker +buskers +buskin +buskined +busking +buskins +busks +busload +busloads +busman +busmen +buss +bussed +busses +bussing +bussings +bust +bustard +bustards +busted +buster +busters +bustic +bustics +bustier +bustiers +bustiest +busting +bustle +bustled +bustles +bustline +bustlines +bustling +bustlingly +busts +busty +busulfan +busulfans busy +busybodies +busybody +busying +busyness +busynesses +busywork +busyworks but +butadiene +butadienes +butane +butanes +butanol +butanols +butanone +butanones +butch butcher +butchered +butcheries +butchering +butcherly +butchers +butchery +butches +bute +butene +butenes +buteo +buteos +butle +butled +butler +butleries +butlers +butlery +butles +butling +buts +butt +buttals +butte +butted butter +butterball +butterballs +buttercup +buttercups +buttered +butterfat +butterfats +butterfingered +butterfingers +butterfish +butterfishes +butterflied +butterflies butterfly +butterflyer +butterflyers +butterflying +butterier +butteries +butteriest +buttering +butterless +buttermilk +buttermilks +butternut +butternuts +butters +butterscotch +butterscotches +butterweed +butterweeds +butterwort +butterworts +buttery +buttes +butties +butting +buttinski +buttinskies +buttinsky +buttock +buttocks button +buttonball +buttonballs +buttonbush +buttonbushes +buttoned +buttoner +buttoners +buttonhole +buttonholed +buttonholer +buttonholers +buttonholes +buttonholing +buttonhook +buttonhooked +buttonhooking +buttonhooks +buttoning +buttonless +buttons +buttonwood +buttonwoods +buttony +buttress +buttressed +buttresses +buttressing +butts +buttstock +buttstocks +butty +butut +bututs +butyl +butylate +butylated +butylates +butylating +butylation +butylations +butylene +butylenes +butyls +butyral +butyraldehyde +butyraldehydes +butyrals +butyrate +butyrates +butyric +butyrin +butyrins +butyrophenone +butyrophenones +butyrous +butyryl +butyryls +buxom +buxomer +buxomest +buxomly +buxomness +buxomnesses buy +buyable +buyback +buybacks +buyer +buyers +buying +buyout +buyouts +buys +buzuki +buzukia +buzukis +buzz +buzzard +buzzards +buzzed +buzzer +buzzers +buzzes +buzzing +buzzwig +buzzwigs +buzzword +buzzwords +bwana +bwanas by bye +byelaw +byelaws +byes +bygone +bygones +bylaw +bylaws +byline +bylined +byliner +byliners +bylines +bylining +byname +bynames +bypass +bypassed +bypasses +bypassing +bypast +bypath +bypaths +byplay +byplays +byproduct +byproducts +byre +byres +byrl +byrled +byrling +byrls +byrnie +byrnies +byroad +byroads +bys +byssi +byssinoses +byssinosis +byssus +byssuses +bystander +bystanders +bystreet +bystreets +bytalk +bytalks +byte +bytes +byway +byways +byword +bywords +bywork +byworks +byzant +byzantine +byzants cab +cabal +cabala +cabalas +cabaletta +cabalettas +cabalism +cabalisms +cabalist +cabalistic +cabalists +caballed +caballero +caballeros +caballing +cabals +cabana +cabanas +cabaret +cabarets cabbage +cabbaged +cabbages +cabbageworm +cabbageworms +cabbaging +cabbala +cabbalah +cabbalahs +cabbalas +cabbed +cabbie +cabbies +cabbing +cabby +cabdriver +cabdrivers +caber +cabernet +cabernets +cabers +cabestro +cabestros +cabezon +cabezone +cabezones +cabezons +cabildo +cabildos +cabin +cabined +cabinet +cabinetmaker +cabinetmakers +cabinetmaking +cabinetmakings +cabinetries +cabinetry +cabinets +cabinetwork +cabinetworks +cabining +cabins +cable +cabled +cablegram +cablegrams +cables +cablet +cablets +cableway +cableways +cabling +cabman +cabmen +cabob +cabobs +caboched +cabochon +cabochons +cabomba +cabombas +caboodle +caboodles +caboose +cabooses +caboshed +cabotage +cabotages +cabresta +cabrestas +cabresto +cabrestos +cabretta +cabrettas +cabrilla +cabrillas +cabriole +cabrioles +cabriolet +cabriolets +cabs +cabstand +cabstands +caca +cacao +cacaos +cacas +cacciatore +cachalot +cachalots +cache +cachectic +cached +cachepot +cachepots +caches +cachet +cacheted +cacheting +cachets +cachexia +cachexias +cachexic +cachexies +cachexy +caching +cachinnate +cachinnated +cachinnates +cachinnating +cachinnation +cachinnations +cachou +cachous +cachucha +cachuchas +cacique +caciques +caciquism +caciquisms +cackle +cackled +cackler +cacklers +cackles +cackling +cacodemon +cacodemonic +cacodemons +cacodyl +cacodyls +cacoethes +cacographical +cacographies +cacography +cacomistle +cacomistles +cacomixl +cacomixls +cacophonies +cacophonous +cacophonously +cacophony +cacti +cactoid +cactus +cactuses +cacuminal +cad +cadaster +cadasters +cadastral +cadastrally +cadastre +cadastres +cadaver +cadaveric +cadaverine +cadaverines +cadaverous +cadaverously +cadavers +caddice +caddices +caddie +caddied +caddies +caddis +caddises +caddish +caddishly +caddishness +caddishnesses +caddisworm +caddisworms +caddy +caddying +cade +cadelle +cadelles +cadence +cadenced +cadences +cadencies +cadencing +cadency +cadent +cadential +cadenza +cadenzas +cades +cadet +cadets +cadetship +cadetships +cadge +cadged +cadger +cadgers +cadges +cadging +cadgy +cadi +cadis +cadmic +cadmium +cadmiums +cadre +cadres +cads +caducean +caducei +caduceus +caducities +caducity +caducous +caeca +caecal +caecally +caecilian +caecilians +caecum +caeoma +caeomas +caesar +caesarean +caesareans +caesarian +caesarians +caesars +caesium +caesiums +caespitose +caestus +caestuses +caesura +caesurae +caesural +caesuras +caesuric cafe +cafes cafeteria +cafeterias +cafetorium +cafetoriums +caff +caffein +caffeinated +caffeine +caffeines +caffeins +caffs +caftan +caftans cage +caged +cageful +cagefuls +cageling +cagelings +cager +cagers +cages +cagey +cageyness +cageynesses +cagier +cagiest +cagily +caginess +caginesses +caging +cagy +cahier +cahiers +cahoot +cahoots +cahow +cahows +caid +caids +caiman +caimans +cain +cains +caique +caiques +caird +cairds +cairn +cairned +cairngorm +cairngorms +cairns +cairny +caisson +caissons +caitiff +caitiffs +cajaput +cajaputs +cajeput +cajeputs +cajole +cajoled +cajolement +cajolements +cajoler +cajoleries +cajolers +cajolery +cajoles +cajoling +cajon +cajones +cajuput +cajuputs cake +caked +cakes +cakewalk +cakewalked +cakewalker +cakewalkers +cakewalking +cakewalks +cakey +cakier +cakiest +caking +caky +calabash +calabashes +calaboose +calabooses +caladium +caladiums +calamander +calamanders +calamar +calamari +calamaries +calamaris +calamars +calamary +calami +calamine +calamined +calamines +calamining +calamint +calamints +calamite +calamites +calamities +calamitous +calamitously +calamity +calamondin +calamondins +calamus +calando +calash +calashes +calathi +calathos +calathus +calcanea +calcaneal +calcanei +calcaneum +calcaneus +calcar +calcareous +calcareously +calcaria +calcars +calceate +calces +calcic +calcicole +calcicoles +calcicolous +calciferol +calciferols +calciferous +calcific +calcification +calcifications +calcified +calcifies +calcifuge +calcifuges +calcifugous +calcify +calcifying +calcimine +calcimined +calcimines +calcimining +calcination +calcinations +calcine +calcined +calcines +calcining +calcinoses +calcinosis +calcite +calcites +calcitic +calcitonin +calcitonins +calcium +calciums +calcspar +calcspars +calctufa +calctufas +calctuff +calctuffs +calculable calculate +calculated +calculatedly +calculatedness +calculatednesses +calculates +calculating +calculatingly +calculation +calculational +calculations +calculator +calculators +calculi +calculous +calculus +calculuses +caldaria +caldarium +caldera +calderas +caldron +caldrons +caleche +caleches +calefactories +calefactory +calendal +calendar +calendared +calendaring +calendars +calender +calendered +calenderer +calenderers +calendering +calenders +calendric +calendrical +calends +calendula +calendulas +calenture +calentures +calesa +calesas +calf +calflike +calfs +calfskin +calfskins +caliber +calibers +calibrate +calibrated +calibrates +calibrating +calibration +calibrations +calibrator +calibrators +calibre +calibred +calibres +calices +caliche +caliches +calicle +calicles +calico +calicoes +calicos +calif +califate +califates +californium +californiums +califs +caliginous +calipash +calipashes +calipee +calipees +caliper +calipered +calipering +calipers +caliph +caliphal +caliphate +caliphates +caliphs +calisaya +calisayas +calisthenic +calisthenics +calix +calk +calked +calker +calkers +calkin +calking +calkins +calks call +calla +callable +callaloo +callaloos +callan +callans +callant +callants +callas +callback +callbacks +callboy +callboys +called +caller +callers +callet +callets +calligrapher +calligraphers +calligraphic +calligraphically +calligraphies +calligraphist +calligraphists +calligraphy +calling +callings +calliope +calliopes +callipee +callipees +calliper +callipered +callipering +callipers +callipygian +callipygous +callithump +callithumpian +callithumps +callose +calloses +callosities +callosity +callous +calloused +callouses +callousing +callously +callousness +callousnesses +callow +callower +callowest +callowness +callownesses +calls +callus +callused +calluses +callusing calm +calmative +calmatives +calmed +calmer +calmest +calming +calmly +calmness +calmnesses +calmodulin +calmodulins +calms +calo +calomel +calomels +caloric +calorically +calorics +calorie +calories +calorific +calorimeter +calorimeters +calorimetric +calorimetrically +calorimetries +calorimetry +calorize +calorized +calorizes +calorizing +calory +calotte +calottes +calotype +calotypes +caloyer +caloyers +calpac +calpack +calpacks +calpacs +calque +calqued +calques +calquing +calthrop +calthrops +caltrap +caltraps +caltrop +caltrops +calumet +calumets +calumniate +calumniated +calumniates +calumniating +calumniation +calumniations +calumniator +calumniators +calumnies +calumnious +calumniously +calumny +calutron +calutrons +calvados +calvadoses +calvaria +calvarias +calvaries +calvarium +calvary +calve +calved +calves +calving +calx +calxes +calycate +calyceal +calyces +calycine +calycle +calycles +calyculi +calyculus +calypso +calypsoes +calypsonian +calypsonians +calypsos +calypter +calypters +calyptra +calyptras +calyx +calyxes +calzone +calzones +cam +camail +camailed +camails +camaraderie +camaraderies +camarilla +camarillas +camas +camases +camass +camasses +camber +cambered +cambering +cambers +cambia +cambial +cambism +cambisms +cambist +cambists +cambium +cambiums +cambogia +cambogias +cambric +cambrics +camcorder +camcorders +came camel +camelback +camelbacks +cameleer +cameleers +camelia +camelias +camellia +camellias +camelopard +camelopards +camels +cameo +cameoed +cameoing +cameos camera +camerae +cameral +cameraman +cameramen +cameraperson +camerapersons +cameras +camerawoman +camerawomen +camerlengo +camerlengos +cames +camion +camions +camisa +camisade +camisades +camisado +camisadoes +camisados +camisas +camise +camises +camisia +camisias +camisole +camisoles +camlet +camlets +camomile +camomiles +camorra +camorras +camorrista +camorristi +camouflage +camouflageable +camouflaged +camouflages +camouflagic +camouflaging camp +campagna +campagne campaign +campaigned +campaigner +campaigners +campaigning +campaigns +campanile +campaniles +campanili +campanologies +campanologist +campanologists +campanology +campanula +campanulas +campanulate +campcraft +campcrafts +camped +camper +campers +campesino +campesinos +campestral +campfire +campfires +campground +campgrounds +camphene +camphenes +camphine +camphines +camphire +camphires +camphol +camphols +camphor +camphoraceous +camphorate +camphorated +camphorates +camphorating +camphors +campi +campier +campiest +campily +campiness +campinesses +camping +campings +campion +campions +campo +campong +campongs +camporee +camporees +campos +camps +campsite +campsites +campus +campused +campuses +campusing +campy +campylobacter +campylobacters +campylotropous +cams +camshaft +camshafts can +canaille +canailles +canakin +canakins +canal +canaled +canalicular +canaliculi +canaliculus +canaling +canalise +canalised +canalises +canalising +canalization +canalizations +canalize +canalized +canalizes +canalizing +canalled +canaller +canallers +canalling +canals +canape +canapes +canard +canards +canaries +canary +canasta +canastas +cancan +cancans cancel +cancelable +cancelation +cancelations +canceled +canceler +cancelers +canceling +cancellable +cancellation +cancellations +cancelled +canceller +cancellers +cancelling +cancellous +cancels cancer +cancerous +cancerously +cancers +cancha +canchas +cancroid +cancroids +candela +candelabra +candelabras +candelabrum +candelabrums +candelas +candent +candescence +candescences +candescent +candid +candida +candidacies +candidacy +candidas candidate +candidates +candidature +candidatures +candider +candidest +candidiases +candidiasis +candidly +candidness +candidnesses +candids +candied +candies candle +candleberries +candleberry +candled +candlefish +candlefishes +candleholder +candleholders +candlelight +candlelighted +candlelighter +candlelighters +candlelights +candlelit +candlenut +candlenuts +candlepin +candlepins +candlepower +candlepowers +candler +candlers +candles +candlesnuffer +candlesnuffers +candlestick +candlesticks +candlewick +candlewicks +candlewood +candlewoods +candling +candor +candors +candour +candours candy +candyfloss +candyflosses +candying +candytuft +candytufts +cane +canebrake +canebrakes +caned +canella +canellas +canephor +canephors +caner +caners +canes +canescent +caneware +canewares +canfield +canfields +canful +canfuls +cangue +cangues +canicular +canid +canids +canikin +canikins +canine +canines +caning +caninities +caninity +canister +canisters +canities +canker +cankered +cankering +cankerous +cankers +cankerworm +cankerworms +canna +cannabic +cannabin +cannabinoid +cannabinoids +cannabinol +cannabinols +cannabins +cannabis +cannabises +cannas +canned +cannel +cannelloni +cannelon +cannelons +cannels +canner +canneries +canners +cannery +cannibal +cannibalise +cannibalised +cannibalises +cannibalising +cannibalism +cannibalisms +cannibalistic +cannibalization +cannibalizations +cannibalize +cannibalized +cannibalizes +cannibalizing +cannibals +cannie +cannier +canniest +cannikin +cannikins +cannily +canniness +canninesses +canning +cannings +cannister +cannisters +cannoli +cannon +cannonade +cannonaded +cannonades +cannonading +cannonball +cannonballed +cannonballing +cannonballs +cannoned +cannoneer +cannoneers +cannoning +cannonries +cannonry +cannons +cannot +cannula +cannulae +cannular +cannulas +canny +canoe +canoeable +canoed +canoeing +canoeist +canoeists +canoes +canola +canon +canoness +canonesses +canonic +canonical +canonically +canonicals +canonicities +canonicity +canonise +canonised +canonises +canonising +canonist +canonists +canonization +canonizations +canonize +canonized +canonizes +canonizing +canonries +canonry +canons +canoodle +canoodled +canoodles +canoodling +canopied +canopies +canopy +canopying +canorous +canorously +canorousness +canorousnesses +cans +cansful +canso +cansos +canst +cant +cantabile +cantala +cantalas +cantaloup +cantaloupe +cantaloupes +cantaloups +cantankerous +cantankerously +cantankerousness +cantankerousnesses +cantata +cantatas +cantatrice +cantatrices +cantatrici +cantdog +cantdogs +canted canteen +canteens +canter +cantered +cantering +canters +canthal +cantharides +cantharidin +cantharidins +cantharis +canthaxanthin +canthaxanthins +canthi +canthus +cantic +canticle +canticles +cantilena +cantilenas +cantilever +cantilevered +cantilevering +cantilevers +cantillate +cantillated +cantillates +cantillating +cantillation +cantillations +cantina +cantinas +canting +cantle +cantles +canto +canton +cantonal +cantoned +cantoning +cantonment +cantonments +cantons +cantor +cantorial +cantors +cantos +cantraip +cantraips +cantrap +cantraps +cantrip +cantrips +cants +cantus +canty +canula +canulae +canulas +canulate +canulated +canulates +canulating +canvas +canvasback +canvasbacks +canvased +canvaser +canvasers +canvases +canvasing +canvaslike +canvass +canvassed +canvasser +canvassers +canvasses +canvassing +canyon +canyons +canzona +canzonas +canzone +canzones +canzonet +canzonets +canzoni +caoutchouc +caoutchoucs cap +capabilities +capability +capable +capableness +capablenesses +capabler +capablest +capably +capacious +capaciously +capaciousness +capaciousnesses +capacitance +capacitances +capacitate +capacitated +capacitates +capacitating +capacitation +capacitations +capacities +capacitive +capacitively +capacitor +capacitors +capacity +caparison +caparisoned +caparisoning +caparisons +cape +caped +capelan +capelans +capelet +capelets +capelin +capelins +caper +capercaillie +capercaillies +capercailzie +capercailzies +capered +caperer +caperers +capering +capers +capes +capeskin +capeskins +capework +capeworks +capful +capfuls +caph +caphs +capias +capiases +capillaries +capillarities +capillarity +capillary +capita capital +capitalise +capitalised +capitalises +capitalising +capitalism +capitalisms +capitalist +capitalistic +capitalistically +capitalists +capitalization +capitalizations +capitalize +capitalized +capitalizes +capitalizing +capitally +capitals +capitate +capitation +capitations +capitol +capitols +capitula +capitular +capitularies +capitulary +capitulate +capitulated +capitulates +capitulating +capitulation +capitulations +capitulum +capless +caplet +caplets +caplin +caplins +capmaker +capmakers +capo +capon +caponata +caponatas +caponier +caponiers +caponize +caponized +caponizes +caponizing +capons +caporal +caporals +capos +capote +capotes +capouch +capouches +capped +cappelletti +capper +cappers +capping +cappings +cappuccino +cappuccinos +capric +capricci +capriccio +capriccios +caprice +caprices +capricious +capriciously +capriciousness +capriciousnesses +caprification +caprifications +caprifig +caprifigs +caprine +capriole +caprioled +caprioles +caprioling +capris +caprock +caprocks +caprolactam +caprolactams +caps +capsaicin +capsaicins +capsicin +capsicins +capsicum +capsicums +capsid +capsidal +capsids +capsize +capsized +capsizes +capsizing +capsomer +capsomers +capstan +capstans +capstone +capstones +capsular +capsulated capsule +capsuled +capsules +capsuling +capsulize +capsulized +capsulizes +capsulizing captain +captaincies +captaincy +captained +captaining +captains +captainship +captainships +captan +captans caption +captioned +captioning +captionless +captions +captious +captiously +captiousness +captiousnesses +captivate +captivated +captivates +captivating +captivation +captivations +captivator +captivators +captive +captives +captivities +captivity +captopril +captoprils +captor +captors +capture +captured +capturer +capturers +captures +capturing +capuche +capuched +capuches +capuchin +capuchins +caput +capybara +capybaras car +carabao +carabaos +carabid +carabids +carabin +carabine +carabineer +carabineers +carabiner +carabinero +carabineros +carabiners +carabines +carabinier +carabiniere +carabinieri +carabiniers +carabins +caracal +caracals +caracara +caracaras +carack +caracks +caracol +caracole +caracoled +caracoles +caracoling +caracolled +caracolling +caracols +caracul +caraculs +carafe +carafes +caragana +caraganas +carageen +carageens +caramba +carambola +carambolas +caramel +caramelise +caramelised +caramelises +caramelising +caramelize +caramelized +caramelizes +caramelizing +caramels +carangid +carangids +carapace +carapaces +carapax +carapaxes +carassow +carassows +carat +carate +carates +carats +caravan +caravaned +caravaner +caravaners +caravaning +caravanned +caravanner +caravanners +caravanning +caravans +caravansaries +caravansary +caravanserai +caravanserais +caravel +caravels +caraway +caraways +carb +carbachol +carbachols +carbamate +carbamates +carbamic +carbamide +carbamides +carbamino +carbamyl +carbamyls +carbanion +carbanions +carbarn +carbarns +carbaryl +carbaryls +carbazole +carbazoles +carbide +carbides +carbine +carbines +carbinol +carbinols +carbo +carbocyclic +carbohydrase +carbohydrases +carbohydrate +carbohydrates +carbolic +carbolics carbon +carbonaceous +carbonade +carbonades +carbonado +carbonadoed +carbonadoes +carbonadoing +carbonados +carbonara +carbonaras +carbonate +carbonated +carbonates +carbonating +carbonation +carbonations +carbonic +carboniferous +carbonization +carbonizations +carbonize +carbonized +carbonizes +carbonizing +carbonless +carbonnade +carbonnades +carbons +carbonyl +carbonylation +carbonylations +carbonylic +carbonyls +carbora +carboras +carbos +carboxyl +carboxylase +carboxylases +carboxylate +carboxylated +carboxylates +carboxylating +carboxylation +carboxylations +carboxylic +carboxyls +carboxymethylcellulose +carboxymethylcelluloses +carboxypeptidase +carboxypeptidases +carboy +carboyed +carboys +carbs +carbuncle +carbuncled +carbuncles +carbuncular +carburet +carbureted +carbureting +carburetion +carburetions +carburetor +carburetors +carburets +carburetted +carburetter +carburetters +carburetting +carburettor +carburettors +carburise +carburised +carburises +carburising +carburization +carburizations +carburize +carburized +carburizes +carburizing +carcajou +carcajous +carcanet +carcanets +carcase +carcases +carcass +carcasses +carcel +carcels +carcinogen +carcinogeneses +carcinogenesis +carcinogenic +carcinogenicities +carcinogenicity +carcinogens +carcinoid +carcinoids +carcinoma +carcinomas +carcinomata +carcinomatoses +carcinomatosis +carcinomatosises +carcinomatous +carcinosarcoma +carcinosarcomas +carcinosarcomata card +cardamom +cardamoms +cardamon +cardamons +cardamum +cardamums +cardboard +cardboards +cardcase +cardcases +carded +carder +carders +cardholder +cardholders +cardia +cardiac +cardiacs +cardiae +cardias +cardigan +cardigans +cardinal +cardinalate +cardinalates +cardinalities +cardinality +cardinally +cardinals +cardinalship +cardinalships +carding +cardings +cardiogenic +cardiogram +cardiograms +cardiograph +cardiographic +cardiographies +cardiographs +cardiography +cardioid +cardioids +cardiological +cardiologies +cardiologist +cardiologists +cardiology +cardiomyopathies +cardiomyopathy +cardiopathies +cardiopathy +cardiopulmonary +cardiorespiratory +cardiothoracic +cardiotonic +cardiotonics +cardiovascular +carditic +carditis +carditises +cardoon +cardoons +cardplayer +cardplayers +cards +cardsharp +cardsharper +cardsharpers +cardsharps care +cared +careen +careened +careener +careeners +careening +careens +career +careered +careerer +careerers +careering +careerism +careerisms +careerist +careerists +careers +carefree careful +carefuller +carefullest +carefully +carefulness +carefulnesses +caregiver +caregivers +caregiving +caregivings careless +carelessly +carelessness +carelessnesses +carer +carers +cares +caress +caressed +caresser +caressers +caresses +caressing +caressingly +caressive +caressively +caret +caretake +caretaken +caretaker +caretakers +caretakes +caretaking +caretakings +caretook +carets +careworn +carex +carfare +carfares +carful +carfuls +cargo +cargoes +cargos +carhop +carhops +caribe +caribes +caribou +caribous +caricatural +caricature +caricatured +caricatures +caricaturing +caricaturist +caricaturists +carices +caried +caries +carillon +carillonned +carillonneur +carillonneurs +carillonning +carillons +carina +carinae +carinal +carinas +carinate +carinated +caring +carioca +cariocas +cariogenic +cariole +carioles +carious +caritas +caritases +carjacker +carjackers +carjacking +carjackings +cark +carked +carking +carks +carl +carle +carles +carless +carlin +carline +carlines +carling +carlings +carlins +carlish +carload +carloads +carls +carmagnole +carmagnoles +carmaker +carmakers +carman +carmen +carminative +carminatives +carmine +carmines +carn +carnage +carnages +carnal +carnalities +carnality +carnallite +carnallites +carnally +carnassial +carnassials +carnation +carnations +carnauba +carnaubas +carnelian +carnelians +carnet +carnets +carney +carneys +carnie +carnies +carnified +carnifies +carnify +carnifying +carnitine +carnitines +carnival +carnivals +carnivora +carnivore +carnivores +carnivorous +carnivorously +carnivorousness +carnivorousnesses +carnotite +carnotites +carns +carny +caroach +caroaches +carob +carobs +caroch +caroche +caroches +carol +caroled +caroler +carolers +caroli +caroling +carolled +caroller +carollers +carolling +carols +carolus +caroluses +carom +caromed +caroming +caroms +carotene +carotenes +carotenoid +carotenoids +carotid +carotids +carotin +carotinoid +carotinoids +carotins +carousal +carousals +carouse +caroused +carousel +carousels +carouser +carousers +carouses +carousing +carp +carpaccio +carpaccios +carpal +carpale +carpalia +carpals +carped +carpel +carpellary +carpellate +carpels carpenter +carpentered +carpentering +carpenters +carpentries +carpentry +carper +carpers carpet +carpetbag +carpetbagger +carpetbaggeries +carpetbaggers +carpetbaggery +carpetbagging +carpetbags +carpeted +carpeting +carpetings +carpets +carpetweed +carpetweeds +carpi +carping +carpingly +carpings +carpogonia +carpogonial +carpogonium +carpool +carpooled +carpooler +carpoolers +carpooling +carpools +carpophore +carpophores +carport +carports +carpospore +carpospores +carps +carpus +carr +carrack +carracks +carrageen +carrageenan +carrageenans +carrageenin +carrageenins +carrageens +carragheen +carragheens +carrefour +carrefours +carrel +carrell +carrells +carrels carriage +carriages +carriageway +carriageways +carried carrier +carriers +carries +carriole +carrioles +carrion +carrions +carritch +carritches +carroch +carroches +carrom +carromed +carroming +carroms +carronade +carronades carrot +carrotier +carrotiest +carrotin +carrotins +carrots +carrottop +carrottopped +carrottops +carroty +carrousel +carrousels +carrs carry +carryall +carryalls +carryback +carrybacks +carryforward +carryforwards +carrying +carryon +carryons +carryout +carryouts +carryover +carryovers +cars +carse +carses +carsick +carsickness +carsicknesses +cart +cartable +cartage +cartages +carte +carted +cartel +cartelise +cartelised +cartelises +cartelising +cartelization +cartelizations +cartelize +cartelized +cartelizes +cartelizing +cartels +carter +carters +cartes +cartilage +cartilages +cartilaginous +carting +cartload +cartloads +cartographer +cartographers +cartographic +cartographical +cartographically +cartographies +cartography +carton +cartoned +cartoning +cartons cartoon +cartooned +cartooning +cartoonings +cartoonish +cartoonishly +cartoonist +cartoonists +cartoonlike +cartoons +cartoony +cartop +cartopper +cartoppers +cartouch +cartouche +cartouches +cartridge +cartridges +carts +cartularies +cartulary +cartwheel +cartwheeled +cartwheeler +cartwheelers +cartwheeling +cartwheels +caruncle +caruncles +carvacrol +carvacrols carve +carved +carvel +carvels +carven +carver +carvers +carves +carving +carvings +carwash +carwashes +caryatic +caryatid +caryatides +caryatids +caryopses +caryopsides +caryopsis +caryotin +caryotins +casa +casaba +casabas +casas +casava +casavas +casbah +casbahs +cascabel +cascabels +cascable +cascables +cascade +cascaded +cascades +cascading +cascara +cascaras +cascarilla +cascarillas case +casease +caseases +caseate +caseated +caseates +caseating +caseation +caseations +casebearer +casebearers +casebook +casebooks +cased +casefied +casefies +casefy +casefying +caseic +casein +caseinate +caseinates +caseins +caseload +caseloads +casemate +casemates +casement +casements +caseose +caseoses +caseous +casern +caserne +casernes +caserns +cases +casette +casettes +casework +caseworker +caseworkers +caseworks +caseworm +caseworms cash +cashable +cashaw +cashaws +cashbook +cashbooks +cashbox +cashboxes +cashed +cashes +cashew +cashews +cashier +cashiered +cashiering +cashiers +cashing +cashless +cashmere +cashmeres +cashoo +cashoos +casimere +casimeres +casimire +casimires +casing +casings +casini +casino +casinos +casita +casitas +cask +casked +casket +casketed +casketing +caskets +casking +casks +casky +casque +casqued +casques +cassaba +cassabas +cassata +cassatas +cassava +cassavas +casserole +casseroles cassette +cassettes +cassia +cassias +cassimere +cassimeres +cassino +cassinos +cassis +cassises +cassiterite +cassiterites +cassock +cassocks +cassoulet +cassoulets +cassowaries +cassowary cast +castabilities +castability +castable +castanet +castanets +castaway +castaways +caste +casteism +casteisms +castellan +castellans +castellated +caster +casters +castes +castigate +castigated +castigates +castigating +castigation +castigations +castigator +castigators +casting +castings castle +castled +castles +castling +castoff +castoffs +castor +castoreum +castoreums +castors +castrate +castrated +castrates +castrati +castrating +castration +castrations +castrato +castrator +castrators +castratory +castratos +casts casual +casually +casualness +casualnesses +casuals +casualties +casualty +casuarina +casuarinas +casuist +casuistic +casuistical +casuistries +casuistry +casuists +casus cat +catabolic +catabolically +catabolism +catabolisms +catabolite +catabolites +catabolize +catabolized +catabolizes +catabolizing +catachreses +catachresis +catachrestic +catachrestical +catachrestically +cataclysm +cataclysmal +cataclysmic +cataclysmically +cataclysms +catacomb +catacombs +catadioptric +catadromous +catafalque +catafalques +catalase +catalases +catalatic +catalectic +catalectics +catalepsies +catalepsy +cataleptic +cataleptically +cataleptics +catalexes +catalexis +catalo +cataloes +catalog +cataloged +cataloger +catalogers +cataloging +catalogs catalogue +catalogued +cataloguer +cataloguers +catalogues +cataloguing +catalos +catalpa +catalpas +catalyses +catalysis +catalyst +catalysts +catalytic +catalytically +catalyze +catalyzed +catalyzer +catalyzers +catalyzes +catalyzing +catamaran +catamarans +catamenia +catamenial +catamite +catamites +catamount +catamounts +cataphora +cataphoras +cataphoreses +cataphoresis +cataphoretic +cataphoretically +cataphoric +cataplasm +cataplasms +cataplexies +cataplexy +catapult +catapulted +catapulting +catapults +cataract +cataractous +cataracts +catarrh +catarrhal +catarrhally +catarrhine +catarrhines +catarrhs catastrophe +catastrophes +catastrophic +catastrophically +catastrophism +catastrophisms +catastrophist +catastrophists +catatonia +catatonias +catatonic +catatonically +catatonics +catawba +catawbas +catbird +catbirds +catboat +catboats +catbrier +catbriers +catcall +catcalled +catcalling +catcalls catch +catchable +catchall +catchalls +catcher +catchers +catches +catchflies +catchfly +catchier +catchiest +catching +catchment +catchments +catchpenny +catchphrase +catchphrases +catchpole +catchpoles +catchpoll +catchpolls +catchup +catchups +catchword +catchwords +catchy +catclaw +catclaws +cate +catecheses +catechesis +catechetical +catechin +catechins +catechism +catechismal +catechisms +catechist +catechistic +catechists +catechization +catechizations +catechize +catechized +catechizer +catechizers +catechizes +catechizing +catechol +catecholamine +catecholaminergic +catecholamines +catechols +catechu +catechumen +catechumens +catechus +categoric +categorical +categorically +categories +categorise +categorised +categorises +categorising +categorization +categorizations +categorize +categorized +categorizes +categorizing category +catena +catenae +catenaries +catenary +catenas +catenate +catenated +catenates +catenating +catenation +catenations +catenoid +catenoids cater +cateran +caterans +catercorner +catercornered +catered +caterer +caterers +cateress +cateresses +catering +caterpillar +caterpillars +caters +caterwaul +caterwauled +caterwauling +caterwauls +cates +catface +catfaces +catfacing +catfacings +catfall +catfalls +catfight +catfights +catfish +catfishes +catgut +catguts +catharses +catharsis +cathartic +cathartics +cathead +catheads +cathect +cathected +cathectic +cathecting +cathects +cathedra +cathedrae +cathedral +cathedrals +cathedras +cathepsin +cathepsins +catheter +catheterization +catheterizations +catheterize +catheterized +catheterizes +catheterizing +catheters +cathexes +cathexis +cathodal +cathodally +cathode +cathodes +cathodic +cathodically catholic +catholically +catholicate +catholicates +catholicities +catholicity +catholicize +catholicized +catholicizes +catholicizing +catholicoi +catholicon +catholicons +catholicos +catholicoses +catholics +cathouse +cathouses +cation +cationic +cationically +cations +catkin +catkins +catlike +catlin +catling +catlings +catlins +catmint +catmints +catnap +catnaper +catnapers +catnapped +catnapper +catnappers +catnapping +catnaps +catnip +catnips +catoptric +cats +catspaw +catspaws +catsup +catsups +cattail +cattails +cattalo +cattaloes +cattalos +catted +catteries +cattery +cattie +cattier +catties +cattiest +cattily +cattiness +cattinesses +catting +cattish cattle +cattleman +cattlemen +cattleya +cattleyas +catty +catwalk +catwalks +caucus +caucused +caucuses +caucusing +caucussed +caucusses +caucussing +caudad +caudal +caudally +caudate +caudated +caudates +caudex +caudexes +caudices +caudillismo +caudillismos +caudillo +caudillos +caudle +caudles +caught +caul +cauld +cauldron +cauldrons +caulds +caules +caulicle +caulicles +cauliflower +caulifloweret +cauliflowerets +cauliflowers +cauline +caulis +caulk +caulked +caulker +caulkers +caulking +caulkings +caulks +cauls +causable +causal +causalgia +causalgias +causalgic +causalities +causality +causally +causals +causation +causations +causative +causatively +causatives cause +caused +causeless +causer +causerie +causeries +causers +causes +causeway +causewayed +causewaying +causeways +causey +causeys +causing +caustic +caustically +causticities +causticity +caustics +cauteries +cauterization +cauterizations +cauterize +cauterized +cauterizes +cauterizing +cautery caution +cautionary +cautioned +cautioning +cautions cautious +cautiously +cautiousness +cautiousnesses +cavalcade +cavalcades +cavalero +cavaleros +cavaletti +cavalier +cavaliered +cavaliering +cavalierism +cavalierisms +cavalierly +cavaliers +cavalla +cavallas +cavalletti +cavallies +cavally +cavalries +cavalry +cavalryman +cavalrymen +cavatina +cavatinas +cavatine cave -cd +caveat +caveated +caveating +caveator +caveators +caveats +caved +cavefish +cavefishes +cavelike +caveman +cavemen +caver +cavern +caverned +cavernicolous +caverning +cavernous +cavernously +caverns +cavers +caves +cavetti +cavetto +cavettos +caviar +caviare +caviares +caviars +cavicorn +cavie +cavies +cavil +caviled +caviler +cavilers +caviling +cavilled +caviller +cavillers +cavilling +cavils +caving +cavings +cavitary +cavitate +cavitated +cavitates +cavitating +cavitation +cavitations +cavitied +cavities +cavity +cavort +cavorted +cavorter +cavorters +cavorting +cavorts +cavy +caw +cawed +cawing +caws +cay +cayenne +cayenned +cayennes +cayman +caymans +cays +cayuse +cayuses +cazique +caziques +ceanothus +ceanothuses +cease +ceased +ceaseless +ceaselessly +ceaselessness +ceaselessnesses +ceases +ceasing +cebid +cebids +ceboid +ceboids +ceca +cecal +cecally +cecum +cedar +cedarbird +cedarbirds +cedarn +cedars +cedarwood +cedarwoods +cede +ceded +ceder +ceders +cedes +cedi +cedilla +cedillas +ceding +cedis +cedula +cedulas +cee +cees +ceiba +ceibas +ceil +ceiled +ceiler +ceilers ceiling +ceilinged +ceilings +ceilometer +ceilometers +ceils +ceinture +ceintures +cel +celadon +celadons +celandine +celandines +celeb +celebrant +celebrants celebrate +celebrated +celebratedness +celebratednesses +celebrates +celebrating celebration +celebrations +celebrator +celebrators +celebratory +celebrities +celebrity +celebs +celeriac +celeriacs +celeries +celerities +celerity +celery +celesta +celestas +celeste +celestes +celestial +celestially +celestials +celestite +celestites +celiac +celiacs +celibacies +celibacy +celibate +celibates cell +cella +cellae +cellar +cellarage +cellarages +cellared +cellarer +cellarers +cellaret +cellarets +cellarette +cellarettes +cellaring +cellars +cellblock +cellblocks +celled +celli +celling +cellist +cellists +cellmate +cellmates +cello +cellobiose +cellobioses +celloidin +celloidins +cellophane +cellophanes +cellos +cells +cellular +cellularities +cellularity +cellulase +cellulases +cellule +cellules +cellulite +cellulites +cellulitides +cellulitis +cellulitises +celluloid +celluloids +cellulolytic +cellulose +celluloses +cellulosic +cellulosics +celom +celomata +celoms +celosia +celosias +cels +celt +celts +cembali +cembalo +cembalos +cement +cementa +cementation +cementations +cemented +cementer +cementers +cementing +cementite +cementites +cementitious +cements +cementum +cemeteries +cemetery +cenacle +cenacles +cenobite +cenobites +cenobitic +cenospecies +cenotaph +cenotaphs +cenote +cenotes +cense +censed +censer +censers +censes +censing +censor +censored +censorial +censoring +censorious +censoriously +censoriousness +censoriousnesses +censors +censorship +censorships +censual +censurable +censure +censured +censurer +censurers +censures +censuring +census +censused +censuses +censusing cent +cental +centals +centare +centares +centaur +centaurea +centaureas +centauries +centaurs +centaury +centavo +centavos +centenarian +centenarians +centenaries +centenary +centennial +centennially +centennials center +centerboard +centerboards +centered +centeredness +centerednesses +centerfold +centerfolds +centering +centerless +centerline +centerlines +centerpiece +centerpieces +centers +centeses +centesimal +centesimi +centesimo +centesimos +centesis +centiare +centiares centigrade +centigram +centigrams +centile +centiles +centiliter +centiliters +centillion +centillions +centime +centimes centimeter -centimetre +centimeters +centimo +centimorgan +centimorgans +centimos +centipede +centipedes +centner +centners +cento +centones +centos +centra central +centraler +centralest +centralise +centralised +centralises +centralising +centralism +centralisms +centralist +centralistic +centralists +centralities +centrality +centralization +centralizations +centralize +centralized +centralizer +centralizers +centralizes +centralizing +centrally +centrals centre +centred +centres +centric +centrically +centricities +centricity +centrifugal +centrifugally +centrifugals +centrifugation +centrifugations +centrifuge +centrifuged +centrifuges +centrifuging +centring +centrings +centriole +centrioles +centripetal +centripetally +centrism +centrisms +centrist +centrists +centroid +centroids +centromere +centromeres +centromeric +centrosome +centrosomes +centrosymmetric +centrum +centrums +cents +centum +centums +centuple +centupled +centuples +centupling +centuries +centurion +centurions century +ceorl +ceorlish +ceorls +cep +cepe +cepes +cephalad +cephalexin +cephalexins +cephalic +cephalically +cephalin +cephalins +cephalization +cephalizations +cephalometric +cephalometries +cephalometry +cephalopod +cephalopods +cephaloridine +cephaloridines +cephalosporin +cephalosporins +cephalothin +cephalothins +cephalothoraces +cephalothorax +cephalothoraxes +cepheid +cepheids +ceps +ceramal +ceramals +ceramic +ceramicist +ceramicists +ceramics +ceramist +ceramists +cerastes +cerate +cerated +cerates +ceratin +ceratins +ceratoid +ceratopsian +ceratopsians +cercaria +cercariae +cercarial +cercarias +cerci +cercis +cercises +cercus +cere +cereal +cereals +cerebella +cerebellar +cerebellum +cerebellums +cerebra +cerebral +cerebrally +cerebrals +cerebrate +cerebrated +cerebrates +cerebrating +cerebration +cerebrations +cerebric +cerebroside +cerebrosides +cerebrospinal +cerebrovascular +cerebrum +cerebrums +cerecloth +cerecloths +cered +cerement +cerements +ceremonial +ceremonialism +ceremonialisms +ceremonialist +ceremonialists +ceremonially +ceremonials +ceremonies +ceremonious +ceremoniously +ceremoniousness +ceremoniousnesses ceremony +ceres +cereus +cereuses +ceria +cerias +ceric +cering +ceriph +ceriphs +cerise +cerises +cerite +cerites +cerium +ceriums +cermet +cermets +cernuous +cero +ceros +cerotic +cerotype +cerotypes +cerous certain +certainer +certainest +certainly +certainties +certainty +certes +certifiable +certifiably certificate +certificated +certificates +certificating +certification +certifications +certificatory +certified +certifier +certifiers +certifies +certify +certifying +certiorari +certioraris +certitude +certitudes +cerulean +ceruleans +ceruloplasmin +ceruloplasmins +cerumen +cerumens +ceruminous +ceruse +ceruses +cerusite +cerusites +cerussite +cerussites +cervelas +cervelases +cervelat +cervelats +cervical +cervices +cervicites +cervicitides +cervicitis +cervicitises +cervid +cervine +cervix +cervixes +cesarean +cesareans +cesarian +cesarians +cesium +cesiums +cess +cessation +cessations +cessed +cesses +cessing +cession +cessions +cesspit +cesspits +cesspool +cesspools +cesta +cestas +cesti +cestode +cestodes +cestoi +cestoid +cestoids +cestos +cestus +cestuses +cesura +cesurae +cesuras +cetacean +cetaceans +cetaceous +cetane +cetanes +cete +cetes +cetologies +cetologist +cetologists +cetology +ceviche +ceviches +chablis +chabouk +chabouks +chabuk +chabuks +chacma +chacmas +chaconne +chaconnes +chad +chadar +chadarim +chadars +chadless +chador +chadors +chadri +chads +chaeta +chaetae +chaetal +chaetognath +chaetognaths +chafe +chafed +chafer +chafers +chafes +chaff +chaffed +chaffer +chaffered +chafferer +chafferers +chaffering +chaffers +chaffier +chaffiest +chaffinch +chaffinches +chaffing +chaffs +chaffy +chafing +chagrin +chagrined +chagrining +chagrinned +chagrinning +chagrins chain +chaine +chained +chaines +chaining +chainman +chainmen +chains +chainsaw +chainsawed +chainsawing +chainsaws +chainwheel +chainwheels chair +chaired +chairing +chairlift +chairlifts chairman +chairmaned +chairmaning +chairmanned +chairmanning +chairmans +chairmanship +chairmanships +chairmen +chairperson +chairpersons +chairs chairwoman +chairwomen +chaise +chaises +chakra +chakras +chalah +chalahs +chalaza +chalazae +chalazal +chalazas +chalazia +chalazion +chalazions +chalcedonic +chalcedonies +chalcedony +chalcid +chalcids +chalcocite +chalcocites +chalcogen +chalcogenide +chalcogenides +chalcogens +chalcopyrite +chalcopyrites +chaldron +chaldrons +chaleh +chalehs +chalet +chalets +chalice +chaliced +chalices chalk +chalkboard +chalkboards +chalked +chalkier +chalkiest +chalking +chalks +chalky +challa +challah +challahs +challas challenge +challenged +challenger +challengers +challenges challenging +challengingly +challie +challies +challis +challises +challot +challoth +chally +chalone +chalones +chalot +chaloth +chalutz +chalutzim +chalybeate +chalybeates +cham +chamade +chamades +chamaephyte +chamaephytes +chamber +chambered +chambering +chamberlain +chamberlains +chambermaid +chambermaids +chambers +chambray +chambrays +chameleon +chameleonic +chameleonlike +chameleons +chamfer +chamfered +chamfering +chamfers +chamfron +chamfrons +chamise +chamises +chamiso +chamisos +chammied +chammies +chammy +chammying +chamois +chamoised +chamoises +chamoising +chamoix +chamomile +chamomiles +champ +champac +champacs +champagne +champagnes +champaign +champaigns +champak +champaks +champed +champer +champers +champerties +champertous +champerty +champignon +champignons +champing champion +championed +championing +champions +championship +championships +champleve +champleves +champs +champy +chams chance +chanced +chanceful +chancel +chancelleries +chancellery +chancellor +chancellories +chancellors +chancellorship +chancellorships +chancellory +chancels +chanceries +chancery +chances +chancier +chanciest +chancily +chanciness +chancinesses +chancing +chancre +chancres +chancroid +chancroidal +chancroids +chancrous +chancy +chandelier +chandeliered +chandeliers +chandelle +chandelled +chandelles +chandelling +chandler +chandleries +chandlers +chandlery +chanfron +chanfrons +chang change +changeabilities +changeability changeable +changeableness +changeablenesses +changeably +changed +changeful +changefully +changefulness +changefulnesses +changeless +changelessly +changelessness +changelessnesses +changeling +changelings +changeover +changeovers +changer +changers +changes +changing +changs channel +channeled +channeler +channelers +channeling +channelization +channelizations +channelize +channelized +channelizes +channelizing +channelled +channelling +channels +chanson +chansonnier +chansonniers +chansons chant +chantage +chantages +chanted +chanter +chanterelle +chanterelles +chanters +chanteuse +chanteuses +chantey +chanteys +chanticleer +chanticleers +chanties +chanting +chantor +chantors +chantries +chantry +chants +chanty +chao chaos +chaoses +chaotic +chaotically +chap +chaparajos +chaparejos +chaparral +chaparrals +chapati +chapatis +chapatti +chapattis +chapbook +chapbooks +chape +chapeau +chapeaus +chapeaux +chapel +chapels +chaperon +chaperonage +chaperonages +chaperone +chaperoned +chaperones +chaperoning +chaperons +chapes +chapfallen +chapiter +chapiters +chaplain +chaplaincies +chaplaincy +chaplains +chaplet +chapleted +chaplets +chapman +chapmen +chappati +chappatis +chapped +chapping +chaps +chapt chapter +chaptered +chaptering +chapters +chaqueta +chaquetas +char +charabanc +charabancs +characid +characids +characin +characins character +charactered +characterful +characteries +charactering characteristic +characteristically +characteristics +characterization +characterizations +characterize +characterized +characterizes +characterizing +characterless +characterological +characterologically +characters +charactery +charade +charades +charas +charases +charbroil +charbroiled +charbroiler +charbroilers +charbroiling +charbroils +charcoal +charcoaled +charcoaling +charcoals +charcuterie +charcuteries +chard +chardonnay +chardonnays +chards +chare +chared +chares charge +chargeable +charged +chargehand +chargehands +charger +chargers +charges +charging +charier +chariest +charily +chariness +charinesses +charing +chariot +charioted +charioteer +charioteers +charioting +chariots +charism +charisma +charismata +charismatic +charismatics +charisms +charitable +charitableness +charitablenesses +charitably +charities +charity +charivari +charivaris +chark +charka +charkas +charked +charkha +charkhas +charking +charks +charladies +charlady +charlatan +charlatanism +charlatanisms +charlatanries +charlatanry +charlatans +charley +charleys +charlie +charlies +charlock +charlocks +charlotte +charlottes +charm +charmed +charmer +charmers +charmeuse +charmeuses +charming +charminger +charmingest +charmingly +charmless +charms +charnel +charnels +charpai +charpais +charpoy +charpoys +charqui +charquid +charquis +charr +charred +charrier +charriest +charring +charro +charros +charrs +charry +chars chart +charted +charter +chartered +charterer +charterers +chartering +charters +charting +chartist +chartists +chartreuse +chartreuses +charts +chartularies +chartulary +charwoman +charwomen +chary +chase +chased +chaser +chasers +chases +chasing +chasings +chasm +chasmal +chasmed +chasmic +chasms +chasmy +chasse +chassed +chasseing +chassepot +chassepots +chasses +chasseur +chasseurs +chassis +chaste +chastely +chasten +chastened +chastener +chasteners +chasteness +chastenesses +chastening +chastens +chaster +chastest +chastise +chastised +chastisement +chastisements +chastiser +chastisers +chastises +chastising +chastities +chastity +chasuble +chasubles chat +chatchka +chatchkas +chatchke +chatchkes +chateau +chateaubriand +chateaubriands +chateaus +chateaux +chatelain +chatelaine +chatelaines +chatelains +chatoyance +chatoyances +chatoyancies +chatoyancy +chatoyant +chatoyants +chats +chatted +chattel +chattels +chatter +chatterbox +chatterboxes +chattered +chatterer +chatterers +chattering +chatters +chattery +chattier +chattiest +chattily +chattiness +chattinesses +chatting +chatty +chaufer +chaufers +chauffer +chauffers +chauffeur +chauffeured +chauffeuring +chauffeurs +chaulmoogra +chaulmoogras +chaunt +chaunted +chaunter +chaunters +chaunting +chaunts +chausses +chaussure +chaussures +chautauqua +chautauquas +chauvinism +chauvinisms +chauvinist +chauvinistic +chauvinistically +chauvinists +chaw +chawbacon +chawbacons +chawed +chawer +chawers +chawing +chaws +chay +chayote +chayotes +chays +chazan +chazanim +chazans +chazzan +chazzanim +chazzans +chazzen +chazzenim +chazzens cheap +cheapen +cheapened +cheapening +cheapens +cheaper +cheapest +cheapie +cheapies +cheapish +cheapishly +cheapjack +cheapjacks +cheaply +cheapness +cheapnesses +cheapo +cheapos +cheaps +cheapskate +cheapskates cheat +cheated +cheater +cheaters +cheating +cheats +chebec +chebecs +chechako +chechakos check +checkable +checkbook +checkbooks +checked +checker +checkerberries +checkerberry +checkerboard +checkerboards +checkered +checkering +checkers +checking +checkless +checklist +checklists +checkmark +checkmarked +checkmarking +checkmarks +checkmate +checkmated +checkmates +checkmating +checkoff +checkoffs +checkout +checkouts +checkpoint +checkpoints +checkrein +checkreins +checkroom +checkrooms +checkrow +checkrowed +checkrowing +checkrows +checks +checkup +checkups +cheddar +cheddars +cheddite +cheddites +cheder +cheders +chedite +chedites +cheechako +cheechakos cheek +cheekbone +cheekbones +cheeked +cheekful +cheekfuls +cheekier +cheekiest +cheekily +cheekiness +cheekinesses +cheeking +cheeks +cheeky +cheep +cheeped +cheeper +cheepers +cheeping +cheeps cheer +cheered +cheerer +cheerers cheerful +cheerfuller +cheerfullest +cheerfully +cheerfulness +cheerfulnesses +cheerier +cheeriest +cheerily +cheeriness +cheerinesses +cheering +cheerio +cheerios +cheerlead +cheerleader +cheerleaders +cheerleading +cheerleads +cheerled +cheerless +cheerlessly +cheerlessness +cheerlessnesses +cheerly +cheero +cheeros cheers +cheery cheese +cheeseburger +cheeseburgers +cheesecake +cheesecakes +cheesecloth +cheesecloths +cheesed +cheeseparing +cheeseparings +cheeses +cheesier +cheesiest +cheesily +cheesiness +cheesinesses +cheesing +cheesy +cheetah +cheetahs chef +chefdom +chefdoms +cheffed +cheffing +chefs +chegoe +chegoes +chela +chelae +chelas +chelatable +chelate +chelated +chelates +chelating +chelation +chelations +chelator +chelators +chelicera +chelicerae +cheliceral +cheliped +chelipeds +cheloid +cheloids +chelonian +chelonians +chemic chemical +chemically +chemicals +chemics +chemiluminescence +chemiluminescences +chemiluminescent +chemiosmotic +chemise +chemises +chemisette +chemisettes +chemism +chemisms +chemisorb +chemisorbed +chemisorbing +chemisorbs +chemisorption +chemisorptions chemist +chemistries chemistry +chemists +chemo +chemoautotrophic +chemoautotrophies +chemoautotrophy +chemoprophylactic +chemoprophylaxes +chemoprophylaxis +chemoreception +chemoreceptions +chemoreceptive +chemoreceptor +chemoreceptors +chemos +chemosurgeries +chemosurgery +chemosurgical +chemosyntheses +chemosynthesis +chemosynthetic +chemotactic +chemotactically +chemotaxes +chemotaxis +chemotaxonomic +chemotaxonomies +chemotaxonomist +chemotaxonomists +chemotaxonomy +chemotherapeutic +chemotherapeutically +chemotherapeutics +chemotherapies +chemotherapist +chemotherapists +chemotherapy +chemotropism +chemotropisms +chemurgies +chemurgy +chenille +chenilles +chenopod +chenopods +cheongsam +cheongsams cheque +chequer +chequered +chequering +chequers +cheques +cherimoya +cherimoyas +cherish +cherishable +cherished +cherisher +cherishers +cherishes +cherishing +chernozem +chernozemic +chernozems +cheroot +cheroots +cherries +cherry +cherrylike +cherrystone +cherrystones +chert +chertier +chertiest +cherts +cherty +cherub +cherubic +cherubically +cherubim +cherubims +cherublike +cherubs +chervil +chervils chess +chessboard +chessboards +chesses +chessman +chessmen chest +chested +chesterfield +chesterfields +chestful +chestfuls +chestier +chestiest +chestnut +chestnuts +chests +chesty +chetah +chetahs +cheth +cheths +chetrum +chetrums +chevalet +chevalets +chevalier +chevaliers +chevelure +chevelures +cheveron +cheverons +chevied +chevies +cheviot +cheviots +chevre +chevres +chevron +chevrons +chevy +chevying chew +chewable +chewed +chewer +chewers +chewier +chewiest +chewing +chewink +chewinks +chews +chewy +chez +chi +chia +chiao +chiaroscurist +chiaroscurists +chiaroscuro +chiaroscuros +chias +chiasm +chiasma +chiasmal +chiasmas +chiasmata +chiasmatic +chiasmi +chiasmic +chiasms +chiasmus +chiastic +chiaus +chiauses +chibouk +chibouks +chibouque +chibouques +chic +chicane +chicaned +chicaner +chicaneries +chicaners +chicanery +chicanes +chicaning +chicano +chicanos +chiccories +chiccory +chicer +chicest +chichi +chichis +chick +chickadee +chickadees +chickaree +chickarees +chickee +chickees chicken +chickened +chickenhearted +chickening +chickenpox +chickenpoxes +chickens +chickenshit +chickenshits +chickories +chickory +chickpea +chickpeas +chicks +chickweed +chickweeds +chicle +chicles +chicly +chicness +chicnesses +chico +chicories +chicory +chicos +chics +chid +chidden +chide +chided +chider +chiders +chides +chiding chief +chiefdom +chiefdoms +chiefer +chiefest +chiefly +chiefs +chiefship +chiefships +chieftain +chieftaincies +chieftaincy +chieftains +chieftainship +chieftainships +chiel +chield +chields +chiels +chiffchaff +chiffchaffs +chiffon +chiffonade +chiffonades +chiffonier +chiffoniers +chiffons +chifforobe +chifforobes +chigetai +chigetais +chigger +chiggers +chignon +chignons +chigoe +chigoes +chihuahua +chihuahuas +chilblain +chilblains child +childbearing +childbearings +childbed +childbeds +childbirth +childbirths +childe +childes childhood +childhoods +childing +childish +childishly +childishness +childishnesses +childless +childlessness +childlessnesses +childlier +childliest +childlike +childlikeness +childlikenesses +childly +childproof +childproofed +childproofing +childproofs +children +chile +chiles +chili +chiliad +chiliads +chiliasm +chiliasms +chiliast +chiliastic +chiliasts +chilidog +chilidogs +chilies +chill +chilled +chiller +chillers +chillest +chilli +chillier +chillies +chilliest +chillily +chilliness +chillinesses +chilling +chillingly +chillness +chillnesses +chills +chillum +chillums +chilly +chilopod +chilopods +chimaera +chimaeras +chimaeric +chimaerism +chimaerisms +chimar +chimars +chimb +chimbley +chimbleys +chimblies +chimbly +chimbs +chime +chimed +chimer +chimera +chimeras +chimere +chimeres +chimeric +chimerical +chimerically +chimerism +chimerisms +chimers +chimes +chimichanga +chimichangas +chiming +chimla +chimlas +chimley +chimleys +chimney +chimneylike +chimneypiece +chimneypieces +chimneys +chimp +chimpanzee +chimpanzees +chimps +chin +china +chinaberries +chinaberry +chinas +chinaware +chinawares +chinbone +chinbones +chinch +chincherinchee +chincherinchees +chinches +chinchier +chinchiest +chinchilla +chinchillas +chinchy +chine +chined +chines +chining +chink +chinkapin +chinkapins +chinked +chinkier +chinkiest +chinking +chinks +chinky +chinless +chinned +chinning +chino +chinoiserie +chinoiseries +chinone +chinones +chinook +chinooks +chinos +chinquapin +chinquapins +chins +chints +chintses +chintz +chintzes +chintzier +chintziest +chintzy +chionodoxa +chionodoxas +chip +chipboard +chipboards +chipmuck +chipmucks +chipmunk +chipmunks +chipped +chipper +chippered +chippering +chippers +chippie +chippier +chippies +chippiest +chipping +chippy +chips +chiral +chiralities +chirality +chirimoya +chirimoyas +chirk +chirked +chirker +chirkest +chirking +chirks +chirm +chirmed +chirming +chirms +chiro +chirographer +chirographers +chirographic +chirographical +chirographies +chirography +chiromancer +chiromancers +chiromancies +chiromancy +chironomid +chironomids +chiropodies +chiropodist +chiropodists +chiropody +chiropractic +chiropractics +chiropractor +chiropractors +chiropteran +chiropterans +chiros +chirp +chirped +chirper +chirpers +chirpier +chirpiest +chirpily +chirping +chirps +chirpy +chirr +chirre +chirred +chirres +chirring +chirrs +chirrup +chirruped +chirruping +chirrups +chirrupy +chirurgeon +chirurgeons +chis +chisel +chiseled +chiseler +chiselers +chiseling +chiselled +chiseller +chisellers +chiselling +chisels +chit +chital +chitchat +chitchats +chitchatted +chitchatting +chitin +chitinous +chitins +chitlin +chitling +chitlings +chitlins +chiton +chitons +chitosan +chitosans +chits +chitter +chittered +chittering +chitterlings +chitters +chitties +chitty +chivalric +chivalries +chivalrous +chivalrously +chivalrousness +chivalrousnesses +chivalry +chivaree +chivareed +chivareeing +chivarees +chivari +chivaried +chivaries +chivariing +chive +chives +chivied +chivies +chivvied +chivvies +chivvy +chivvying +chivy +chivying +chlamydes +chlamydia +chlamydiae +chlamydial +chlamydospore +chlamydospores +chlamys +chlamyses +chloasma +chloasmata +chloracne +chloracnes +chloral +chloralose +chloralosed +chloraloses +chlorals +chloramine +chloramines +chloramphenicol +chloramphenicols +chlorate +chlorates +chlordan +chlordane +chlordanes +chlordans +chlordiazepoxide +chlordiazepoxides +chlorella +chlorellas +chlorenchyma +chlorenchymas +chlorenchymata +chloric +chlorid +chloride +chlorides +chlorids +chlorin +chlorinate +chlorinated +chlorinates +chlorinating +chlorination +chlorinations +chlorinator +chlorinators +chlorine +chlorines +chlorinities +chlorinity +chlorins +chlorite +chlorites +chloritic +chlorobenzene +chlorobenzenes +chlorofluorocarbon +chlorofluorocarbons +chlorofluoromethane +chlorofluoromethanes +chloroform +chloroformed +chloroforming +chloroforms +chlorohydrin +chlorohydrins +chlorophyll +chlorophyllous +chlorophylls +chloropicrin +chloropicrins +chloroplast +chloroplastic +chloroplasts +chloroprene +chloroprenes +chloroquine +chloroquines +chloroses +chlorosis +chlorothiazide +chlorothiazides +chlorotic +chlorous +chlorpromazine +chlorpromazines +chlorpropamide +chlorpropamides +chlortetracycline +chlortetracyclines +choana +choanae +choanocyte +choanocytes +chock +chockablock +chocked +chockful +chocking +chocks +chocoholic +chocoholics chocolate +chocolates +chocolatey +chocolatier +chocolatiers +chocolaty choice +choicely +choiceness +choicenesses +choicer +choices +choicest choir +choirboy +choirboys +choired +choiring +choirmaster +choirmasters +choirs choke +chokeberries +chokeberry +chokecherries +chokecherry +choked +choker +chokers +chokes +chokey +chokier +chokiest +choking +chokingly +choky +cholangiogram +cholangiograms +cholangiographic +cholangiographies +cholangiography +cholate +cholates +cholecalciferol +cholecalciferols +cholecystectomies +cholecystectomized +cholecystectomy +cholecystites +cholecystitides +cholecystitis +cholecystitises +cholecystokinin +cholecystokinins +cholelithiases +cholelithiasis +cholent +cholents +choler +cholera +choleras +choleric +cholerically +cholers +cholestases +cholestasis +cholestatic +cholesteric +cholesterol +cholesterols +cholestyramine +cholestyramines +choline +cholinergic +cholinergically +cholines +cholinesterase +cholinesterases +cholla +chollas +cholo +cholos +chomp +chomped +chomper +chompers +chomping +chomps +chon +chondriosome +chondriosomes +chondrite +chondrites +chondritic +chondrocrania +chondrocranium +chondrocraniums +chondroitin +chondroitins +chondrule +chondrules +chook +chooks choose +chooser +choosers +chooses +choosey +choosier +choosiest +choosing +choosy +chop +chopfallen +chophouse +chophouses +chopin +chopine +chopines +chopins +choplogic +choplogics +chopped +chopper +choppered +choppering +choppers +choppier +choppiest +choppily +choppiness +choppinesses +chopping +choppy +chops +chopstick chopsticks +choragi +choragic +choragus +choraguses +choral +chorale +chorales +chorally +chorals +chord +chordal +chordamesoderm +chordamesodermal +chordamesoderms +chordate +chordates +chorded +chording +chords +chore +chorea +choreal +choreas +chored +choregi +choregus +choreguses +choreic +choreiform +choreman +choremen +choreograph +choreographed +choreographer +choreographers +choreographic +choreographically +choreographies +choreographing +choreographs +choreography +choreoid +chores +chorial +choriamb +choriambs +choric +chorine +chorines +choring +chorioallantoic +chorioallantoides +chorioallantois +choriocarcinoma +choriocarcinomas +choriocarcinomata +chorioid +chorioids +chorion +chorionic +chorions +chorister +choristers +chorizo +chorizos +chorographer +chorographers +chorographic +chorographies +chorography +choroid +choroidal +choroids +chortle +chortled +chortler +chortlers +chortles +chortling chorus -christian -christmas +chorused +choruses +chorusing +chorussed +chorusses +chorussing +chose +chosen +choses +chott +chotts +chough +choughs +chouse +choused +chouser +chousers +chouses +choush +choushes +chousing +chow +chowchow +chowchows +chowder +chowdered +chowderhead +chowderheaded +chowderheads +chowdering +chowders +chowed +chowhound +chowhounds +chowing +chows +chowse +chowsed +chowses +chowsing +chowtime +chowtimes +chresard +chresards +chrestomathies +chrestomathy +chrism +chrisma +chrismal +chrismation +chrismations +chrismon +chrismons +chrisms +chrisom +chrisoms +christen +christened +christening +christenings +christens +christiania +christianias +christie +christies +christy +chroma +chromaffin +chromas +chromate +chromates +chromatic +chromatically +chromaticism +chromaticisms +chromaticities +chromaticity +chromatics +chromatid +chromatids +chromatin +chromatinic +chromatins +chromatogram +chromatograms +chromatograph +chromatographed +chromatographer +chromatographers +chromatographic +chromatographically +chromatographies +chromatographing +chromatographs +chromatography +chromatolyses +chromatolysis +chromatolytic +chromatophore +chromatophores +chrome +chromed +chromes +chromic +chromide +chromides +chrominance +chrominances +chroming +chromings +chromite +chromites +chromium +chromiums +chromize +chromized +chromizes +chromizing +chromo +chromocenter +chromocenters +chromodynamics +chromogen +chromogenic +chromogens +chromolithograph +chromolithographed +chromolithographer +chromolithographers +chromolithographic +chromolithographies +chromolithographing +chromolithographs +chromolithography +chromomere +chromomeres +chromomeric +chromonema +chromonemata +chromonematic +chromophil +chromophobe +chromophore +chromophores +chromophoric +chromoplast +chromoplasts +chromoprotein +chromoproteins +chromos +chromosomal +chromosomally +chromosome +chromosomes +chromosphere +chromospheres +chromospheric +chromous +chromyl +chromyls +chronaxie +chronaxies +chronaxy +chronic +chronically +chronicities +chronicity +chronicle +chronicled +chronicler +chroniclers +chronicles +chronicling +chronics +chronobiologic +chronobiological +chronobiologies +chronobiologist +chronobiologists +chronobiology +chronogram +chronograms +chronograph +chronographic +chronographies +chronographs +chronography +chronologer +chronologers +chronologic +chronological +chronologically +chronologies +chronologist +chronologists +chronology +chronometer +chronometers +chronometric +chronometrical +chronometrically +chronometries +chronometry +chronon +chronons +chronotherapies +chronotherapy +chrysalid +chrysalides +chrysalids +chrysalis +chrysalises +chrysanthemum +chrysanthemums +chrysarobin +chrysarobins +chrysoberyl +chrysoberyls +chrysolite +chrysolites +chrysomelid +chrysomelids +chrysophyte +chrysophytes +chrysoprase +chrysoprases +chrysotile +chrysotiles +chthonian +chthonic +chub +chubasco +chubascos +chubbier +chubbiest +chubbily +chubbiness +chubbinesses +chubby +chubs +chuck +chuckawalla +chuckawallas +chucked +chuckhole +chuckholes +chuckies +chucking +chuckle +chuckled +chucklehead +chuckleheaded +chuckleheads +chuckler +chucklers +chuckles +chucklesome +chuckling +chucklingly +chucks +chuckwalla +chuckwallas +chucky +chuddah +chuddahs +chuddar +chuddars +chudder +chudders +chufa +chufas +chuff +chuffed +chuffer +chuffest +chuffier +chuffiest +chuffing +chuffs +chuffy +chug +chugalug +chugalugged +chugalugging +chugalugs +chugged +chugger +chuggers +chugging +chugs +chukar +chukars +chukka +chukkar +chukkars +chukkas +chukker +chukkers +chum +chummed +chummier +chummiest +chummily +chumminess +chumminesses +chumming +chummy +chump +chumped +chumping +chumps +chums +chumship +chumships +chunk +chunked +chunkier +chunkiest +chunkily +chunking +chunks +chunky +chunter +chuntered +chuntering +chunters church +churched +churches +churchgoer +churchgoers +churchgoing +churchgoings +churchianities +churchianity +churchier +churchiest +churching +churchings +churchless +churchlier +churchliest +churchliness +churchlinesses +churchly +churchman +churchmanship +churchmanships +churchmen +churchwarden +churchwardens +churchwoman +churchwomen +churchy +churchyard +churchyards +churl +churlish +churlishly +churlishness +churlishnesses +churls +churn +churned +churner +churners +churning +churnings +churns +churr +churred +churrigueresque +churring +churrs +chute +chuted +chutes +chuting +chutist +chutists +chutnee +chutnees +chutney +chutneys +chutzpa +chutzpah +chutzpahs +chutzpas +chyle +chyles +chylomicron +chylomicrons +chylous +chyme +chymes +chymic +chymics +chymist +chymists +chymosin +chymosins +chymotrypsin +chymotrypsinogen +chymotrypsinogens +chymotrypsins +chymotryptic +chymous +ciao +cibol +cibols +ciboria +ciborium +ciboule +ciboules +cicada +cicadae +cicadas +cicala +cicalas +cicale +cicatrices +cicatricial +cicatrix +cicatrixes +cicatrization +cicatrizations +cicatrize +cicatrized +cicatrizes +cicatrizing +cicelies +cicely +cicero +cicerone +cicerones +ciceroni +ciceros +cichlid +cichlidae +cichlids +cicisbei +cicisbeism +cicisbeisms +cicisbeo +cicisbeos +cicoree +cicorees +cider +ciders cigar +cigaret +cigarets cigarette +cigarettes +cigarillo +cigarillos +cigars +ciguatera +ciguateras +cilantro +cilantros +cilia +ciliary +ciliate +ciliated +ciliates +ciliation +ciliations +cilice +cilices +cilium +cimbalom +cimbaloms +cimetidine +cimetidines +cimex +cimices +cinch +cinched +cinches +cinching +cinchona +cinchonas +cinchonine +cinchonines +cinchonism +cinchonisms +cincture +cinctured +cinctures +cincturing +cinder +cindered +cindering +cinders +cindery +cine +cineast +cineaste +cineastes +cineasts cinema +cinemagoer +cinemagoers +cinemas +cinematheque +cinematheques +cinematic +cinematically +cinematize +cinematized +cinematizes +cinematizing +cinematograph +cinematographer +cinematographers +cinematographic +cinematographically +cinematographies +cinematographs +cinematography +cineol +cineole +cineoles +cineols +cineraria +cinerarias +cinerarium +cinerary +cinereous +cinerin +cinerins +cines +cingula +cingulate +cingulum +cinnabar +cinnabarine +cinnabars +cinnamic +cinnamon +cinnamons +cinnamyl +cinnamyls +cinquain +cinquains +cinque +cinquecentist +cinquecentisti +cinquecentists +cinquecento +cinquecentos +cinquefoil +cinquefoils +cinques +cion +cions +cioppino +cioppinos +cipher +ciphered +ciphering +ciphers +ciphertext +ciphertexts +ciphonies +ciphony +cipolin +cipolins +circa +circadian +circinate +circinately circle +circled +circler +circlers +circles +circlet +circlets +circling circuit +circuital +circuited +circuities +circuiting +circuitous +circuitously +circuitousness +circuitousnesses +circuitries +circuitry +circuits +circuity +circular +circularise +circularised +circularises +circularising +circularities +circularity +circularization +circularizations +circularize +circularized +circularizes +circularizing +circularly +circularness +circularnesses +circulars +circulatable circulate +circulated +circulates +circulating +circulation +circulations +circulative +circulator +circulators +circulatory +circumambient +circumambiently +circumambulate +circumambulated +circumambulates +circumambulating +circumambulation +circumambulations +circumcenter +circumcenters +circumcircle +circumcircles +circumcise +circumcised +circumciser +circumcisers +circumcises +circumcising +circumcision +circumcisions +circumference +circumferences +circumferential +circumflex +circumflexes +circumfluent +circumfluous +circumfuse +circumfused +circumfuses +circumfusing +circumfusion +circumfusions +circumjacent +circumlocution +circumlocutions +circumlocutory +circumlunar +circumnavigate +circumnavigated +circumnavigates +circumnavigating +circumnavigation +circumnavigations +circumnavigator +circumnavigators +circumpolar +circumscissile +circumscribe +circumscribed +circumscribes +circumscribing +circumscription +circumscriptions +circumspect +circumspection +circumspections +circumspectly circumstance +circumstanced +circumstances +circumstantial +circumstantialities +circumstantiality +circumstantially +circumstantiate +circumstantiated +circumstantiates +circumstantiating +circumstellar +circumvallate +circumvallated +circumvallates +circumvallating +circumvallation +circumvallations +circumvent +circumvented +circumventing +circumvention +circumventions +circumvents +circumvolution +circumvolutions +circus +circuses +circusy +cire +cires +cirque +cirques +cirrate +cirrhoses +cirrhosis +cirrhotic +cirrhotics +cirri +cirriped +cirripeds +cirrocumuli +cirrocumulus +cirrose +cirrostrati +cirrostratus +cirrous +cirrus +cirsoid +cis +cisalpine +cisco +ciscoes +ciscos +cislunar +cisplatin +cisplatins +cissies +cissoid +cissoids +cissy +cist +cistern +cisterna +cisternae +cisternal +cisterns +cistron +cistronic +cistrons +cists +cistus +cistuses +citable +citadel +citadels +citation +citational +citations +citator +citators +citatory +cite +citeable +cited +citer +citers +cites +cithara +citharas +cither +cithern +citherns +cithers +cithren +cithrens +citied +cities +citification +citifications +citified +citifies +citify +citifying +citing citizen +citizeness +citizenesses +citizenly +citizenries +citizenry +citizens +citizenship +citizenships +citola +citolas +citole +citoles +citral +citrals +citrate +citrated +citrates +citreous +citric +citriculture +citricultures +citriculturist +citriculturists +citrin +citrine +citrines +citrinin +citrinins +citrins +citron +citronella +citronellal +citronellals +citronellas +citronellol +citronellols +citrons +citrous +citrulline +citrullines +citrus +citruses +citrusy +cittern +citterns city +cityfied +cityscape +cityscapes +cityward +citywide +civet +civets +civic +civically +civicism +civicisms +civics +civie +civies civil civilian +civilianization +civilianizations +civilianize +civilianized +civilianizes +civilianizing +civilians +civilisation +civilisations +civilise +civilised +civilises +civilising +civilities +civility civilization +civilizational +civilizations +civilize +civilized +civilizer +civilizers +civilizes +civilizing +civilly +civism +civisms +civvies +civvy +clabber +clabbered +clabbering +clabbers +clach +clachan +clachans +clachs +clack +clacked +clacker +clackers +clacking +clacks +clad +cladding +claddings +clade +clades +cladist +cladistic +cladistically +cladistics +cladists +cladoceran +cladocerans +cladode +cladodes +cladodial +cladogeneses +cladogenesis +cladogenetic +cladogenetically +cladogram +cladograms +cladophyll +cladophylla +cladophylls +cladophyllum +clads +clag +clagged +clagging +clags +claim +claimable +claimant +claimants +claimed +claimer +claimers +claiming +claims +clairaudience +clairaudiences +clairaudient +clairaudiently +clairvoyance +clairvoyances +clairvoyant +clairvoyantly +clairvoyants +clam +clamant +clamantly +clambake +clambakes +clamber +clambered +clamberer +clamberers +clambering +clambers +clammed +clammer +clammers +clammier +clammiest +clammily +clamminess +clamminesses +clamming +clammy +clamor +clamored +clamorer +clamorers +clamoring +clamorous +clamorously +clamorousness +clamorousnesses +clamors +clamour +clamoured +clamouring +clamours +clamp +clampdown +clampdowns +clamped +clamper +clampers +clamping +clamps +clams +clamshell +clamshells +clamworm +clamworms +clan +clandestine +clandestinely +clandestineness +clandestinenesses +clandestinities +clandestinity +clang +clanged +clanger +clangers +clanging +clangor +clangored +clangoring +clangorous +clangorously +clangors +clangour +clangoured +clangouring +clangours +clangs +clank +clanked +clanking +clankingly +clanks +clannish +clannishly +clannishness +clannishnesses +clans +clansman +clansmen clap +clapboard +clapboarded +clapboarding +clapboards +clapped +clapper +clapperclaw +clapperclawed +clapperclawing +clapperclaws +clappers +clapping +claps +clapt +claptrap +claptraps +claque +claquer +claquers +claques +claqueur +claqueurs +clarence +clarences +claret +clarets +claries +clarification +clarifications +clarified +clarifier +clarifiers +clarifies clarify +clarifying +clarinet +clarinetist +clarinetists +clarinets +clarinettist +clarinettists +clarion +clarioned +clarioning +clarions +clarities +clarity +clarkia +clarkias +claro +claroes +claros +clary +clash +clashed +clasher +clashers +clashes +clashing +clasp +clasped +clasper +claspers +clasping +clasps +claspt class +classed +classer +classers +classes classic +classical +classicalities +classicality +classically +classicism +classicisms +classicist +classicistic +classicists +classicize +classicized +classicizes +classicizing +classico +classics +classier +classiest +classifiable +classification +classifications +classificatory +classified +classifier +classifiers +classifies classify +classifying +classily +classiness +classinesses +classing +classis +classism +classisms +classist +classists +classless +classlessness +classlessnesses classmate +classmates classroom +classrooms +classy +clast +clastic +clastics +clasts +clathrate +clathrates +clatter +clattered +clatterer +clatterers +clattering +clatteringly +clatters +clattery +claucht +claudication +claudications +claught +claughted +claughting +claughts +clausal +clause +clauses +claustra +claustral +claustrophobe +claustrophobes +claustrophobia +claustrophobias +claustrophobic +claustrophobically +claustrum +clavate +clave +claver +clavered +clavering +clavers +claves +clavi +clavichord +clavichordist +clavichordists +clavichords +clavicle +clavicles +clavicular +clavier +clavierist +clavieristic +clavierists +claviers +clavus claw +clawed +clawer +clawers +clawhammer +clawing +clawless +clawlike +claws +claxon +claxons clay +claybank +claybanks +clayed +clayey +clayier +clayiest +claying +clayish +claylike +claymore +claymores +claypan +claypans +clays +clayware +claywares clean +cleanabilities +cleanability +cleanable +cleaned cleaner +cleaners +cleanest +cleanhanded +cleaning +cleanlier +cleanliest +cleanliness +cleanlinesses +cleanly +cleanness +cleannesses +cleans +cleanse +cleansed +cleanser +cleansers +cleanses +cleansing +cleanup +cleanups clear +clearable +clearance +clearances +cleared +clearer +clearers +clearest +clearheaded +clearheadedly +clearheadedness +clearheadednesses +clearing +clearinghouse +clearinghouses +clearings +clearly +clearness +clearnesses +clears +clearstories +clearstory +clearwing +clearwings +cleat +cleated +cleating +cleats +cleavable +cleavage +cleavages +cleave +cleaved +cleaver +cleavers +cleaves +cleaving +cleek +cleeked +cleeking +cleeks +clef +clefs +cleft +clefted +clefting +clefts +cleidoic +cleistogamic +cleistogamies +cleistogamous +cleistogamously +cleistogamy +clematis +clematises +clemencies +clemency +clement +clemently +clench +clenched +clencher +clenchers +clenches +clenching +cleome +cleomes +clepe +cleped +clepes +cleping +clepsydra +clepsydrae +clepsydras +clept +clerestories +clerestory +clergies +clergy +clergyman +clergymen +clergywoman +clergywomen +cleric +clerical +clericalism +clericalisms +clericalist +clericalists +clerically +clericals +clerics +clerid +clerids +clerihew +clerihews +clerisies +clerisy clerk +clerkdom +clerkdoms +clerked +clerking +clerkish +clerklier +clerkliest +clerkly +clerks +clerkship +clerkships +cleveite +cleveites clever +cleverer +cleverest +cleverish +cleverly +cleverness +clevernesses +clevis +clevises +clew +clewed +clewing +clews +cliche +cliched +cliches click +clicked +clicker +clickers +clicking +clicks +client +clientage +clientages +cliental +clientele +clienteles +clientless +clients +cliff +cliffhanger +cliffhangers +cliffier +cliffiest +cliffs +cliffy +clift +clifts +climacteric +climacterics +climactic +climactically +climatal climate +climates +climatic +climatically +climatological +climatologically +climatologies +climatologist +climatologists +climatology +climax +climaxed +climaxes +climaxing +climaxless climb +climbable +climbed +climber +climbers +climbing +climbs +clime +climes +clinal +clinally +clinch +clinched +clincher +clinchers +clinches +clinching +clinchingly +cline +clines +cling +clinged +clinger +clingers +clingier +clingiest +clinging +clings +clingstone +clingstones +clingy clinic +clinical +clinically +clinician +clinicians +clinicopathologic +clinicopathological +clinicopathologically +clinics +clink +clinked +clinker +clinkered +clinkering +clinkers +clinking +clinks +clinometer +clinometers +clinquant +clinquants +clintonia +clintonias +cliometric +cliometrician +cliometricians +cliometrics +clip +clipboard +clipboards +clipped +clipper +clippers +clipping +clippings +clips +clipsheet +clipsheets +clipt +clique +cliqued +cliques +cliquey +cliquier +cliquiest +cliquing +cliquish +cliquishly +cliquishness +cliquishnesses +cliquy +clitella +clitellum +clitic +clitics +clitoral +clitorectomies +clitorectomy +clitoric +clitoridectomies +clitoridectomy +clitorides +clitoris +clitorises +clivers +clivia +clivias +cloaca +cloacae +cloacal +cloacas +cloak +cloaked +cloaking +cloakroom +cloakrooms +cloaks +clobber +clobbered +clobbering +clobbers +clochard +clochards +cloche +cloches clock +clocked +clocker +clockers +clocking +clocklike +clocks +clockwise +clockwork +clockworks +clod +cloddier +cloddiest +cloddish +cloddishness +cloddishnesses +cloddy +clodhopper +clodhoppers +clodhopping +clodpate +clodpates +clodpole +clodpoles +clodpoll +clodpolls +clods +clofibrate +clofibrates +clog +clogged +clogger +cloggers +cloggier +cloggiest +clogging +cloggy +clogs +cloisonne +cloisonnes +cloister +cloistered +cloistering +cloisters +cloistral +cloistress +cloistresses +clomb +clomiphene +clomiphenes +clomp +clomped +clomping +clomps +clon +clonal +clonally clone +cloned +cloner +cloners +clones +clonic +clonicities +clonicity +clonidine +clonidines +cloning +clonings +clonism +clonisms +clonk +clonked +clonking +clonks +clons +clonus +clonuses +cloot +cloots +clop +clopped +clopping +clops +cloque +cloques +closable close +closeable +closed +closedown +closedowns +closefisted +closely +closemouthed +closeness +closenesses +closeout +closeouts +closer +closers +closes +closest +closestool +closestools +closet +closeted +closetful +closetfuls +closeting +closets +closing +closings +clostridia +clostridial +clostridium +closure +closured +closures +closuring +clot cloth +clothbound +clothe +clothed clothes +clotheshorse +clotheshorses +clothesline +clotheslined +clotheslines +clotheslining +clothespin +clothespins +clothespress +clothespresses +clothier +clothiers clothing +clothings +cloths +clots +clotted +clotting +clotty +cloture +clotured +clotures +cloturing cloud +cloudberries +cloudberry +cloudburst +cloudbursts +clouded +cloudier +cloudiest +cloudily +cloudiness +cloudinesses +clouding +cloudland +cloudlands +cloudless +cloudlessly +cloudlessness +cloudlessnesses +cloudlet +cloudlets +clouds +cloudscape +cloudscapes cloudy +clough +cloughs +clour +cloured +clouring +clours +clout +clouted +clouter +clouters +clouting +clouts +clove +cloven +clover +cloverleaf +cloverleafs +cloverleaves +clovers +cloves +clowder +clowders +clown +clowned +clowneries +clownery +clowning +clownish +clownishly +clownishness +clownishnesses +clowns +cloxacillin +cloxacillins +cloy +cloyed +cloying +cloyingly +cloys +cloze +clozes club +clubable +clubbable +clubbed +clubber +clubbers +clubbier +clubbiest +clubbiness +clubbinesses +clubbing +clubbish +clubby +clubfeet +clubfoot +clubfooted +clubhand +clubhands +clubhaul +clubhauled +clubhauling +clubhauls +clubhouse +clubhouses +clubman +clubmen +clubroom +clubrooms +clubroot +clubroots +clubs +cluck +clucked +clucking +clucks +clue +clued +clueing +clueless +clues +cluing +clumber +clumbers +clump +clumped +clumpier +clumpiest +clumping +clumpish +clumps +clumpy +clumsier +clumsiest +clumsily +clumsiness +clumsinesses clumsy +clung +clunk +clunked +clunker +clunkers +clunkier +clunkiest +clunking +clunks +clunky +clupeid +clupeids +clupeoid +clupeoids +cluster +clustered +clustering +clusters +clustery +clutch +clutched +clutches +clutching +clutchy +clutter +cluttered +cluttering +clutters +cluttery +clypeal +clypeate +clypei +clypeus +clyster +clysters +cnidarian +cnidarians +coacervate +coacervates +coacervation +coacervations coach +coachable +coached +coacher +coachers +coaches +coaching +coachman +coachmen +coachwork +coachworks +coact +coacted +coacting +coaction +coactions +coactive +coactor +coactors +coacts +coadaptation +coadaptations +coadapted +coadjutor +coadjutors +coadjutrices +coadjutrix +coadministration +coadministrations +coadmire +coadmired +coadmires +coadmiring +coadmit +coadmits +coadmitted +coadmitting +coaeval +coaevals +coagencies +coagency +coagent +coagents +coagula +coagulabilities +coagulability +coagulable +coagulant +coagulants +coagulase +coagulases +coagulate +coagulated +coagulates +coagulating +coagulation +coagulations +coagulum +coagulums coal +coala +coalas +coalbin +coalbins +coalbox +coalboxes +coaled +coaler +coalers +coalesce +coalesced +coalescence +coalescences +coalescent +coalesces +coalescing +coalfield +coalfields +coalfish +coalfishes +coalhole +coalholes +coalier +coaliest +coalification +coalifications +coalified +coalifies +coalify +coalifying +coaling +coalition +coalitionist +coalitionists +coalitions +coalless +coalpit +coalpits +coals +coalsack +coalsacks +coalshed +coalsheds +coaly +coalyard +coalyards +coaming +coamings +coanchor +coanchored +coanchoring +coanchors +coannex +coannexed +coannexes +coannexing +coappear +coappeared +coappearing +coappears +coapt +coaptation +coaptations +coapted +coapting +coapts +coarctation +coarctations +coarse +coarsely +coarsen +coarsened +coarseness +coarsenesses +coarsening +coarsens +coarser +coarsest +coassist +coassisted +coassisting +coassists +coassume +coassumed +coassumes +coassuming coast +coastal +coasted +coaster +coasters +coastguard +coastguardman +coastguardmen +coastguards +coastguardsman +coastguardsmen +coasting +coastings +coastland +coastlands +coastline +coastlines +coasts +coastward +coastwards +coastwise coat +coatdress +coatdresses +coated +coatee +coatees +coater +coaters +coati +coatimundi +coatimundis +coating +coatings +coatis +coatless +coatrack +coatracks +coatroom +coatrooms +coats +coattail +coattails +coattend +coattended +coattending +coattends +coattest +coattested +coattesting +coattests +coauthor +coauthored +coauthoring +coauthors +coauthorship +coauthorships +coax +coaxal +coaxed +coaxer +coaxers +coaxes +coaxial +coaxially +coaxing +cob +cobalamin +cobalamins +cobalt +cobaltic +cobaltine +cobaltines +cobaltite +cobaltites +cobaltous +cobalts +cobb +cobber +cobbers +cobbier +cobbiest +cobble +cobbled +cobbler +cobblers +cobbles +cobblestone +cobblestoned +cobblestones +cobbling +cobbs +cobby +cobelligerent +cobelligerents +cobia +cobias +coble +cobles +cobnut +cobnuts +cobra +cobras +cobs +cobweb +cobwebbed +cobwebbier +cobwebbiest +cobwebbing +cobwebby +cobwebs +coca +cocain +cocaine +cocaines +cocainization +cocainizations +cocainize +cocainized +cocainizes +cocainizing +cocains +cocaptain +cocaptained +cocaptaining +cocaptains +cocarboxylase +cocarboxylases +cocarcinogen +cocarcinogenic +cocarcinogens +cocas +cocatalyst +cocatalysts +coccal +cocci +coccic +coccid +coccidia +coccidioidomycoses +coccidioidomycosis +coccidioses +coccidiosis +coccidium +coccids +coccoid +coccoids +coccous +coccus +coccygeal +coccyges +coccyx +coccyxes +cochair +cochaired +cochairing +cochairman +cochairmen +cochairperson +cochairpersons +cochairs +cochairwoman +cochairwomen +cochampion +cochampions +cochin +cochineal +cochineals +cochins +cochlea +cochleae +cochlear +cochleas +cocinera +cocineras +cock +cockade +cockaded +cockades +cockalorum +cockalorums +cockamamie +cockamamy +cockapoo +cockapoos +cockatiel +cockatiels +cockatoo +cockatoos +cockatrice +cockatrices +cockbill +cockbilled +cockbilling +cockbills +cockboat +cockboats +cockchafer +cockchafers +cockcrow +cockcrows +cocked +cocker +cockered +cockerel +cockerels +cockering +cockers +cockeye +cockeyed +cockeyedly +cockeyedness +cockeyednesses +cockeyes +cockfight +cockfighting +cockfightings +cockfights +cockhorse +cockhorses +cockier +cockiest +cockily +cockiness +cockinesses +cocking +cockish +cockle +cocklebur +cockleburs +cockled +cockles +cockleshell +cockleshells +cocklike +cockling +cockloft +cocklofts +cockney +cockneyfied +cockneyfies +cockneyfy +cockneyfying +cockneyish +cockneyism +cockneyisms +cockneys +cockpit +cockpits +cockroach +cockroaches +cocks +cockscomb +cockscombs +cocksfoot +cocksfoots +cockshies +cockshut +cockshuts +cockshy +cockspur +cockspurs +cocksucker +cocksuckers +cocksure +cocksurely +cocksureness +cocksurenesses +cocktail +cocktailed +cocktailing +cocktails +cockup +cockups +cocky +coco cocoa +cocoanut +cocoanuts +cocoas +cocobola +cocobolas +cocobolo +cocobolos +cocomat +cocomats +cocomposer +cocomposers +coconspirator +coconspirators +coconut +coconuts +cocoon +cocooned +cocooning +cocoonings +cocoons +cocos +cocotte +cocottes +cocounsel +cocounseled +cocounseling +cocounselled +cocounselling +cocounsels +cocoyam +cocoyams +cocreate +cocreated +cocreates +cocreating +cocreator +cocreators +cocultivate +cocultivated +cocultivates +cocultivating +cocultivation +cocultivations +coculture +cocultured +cocultures +coculturing +cocurator +cocurators +cocurricular +cod +coda +codable +codas +codded +codder +codders +codding +coddle +coddled +coddler +coddlers +coddles +coddling +code +codebook +codebooks +codebtor +codebtors +codec +codecs +coded +codefendant +codefendants +codeia +codeias +codein +codeina +codeinas +codeine +codeines +codeins +codeless +coden +codens +codependence +codependences +codependencies +codependency +codependent +codependents +coder +coderive +coderived +coderives +coderiving +coders +codes +codesign +codesigned +codesigning +codesigns +codetermination +codeterminations +codevelop +codeveloped +codeveloper +codevelopers +codeveloping +codevelops +codex +codfish +codfishes +codger +codgers +codices +codicil +codicillary +codicils +codicological +codicologies +codicology +codifiabilities +codifiability +codification +codifications +codified +codifier +codifiers +codifies +codify +codifying +coding +codirect +codirected +codirecting +codirection +codirections +codirector +codirectors +codirects +codiscover +codiscovered +codiscoverer +codiscoverers +codiscovering +codiscovers +codlin +codling +codlings +codlins +codominant +codominants +codon +codons +codpiece +codpieces +codrive +codriven +codriver +codrivers +codrives +codriving +codrove +cods +codswallop +codswallops +coed +coedit +coedited +coediting +coeditor +coeditors +coedits +coeds +coeducation +coeducational +coeducationally +coeducations +coeffect +coeffects +coefficient +coefficients +coelacanth +coelacanths +coelentera +coelenterate +coelenterates +coelenteron +coeliac +coelom +coelomata +coelomate +coelomates +coelome +coelomes +coelomic +coeloms +coembodied +coembodies +coembody +coembodying +coemploy +coemployed +coemploying +coemploys +coempt +coempted +coempting +coempts +coenact +coenacted +coenacting +coenacts +coenamor +coenamored +coenamoring +coenamors +coendure +coendured +coendures +coenduring +coenobite +coenobites +coenocyte +coenocytes +coenocytic +coenure +coenures +coenuri +coenurus +coenzymatic +coenzymatically +coenzyme +coenzymes +coequal +coequalities +coequality +coequally +coequals +coequate +coequated +coequates +coequating +coerce +coerced +coercer +coercers +coerces +coercible +coercing +coercion +coercions +coercive +coercively +coerciveness +coercivenesses +coercivities +coercivity +coerect +coerected +coerecting +coerects +coesite +coesites +coetaneous +coeternal +coeval +coevalities +coevality +coevally +coevals +coevolution +coevolutionary +coevolutions +coevolve +coevolved +coevolves +coevolving +coexecutor +coexecutors +coexert +coexerted +coexerting +coexerts +coexist +coexisted +coexistence +coexistences +coexistent +coexisting +coexists +coextend +coextended +coextending +coextends +coextensive +coextensively +cofactor +cofactors +cofavorite +cofavorites +cofeature +cofeatured +cofeatures +cofeaturing +coff coffee +coffeecake +coffeecakes +coffeehouse +coffeehouses +coffeemaker +coffeemakers +coffeepot +coffeepots +coffees +coffer +cofferdam +cofferdams +coffered +coffering +coffers +coffin +coffined +coffing +coffining +coffins +coffle +coffled +coffles +coffling +coffret +coffrets +coffs +cofinance +cofinanced +cofinances +cofinancing +cofound +cofounded +cofounder +cofounders +cofounding +cofounds +coft +cofunction +cofunctions +cog +cogencies +cogency +cogeneration +cogenerations +cogenerator +cogenerators +cogent +cogently +cogged +cogging +cogitable +cogitate +cogitated +cogitates +cogitating +cogitation +cogitations +cogitative +cogito +cogitos +cognac +cognacs +cognate +cognately +cognates +cognation +cognations +cognise +cognised +cognises +cognising +cognition +cognitional +cognitions +cognitive +cognitively +cognizable +cognizably +cognizance +cognizances +cognizant +cognize +cognized +cognizer +cognizers +cognizes +cognizing +cognomen +cognomens +cognomina +cognominal +cognoscente +cognoscenti +cognoscible +cognovit +cognovits +cogon +cogons +cogs +cogway +cogways +cogwheel +cogwheels +cohabit +cohabitant +cohabitants +cohabitation +cohabitations +cohabited +cohabiting +cohabits +cohead +coheaded +coheading +coheads +coheir +coheiress +coheiresses +coheirs +cohere +cohered +coherence +coherences +coherencies +coherency +coherent +coherently +coherer +coherers +coheres +cohering +cohesion +cohesionless +cohesions +cohesive +cohesively +cohesiveness +cohesivenesses +coho +cohobate +cohobated +cohobates +cohobating +cohog +cohogs +coholder +coholders +cohomological +cohomologies +cohomology +cohort +cohorts +cohos +cohosh +cohoshes +cohost +cohosted +cohostess +cohostessed +cohostesses +cohostessing +cohosting +cohosts +cohune +cohunes +coif +coifed +coiffe +coiffed +coiffes +coiffeur +coiffeurs +coiffeuse +coiffeuses +coiffing +coiffure +coiffured +coiffures +coiffuring +coifing +coifs +coign +coigne +coigned +coignes +coigning +coigns +coil +coilabilities +coilability +coiled +coiler +coilers +coiling +coils coin +coinable +coinage +coinages +coincide +coincided coincidence +coincidences +coincident +coincidental +coincidentally +coincidently +coincides +coinciding +coined +coiner +coiners +coinfer +coinferred +coinferring +coinfers +coinhere +coinhered +coinheres +coinhering +coining +coinmate +coinmates +coins +coinsurance +coinsurances +coinsure +coinsured +coinsurer +coinsurers +coinsures +coinsuring +cointer +cointerred +cointerring +cointers +coinvent +coinvented +coinventing +coinventor +coinventors +coinvents +coinvestigator +coinvestigators +coinvestor +coinvestors +coir +coirs +coistrel +coistrels +coistril +coistrils +coital +coitally +coition +coitional +coitions +coitus +coituses +cojoin +cojoined +cojoining +cojoins coke +coked +cokehead +cokeheads +cokes +coking +col +cola +colander +colanders +colas +colatitude +colatitudes +colcannon +colcannons +colchicine +colchicines +colchicum +colchicums cold +coldblood +coldcock +coldcocked +coldcocking +coldcocks +colder +coldest +coldhearted +coldheartedly +coldheartedness +coldheartednesses +coldish +coldly +coldness +coldnesses +colds +cole +colead +coleader +coleaders +coleading +coleads +coled +colemanite +colemanites +coleoptera +coleopteran +coleopterans +coleopterist +coleopterists +coleopterous +coleoptile +coleoptiles +coleorhiza +coleorhizae +coles +coleseed +coleseeds +coleslaw +coleslaws +colessee +colessees +colessor +colessors +coleus +coleuses +colewort +coleworts +colic +colicin +colicine +colicines +colicins +colicky +colicroot +colicroots +colics +colies +coliform +coliforms +colin +colinear +colinearities +colinearity +colins +coliphage +coliphages +coliseum +coliseums +colistin +colistins +colitic +colitis +colitises +collaborate +collaborated +collaborates +collaborating +collaboration +collaborationism +collaborationisms +collaborationist +collaborationists +collaborations +collaborative +collaboratively +collaboratives +collaborator +collaborators +collage +collaged +collagen +collagenase +collagenases +collagenous +collagens +collages +collaging +collagist +collagists +collapse +collapsed +collapses +collapsibilities +collapsibility +collapsible +collapsing collar +collarbone +collarbones +collard +collards +collared +collaret +collarets +collaring +collarless +collars +collate +collated +collateral +collateralities +collaterality +collateralize +collateralized +collateralizes +collateralizing +collaterally +collaterals +collates +collating +collation +collations +collator +collators colleague +colleagues +colleagueship +colleagueships collect +collectable +collectables +collectanea +collected +collectedly +collectedness +collectednesses +collectible +collectibles +collecting collection +collections +collective +collectively +collectives +collectivise +collectivised +collectivises +collectivising +collectivism +collectivisms +collectivist +collectivistic +collectivistically +collectivists +collectivities +collectivity +collectivization +collectivizations +collectivize +collectivized +collectivizes +collectivizing +collector +collectors +collectorship +collectorships +collects +colleen +colleens college +colleger +collegers +colleges +collegia +collegial +collegialities +collegiality +collegially +collegian +collegians +collegiate +collegiately +collegium +collegiums +collembolan +collembolans +collembolous +collenchyma +collenchymas +collenchymata +collenchymatous +collet +colleted +colleting +collets +collide +collided +collider +colliders +collides +colliding +collie +collied +collier +collieries +colliers +colliery +collies +collieshangie +collieshangies +colligate +colligated +colligates +colligating +colligation +colligations +colligative +collimate +collimated +collimates +collimating +collimation +collimations +collimator +collimators +collinear +collinearities +collinearity +collins +collinses collision +collisional +collisionally +collisions +collocate +collocated +collocates +collocating +collocation +collocational +collocations +collodion +collodions +collogue +collogued +collogues +colloguing +colloid +colloidal +colloidally +colloids +collop +collops +colloquia +colloquial +colloquialism +colloquialisms +colloquialities +colloquiality +colloquially +colloquials +colloquies +colloquist +colloquists +colloquium +colloquiums +colloquy +collotype +collotypes +collude +colluded +colluder +colluders +colludes +colluding +collusion +collusions +collusive +collusively +colluvia +colluvial +colluvium +colluviums +colly +collying +collyria +collyrium +collyriums +collywobbles +colobi +coloboma +colobomata +colobus +colocate +colocated +colocates +colocating +colocynth +colocynths +colog +cologarithm +cologarithms +cologne +cologned +colognes +cologs +colon +colone +colonel +colonelcies +colonelcy +colonels +colones +coloni +colonial +colonialism +colonialisms +colonialist +colonialistic +colonialists +colonialize +colonialized +colonializes +colonializing +colonially +colonialness +colonialnesses +colonials +colonic +colonics +colonies +colonisation +colonisations +colonise +colonised +colonises +colonising +colonist +colonists +colonization +colonizationist +colonizationists +colonizations +colonize +colonized +colonizer +colonizers +colonizes +colonizing +colonnade +colonnaded +colonnades +colons +colonus +colony +colophon +colophonies +colophons +colophony color +colorable +colorably +colorado +colorant +colorants +coloration +colorations +coloratura +coloraturas +colorblind +colorblindness +colorblindnesses +colorbred +colorectal +colored +coloreds +colorer +colorers +colorfast +colorfastness +colorfastnesses +colorful +colorfully +colorfulness +colorfulnesses +colorific +colorimeter +colorimeters +colorimetric +colorimetrically +colorimetries +colorimetry +coloring +colorings +colorism +colorisms +colorist +coloristic +coloristically +colorists +colorization +colorizations +colorize +colorized +colorizes +colorizing +colorless +colorlessly +colorlessness +colorlessnesses +colorman +colormen +colorpoint +colorpoints +colors +colossal +colossally +colosseum +colosseums +colossi +colossus +colossuses +colostomies +colostomy +colostral +colostrum +colostrums +colotomies +colotomy colour +coloured +colourer +colourers +colouring +colours +colpitis +colpitises +colportage +colportages +colporteur +colporteurs +cols +colt +colter +colters +coltish +coltishly +coltishness +coltishnesses +colts +coltsfoot +coltsfoots +colubrid +colubrids +colubrine +colugo +colugos +columbaria +columbarium +columbic +columbine +columbines +columbite +columbites +columbium +columbiums +columel +columella +columellae +columellar +columels +column +columnal +columnar +columned +columniation +columniations +columnist +columnistic +columnists +columns +colure +colures +coly +colza +colzas +coma +comade +comae +comake +comaker +comakers +comakes +comaking +comal +comanage +comanaged +comanagement +comanagements +comanager +comanagers +comanages +comanaging +comas +comate +comates +comatic +comatik +comatiks +comatose +comatula +comatulae comb +combat +combatant +combatants +combated +combater +combaters +combating +combative +combatively +combativeness +combativenesses +combats +combatted +combatting +combe +combed +comber +combers +combes +combinable +combination +combinational +combinations +combinative +combinatorial +combinatorially +combinatorics +combinatory combine +combined +combiner +combiners +combines +combing +combings +combining +comblike +combo +combos +combs +combust +combusted +combustibilities +combustibility +combustible +combustibles +combustibly +combusting +combustion +combustions +combustive +combustor +combustors +combusts come +comeback +comebacks +comedian +comedians +comedic +comedically +comedienne +comediennes +comedies +comedo +comedones +comedos +comedown +comedowns comedy +comelier +comeliest +comelily +comeliness +comelinesses +comely +comember +comembers +comer +comers +comes +comestible +comestibles +comet +cometary +cometh +comether +comethers +cometic +comets +comeuppance +comeuppances +comfier +comfiest +comfit +comfits comfort comfortable +comfortableness +comfortablenesses +comfortably +comforted +comforter +comforters +comforting +comfortingly +comfortless +comforts +comfrey +comfreys +comfy +comic +comical +comicalities +comicality +comically +comics +coming +comingle +comingled +comingles +comingling +comings +comitia +comitial +comities +comity +comix +comma command +commandable +commandant +commandants +commanded +commandeer +commandeered +commandeering +commandeers +commander +commanderies +commanders +commandership +commanderships +commandery +commanding +commandingly +commandment +commandments +commando +commandoes +commandos +commands +commas +commata +commemorate +commemorated +commemorates +commemorating +commemoration +commemorations +commemorative +commemoratively +commemoratives +commemorator +commemorators +commence +commenced +commencement +commencements +commencer +commencers +commences +commencing +commend +commendable +commendably +commendation +commendations +commendatory +commended +commender +commenders +commending +commends +commensal +commensalism +commensalisms +commensally +commensals +commensurabilities +commensurability +commensurable +commensurably +commensurate +commensurately +commensuration +commensurations comment +commentaries +commentary +commentate +commentated +commentates +commentating +commentator +commentators +commented +commenting +comments +commerce +commerced +commerces commercial +commercialise +commercialised +commercialises +commercialising +commercialism +commercialisms +commercialist +commercialistic +commercialists +commercialities +commerciality +commercialization +commercializations +commercialize +commercialized +commercializes +commercializing +commercially +commercials +commercing +commie +commies +commination +comminations +comminatory +commingle +commingled +commingles +commingling +comminute +comminuted +comminutes +comminuting +comminution +comminutions +commiserate +commiserated +commiserates +commiserating +commiseratingly +commiseration +commiserations +commiserative +commissar +commissarial +commissariat +commissariats +commissaries +commissars +commissary +commission +commissionaire +commissionaires +commissioned +commissioner +commissioners +commissionership +commissionerships +commissioning +commissions +commissural +commissure +commissures commit commitment +commitments +commits +committable +committal +committals +committed committee +committeeman +committeemen +committees +committeewoman +committeewomen +committing +commix +commixed +commixes +commixing +commixt +commixture +commixtures +commode +commodes +commodification +commodifications +commodified +commodifies +commodify +commodifying +commodious +commodiously +commodiousness +commodiousnesses +commodities +commodity +commodore +commodores common +commonage +commonages +commonalities +commonality +commonalties +commonalty +commoner +commoners +commonest +commonly +commonness +commonnesses +commonplace +commonplaceness +commonplacenesses +commonplaces +commons +commonsense +commonsensible +commonsensical +commonsensically +commonweal +commonweals +commonwealth +commonwealths +commotion +commotions +commove +commoved +commoves +commoving +communal +communalism +communalisms +communalist +communalists +communalities +communality +communalize +communalized +communalizes +communalizing +communally +communard +communards +commune +communed +communes +communicabilities +communicability +communicable +communicableness +communicablenesses +communicably +communicant +communicants communicate +communicated +communicatee +communicatees +communicates +communicating communication +communicational +communications +communicative +communicatively +communicativeness +communicativenesses +communicator +communicators +communicatory +communing +communion +communions +communique +communiques +communise +communised +communises +communising communism +communisms communist +communistic +communistically +communists +communitarian +communitarianism +communitarianisms +communitarians +communities +community +communization +communizations +communize +communized +communizes +communizing +commutable +commutate +commutated +commutates +commutating +commutation +commutations +commutative +commutativities +commutativity +commutator +commutators +commute +commuted +commuter +commuters +commutes +commuting +commy +comonomer +comonomers +comose +comous +comp +compact +compacted +compacter +compacters +compactest +compactible +compacting +compaction +compactions +compactly +compactness +compactnesses +compactor +compactors +compacts +compadre +compadres +companied +companies companion +companionabilities +companionability +companionable +companionableness +companionablenesses +companionably +companionate +companioned +companioning +companions +companionship +companionships +companionway +companionways company +companying +comparabilities +comparability +comparable +comparableness +comparablenesses +comparably +comparatist +comparatists +comparative +comparatively +comparativeness +comparativenesses +comparatives +comparativist +comparativists +comparator +comparators compare +compared +comparer +comparers +compares +comparing +comparison +comparisons +compart +comparted +comparting +compartment +compartmental +compartmentalise +compartmentalised +compartmentalises +compartmentalising +compartmentalization +compartmentalizations +compartmentalize +compartmentalized +compartmentalizes +compartmentalizing +compartmentation +compartmentations +compartmented +compartmenting +compartments +comparts compass +compassable +compassed +compasses +compassing +compassion +compassionate +compassionated +compassionately +compassionateness +compassionatenesses +compassionates +compassionating +compassionless +compassions +compatibilities +compatibility +compatible +compatibleness +compatiblenesses +compatibles +compatibly +compatriot +compatriotic +compatriots +comped +compeer +compeered +compeering +compeers +compel +compellable +compellation +compellations +compelled +compelling +compellingly +compels +compend +compendia +compendious +compendiously +compendiousness +compendiousnesses +compendium +compendiums +compends +compensabilities +compensability +compensable compensate +compensated +compensates +compensating +compensation +compensational +compensations +compensative +compensator +compensators +compensatory +compere +compered +comperes +compering compete +competed competence +competences +competencies +competency +competent +competently +competes +competing competition +competitions +competitive +competitively +competitiveness +competitivenesses +competitor +competitors +compilation +compilations +compile +compiled +compiler +compilers +compiles +compiling +comping +complacence +complacences +complacencies +complacency +complacent +complacently +complain +complainant +complainants +complained +complainer +complainers +complaining +complainingly +complains +complaint +complaints +complaisance +complaisances +complaisant +complaisantly +compleat +complect +complected +complecting +complects +complement +complemental +complementaries +complementarily +complementariness +complementarinesses +complementarities +complementarity +complementary +complementation +complementations +complemented +complementing +complementizer +complementizers +complements complete +completed +completely +completeness +completenesses +completer +completes +completest +completing +completion +completions +completist +completists +completive complex +complexation +complexations +complexed +complexer +complexes +complexest +complexified +complexifies +complexify +complexifying +complexing +complexion +complexional +complexioned +complexions +complexities +complexity +complexly +complexness +complexnesses +compliance +compliances +compliancies +compliancy +compliant +compliantly +complicacies +complicacy +complicate +complicated +complicatedly +complicatedness +complicatednesses +complicates +complicating +complication +complications +complice +complices +complicit +complicities +complicitous +complicity +complied +complier +compliers +complies +compliment +complimentarily +complimentary +complimented +complimenting +compliments +complin +compline +complines +complins +complot +complots +complotted +complotting +comply +complying +compo +compone component +componential +components +compony +comport +comported +comporting +comportment +comportments +comports +compos +compose +composed +composedly +composedness +composednesses +composer +composers +composes +composing +composite +composited +compositely +composites +compositing composition +compositional +compositionally +compositions +compositor +compositors +compost +composted +composting +composts +composure +composures +compote +compotes +compound +compoundable +compounded +compounder +compounders +compounding +compounds +comprador +compradore +compradores +compradors +comprehend +comprehended +comprehendible +comprehending +comprehends +comprehensibilities +comprehensibility +comprehensible +comprehensibleness +comprehensiblenesses +comprehensibly comprehension +comprehensions +comprehensive +comprehensively +comprehensiveness +comprehensivenesses +compress +compressed +compressedly +compresses +compressibilities +compressibility +compressible +compressing +compression +compressional +compressions +compressive +compressively +compressor +compressors +comprise +comprised +comprises +comprising +comprize +comprized +comprizes +comprizing compromise +compromised +compromiser +compromisers +compromises +compromising +comps +compt +compted +compting +comptroller +comptrollers +comptrollership +comptrollerships +compts +compulsion +compulsions +compulsive +compulsively +compulsiveness +compulsivenesses +compulsivities +compulsivity +compulsorily compulsory +compunction +compunctions +compunctious +compurgation +compurgations +compurgator +compurgators +computabilities +computability +computable +computation +computational +computationally +computations +compute +computed computer +computerdom +computerdoms +computerese +computereses +computerise +computerised +computerises +computerising +computerist +computerists +computerizable +computerization +computerizations +computerize +computerized +computerizes +computerizing +computerless +computerlike +computernik +computerniks +computerphobe +computerphobes +computerphobia +computerphobias +computerphobic +computers +computes +computing +comrade +comradeliness +comradelinesses +comradely +comraderies +comradery +comrades +comradeship +comradeships +comsymp +comsymps +comte +comtes +con +conation +conations +conative +conatus +concanavalin +concanavalins +concatenate +concatenated +concatenates +concatenating +concatenation +concatenations +concave +concaved +concaves +concaving +concavities +concavity +conceal +concealable +concealed +concealer +concealers +concealing +concealingly +concealment +concealments +conceals +concede +conceded +concededly +conceder +conceders +concedes +conceding +conceit +conceited +conceitedly +conceitedness +conceitednesses +conceiting +conceits +conceivabilities +conceivability +conceivable +conceivableness +conceivablenesses +conceivably +conceive +conceived +conceiver +conceivers +conceives +conceiving +concelebrant +concelebrants +concelebrate +concelebrated +concelebrates +concelebrating +concelebration +concelebrations +concent +concenter +concentered +concentering +concenters concentrate +concentrated +concentratedly +concentrates +concentrating +concentration +concentrations +concentrative +concentrator +concentrators +concentric +concentrically +concentricities +concentricity +concents concept +conceptacle +conceptacles +conception +conceptional +conceptions +conceptive +concepts +conceptual +conceptualise +conceptualised +conceptualises +conceptualising +conceptualism +conceptualisms +conceptualist +conceptualistic +conceptualistically +conceptualists +conceptualities +conceptuality +conceptualization +conceptualizations +conceptualize +conceptualized +conceptualizer +conceptualizers +conceptualizes +conceptualizing +conceptually +conceptus +conceptuses concern +concerned +concerning +concernment +concernments +concerns concert +concerted +concertedly +concertedness +concertednesses +concertgoer +concertgoers +concertgoing +concertgoings +concerti +concertina +concertinas +concerting +concertino +concertinos +concertize +concertized +concertizes +concertizing +concertmaster +concertmasters +concertmeister +concertmeisters +concerto +concertos +concerts +concession +concessionaire +concessionaires +concessional +concessionary +concessioner +concessioners +concessions +concessive +concessively +conch +concha +conchae +conchal +conches +conchie +conchies +conchoid +conchoidal +conchoidally +conchoids +conchologies +conchologist +conchologists +conchology +conchs +conchy +concierge +concierges +conciliar +conciliarly +conciliate +conciliated +conciliates +conciliating +conciliation +conciliations +conciliative +conciliator +conciliators +conciliatory +concinnities +concinnity +concise +concisely +conciseness +concisenesses +conciser +concisest +concision +concisions +conclave +conclaves conclude +concluded +concluder +concluders +concludes +concluding conclusion +conclusionary +conclusions +conclusive +conclusively +conclusiveness +conclusivenesses +conclusory +concoct +concocted +concocter +concocters +concocting +concoction +concoctions +concoctive +concocts +concomitance +concomitances +concomitant +concomitantly +concomitants +concord +concordance +concordances +concordant +concordantly +concordat +concordats +concords +concourse +concourses +concrescence +concrescences +concrescent concrete +concreted +concretely +concreteness +concretenesses +concretes +concreting +concretion +concretionary +concretions +concretism +concretisms +concretist +concretists +concretization +concretizations +concretize +concretized +concretizes +concretizing +concubinage +concubinages +concubine +concubines +concupiscence +concupiscences +concupiscent +concupiscible +concur +concurred +concurrence +concurrences +concurrencies +concurrency +concurrent +concurrently +concurrents +concurring +concurs +concuss +concussed +concusses +concussing +concussion +concussions +concussive condemn +condemnable +condemnation +condemnations +condemnatory +condemned +condemner +condemners +condemning +condemnor +condemnors +condemns +condensable +condensate +condensates +condensation +condensational +condensations +condense +condensed +condenser +condensers +condenses +condensible +condensing +condescend +condescended +condescendence +condescendences +condescending +condescendingly +condescends +condescension +condescensions +condign +condignly +condiment +condimental +condiments condition +conditionable +conditional +conditionalities +conditionality +conditionally +conditionals +conditioned +conditioner +conditioners +conditioning +conditions +condo +condoes +condolatory +condole +condoled +condolence +condolences +condoler +condolers +condoles +condoling +condom +condominium +condominiums +condoms +condonable +condonation +condonations +condone +condoned +condoner +condoners +condones +condoning +condor +condores +condors +condos +condottiere +condottieri +conduce +conduced +conducer +conducers +conduces +conducing +conducive +conduciveness +conducivenesses conduct +conductance +conductances +conducted +conductibilities +conductibility +conductible +conductimetric +conducting +conduction +conductions +conductive +conductivities +conductivity +conductometric conductor +conductorial +conductors +conductress +conductresses +conducts +conduit +conduits +conduplicate +condylar +condyle +condyles +condyloid +condyloma +condylomas +condylomata +condylomatous +cone +coned +coneflower +coneflowers +conelrad +conelrads +conenose +conenoses +conepate +conepates +conepatl +conepatls +cones +coney +coneys +confab +confabbed +confabbing +confabs +confabulate +confabulated +confabulates +confabulating +confabulation +confabulations +confabulator +confabulators +confabulatory +confect +confected +confecting +confection +confectionaries +confectionary +confectioner +confectioneries +confectioners +confectionery +confections +confects +confederacies +confederacy +confederal +confederate +confederated +confederates +confederating +confederation +confederations +confederative +confer +conferee +conferees conference +conferences +conferencing +conferencings +conferential +conferment +conferments +conferrable +conferral +conferrals +conferred +conferrence +conferrences +conferrer +conferrers +conferring +confers +conferva +confervae +confervas +confess +confessable +confessed +confessedly +confesses +confessing +confession +confessional +confessionalism +confessionalisms +confessionalist +confessionalists +confessionally +confessionals +confessions +confessor +confessors +confetti +confetto +confidant +confidante +confidantes +confidants +confide +confided +confidence +confidences confident confidential +confidentialities +confidentiality +confidentially +confidently +confider +confiders +confides +confiding +confidingly +confidingness +confidingnesses +configuration +configurational +configurationally +configurations +configurative +configure +configured +configures +configuring +confine +confined +confinement +confinements +confiner +confiners +confines +confining confirm +confirmabilities +confirmability +confirmable +confirmand +confirmands +confirmation +confirmational +confirmations +confirmatory +confirmed +confirmedly +confirmedness +confirmednesses +confirming +confirms +confiscable +confiscatable +confiscate +confiscated +confiscates +confiscating +confiscation +confiscations +confiscator +confiscators +confiscatory +confit +confiteor +confiteors +confits +confiture +confitures +conflagrant +conflagration +conflagrations +conflate +conflated +conflates +conflating +conflation +conflations conflict +conflicted +conflictful +conflicting +conflictingly +confliction +conflictions +conflictive +conflicts +conflictual +confluence +confluences +confluent +confluents +conflux +confluxes +confocal +confocally +conform +conformable +conformably +conformal +conformance +conformances +conformation +conformational +conformations +conformed +conformer +conformers +conforming +conformism +conformisms +conformist +conformists +conformities +conformity +conforms +confound +confounded +confoundedly +confounder +confounders +confounding +confoundingly +confounds +confraternities +confraternity +confrere +confreres +confront +confrontal +confrontals +confrontation +confrontational +confrontationist +confrontationists +confrontations +confronted +confronter +confronters +confronting +confronts confuse +confused +confusedly +confusedness +confusednesses +confuses +confusing +confusingly +confusion +confusional +confusions +confutation +confutations +confutative +confute +confuted +confuter +confuters +confutes +confuting +conga +congaed +congaing +congas +conge +congeal +congealed +congealing +congealment +congealments +congeals +congee +congeed +congeeing +congees +congelation +congelations +congener +congeneric +congenerous +congeners +congenial +congenialities +congeniality +congenially +congenital +congenitally +conger +congeries +congers +conges +congest +congested +congesting +congestion +congestions +congestive +congests +congii +congius +conglobate +conglobated +conglobates +conglobating +conglobation +conglobations +conglobe +conglobed +conglobes +conglobing +conglomerate +conglomerated +conglomerates +conglomerateur +conglomerateurs +conglomeratic +conglomerating +conglomeration +conglomerations +conglomerative +conglomerator +conglomerators +conglutinate +conglutinated +conglutinates +conglutinating +conglutination +conglutinations +congo +congoes +congos +congou +congous +congrats congratulate +congratulated +congratulates +congratulating congratulation +congratulations +congratulator +congratulators +congratulatory +congregant +congregants +congregate +congregated +congregates +congregating +congregation +congregational +congregationalism +congregationalisms +congregationalist +congregationalists +congregations +congregator +congregators +congress +congressed +congresses +congressing +congressional +congressionally +congressman +congressmen +congresspeople +congressperson +congresspersons +congresswoman +congresswomen +congruence +congruences +congruencies +congruency +congruent +congruently +congruities +congruity +congruous +congruously +congruousness +congruousnesses +coni +conic +conical +conically +conicities +conicity +conics +conidia +conidial +conidian +conidiophore +conidiophores +conidium +conies +conifer +coniferous +conifers +coniine +coniines +conin +conine +conines +coning +conins +conioses +coniosis +conium +coniums +conjectural +conjecturally +conjecture +conjectured +conjecturer +conjecturers +conjectures +conjecturing +conjoin +conjoined +conjoining +conjoins +conjoint +conjointly +conjugal +conjugalities +conjugality +conjugally +conjugant +conjugants +conjugate +conjugated +conjugately +conjugateness +conjugatenesses +conjugates +conjugating +conjugation +conjugational +conjugationally +conjugations +conjunct +conjunction +conjunctional +conjunctionally +conjunctions +conjunctiva +conjunctivae +conjunctival +conjunctivas +conjunctive +conjunctively +conjunctives +conjunctivites +conjunctivitides +conjunctivitis +conjunctivitises +conjuncts +conjuncture +conjunctures +conjuration +conjurations +conjure +conjured +conjurer +conjurers +conjures +conjuring +conjuror +conjurors +conk +conked +conker +conkers +conking +conks +conky +conn +connate +connately +connatural +connaturalities +connaturality +connaturally connect +connectable +connected +connectedly +connectedness +connectednesses +connecter +connecters +connectible +connecting connection +connectional +connections +connective +connectively +connectives +connectivities +connectivity +connector +connectors +connects +conned +conner +conners +connexion +connexions +conning +conniption +conniptions +connivance +connivances +connive +connived +connivent +conniver +connivers +connives +conniving +connoisseur +connoisseurs +connoisseurship +connoisseurships +connotation +connotational +connotations +connotative +connotatively +connote +connoted +connotes +connoting +conns +connubial +connubialism +connubialisms +connubialities +connubiality +connubially +conodont +conodonts +conoid +conoidal +conoids +conominee +conominees +conquer +conquered +conquering +conqueror +conquerors +conquers +conquest +conquests +conquian +conquians +conquistador +conquistadores +conquistadors +cons +consanguine +consanguineous +consanguineously +consanguinities +consanguinity conscience +conscienceless +consciences +conscientious +conscientiously +conscientiousness +conscientiousnesses +conscionable +conscious +consciouses +consciously +consciousness +consciousnesses +conscribe +conscribed +conscribes +conscribing +conscript +conscripted +conscripting +conscription +conscriptions +conscripts +consecrate +consecrated +consecrates +consecrating +consecration +consecrations +consecrative +consecrator +consecrators +consecratory +consecution +consecutions +consecutive +consecutively +consecutiveness +consecutivenesses +consensual +consensually consensus +consensuses +consent +consentaneous +consentaneously +consented +consenter +consenters +consenting +consentingly +consents consequence +consequences +consequent +consequential +consequentialities +consequentiality +consequentially +consequentialness +consequentialnesses +consequently +consequents +conservancies +conservancy conservation +conservational +conservationist +conservationists +conservations +conservatism +conservatisms conservative +conservatively +conservativeness +conservativenesses +conservatives +conservatize +conservatized +conservatizes +conservatizing +conservatoire +conservatoires +conservator +conservatorial +conservatories +conservators +conservatorship +conservatorships +conservatory +conserve +conserved +conserver +conservers +conserves +conserving consider +considerable +considerables +considerably considerate +considerately +considerateness +consideratenesses consideration +considerations +considered +considering +considers +consigliere +consiglieri +consign +consignable +consignation +consignations +consigned +consignee +consignees +consigning +consignment +consignments +consignor +consignors +consigns consist +consisted +consistence +consistences +consistencies +consistency consistent +consistently +consisting +consistorial +consistories +consistory +consists +consociate +consociated +consociates +consociating +consociation +consociational +consociations +consol +consolation +consolations +consolatory +console +consoled +consoler +consolers +consoles +consolidate +consolidated +consolidates +consolidating +consolidation +consolidations +consolidator +consolidators +consoling +consolingly +consols +consomme +consommes +consonance +consonances +consonancies +consonancy +consonant +consonantal +consonantly +consonants +consort +consorted +consortia +consorting +consortium +consortiums +consorts +conspecific +conspecifics +conspectus +conspectuses +conspicuities +conspicuity +conspicuous +conspicuously +conspicuousness +conspicuousnesses +conspiracies +conspiracy +conspiration +conspirational +conspirations +conspirator +conspiratorial +conspiratorially +conspirators +conspire +conspired +conspires +conspiring +constable +constables +constabularies +constabulary +constancies +constancy constant +constantan +constantans +constantly +constants +constative +constatives +constellate +constellated +constellates +constellating +constellation +constellations +constellatory +consternate +consternated +consternates +consternating +consternation +consternations +constipate +constipated +constipates +constipating +constipation +constipations +constituencies +constituency +constituent +constituently +constituents +constitute +constituted +constitutes +constituting constitution +constitutional +constitutionalism +constitutionalisms +constitutionalist +constitutionalists +constitutionalities +constitutionality +constitutionalization +constitutionalizations +constitutionalize +constitutionalized +constitutionalizes +constitutionalizing +constitutionally +constitutionals +constitutionless +constitutions +constitutive +constitutively +constrain +constrained +constrainedly +constraining +constrains +constraint +constraints +constrict +constricted +constricting +constriction +constrictions +constrictive +constrictor +constrictors +constricts +constringe +constringed +constringent +constringes +constringing +construable construct +constructed +constructible +constructing construction +constructional +constructionally +constructionist +constructionists +constructions +constructive +constructively +constructiveness +constructivenesses +constructivism +constructivisms +constructivist +constructivists +constructor +constructors +constructs +construe +construed +construes +construing +consubstantial +consubstantiation +consubstantiations +consuetude +consuetudes +consuetudinary +consul +consular +consulate +consulates +consuls +consulship +consulships consult +consultancies +consultancy consultant +consultants +consultantship +consultantships +consultation +consultations +consultative +consulted +consulter +consulters +consulting +consultive +consultor +consultors +consults +consumable +consumables consume +consumed +consumedly +consumer +consumerism +consumerisms +consumerist +consumeristic +consumerists +consumers +consumership +consumerships +consumes +consuming +consummate +consummated +consummately +consummates +consummating +consummation +consummations +consummative +consummator +consummators +consummatory +consumption +consumptions +consumptive +consumptively +consumptives +contact +contacted +contacting +contacts +contagia +contagion +contagions +contagious +contagiously +contagiousness +contagiousnesses +contagium contain +containable +contained container +containerboard +containerboards +containerisation +containerisations +containerise +containerised +containerises +containerising +containerization +containerizations +containerize +containerized +containerizes +containerizing +containerless +containerport +containerports +containers +containership +containerships +containing +containment +containments +contains +contaminant +contaminants +contaminate +contaminated +contaminates +contaminating +contamination +contaminations +contaminative +contaminator +contaminators +conte +contemn +contemned +contemner +contemners +contemning +contemnor +contemnors +contemns +contemplate +contemplated +contemplates +contemplating +contemplation +contemplations +contemplative +contemplatively +contemplativeness +contemplativenesses +contemplatives +contemplator +contemplators +contemporaneities +contemporaneity +contemporaneous +contemporaneously +contemporaneousness +contemporaneousnesses +contemporaries +contemporarily contemporary +contemporize +contemporized +contemporizes +contemporizing +contempt +contemptibilities +contemptibility +contemptible +contemptibleness +contemptiblenesses +contemptibly +contempts +contemptuous +contemptuously +contemptuousness +contemptuousnesses +contend +contended +contender +contenders +contending +contends content +contented +contentedly +contentedness +contentednesses +contenting +contention +contentions +contentious +contentiously +contentiousness +contentiousnesses +contentment +contentments +contents +conterminous +conterminously +contes +contest +contestable +contestant +contestants +contestation +contestations +contested +contester +contesters +contesting +contests +context +contextless +contexts +contextual +contextualize +contextualized +contextualizes +contextualizing +contextually +contexture +contextures +contiguities +contiguity +contiguous +contiguously +contiguousness +contiguousnesses +continence +continences continent +continental +continentally +continentals +continently +continents +contingence +contingences +contingencies +contingency +contingent +contingently +contingents +continua +continual +continually +continuance +continuances +continuant +continuants +continuate +continuation +continuations +continuative +continuator +continuators continue +continued +continuer +continuers +continues +continuing +continuingly +continuities +continuity +continuo +continuos +continuous +continuously +continuousness +continuousnesses +continuum +continuums +conto +contort +contorted +contorting +contortion +contortionist +contortionistic +contortionists +contortions +contortive +contorts +contos +contour +contoured +contouring +contours +contra +contraband +contrabandist +contrabandists +contrabands +contrabass +contrabasses +contrabassist +contrabassists +contrabassoon +contrabassoons +contraception +contraceptions +contraceptive +contraceptives +contract +contracted +contractibilities +contractibility +contractible +contractile +contractilities +contractility +contracting +contraction +contractional +contractionary +contractions +contractive +contractor +contractors +contracts +contractual +contractually +contracture +contractures contradict +contradictable +contradicted +contradicting +contradiction +contradictions +contradictious +contradictor +contradictories +contradictorily +contradictoriness +contradictorinesses +contradictors contradictory +contradicts +contradistinction +contradistinctions +contradistinctive +contradistinctively +contradistinguish +contradistinguished +contradistinguishes +contradistinguishing +contrail +contrails +contraindicate +contraindicated +contraindicates +contraindicating +contraindication +contraindications +contralateral +contralto +contraltos +contraoctave +contraoctaves +contraposition +contrapositions +contrapositive +contrapositives +contraption +contraptions +contrapuntal +contrapuntally +contrapuntist +contrapuntists +contrarian +contrarians +contraries +contrarieties +contrariety +contrarily +contrariness +contrarinesses +contrarious +contrariwise contrary +contras +contrast +contrastable +contrasted +contrasting +contrastive +contrastively +contrasts +contrasty +contravene +contravened +contravener +contraveners +contravenes +contravening +contravention +contraventions +contredanse +contredanses +contretemps contribute +contributed +contributes +contributing contribution +contributions +contributive +contributively +contributor +contributors +contributory +contrite +contritely +contriteness +contritenesses +contrition +contritions +contrivance +contrivances +contrive +contrived +contriver +contrivers +contrives +contriving control +controllabilities +controllability +controllable +controlled +controller +controllers +controllership +controllerships +controlling +controlment +controlments +controls controversial +controversialism +controversialisms +controversialist +controversialists +controversially +controversies +controversy +controvert +controverted +controverter +controverters +controvertible +controverting +controverts +contumacies +contumacious +contumaciously +contumacy +contumelies +contumelious +contumeliously +contumely +contuse +contused +contuses +contusing +contusion +contusions +conundrum +conundrums +conurbation +conurbations +conus +convalesce +convalesced +convalescence +convalescences +convalescent +convalescents +convalesces +convalescing +convect +convected +convecting +convection +convectional +convections +convective +convector +convectors +convects +convene +convened +convener +conveners +convenes convenience +conveniences +conveniencies +conveniency convenient +conveniently +convening +convenor +convenors +convent +convented +conventicle +conventicler +conventiclers +conventicles +conventing +convention conventional +conventionalism +conventionalisms +conventionalist +conventionalists +conventionalities +conventionality +conventionalization +conventionalizations +conventionalize +conventionalized +conventionalizes +conventionalizing +conventionally +conventioneer +conventioneers +conventions +convents +conventual +conventually +conventuals +converge +converged +convergence +convergences +convergencies +convergency +convergent +converges +converging +conversable +conversance +conversances +conversancies +conversancy +conversant conversation +conversational +conversationalist +conversationalists +conversationally +conversations +conversazione +conversaziones +conversazioni +converse +conversed +conversely +converser +conversers +converses +conversing +conversion +conversional +conversions +convert +convertaplane +convertaplanes +converted +converter +converters +convertibilities +convertibility +convertible +convertibleness +convertiblenesses +convertibles +convertibly +converting +convertiplane +convertiplanes +convertor +convertors +converts +convex +convexes +convexities +convexity +convexly convey +conveyance +conveyancer +conveyancers +conveyances +conveyancing +conveyancings +conveyed +conveyer +conveyers +conveying +conveyor +conveyorise +conveyorised +conveyorises +conveyorising +conveyorization +conveyorizations +conveyorize +conveyorized +conveyorizes +conveyorizing +conveyors +conveys +convict +convicted +convicting +conviction +convictions +convicts convince +convinced +convincer +convincers +convinces +convincing +convincingly +convincingness +convincingnesses +convivial +convivialities +conviviality +convivially +convocation +convocational +convocations +convoke +convoked +convoker +convokers +convokes +convoking +convolute +convoluted +convolutes +convoluting +convolution +convolutions +convolve +convolved +convolves +convolving +convolvuli +convolvulus +convolvuluses +convoy +convoyed +convoying +convoys +convulsant +convulsants +convulse +convulsed +convulses +convulsing +convulsion +convulsionary +convulsions +convulsive +convulsively +convulsiveness +convulsivenesses +cony +coo +cooch +cooches +coocoo +cooed +cooee +cooeed +cooeeing +cooees +cooer +cooers +cooey +cooeyed +cooeying +cooeys +coof +coofs +cooing +cooingly cook +cookable +cookbook +cookbooks +cooked cooker +cookeries +cookers +cookery +cookey +cookeys +cookhouse +cookhouses cookie +cookies +cooking +cookings +cookless +cookout +cookouts +cooks +cookshack +cookshacks +cookshop +cookshops +cookstove +cookstoves +cooktop +cooktops +cookware +cookwares +cooky cool +coolant +coolants +cooldown +cooldowns +cooled +cooler +coolers +coolest +coolheaded +coolie +coolies +cooling +coolish +coolly +coolness +coolnesses +cools +coolth +coolths +cooly +coomb +coombe +coombes +coombs +coon +cooncan +cooncans +coonhound +coonhounds +coons +coonskin +coonskins +coontie +coonties +coop +cooped +cooper +cooperage +cooperages +cooperate +cooperated +cooperates +cooperating +cooperation +cooperationist +cooperationists +cooperations +cooperative +cooperatively +cooperativeness +cooperativenesses +cooperatives +cooperator +cooperators +coopered +cooperies +coopering +coopers +coopery +cooping +coops +coopt +coopted +coopting +cooption +cooptions +coopts +coordinate +coordinated +coordinately +coordinateness +coordinatenesses +coordinates +coordinating +coordination +coordinations +coordinative +coordinator +coordinators +coos +coot +cooter +cooters +cootie +cooties +coots +cop +copacetic +copaiba +copaibas +copal +copalm +copalms +copals +coparcenaries +coparcenary +coparcener +coparceners +coparent +coparents +copartner +copartnered +copartnering +copartners +copartnership +copartnerships +copasetic +copastor +copastors +copatron +copatrons +copayment +copayments +cope +copeck +copecks +coped +copemate +copemates +copen +copens +copepod +copepods +coper +copers +copes +copesetic +copestone +copestones +copied +copier +copiers +copies +copihue +copihues +copilot +copilots +coping +copings +copingstone +copingstones +copious +copiously +copiousness +copiousnesses +coplanar +coplanarities +coplanarity +coplot +coplots +coplotted +coplotting +copolymer +copolymeric +copolymerization +copolymerizations +copolymerize +copolymerized +copolymerizes +copolymerizing +copolymers +copped +copper +copperah +copperahs +copperas +copperases +coppered +copperhead +copperheads +coppering +copperplate +copperplates +coppers +coppersmith +coppersmiths +coppery +coppice +coppiced +coppices +coppicing +copping +coppra +coppras +copra +coprah +coprahs +copras +copremia +copremias +copremic +copresent +copresented +copresenting +copresents +copresident +copresidents +coprince +coprinces +coprincipal +coprincipals +coprisoner +coprisoners +coprocessing +coprocessings +coprocessor +coprocessors +coproduce +coproduced +coproducer +coproducers +coproduces +coproducing +coproduct +coproduction +coproductions +coproducts +coprolite +coprolites +coprolitic +copromoter +copromoters +coprophagies +coprophagous +coprophagy +coprophilia +coprophiliac +coprophiliacs +coprophilias +coprophilous +coproprietor +coproprietors +coproprietorship +coproprietorships +coprosperities +coprosperity +cops +copse +copses +copter +copters +copublish +copublished +copublisher +copublishers +copublishes +copublishing +copula +copulae +copular +copulas +copulate +copulated +copulates +copulating +copulation +copulations +copulative +copulatives +copulatory +copurified +copurifies +copurify +copurifying copy +copybook +copybooks +copyboy +copyboys +copycat +copycats +copycatted +copycatting +copydesk +copydesks +copyedit +copyedited +copyediting +copyedits +copyhold +copyholder +copyholders +copyholds +copying +copyist +copyists +copyread +copyreader +copyreaders +copyreading +copyreads +copyright +copyrightable +copyrighted +copyrighting +copyrights +copywriter +copywriters +coquet +coquetries +coquetry +coquets +coquette +coquetted +coquettes +coquetting +coquettish +coquettishly +coquettishness +coquettishnesses +coquille +coquilles +coquina +coquinas +coquito +coquitos +cor +coracle +coracles +coracoid +coracoids +coral +coralbells +coralberries +coralberry +coralline +corallines +coralloid +corals +coranto +corantoes +corantos +corban +corbans +corbeil +corbeille +corbeilles +corbeils +corbel +corbeled +corbeling +corbelings +corbelled +corbelling +corbels +corbicula +corbiculae +corbie +corbies +corbina +corbinas +corby +cord +cordage +cordages +cordate +cordately +corded +cordelle +cordelled +cordelles +cordelling +corder +corders +cordgrass +cordgrasses +cordial +cordialities +cordiality +cordially +cordialness +cordialnesses +cordials +cordierite +cordierites +cordiform +cordillera +cordilleran +cordilleras +cording +cordings +cordite +cordites +cordless +cordlike +cordoba +cordobas +cordon +cordoned +cordoning +cordons +cordovan +cordovans +cords +corduroy +corduroyed +corduroying +corduroys +cordwain +cordwainer +cordwaineries +cordwainers +cordwainery +cordwains +cordwood +cordwoods +core +corecipient +corecipients +cored +coredeem +coredeemed +coredeeming +coredeems +coreign +coreigns +corelate +corelated +corelates +corelating +coreless +coreligionist +coreligionists +coremia +coremium +coreopsis +corepressor +corepressors +corequisite +corequisites +corer +corers +cores +coresearcher +coresearchers +coresident +coresidential +coresidents +corespondent +corespondents +corf +corgi +corgis +coria +coriaceous +coriander +corianders +coring +corium +cork +corkage +corkages +corkboard +corkboards +corked +corker +corkers +corkier +corkiest +corkiness +corkinesses +corking +corklike +corks +corkscrew +corkscrewed +corkscrewing +corkscrews +corkwood +corkwoods +corky +corm +cormel +cormels +cormlike +cormoid +cormorant +cormorants +cormous +corms corn +cornball +cornballs +cornbread +cornbreads +corncake +corncakes +corncob +corncobs +corncrake +corncrakes +corncrib +corncribs +cornea +corneal +corneas +corned +cornel +cornelian +cornelians +cornels +corneous corner +cornerback +cornerbacks +cornered +cornering +cornerman +cornermen +corners +cornerstone +cornerstones +cornerways +cornerwise +cornet +cornetcies +cornetcy +cornetist +cornetists +cornets +cornettist +cornettists +cornfed +cornfield +cornfields +cornflakes +cornflower +cornflowers +cornhusk +cornhusker +cornhuskers +cornhusking +cornhuskings +cornhusks +cornice +corniced +cornices +corniche +corniches +cornicing +cornicle +cornicles +cornier +corniest +cornification +cornifications +cornily +corniness +corninesses +corning +cornmeal +cornmeals +cornpone +cornpones +cornrow +cornrowed +cornrowing +cornrows +corns +cornstalk +cornstalks +cornstarch +cornstarches +cornu +cornua +cornual +cornucopia +cornucopian +cornucopias +cornus +cornuses +cornute +cornuted +cornuto +cornutos +corny +corodies +corody +corolla +corollaries +corollary +corollas +corollate +coromandel +coromandels +corona +coronach +coronachs +coronae +coronagraph +coronagraphs +coronal +coronals +coronaries +coronary +coronas +coronate +coronated +coronates +coronating +coronation +coronations +coronel +coronels +coroner +coroners +coronet +coronets +coronograph +coronographs +coronoid +corotate +corotated +corotates +corotating +corotation +corotations +corpora +corporal +corporalities +corporality +corporally +corporals +corporate +corporately corporation +corporations +corporatism +corporatisms +corporatist +corporative +corporativism +corporativisms +corporator +corporators +corporeal +corporealities +corporeality +corporeally +corporealness +corporealnesses +corporeities +corporeity +corposant +corposants +corps +corpse +corpses +corpsman +corpsmen +corpulence +corpulences +corpulencies +corpulency +corpulent +corpulently +corpus +corpuscle +corpuscles +corpuscular +corrade +corraded +corrades +corrading +corral +corralled +corralling +corrals +corrasion +corrasions +corrasive correct +correctable +corrected +correcter +correctest +correcting correction +correctional +corrections +correctitude +correctitudes +corrective +correctively +correctives +correctly +correctness +correctnesses +corrector +correctors +corrects +correlatable +correlate +correlated +correlates +correlating +correlation +correlational +correlations +correlative +correlatively +correlatives +correlator +correlators correspond +corresponded +correspondence +correspondences +correspondencies +correspondency +correspondent +correspondents +corresponding +correspondingly +corresponds +corresponsive +corrida +corridas +corridor +corridors +corrie +corries +corrigenda +corrigendum +corrigibilities +corrigibility +corrigible +corrival +corrivals +corroborant +corroborate +corroborated +corroborates +corroborating +corroboration +corroborations +corroborative +corroborator +corroborators +corroboratory +corroboree +corroborees +corrode +corroded +corrodes +corrodible +corrodies +corroding +corrody +corrosion +corrosions +corrosive +corrosively +corrosiveness +corrosivenesses +corrosives +corrugate +corrugated +corrugates +corrugating +corrugation +corrugations corrupt +corrupted +corrupter +corrupters +corruptest +corruptibilities +corruptibility +corruptible +corruptibly +corrupting +corruption +corruptionist +corruptionists +corruptions +corruptive +corruptively +corruptly +corruptness +corruptnesses +corruptor +corruptors +corrupts +corsac +corsacs +corsage +corsages +corsair +corsairs +corse +corselet +corselets +corselette +corselettes +corses +corset +corseted +corsetiere +corsetieres +corseting +corsetries +corsetry +corsets +corslet +corslets +cortege +corteges +cortex +cortexes +cortical +cortically +cortices +corticoid +corticoids +corticosteroid +corticosteroids +corticosterone +corticosterones +corticotrophin +corticotrophins +corticotropin +corticotropins +cortin +cortins +cortisol +cortisols +cortisone +cortisones +coruler +corulers +corundum +corundums +coruscant +coruscate +coruscated +coruscates +coruscating +coruscation +coruscations +corvee +corvees +corves +corvet +corvets +corvette +corvettes +corvina +corvinas +corvine +cory +corybant +corybantes +corybantic +corybants +corydalis +corydalises +corymb +corymbed +corymbose +corymbosely +corymbs +corynebacteria +corynebacterial +corynebacterium +coryneform +coryphaei +coryphaeus +coryphee +coryphees +coryza +coryzal +coryzas +cos +coscript +coscripted +coscripting +coscripts +cosec +cosecant +cosecants +cosecs +coses +coset +cosets +cosey +coseys +cosh +coshed +cosher +coshered +coshering +coshers +coshes +coshing +cosie +cosied +cosier +cosies +cosiest +cosign +cosignatories +cosignatory +cosigned +cosigner +cosigners +cosigning +cosigns +cosily +cosine +cosines +cosiness +cosinesses +cosmetic +cosmetically +cosmetician +cosmeticians +cosmeticize +cosmeticized +cosmeticizes +cosmeticizing +cosmetics +cosmetologies +cosmetologist +cosmetologists +cosmetology +cosmic +cosmical +cosmically +cosmism +cosmisms +cosmist +cosmists +cosmochemical +cosmochemist +cosmochemistries +cosmochemistry +cosmochemists +cosmogenic +cosmogonic +cosmogonical +cosmogonies +cosmogonist +cosmogonists +cosmogony +cosmographer +cosmographers +cosmographic +cosmographical +cosmographies +cosmography +cosmological +cosmologically +cosmologies +cosmologist +cosmologists +cosmology +cosmonaut +cosmonauts +cosmopolis +cosmopolises +cosmopolitan +cosmopolitanism +cosmopolitanisms +cosmopolitans +cosmopolite +cosmopolites +cosmopolitism +cosmopolitisms +cosmos +cosmoses +cosponsor +cosponsored +cosponsoring +cosponsors +cosponsorship +cosponsorships +coss +cossack +cossacks +cosset +cosseted +cosseting +cossets cost +costa +costae +costal +costar +costard +costards +costarred +costarring +costars +costate +costed +coster +costermonger +costermongers +costers +costing +costive +costively +costiveness +costivenesses +costless +costlessly +costlier +costliest +costliness +costlinesses +costly +costmaries +costmary +costrel +costrels +costs +costume +costumed +costumer +costumeries +costumers +costumery +costumes +costumey +costumier +costumiers +costuming +cosurfactant +cosurfactants cosy +cosying +cot +cotan +cotangent +cotangents +cotans +cote +coteau +coteaux +coted +cotenant +cotenants +coterie +coteries +coterminous +coterminously +cotes +cothurn +cothurni +cothurns +cothurnus +cotidal +cotillion +cotillions +cotillon +cotillons +coting +cotoneaster +cotoneasters +cotquean +cotqueans +cotransduce +cotransduced +cotransduces +cotransducing +cotransduction +cotransductions +cotransfer +cotransferred +cotransferring +cotransfers +cotransport +cotransported +cotransporting +cotransports +cotrustee +cotrustees +cots +cotta +cottae cottage +cottager +cottagers +cottages +cottagey +cottar +cottars +cottas +cotter +cottered +cotterless +cotters +cottier +cottiers cotton +cottoned +cottoning +cottonmouth +cottonmouths +cottons +cottonseed +cottonseeds +cottontail +cottontails +cottonweed +cottonweeds +cottonwood +cottonwoods +cottony +cotyledon +cotyledonary +cotyledons +cotyloid +cotylosaur +cotylosaurs +cotype +cotypes +couch +couchant +couched +coucher +couchers +couches +couching +couchings +coude +cougar +cougars cough +coughed +cougher +coughers +coughing +coughs could +couldest +couldst +coulee +coulees +coulis +coulises +coulisse +coulisses +couloir +couloirs +coulomb +coulombic +coulombs +coulometer +coulometers +coulometric +coulometrically +coulometries +coulometry +coulter +coulters +coumaric +coumarin +coumarins +coumarou +coumarous +council +councillor +councillors +councillorship +councillorships +councilman +councilmanic +councilmen +councilor +councilors +councils +councilwoman +councilwomen +counsel +counseled +counselee +counselees +counseling +counselings +counselled +counselling +counsellings +counsellor +counsellors +counselor +counselors +counselorship +counselorships +counsels count +countabilities +countability +countable +countably +countdown +countdowns +counted +countenance +countenanced +countenancer +countenancers +countenances +countenancing counter +counteraccusation +counteraccusations +counteract +counteracted +counteracting +counteraction +counteractions +counteractive +counteracts +counteradaptation +counteradaptations +counteradvertising +counteradvertisings +counteragent +counteragents +counteraggression +counteraggressions +counterargue +counterargued +counterargues +counterarguing +counterargument +counterarguments +counterassault +counterassaults +counterattack +counterattacked +counterattacker +counterattackers +counterattacking +counterattacks +counterbade +counterbalance +counterbalanced +counterbalances +counterbalancing +counterbid +counterbidden +counterbidding +counterbids +counterblast +counterblasts +counterblockade +counterblockaded +counterblockades +counterblockading +counterblow +counterblows +countercampaign +countercampaigns +counterchange +counterchanged +counterchanges +counterchanging +countercharge +countercharged +countercharges +countercharging +countercheck +counterchecked +counterchecking +counterchecks +counterclaim +counterclaimed +counterclaiming +counterclaims +counterclockwise +countercommercial +countercomplaint +countercomplaints +counterconditioning +counterconditionings +counterconspiracies +counterconspiracy +counterconvention +counterconventions +countercountermeasure +countercountermeasures +countercoup +countercoups +countercries +countercriticism +countercriticisms +countercry +countercultural +counterculturalism +counterculturalisms +counterculture +countercultures +counterculturist +counterculturists +countercurrent +countercurrently +countercurrents +countercyclical +countercyclically +counterdemand +counterdemands +counterdemonstrate +counterdemonstrated +counterdemonstrates +counterdemonstrating +counterdemonstration +counterdemonstrations +counterdemonstrator +counterdemonstrators +counterdeployment +counterdeployments +countered +countereducational +countereffort +counterefforts +counterespionage +counterespionages +counterevidence +counterevidences +counterexample +counterexamples +counterfactual +counterfeit +counterfeited +counterfeiter +counterfeiters +counterfeiting +counterfeits +counterfire +counterfired +counterfires +counterfiring +counterflow +counterflows +counterfoil +counterfoils +counterforce +counterforces +countergovernment +countergovernments +counterguerilla +counterguerillas +counterguerrilla +counterguerrillas +counterhypotheses +counterhypothesis +counterimage +counterimages +counterincentive +counterincentives +counterinflation +counterinflationary +counterinfluence +counterinfluenced +counterinfluences +counterinfluencing +countering +counterinstance +counterinstances +counterinstitution +counterinstitutions +counterinsurgencies +counterinsurgency +counterinsurgent +counterinsurgents +counterintelligence +counterintelligences +counterinterpretation +counterinterpretations +counterintuitive +counterintuitively +counterion +counterions +counterirritant +counterirritants +counterman +countermand +countermanded +countermanding +countermands +countermarch +countermarched +countermarches +countermarching +countermeasure +countermeasures +countermelodies +countermelody +countermemo +countermemos +countermen +countermine +countermined +countermines +countermining +countermobilization +countermobilizations +countermove +countermoved +countermovement +countermovements +countermoves +countermoving +countermyth +countermyths +counteroffensive +counteroffensives +counteroffer +counteroffers +counterorder +counterordered +counterordering +counterorders +counterpane +counterpanes +counterpart +counterparts +counterpetition +counterpetitioned +counterpetitioning +counterpetitions +counterpicket +counterpicketed +counterpicketing +counterpickets +counterplan +counterplans +counterplay +counterplayer +counterplayers +counterplays +counterplea +counterpleas +counterplot +counterplots +counterplotted +counterplotting +counterploy +counterploys +counterpoint +counterpointed +counterpointing +counterpoints +counterpoise +counterpoised +counterpoises +counterpoising +counterpose +counterposed +counterposes +counterposing +counterpower +counterpowers +counterpressure +counterpressures +counterproductive +counterprogramming +counterprogrammings +counterproject +counterprojects +counterpropaganda +counterpropagandas +counterproposal +counterproposals +counterprotest +counterprotests +counterpunch +counterpunched +counterpuncher +counterpunchers +counterpunches +counterpunching +counterquestion +counterquestioned +counterquestioning +counterquestions +counterraid +counterraided +counterraiding +counterraids +counterrallied +counterrallies +counterrally +counterrallying +counterreaction +counterreactions +counterreform +counterreformation +counterreformations +counterreformer +counterreformers +counterreforms +counterresponse +counterresponses +counterretaliation +counterretaliations +counterrevolution +counterrevolutionaries +counterrevolutionary +counterrevolutions +counters +counterscientific +countershading +countershadings +countershot +countershots +countersign +countersignature +countersignatures +countersigned +countersigning +countersigns +countersink +countersinking +countersinks +countersniper +countersnipers +counterspell +counterspells +counterspies +counterspy +counterstain +counterstained +counterstaining +counterstains +counterstate +counterstated +counterstatement +counterstatements +counterstates +counterstating +counterstep +counterstepped +counterstepping +countersteps +counterstrategies +counterstrategist +counterstrategists +counterstrategy +counterstream +counterstreams +counterstrike +counterstrikes +counterstroke +counterstrokes +counterstyle +counterstyles +countersue +countersued +countersues +countersuggestion +countersuggestions +countersuing +countersuit +countersuits +countersunk +countersurveillance +countersurveillances +countertactics +countertendencies +countertendency +countertenor +countertenors +counterterror +counterterrorism +counterterrorisms +counterterrorist +counterterrorists +counterterrors +counterthreat +counterthreats +counterthrust +counterthrusts +countertop +countertops +countertrade +countertrades +countertradition +countertraditions +countertransference +countertransferences +countertrend +countertrends +countervail +countervailed +countervailing +countervails +counterview +counterviews +counterviolence +counterviolences +counterweight +counterweighted +counterweighting +counterweights +counterworld +counterworlds +countess +countesses +countian +countians +counties +counting +countinghouse +countinghouses +countless +countlessly +countries +countrified country +countryfied +countryish +countryman +countrymen +countryseat +countryseats countryside +countrysides +countrywide +countrywoman +countrywomen +counts +county +coup +coupe +couped +coupes +couping couple +coupled +couplement +couplements +coupler +couplers +couples +couplet +couplets +coupling +couplings +coupon +couponing +couponings +coupons +coups courage +courageous +courageously +courageousness +courageousnesses +courages +courant +courante +courantes +couranto +courantoes +courantos +courants +courgette +courgettes +courier +couriers +courlan +courlans course +coursed +courser +coursers +courses +courseware +coursewares +coursing +coursings court +courted +courteous +courteously +courteousness +courteousnesses +courter +courters +courtesan +courtesans +courtesied +courtesies +courtesy +courtesying +courthouse +courthouses +courtier +courtiers +courting +courtlier +courtliest +courtliness +courtlinesses +courtly +courtroom +courtrooms +courts +courtship +courtships +courtside +courtsides courtyard +courtyards +couscous +couscouses cousin +cousinage +cousinages +cousinhood +cousinhoods +cousinly +cousinries +cousinry +cousins +cousinship +cousinships +couteau +couteaux +couter +couters +couth +couther +couthest +couthie +couthier +couthiest +couths +couture +coutures +couturier +couturiere +couturieres +couturiers +couvade +couvades +covalence +covalences +covalencies +covalency +covalent +covalently +covariance +covariances +covariant +covariation +covariations +cove +coved +covelline +covellines +covellite +covellites +coven +covenant +covenantal +covenanted +covenantee +covenantees +covenanter +covenanters +covenanting +covenantor +covenantors +covenants +covens cover +coverable +coverage +coverages +coverall +coveralled +coveralls +covered +coverer +coverers +covering +coverings +coverless +coverlet +coverlets +coverlid +coverlids +covers +coverslip +coverslips +covert +covertly +covertness +covertnesses +coverts +coverture +covertures +coverup +coverups +coves +covet +covetable +coveted +coveter +coveters +coveting +covetingly +covetous +covetously +covetousness +covetousnesses +covets +covey +coveys +covin +coving +covings +covins cow +cowage +cowages +coward +cowardice +cowardices +cowardliness +cowardlinesses +cowardly +cowards +cowbane +cowbanes +cowbell +cowbells +cowberries +cowberry +cowbind +cowbinds +cowbird +cowbirds +cowboy +cowboys +cowcatcher +cowcatchers +cowed +cowedly +cower +cowered +cowering +cowers +cowfish +cowfishes +cowflap +cowflaps +cowflop +cowflops +cowgirl +cowgirls +cowhage +cowhages +cowhand +cowhands +cowherb +cowherbs +cowherd +cowherds +cowhide +cowhided +cowhides +cowhiding +cowier +cowiest +cowing +cowinner +cowinners +cowl +cowled +cowlick +cowlicks +cowling +cowlings +cowls +cowlstaff +cowlstaffs +cowlstaves +cowman +cowmen +coworker +coworkers +cowpat +cowpats +cowpea +cowpeas +cowpie +cowpies +cowplop +cowplops +cowpoke +cowpokes +cowpox +cowpoxes +cowpuncher +cowpunchers +cowrie +cowries +cowrite +cowrites +cowriting +cowritten +cowrote +cowry +cows +cowshed +cowsheds +cowskin +cowskins +cowslip +cowslips +cowy +cox +coxa +coxae +coxal +coxalgia +coxalgias +coxalgic +coxalgies +coxalgy +coxcomb +coxcombical +coxcombries +coxcombry +coxcombs +coxed +coxes +coxing +coxitides +coxitis +coxswain +coxswained +coxswaining +coxswains +coy +coydog +coydogs +coyed +coyer +coyest +coying +coyish +coyly +coyness +coynesses +coyote +coyotes +coyotillo +coyotillos +coypou +coypous +coypu +coypus +coys +coz +cozen +cozenage +cozenages +cozened +cozener +cozeners +cozening +cozens +cozes +cozey +cozeys +cozie +cozied +cozier +cozies +coziest +cozily +coziness +cozinesses cozy +cozying +cozzes +craal +craaled +craaling +craals +crab +crabbed +crabbedness +crabbednesses +crabber +crabbers +crabbier +crabbiest +crabbily +crabbing +crabby +crabgrass +crabgrasses +crabmeat +crabmeats +crabs +crabstick +crabsticks +crabwise +crack +crackajack +crackajacks +crackback +crackbacks +crackbrain +crackbrained +crackbrains +crackdown +crackdowns +cracked +cracker +crackerjack +crackerjacks +crackers +cracking +crackings +crackle +crackled +crackles +crackleware +cracklewares +cracklier +crackliest +crackling +cracklings +crackly +cracknel +cracknels +crackpot +crackpots +cracks +cracksman +cracksmen +crackup +crackups +cracky +cradle +cradled +cradler +cradlers +cradles +cradlesong +cradlesongs +cradling +craft +crafted +craftier +craftiest +craftily +craftiness +craftinesses +crafting +crafts +craftsman +craftsmanlike +craftsmanly +craftsmanship +craftsmanships +craftsmen +craftspeople +craftsperson +craftspersons +craftswoman +craftswomen +crafty +crag +cragged +craggier +craggiest +craggily +cragginess +cragginesses +craggy +crags +cragsman +cragsmen +crake +crakes +cram +crambe +crambes +crambo +cramboes +crambos +crammed +crammer +crammers +cramming +cramoisie +cramoisies +cramoisy +cramp +cramped +cramping +crampit +crampits +crampon +crampons +crampoon +crampoons +cramps +crams +cranberries +cranberry +cranch +cranched +cranches +cranching +crane +craned +cranes +cranesbill +cranesbills +crania +cranial +cranially +craniate +craniates +craning +craniocerebral +craniofacial +craniologies +craniology +craniometries +craniometry +craniosacral +craniotomies +craniotomy +cranium +craniums +crank +crankcase +crankcases +cranked +cranker +crankest +crankier +crankiest +crankily +crankiness +crankinesses +cranking +crankish +crankle +crankled +crankles +crankling +crankly +crankous +crankpin +crankpins +cranks +crankshaft +crankshafts +cranky +crannied +crannies +crannog +crannoge +crannoges +crannogs +cranny +cranreuch +cranreuchs +crap +crape +craped +crapes +craping +crapped +crapper +crappers +crappie +crappier +crappies +crappiest +crapping +crappy +craps +crapshoot +crapshooter +crapshooters +crapshoots +crapulous +crases crash +crashed +crasher +crashers +crashes +crashing +crashingly +crashworthiness +crashworthinesses +crashworthy +crasis +crass +crasser +crassest +crassitude +crassitudes +crassly +crassness +crassnesses +cratch +cratches +crate +crated +crater +cratered +cratering +craterlet +craterlets +craterlike +craters +crates +crating +craton +cratonic +cratons +craunch +craunched +craunches +craunching +cravat +cravats +crave +craved +craven +cravened +cravening +cravenly +cravenness +cravennesses +cravens +craver +cravers +craves +craving +cravings +craw +crawdad +crawdads +crawfish +crawfished +crawfishes +crawfishing +crawl +crawled +crawler +crawlers +crawlier +crawliest +crawling +crawls +crawlspace +crawlspaces +crawlway +crawlways +crawly +craws +crayfish +crayfishes crayon +crayoned +crayoning +crayonist +crayonists +crayons +craze +crazed +crazes +crazier +crazies +craziest +crazily +craziness +crazinesses +crazing crazy +crazyweed +crazyweeds +creak +creaked +creakier +creakiest +creakily +creakiness +creakinesses +creaking +creaks +creaky cream +creamcups +creamed +creamer +creameries +creamers +creamery +creamier +creamiest +creamily +creaminess +creaminesses +creaming +creampuff +creampuffs +creams +creamware +creamwares +creamy +crease +creased +creaseless +creaser +creasers +creases +creasier +creasiest +creasing +creasy create +created +creates +creatin +creatine +creatines +creating +creatinine +creatinines +creatins +creation +creationism +creationisms +creationist +creationists +creations +creative +creatively +creativeness +creativenesses +creativities +creativity +creator +creators +creatural creature +creaturehood +creaturehoods +creatureliness +creaturelinesses +creaturely +creatures +creche +creches +credal +credence +credences +credenda +credendum +credent +credential +credentialed +credentialing +credentialism +credentialisms +credentialled +credentialling +credentials +credenza +credenzas +credibilities +credibility +credible +credibly credit +creditabilities +creditability +creditable +creditableness +creditablenesses +creditably +credited +crediting +creditor +creditors +credits +creditworthiness +creditworthinesses +creditworthy +credo +credos +credulities +credulity +credulous +credulously +credulousness +credulousnesses +creed +creedal +creeds +creek +creeks +creel +creeled +creeling +creels +creep +creepage +creepages +creeper +creepers +creepie +creepier +creepies +creepiest +creepily +creepiness +creepinesses +creeping +creeps +creepy +creese +creeses +creesh +creeshed +creeshes +creeshing +cremains +cremate +cremated +cremates +cremating +cremation +cremations +cremator +crematoria +crematories +crematorium +crematoriums +cremators +crematory +creme +cremes +crenate +crenated +crenation +crenations +crenel +crenelated +crenelation +crenelations +creneled +creneling +crenellated +crenellation +crenellations +crenelle +crenelled +crenelles +crenelling +crenels +crenulate +crenulated +crenulation +crenulations +creodont +creodonts +creole +creoles +creolise +creolised +creolises +creolising +creolization +creolizations +creolize +creolized +creolizes +creolizing +creosol +creosols +creosote +creosoted +creosotes +creosoting +crepe +creped +crepes +crepey +crepier +crepiest +creping +crepitant +crepitate +crepitated +crepitates +crepitating +crepitation +crepitations +crepon +crepons +crept +crepuscle +crepuscles +crepuscular +crepuscule +crepuscules +crepy +crescendi +crescendo +crescendoed +crescendoes +crescendoing +crescendos +crescent +crescentic +crescents +crescive +crescively +cresol +cresols +cress +cresses +cresset +cressets +crest +crestal +crested +crestfallen +crestfallenly +crestfallenness +crestfallennesses +cresting +crestings +crestless +crests +cresyl +cresylic +cresyls +cretic +cretics +cretin +cretinism +cretinisms +cretinous +cretins +cretonne +cretonnes +crevalle +crevalles +crevasse +crevassed +crevasses +crevassing +crevice +creviced +crevices crew +crewed +crewel +crewels +crewelwork +crewelworks +crewing +crewless +crewman +crewmate +crewmates +crewmen +crewneck +crewnecks +crews +crib +cribbage +cribbages +cribbed +cribber +cribbers +cribbing +cribbings +cribbled +cribriform +cribrous +cribs +cribwork +cribworks +cricetid +cricetids +crick +cricked +cricket +cricketed +cricketer +cricketers +cricketing +crickets +crickey +cricking +cricks +cricoid +cricoids +cried +crier +criers +cries +crikey crime +crimeless +crimes criminal +criminalistics +criminalities +criminality +criminalization +criminalizations +criminalize +criminalized +criminalizes +criminalizing +criminally +criminals +criminate +criminated +criminates +criminating +crimination +criminations +criminological +criminologically +criminologies +criminologist +criminologists +criminology +criminous +crimmer +crimmers +crimp +crimped +crimper +crimpers +crimpier +crimpiest +crimping +crimple +crimpled +crimples +crimpling +crimps +crimpy +crimson +crimsoned +crimsoning +crimsons +cringe +cringed +cringer +cringers +cringes +cringing +cringle +cringles +crinite +crinites +crinkle +crinkled +crinkles +crinklier +crinkliest +crinkling +crinkly +crinoid +crinoids +crinoline +crinolined +crinolines +crinum +crinums +criollo +criollos +cripe +cripes +cripple +crippled +crippler +cripplers +cripples +crippling +cripplingly +cris +crises +crisic +crisis +crisp +crispate +crispbread +crispbreads +crisped +crispen +crispened +crispening +crispens +crisper +crispers +crispest +crispier +crispiest +crispily +crispiness +crispinesses +crisping +crisply +crispness +crispnesses +crisps +crispy +crissa +crissal +crisscross +crisscrossed +crisscrosses +crisscrossing +crissum +crista +cristae +cristate criteria criterion +criterions +criterium +criteriums +critic +critical +criticalities +criticality +critically +criticalness +criticalnesses +criticaster +criticasters +criticise +criticised +criticises +criticising +criticism +criticisms +criticizable +criticize +criticized +criticizer +criticizers +criticizes +criticizing +critics +critique +critiqued +critiques +critiquing +critter +critters +crittur +critturs +croak +croaked +croaker +croakers +croakier +croakiest +croakily +croaking +croaks +croaky +croc +crocein +croceine +croceines +croceins +crochet +crocheted +crocheter +crocheters +crocheting +crochets +croci +crocidolite +crocidolites +crocine +crock +crocked +crockeries +crockery +crocket +crocketed +crockets +crocking +crocks +crocodile +crocodiles +crocodilian +crocodilians +crocoite +crocoites +crocs +crocus +crocuses +croft +crofter +crofters +crofts +croissant +croissants +crojik +crojiks +cromlech +cromlechs +crone +crones +cronies +crony +cronyism +cronyisms +crook +crookback +crookbacked +crookbacks +crooked +crookeder +crookedest +crookedly +crookedness +crookednesses +crookeries +crookery +crooking +crookneck +crooknecks +crooks +croon +crooned +crooner +crooners +crooning +croons crop +cropland +croplands +cropless +cropped +cropper +croppers +croppie +croppies +cropping +crops +croquet +croqueted +croqueting +croquets +croquette +croquettes +croquignole +croquignoles +croquis +crore +crores +crosier +crosiers cross +crossabilities +crossability +crossable +crossarm +crossarms +crossbanded +crossbanding +crossbandings +crossbar +crossbarred +crossbarring +crossbars +crossbeam +crossbeams +crossbearer +crossbearers +crossbill +crossbills +crossbones +crossbow +crossbowman +crossbowmen +crossbows +crossbred +crossbreds +crossbreed +crossbreeding +crossbreeds +crosscourt +crosscurrent +crosscurrents +crosscut +crosscuts +crosscutting +crosscuttings +crosse +crossed +crosser +crossers +crosses +crossest +crossfire +crossfires +crosshair +crosshairs +crosshatch +crosshatched +crosshatches +crosshatching +crosshead +crossheads crossing +crossings +crosslet +crosslets +crosslinguistic +crosslinguistically +crossly +crossness +crossnesses +crossopterygian +crossopterygians +crossover +crossovers +crosspatch +crosspatches +crosspiece +crosspieces +crossroad crossroads +crossruff +crossruffed +crossruffing +crossruffs +crosstalk +crosstalks +crosstie +crossties +crosstown +crosstrees +crosswalk +crosswalks +crossway +crossways +crosswind +crosswinds +crosswise +crossword +crosswords +crotch +crotched +crotches +crotchet +crotchetiness +crotchetinesses +crotchets +crotchety +croton +crotons +crouch +crouched +crouches +crouching +croup +croupe +croupes +croupier +croupiers +croupiest +croupily +croupous +croups +croupy +crouse +crousely +croustade +croustades +crouton +croutons +crow +crowbar +crowbarred +crowbarring +crowbars +crowberries +crowberry crowd +crowded +crowdedness +crowdednesses +crowder +crowders +crowdie +crowdies +crowding +crowds +crowdy +crowed +crower +crowers +crowfeet +crowfoot +crowfoots +crowing +crowkeeper +crowkeepers +crown +crowned +crowner +crowners +crownet +crownets +crowning +crownless +crowns +crows +crowstep +crowstepped +crowsteps +croze +crozer +crozers +crozes +crozier +croziers +cruces +crucial +crucially +crucian +crucians +cruciate +crucible +crucibles +crucifer +cruciferous +crucifers +crucified +crucifies +crucifix +crucifixes +crucifixion +crucifixions +cruciform +cruciforms +crucify +crucifying +cruck +crucks +crud +crudded +cruddier +cruddiest +crudding +cruddy +crude +crudely +crudeness +crudenesses +cruder +crudes +crudest +crudites +crudities +crudity +cruds cruel +crueler +cruelest +crueller +cruellest +cruelly +cruelness +cruelnesses +cruelties +cruelty +cruet +cruets +cruise +cruised +cruiser +cruisers +cruiserweight +cruiserweights +cruises +cruising +cruisings +cruller +crullers +crumb +crumbed +crumber +crumbers +crumbier +crumbiest +crumbing +crumble +crumbled +crumbles +crumblier +crumbliest +crumbliness +crumblinesses +crumbling +crumblings +crumbly +crumbs +crumbum +crumbums +crumby +crumhorn +crumhorns +crummie +crummier +crummies +crummiest +crumminess +crumminesses +crummy +crump +crumped +crumpet +crumpets +crumping +crumple +crumpled +crumples +crumplier +crumpliest +crumpling +crumply +crumps +crunch +crunchable +crunched +cruncher +crunchers +crunches +crunchier +crunchiest +crunchily +crunchiness +crunchinesses +crunching +crunchy +crunodal +crunode +crunodes +cruor +cruors +crupper +cruppers +crura +crural +crus +crusade +crusaded +crusader +crusaders +crusades +crusading +crusado +crusadoes +crusados +cruse +cruses +cruset +crusets +crush +crushable +crushed +crusher +crushers +crushes +crushing +crushingly +crushproof +crusily +crust +crustacea +crustacean +crustaceans +crustaceous +crustal +crusted +crustier +crustiest +crustily +crustiness +crustinesses +crusting +crustless +crustose +crusts +crusty +crutch +crutched +crutches +crutching +crux +cruxes +cruzado +cruzadoes +cruzados +cruzeiro +cruzeiros +crwth +crwths cry +crybabies +crybaby +crying +cryingly +cryobiological +cryobiologies +cryobiologist +cryobiologists +cryobiology +cryogen +cryogenic +cryogenically +cryogenics +cryogenies +cryogens +cryogeny +cryolite +cryolites +cryonic +cryonics +cryophilic +cryopreservation +cryopreservations +cryopreserve +cryopreserved +cryopreserves +cryopreserving +cryoprobe +cryoprobes +cryoprotectant +cryoprotectants +cryoprotective +cryoscope +cryoscopes +cryoscopic +cryoscopies +cryoscopy +cryostat +cryostatic +cryostats +cryosurgeon +cryosurgeons +cryosurgeries +cryosurgery +cryosurgical +cryotherapies +cryotherapy +cryotron +cryotrons +crypt +cryptal +cryptanalyses +cryptanalysis +cryptanalyst +cryptanalysts +cryptanalytic +cryptanalytical +cryptarithm +cryptarithms +cryptic +cryptically +crypto +cryptococcal +cryptococci +cryptococcoses +cryptococcosis +cryptococcus +cryptocrystalline +cryptogam +cryptogamic +cryptogamous +cryptogams +cryptogenic +cryptogram +cryptograms +cryptograph +cryptographer +cryptographers +cryptographic +cryptographically +cryptographies +cryptographs +cryptography +cryptologic +cryptological +cryptologies +cryptologist +cryptologists +cryptology +cryptomeria +cryptomerias +cryptonym +cryptonyms +cryptorchid +cryptorchidism +cryptorchidisms +cryptorchids +cryptorchism +cryptorchisms +cryptos +cryptozoologies +cryptozoologist +cryptozoologists +cryptozoology +crypts +crystal +crystalize +crystalized +crystalizes +crystalizing +crystalline +crystallinities +crystallinity +crystallise +crystallised +crystallises +crystallising +crystallite +crystallites +crystallizable +crystallization +crystallizations +crystallize +crystallized +crystallizer +crystallizers +crystallizes +crystallizing +crystallographer +crystallographers +crystallographic +crystallographically +crystallographies +crystallography +crystalloid +crystalloidal +crystalloids +crystals +ctenidia +ctenidium +ctenoid +ctenophoran +ctenophorans +ctenophore +ctenophores +cuadrilla +cuadrillas +cub +cubage +cubages +cubature +cubatures +cubbies +cubbish +cubby +cubbyhole +cubbyholes cube +cubeb +cubebs +cubed +cuber +cubers +cubes cubic +cubical +cubically +cubicities +cubicity +cubicle +cubicles +cubicly +cubics +cubicula +cubiculum +cubiform +cubing +cubism +cubisms +cubist +cubistic +cubists +cubit +cubital +cubits +cuboid +cuboidal +cuboids +cubs +cuckold +cuckolded +cuckolding +cuckoldries +cuckoldry +cuckolds +cuckoo +cuckooed +cuckooflower +cuckooflowers +cuckooing +cuckoopint +cuckoopints +cuckoos +cucullate +cucumber +cucumbers +cucurbit +cucurbits +cud +cudbear +cudbears +cuddie +cuddies +cuddle +cuddled +cuddler +cuddlers +cuddles +cuddlesome +cuddlier +cuddliest +cuddling +cuddly +cuddy +cudgel +cudgeled +cudgeler +cudgelers +cudgeling +cudgelled +cudgelling +cudgels +cuds +cudweed +cudweeds +cue +cued +cueing +cues +cuesta +cuestas +cuff +cuffed +cuffing +cuffless +cuffs +cuif +cuifs +cuing +cuirass +cuirassed +cuirasses +cuirassier +cuirassiers +cuirassing +cuish +cuishes cuisine +cuisines +cuisse +cuisses +cuittle +cuittled +cuittles +cuittling +cuke +cukes +culch +culches +culet +culets +culex +culices +culicid +culicids +culicine +culicines +culinarian +culinarians +culinarily +culinary +cull +cullay +cullays +culled +cullender +cullenders +culler +cullers +cullet +cullets +cullied +cullies +culling +cullion +cullions +cullis +cullises +culls +cully +cullying +culm +culmed +culminant +culminate +culminated +culminates +culminating +culmination +culminations +culming +culms +culotte +culottes +culpa +culpabilities +culpability +culpable +culpableness +culpablenesses +culpably +culpae +culprit +culprits +cult +cultch +cultches +culti +cultic +cultigen +cultigens +cultish +cultishly +cultishness +cultishnesses +cultism +cultisms +cultist +cultists +cultivabilities +cultivability +cultivable +cultivar +cultivars +cultivatable +cultivate +cultivated +cultivates +cultivating +cultivation +cultivations +cultivator +cultivators +cultlike +cultrate +cults +cultural +culturally +culturati culture +cultured +cultures +culturing +cultus +cultuses +culver +culverin +culverins +culvers +culvert +culverts +cum +cumarin +cumarins +cumber +cumberbund +cumberbunds +cumbered +cumberer +cumberers +cumbering +cumbers +cumbersome +cumbersomely +cumbersomeness +cumbersomenesses +cumbrous +cumbrously +cumbrousness +cumbrousnesses +cumin +cumins +cummer +cummerbund +cummerbunds +cummers +cummin +cummins +cumquat +cumquats +cumshaw +cumshaws +cumulate +cumulated +cumulates +cumulating +cumulation +cumulations +cumulative +cumulatively +cumulativeness +cumulativenesses +cumuli +cumuliform +cumulonimbi +cumulonimbus +cumulonimbuses +cumulous +cumulus +cunctation +cunctations +cunctative +cundum +cundums +cuneal +cuneate +cuneated +cuneatic +cuneiform +cuneiforms +cuniform +cuniforms +cunner +cunners +cunnilinctus +cunnilinctuses +cunnilingus +cunnilinguses +cunning +cunninger +cunningest +cunningly +cunningness +cunningnesses +cunnings +cunt +cunts cup +cupbearer +cupbearers cupboard +cupboards +cupcake +cupcakes +cupel +cupeled +cupeler +cupelers +cupeling +cupellation +cupellations +cupelled +cupeller +cupellers +cupelling +cupels +cupful +cupfuls +cupid +cupidities +cupidity +cupids +cuplike +cupola +cupolaed +cupolaing +cupolas +cuppa +cuppas +cupped +cupper +cuppers +cuppier +cuppiest +cupping +cuppings +cuppy +cupreous +cupric +cupriferous +cuprite +cuprites +cupronickel +cupronickels +cuprous +cuprum +cuprums +cups +cupsful +cupula +cupulae +cupular +cupulate +cupule +cupules +cur +curabilities +curability +curable +curableness +curablenesses +curably +curacao +curacaos +curacies +curacoa +curacoas +curacy +curagh +curaghs +curara +curaras +curare +curares +curari +curarine +curarines +curaris +curarization +curarizations +curarize +curarized +curarizes +curarizing +curassow +curassows +curate +curated +curates +curating +curative +curatively +curatives +curator +curatorial +curators +curatorship +curatorships +curb +curbable +curbed +curber +curbers +curbing +curbings +curbs +curbside +curbsides +curbstone +curbstones +curch +curches +curculio +curculios +curcuma +curcumas +curd +curded +curdier +curdiest +curding +curdle +curdled +curdler +curdlers +curdles +curdling +curds +curdy cure +cured +cureless +curer +curers +cures +curet +curets +curettage +curettages +curette +curetted +curettement +curettements +curettes +curetting +curf +curfew +curfews +curfs +curia +curiae +curial +curie +curies +curing +curio +curios +curiosa +curiosities +curiosity curious +curiouser +curiousest +curiously +curiousness +curiousnesses +curite +curites +curium +curiums +curl +curled +curler +curlers +curlew +curlews +curlicue +curlicued +curlicues +curlicuing +curlier +curliest +curlily +curliness +curlinesses +curling +curlings +curlpaper +curlpapers +curls +curly +curlycue +curlycues +curmudgeon +curmudgeonliness +curmudgeonlinesses +curmudgeonly +curmudgeons +curn +curns +curr +currach +currachs +curragh +curraghs +curran +currans +currant +currants +curred +currencies currency +current +currently +currentness +currentnesses +currents +curricle +curricles +curricula +curricular curriculum +curriculums +currie +curried +currier +currieries +curriers +curriery +curries +curring +currish +currishly +currs +curry +currycomb +currycombed +currycombing +currycombs +currying +curs +curse +cursed +curseder +cursedest +cursedly +cursedness +cursednesses +curser +cursers +curses +cursing +cursive +cursively +cursiveness +cursivenesses +cursives +cursor +cursorial +cursorily +cursoriness +cursorinesses +cursors +cursory +curst +curt +curtail +curtailed +curtailer +curtailers +curtailing +curtailment +curtailments +curtails curtain +curtained +curtaining +curtainless +curtains +curtal +curtalax +curtalaxes +curtals +curtate +curter +curtesies +curtest +curtesy +curtilage +curtilages +curtly +curtness +curtnesses +curtsey +curtseyed +curtseying +curtseys +curtsied +curtsies +curtsy +curtsying +curule +curvaceous +curvacious +curvature +curvatures +curve +curveball +curveballed +curveballing +curveballs +curved +curvedly +curves +curvet +curveted +curveting +curvets +curvetted +curvetting +curvey +curvier +curviest +curvilinear +curvilinearities +curvilinearity +curving +curvy +cuscus +cuscuses +cusec +cusecs +cushat +cushats +cushaw +cushaws +cushier +cushiest +cushily cushion +cushioned +cushioning +cushionless +cushions +cushiony +cushy +cusk +cusks +cusp +cuspate +cuspated +cusped +cuspid +cuspidal +cuspidate +cuspidation +cuspidations +cuspides +cuspidor +cuspidors +cuspids +cuspis +cusps +cuss +cussed +cussedly +cussedness +cussednesses +cusser +cussers +cusses +cussing +cusso +cussos +cussword +cusswords +custard +custards +custardy +custodes +custodial +custodian +custodians +custodianship +custodianships +custodies +custody custom +customarily +customariness +customarinesses +customary customer +customers +customhouse +customhouses +customise +customised +customises +customising +customization +customizations +customize +customized +customizer +customizers +customizes +customizing customs +customshouse +customshouses +custos +custumal +custumals cut +cutabilities +cutability +cutaneous +cutaneously +cutaway +cutaways +cutback +cutbacks +cutbank +cutbanks +cutch +cutcheries +cutchery +cutches +cutdown +cutdowns +cute +cutely +cuteness +cutenesses +cuter +cutes +cutesie +cutesier +cutesiest +cutest +cutesy +cutey +cuteys +cutgrass +cutgrasses +cuticle +cuticles +cuticula +cuticulae +cuticular +cutie +cuties +cutin +cutinise +cutinised +cutinises +cutinising +cutinize +cutinized +cutinizes +cutinizing +cutins +cutis +cutises +cutlas +cutlases +cutlass +cutlasses +cutler +cutleries +cutlers +cutlery +cutlet +cutlets +cutline +cutlines +cutoff +cutoffs +cutout +cutouts +cutover +cutovers +cutpurse +cutpurses +cuts +cuttable +cuttage +cuttages +cutter +cutters +cutthroat +cutthroats +cutties +cutting +cuttingly +cuttings +cuttle +cuttlebone +cuttlebones +cuttled +cuttlefish +cuttlefishes +cuttles +cuttling +cutty +cutup +cutups +cutwater +cutwaters +cutwork +cutworks +cutworm +cutworms +cuvette +cuvettes +cwm +cwms +cyan +cyanamid +cyanamide +cyanamides +cyanamids +cyanate +cyanates +cyanic +cyanid +cyanide +cyanided +cyanides +cyaniding +cyanids +cyanin +cyanine +cyanines +cyanins +cyanite +cyanites +cyanitic +cyano +cyanoacrylate +cyanoacrylates +cyanobacteria +cyanobacterium +cyanocobalamin +cyanocobalamine +cyanocobalamines +cyanocobalamins +cyanoethylate +cyanoethylated +cyanoethylates +cyanoethylating +cyanoethylation +cyanoethylations +cyanogen +cyanogeneses +cyanogenesis +cyanogenetic +cyanogenic +cyanogens +cyanohydrin +cyanohydrins +cyanosed +cyanoses +cyanosis +cyanotic +cyans +cybernated +cybernation +cybernations +cybernetic +cybernetical +cybernetically +cybernetician +cyberneticians +cyberneticist +cyberneticists +cybernetics +cyberpunk +cyberpunks +cyberspace +cyberspaces +cyborg +cyborgs +cycad +cycadeoid +cycadeoids +cycadophyte +cycadophytes +cycads +cycas +cycases +cycasin +cycasins +cyclamate +cyclamates +cyclamen +cyclamens +cyclase +cyclases +cyclazocine +cyclazocines cycle +cyclecar +cyclecars +cycled +cycler +cycleries +cyclers +cyclery +cycles +cyclic +cyclical +cyclicalities +cyclicality +cyclically +cyclicals +cyclicities +cyclicity +cyclicly +cycling +cyclings cyclist +cyclists +cyclitol +cyclitols +cyclization +cyclizations +cyclize +cyclized +cyclizes +cyclizing +cyclo +cycloaddition +cycloadditions +cycloaliphatic +cyclodextrin +cyclodextrins +cyclodiene +cyclodienes +cyclogeneses +cyclogenesis +cyclohexane +cyclohexanes +cyclohexanone +cyclohexanones +cycloheximide +cycloheximides +cyclohexylamine +cyclohexylamines +cycloid +cycloidal +cycloids +cyclometer +cyclometers +cyclonal +cyclone +cyclones +cyclonic +cyclonically +cycloolefin +cycloolefinic +cycloolefins +cyclopaedia +cyclopaedias +cycloparaffin +cycloparaffins +cyclopean +cyclopedia +cyclopedias +cyclopedic +cyclophosphamide +cyclophosphamides +cyclopropane +cyclopropanes +cyclops +cyclorama +cycloramas +cycloramic +cyclos +cycloserine +cycloserines +cycloses +cyclosis +cyclosporine +cyclosporines +cyclostome +cyclostomes +cyclostyle +cyclostyled +cyclostyles +cyclostyling +cyclothymia +cyclothymias +cyclothymic +cyclotomic +cyclotron +cyclotrons +cyder +cyders +cyeses +cyesis +cygnet +cygnets +cylices +cylinder +cylindered +cylindering +cylinders +cylindric +cylindrical +cylindrically +cylix +cyma +cymae +cymar +cymars +cymas +cymatia +cymatium +cymbal +cymbaler +cymbalers +cymbalist +cymbalists +cymbalom +cymbaloms +cymbals +cymbidia +cymbidium +cymbidiums +cymbling +cymblings +cyme +cymene +cymenes +cymes +cymlin +cymling +cymlings +cymlins +cymogene +cymogenes +cymoid +cymol +cymols +cymophane +cymophanes +cymose +cymosely +cymous +cynic +cynical +cynically +cynicism +cynicisms +cynics +cynosure +cynosures +cypher +cyphered +cyphering +cyphers +cypres +cypreses +cypress +cypresses +cyprian +cyprians +cyprinid +cyprinids +cypripedia +cypripedium +cypripediums +cyproheptadine +cyproheptadines +cyproterone +cyproterones +cyprus +cypruses +cypsela +cypselae +cyst +cysteamine +cysteamines +cystein +cysteine +cysteines +cysteins +cystic +cysticerci +cysticercoid +cysticercoids +cysticercoses +cysticercosis +cysticercus +cystine +cystines +cystinuria +cystinurias +cystitides +cystitis +cystocarp +cystocarps +cystoid +cystoids +cystolith +cystoliths +cystoscope +cystoscopes +cystoscopic +cystoscopies +cystoscopy +cysts +cytaster +cytasters +cytidine +cytidines +cytochalasin +cytochalasins +cytochemical +cytochemistries +cytochemistry +cytochrome +cytochromes +cytodifferentiation +cytodifferentiations +cytogenetic +cytogenetical +cytogenetically +cytogeneticist +cytogeneticists +cytogenetics +cytogenies +cytogeny +cytokine +cytokines +cytokineses +cytokinesis +cytokinetic +cytokinin +cytokinins +cytologic +cytological +cytologically +cytologies +cytologist +cytologists +cytology +cytolyses +cytolysin +cytolysins +cytolysis +cytolytic +cytomegalic +cytomegalovirus +cytomegaloviruses +cytomembrane +cytomembranes +cyton +cytons +cytopathic +cytopathogenic +cytopathogenicities +cytopathogenicity +cytophilic +cytophotometric +cytophotometries +cytophotometry +cytoplasm +cytoplasmic +cytoplasmically +cytoplasms +cytosine +cytosines +cytoskeletal +cytoskeleton +cytoskeletons +cytosol +cytosolic +cytosols +cytostatic +cytostatically +cytostatics +cytotaxonomic +cytotaxonomically +cytotaxonomies +cytotaxonomy +cytotechnologies +cytotechnologist +cytotechnologists +cytotechnology +cytotoxic +cytotoxicities +cytotoxicity +cytotoxin +cytotoxins +czar +czardas +czardases +czardom +czardoms +czarevitch +czarevitches +czarevna +czarevnas +czarina +czarinas +czarism +czarisms +czarist +czarists +czaritza +czaritzas +czars +dab +dabbed +dabber +dabbers +dabbing +dabble +dabbled +dabbler +dabblers +dabbles +dabbling +dabblings +dabchick +dabchicks +dabs +dabster +dabsters +dace +daces +dacha +dachas +dachshund +dachshunds +dacker +dackered +dackering +dackers +dacoit +dacoities +dacoits +dacoity +dactyl +dactyli +dactylic +dactylics +dactylologies +dactylology +dactyls +dactylus dad +dada +dadaism +dadaisms +dadaist +dadaistic +dadaists +dadas +daddies +daddle +daddled +daddles +daddling daddy +dado +dadoed +dadoes +dadoing +dados +dads +daedal +daemon +daemonic +daemons +daff +daffed +daffier +daffiest +daffily +daffing +daffodil +daffodils +daffs +daffy +daft +dafter +daftest +daftly +daftness +daftnesses +dag +dagga +daggas +dagger +daggered +daggering +daggerlike +daggers +daggle +daggled +daggles +daggling +daglock +daglocks +dago +dagoba +dagobas +dagoes +dagos +dags +daguerreotype +daguerreotyped +daguerreotypes +daguerreotypies +daguerreotyping +daguerreotypist +daguerreotypists +daguerreotypy +dagwood +dagwoods +dah +dahabeah +dahabeahs +dahabiah +dahabiahs +dahabieh +dahabiehs +dahabiya +dahabiyas +dahl +dahlia +dahlias +dahls +dahoon +dahoons +dahs +daiker +daikered +daikering +daikers +daikon +daikons +dailies +dailiness +dailinesses daily +daimen +daimio +daimios +daimon +daimones +daimonic +daimons +daimyo +daimyos +daintier +dainties +daintiest +daintily +daintiness +daintinesses +dainty +daiquiri +daiquiris +dairies +dairy +dairying +dairyings +dairymaid +dairymaids +dairyman +dairymen +dais +daises +daishiki +daishikis +daisied +daisies +daisy +dak +dakerhen +dakerhens +dakoit +dakoities +dakoits +dakoity +daks +dal +dalapon +dalapons +dalasi +dalasis +dale +daledh +daledhs +dales +dalesman +dalesmen +daleth +daleths +dalles +dalliance +dalliances +dallied +dallier +dalliers +dallies +dally +dallying +dalmatian +dalmatians +dalmatic +dalmatics +dals +dalton +daltonic +daltons dam damage +damageabilities +damageability +damaged +damager +damagers +damages +damaging +damagingly +daman +damans +damar +damars +damascene +damascened +damascenes +damascening +damask +damasked +damasking +damasks +dame +dames +damewort +dameworts +dammar +dammars +dammed +dammer +dammers +damming +damn +damnable +damnableness +damnablenesses +damnably +damnation +damnations +damnatory +damndest +damndests +damned +damneder +damnedest +damnedests +damner +damners +damnified +damnifies +damnify +damnifying +damning +damningly +damns +damosel +damosels +damozel +damozels damp +damped +dampen +dampened +dampener +dampeners +dampening +dampens +damper +dampers +dampest +damping +dampings +dampish +damply +dampness +dampnesses +damps +dams +damsel +damselfish +damselfishes +damselflies +damselfly +damsels +damson +damsons dance +danceable +danced +dancer +dancers +dances +dancing +dandelion +dandelions +dander +dandered +dandering +danders +dandiacal +dandier +dandies +dandiest +dandification +dandifications +dandified +dandifies +dandify +dandifying +dandily +dandle +dandled +dandler +dandlers +dandles +dandling +dandriff +dandriffs +dandruff +dandruffs +dandruffy +dandy +dandyish +dandyishly +dandyism +dandyisms +danegeld +danegelds +daneweed +daneweeds +danewort +daneworts +dang +danged danger +dangered +dangering dangerous +dangerously +dangerousness +dangerousnesses +dangers +danging +dangle +dangled +dangler +danglers +dangles +dangling +dangs +danio +danios +danish +dank +danker +dankest +dankly +dankness +danknesses +danseur +danseurs +danseuse +danseuses +dap +daphne +daphnes +daphnia +daphnias +dapped +dapper +dapperer +dapperest +dapperly +dapperness +dappernesses +dapping +dapple +dappled +dapples +dappling +daps +dapsone +dapsones +darb +darbies +darbs dare +dared +daredevil +daredevilries +daredevilry +daredevils +daredeviltries +daredeviltry +dareful +darer +darers +dares +daresay +daric +darics +daring +daringly +daringness +daringnesses +darings +dariole +darioles dark +darked +darken +darkened +darkener +darkeners +darkening +darkens +darker +darkest +darkey +darkeys +darkie +darkies +darking +darkish +darkle +darkled +darkles +darklier +darkliest +darkling +darkly darkness +darknesses +darkroom +darkrooms +darks +darksome +darky +darling +darlingly +darlingness +darlingnesses +darlings +darn +darndest +darndests +darned +darneder +darnedest +darnel +darnels +darner +darners +darning +darnings +darns +darshan +darshans +dart +dartboard +dartboards +darted +darter +darters +darting +dartle +dartled +dartles +dartling +darts dash +dashboard +dashboards +dashed +dasheen +dasheens +dasher +dashers +dashes +dashi +dashier +dashiest +dashiki +dashikis +dashing +dashingly +dashis +dashpot +dashpots +dashy +dassie +dassies +dastard +dastardliness +dastardlinesses +dastardly +dastards +dasyure +dasyures data +databank +databanks database +databases +datable +dataries +datary +datcha +datchas date +dateable +dated +datedly +datedness +datednesses +dateless +dateline +datelined +datelines +datelining +dater +daters +dates +dating +datival +dative +datively +datives +dato +datos +datto +dattos +datum +datums +datura +daturas +daturic +daub +daube +daubed +dauber +dauberies +daubers +daubery +daubes +daubier +daubiest +daubing +daubries +daubry +daubs +dauby daughter +daughterless +daughters +daunder +daundered +daundering +daunders +daunomycin +daunomycins +daunorubicin +daunorubicins +daunt +daunted +daunter +daunters +daunting +dauntingly +dauntless +dauntlessly +dauntlessness +dauntlessnesses +daunts +dauphin +dauphine +dauphines +dauphins +daut +dauted +dautie +dauties +dauting +dauts +daven +davened +davening +davenport +davenports +davens +davies +davit +davits +davy +daw +dawdle +dawdled +dawdler +dawdlers +dawdles +dawdling +dawed +dawen +dawing +dawk +dawks dawn +dawned +dawning +dawnlike +dawns +daws +dawsonite +dawsonites +dawt +dawted +dawtie +dawties +dawting +dawts day +daybed +daybeds +daybook +daybooks +daybreak +daybreaks +daydream +daydreamed +daydreamer +daydreamers +daydreaming +daydreamlike +daydreams +daydreamt +dayflies +dayflower +dayflowers +dayfly +dayglow +dayglows +daylight +daylighted +daylighting +daylightings +daylights +daylilies +daylily +daylit +daylong +daymare +daymares +dayroom +dayrooms +days +dayside +daysides +daysman +daysmen +daystar +daystars +daytime +daytimes +daywork +dayworks +daze +dazed +dazedly +dazedness +dazednesses +dazes +dazing +dazzle +dazzled +dazzler +dazzlers +dazzles +dazzling +dazzlingly +de +deacidification +deacidifications +deacidified +deacidifies +deacidify +deacidifying +deacon +deaconed +deaconess +deaconesses +deaconing +deaconries +deaconry +deacons +deactivate +deactivated +deactivates +deactivating +deactivation +deactivations +deactivator +deactivators dead +deadbeat +deadbeats +deadbolt +deadbolts +deaden +deadened +deadener +deadeners +deadening +deadeningly +deadenings +deadens +deader +deadest +deadeye +deadeyes +deadfall +deadfalls +deadhead +deadheaded +deadheading +deadheads +deadlier +deadliest +deadlift +deadlifted +deadlifting +deadlifts +deadlight +deadlights deadline +deadlines +deadliness +deadlinesses +deadlock +deadlocked +deadlocking +deadlocks +deadly +deadness +deadnesses +deadpan +deadpanned +deadpanner +deadpanners +deadpanning +deadpans +deads +deadweight +deadweights +deadwood +deadwoods +deaerate +deaerated +deaerates +deaerating +deaeration +deaerations +deaerator +deaerators deaf +deafen +deafened +deafening +deafeningly +deafens +deafer +deafest +deafish +deafly +deafness +deafnesses +deair +deaired +deairing +deairs deal +dealate +dealated +dealates +dealation +dealations +dealer +dealers +dealership +dealerships +dealfish +dealfishes +dealing +dealings +deals +dealt +deaminase +deaminases +deaminate +deaminated +deaminates +deaminating +deamination +deaminations +dean +deaned +deaneries +deanery +deaning +deans +deanship +deanships dear +dearer +dearest +dearie +dearies +dearly +dearness +dearnesses +dears +dearth +dearths +deary +deash +deashed +deashes +deashing +deasil death +deathbed +deathbeds +deathblow +deathblows +deathcup +deathcups +deathful +deathless +deathlessly +deathlessness +deathlessnesses +deathly +deaths +deathsman +deathsmen +deathtrap +deathtraps +deathwatch +deathwatches +deathy +deave +deaved +deaves +deaving +deb +debacle +debacles +debar +debark +debarkation +debarkations +debarked +debarking +debarks +debarment +debarments +debarred +debarring +debars +debase +debased +debasement +debasements +debaser +debasers +debases +debasing +debatable debate +debated +debatement +debatements +debater +debaters +debates +debating +debauch +debauched +debauchee +debauchees +debaucher +debaucheries +debauchers +debauchery +debauches +debauching +debeak +debeaked +debeaking +debeaks +debenture +debentures +debilitate +debilitated +debilitates +debilitating +debilitation +debilitations +debilities +debility +debit +debited +debiting +debits +debonair +debonairly +debonairness +debonairnesses +debone +deboned +deboner +deboners +debones +deboning +debouch +debouche +debouched +debouches +debouching +debouchment +debouchments +debride +debrided +debridement +debridements +debrides +debriding +debrief +debriefed +debriefing +debriefings +debriefs +debris +debruise +debruised +debruises +debruising +debs debt +debtless +debtor +debtors +debts +debug +debugged +debugger +debuggers +debugging +debugs +debunk +debunked +debunker +debunkers +debunking +debunks +debut +debutant +debutante +debutantes +debutants +debuted +debuting +debuts +debye +debyes +decadal decade +decadence +decadences +decadencies +decadency +decadent +decadently +decadents +decades +decaf +decaffeinate +decaffeinated +decaffeinates +decaffeinating +decaffeination +decaffeinations +decafs +decagon +decagons +decagram +decagrams +decahedra +decahedron +decahedrons +decal +decalcification +decalcifications +decalcified +decalcifies +decalcify +decalcifying +decalcomania +decalcomanias +decaliter +decaliters +decalog +decalogs +decalogue +decalogues +decals +decameter +decameters +decamethonium +decamethoniums +decametric +decamp +decamped +decamping +decampment +decampments +decamps +decanal +decane +decanes +decant +decantation +decantations +decanted +decanter +decanters +decanting +decants +decapitate +decapitated +decapitates +decapitating +decapitation +decapitations +decapitator +decapitators +decapod +decapodan +decapodans +decapodous +decapods +decarbonate +decarbonated +decarbonates +decarbonating +decarbonation +decarbonations +decarbonize +decarbonized +decarbonizer +decarbonizers +decarbonizes +decarbonizing +decarboxylase +decarboxylases +decarboxylate +decarboxylated +decarboxylates +decarboxylating +decarboxylation +decarboxylations +decarburization +decarburizations +decarburize +decarburized +decarburizes +decarburizing +decare +decares +decasualization +decasualizations +decasyllabic +decasyllabics +decasyllable +decasyllables +decathlete +decathletes +decathlon +decathlons +decay +decayed +decayer +decayers +decaying +decays +decease +deceased +deceases +deceasing +decedent +decedents +deceit +deceitful +deceitfully +deceitfulness +deceitfulnesses +deceits +deceivable +deceive +deceived +deceiver +deceivers +deceives +deceiving +deceivingly +decelerate +decelerated +decelerates +decelerating +deceleration +decelerations +decelerator +decelerators +decemvir +decemviral +decemvirate +decemvirates +decemviri +decemvirs +decenaries +decenary +decencies +decency +decennia +decennial +decennially +decennials +decennium +decenniums +decent +decenter +decentered +decentering +decenters +decentest +decently +decentralization +decentralizations +decentralize +decentralized +decentralizes +decentralizing +decentre +decentred +decentres +decentring +deception +deceptional +deceptions +deceptive +deceptively +deceptiveness +deceptivenesses +decerebrate +decerebrated +decerebrates +decerebrating +decerebration +decerebrations +decern +decerned +decerning +decerns +decertification +decertifications +decertified +decertifies +decertify +decertifying +dechlorinate +dechlorinated +dechlorinates +dechlorinating +dechlorination +dechlorinations +deciare +deciares +decibel +decibels +decidabilities +decidability +decidable decide +decided +decidedly +decidedness +decidednesses +decider +deciders +decides +deciding +decidua +deciduae +decidual +deciduas +deciduate +deciduous +deciduousness +deciduousnesses +decigram +decigrams +decile +deciles +deciliter +deciliters +decillion +decillions +decimal +decimalization +decimalizations +decimalize +decimalized +decimalizes +decimalizing +decimally +decimals +decimate +decimated +decimates +decimating +decimation +decimations +decimeter +decimeters +decipher +decipherable +deciphered +decipherer +decipherers +deciphering +decipherment +decipherments +deciphers decision +decisional +decisioned +decisioning +decisions +decisive +decisively +decisiveness +decisivenesses +deck +decked +deckel +deckels +decker +deckers +deckhand +deckhands +deckhouse +deckhouses +decking +deckings +deckle +deckles +decks +declaim +declaimed +declaimer +declaimers +declaiming +declaims +declamation +declamations +declamatory +declarable +declarant +declarants +declaration +declarations +declarative +declaratively +declaratory declare +declared +declarer +declarers +declares +declaring +declass +declasse +declassed +declasses +declassification +declassifications +declassified +declassifies +declassify +declassifying +declassing +declaw +declawed +declawing +declaws +declension +declensional +declensions +declinable +declination +declinational +declinations decline +declined +decliner +decliners +declines +declining +declivities +declivitous +declivity +deco +decoct +decocted +decocting +decoction +decoctions +decocts +decode +decoded +decoder +decoders +decodes +decoding +decollate +decollated +decollates +decollating +decollation +decollations +decolletage +decolletages +decollete +decolletes +decolonization +decolonizations +decolonize +decolonized +decolonizes +decolonizing +decolor +decolored +decoloring +decolorization +decolorizations +decolorize +decolorized +decolorizer +decolorizers +decolorizes +decolorizing +decolors +decolour +decoloured +decolouring +decolours +decommission +decommissioned +decommissioning +decommissions +decompensate +decompensated +decompensates +decompensating +decompensation +decompensations +decomposabilities +decomposability +decomposable +decompose +decomposed +decomposer +decomposers +decomposes +decomposing +decomposition +decompositions +decompound +decompress +decompressed +decompresses +decompressing +decompression +decompressions +deconcentrate +deconcentrated +deconcentrates +deconcentrating +deconcentration +deconcentrations +decondition +deconditioned +deconditioning +deconditions +decongest +decongestant +decongestants +decongested +decongesting +decongestion +decongestions +decongestive +decongests +deconsecrate +deconsecrated +deconsecrates +deconsecrating +deconsecration +deconsecrations +deconstruct +deconstructed +deconstructing +deconstruction +deconstructionist +deconstructionists +deconstructions +deconstructive +deconstructor +deconstructors +deconstructs +decontaminate +decontaminated +decontaminates +decontaminating +decontamination +decontaminations +decontaminator +decontaminators +decontrol +decontrolled +decontrolling +decontrols +decor decorate +decorated +decorates +decorating decoration +decorations +decorative +decoratively +decorativeness +decorativenesses +decorator +decorators +decorous +decorously +decorousness +decorousnesses +decors +decorticate +decorticated +decorticates +decorticating +decortication +decortications +decorticator +decorticators +decorum +decorums +decos +decoupage +decoupaged +decoupages +decoupaging +decouple +decoupled +decouples +decoupling +decoy +decoyed +decoyer +decoyers +decoying +decoys decrease +decreased +decreases +decreasing +decreasingly +decree +decreed +decreeing +decreer +decreers +decrees +decrement +decremental +decremented +decrementing +decrements +decrepit +decrepitate +decrepitated +decrepitates +decrepitating +decrepitation +decrepitations +decrepitly +decrepitude +decrepitudes +decrescendo +decrescendos +decrescent +decretal +decretals +decretive +decretory +decrial +decrials +decried +decrier +decriers +decries +decriminalization +decriminalizations +decriminalize +decriminalized +decriminalizes +decriminalizing +decrown +decrowned +decrowning +decrowns +decry +decrying +decrypt +decrypted +decrypting +decryption +decryptions +decrypts +decuman +decumbent +decuple +decupled +decuples +decupling +decuries +decurion +decurions +decurrent +decurve +decurved +decurves +decurving +decury +decussate +decussated +decussates +decussating +decussation +decussations +dedal +dedans dedicate +dedicated +dedicatedly +dedicatee +dedicatees +dedicates +dedicating +dedication +dedications +dedicator +dedicators +dedicatory +dedifferentiate +dedifferentiated +dedifferentiates +dedifferentiating +dedifferentiation +dedifferentiations +deduce +deduced +deduces +deducible +deducing +deduct +deducted +deductibilities +deductibility +deductible +deductibles +deducting +deduction +deductions +deductive +deductively +deducts +dee deed +deeded +deedier +deediest +deeding +deedless +deeds +deedy +deejay +deejays +deem +deemed +deeming +deems +deemster +deemsters deep +deepen +deepened +deepener +deepeners +deepening +deepens +deeper +deepest +deeply +deepness +deepnesses +deeps +deepwater deer +deerberries +deerberry +deerflies +deerfly +deerhound +deerhounds +deerlike +deers +deerskin +deerskins +deerstalker +deerstalkers +deerweed +deerweeds +deeryard +deeryards +dees +deescalate +deescalated +deescalates +deescalating +deescalation +deescalations +deet +deets +deewan +deewans +deface +defaced +defacement +defacements +defacer +defacers +defaces +defacing +defalcate +defalcated +defalcates +defalcating +defalcation +defalcations +defalcator +defalcators +defamation +defamations +defamatory +defame +defamed +defamer +defamers +defames +defaming +defang +defanged +defanging +defangs +defat +defats +defatted +defatting +default +defaulted +defaulter +defaulters +defaulting +defaults +defeasance +defeasances +defeasibilities +defeasibility +defeasible defeat +defeated +defeater +defeaters +defeating +defeatism +defeatisms +defeatist +defeatists +defeats +defeature +defeatures +defecate +defecated +defecates +defecating +defecation +defecations +defect +defected +defecting +defection +defections +defective +defectively +defectiveness +defectivenesses +defectives +defector +defectors +defects +defeminization +defeminizations +defeminize +defeminized +defeminizes +defeminizing defence +defenceman +defencemen +defences defend +defendable +defendant +defendants +defended +defender +defenders +defending +defends +defenestrate +defenestrated +defenestrates +defenestrating +defenestration +defenestrations defense +defensed +defenseless +defenselessly +defenselessness +defenselessnesses +defenseman +defensemen +defenses +defensibilities +defensibility +defensible +defensibly +defensing +defensive +defensively +defensiveness +defensivenesses +defensives +defer +deference +deferences +deferent +deferential +deferentially +deferents +deferment +deferments +deferrable +deferrables +deferral +deferrals +deferred +deferrer +deferrers +deferring +defers +defervescence +defervescences +defi +defiance +defiances +defiant +defiantly +defibrillate +defibrillated +defibrillates +defibrillating +defibrillation +defibrillations +defibrillator +defibrillators +defibrinate +defibrinated +defibrinates +defibrinating +defibrination +defibrinations +deficiencies +deficiency +deficient +deficiently +deficients +deficit +deficits +defied +defier +defiers +defies +defilade +defiladed +defilades +defilading +defile +defiled +defilement +defilements +defiler +defilers +defiles +defiling +definable +definably +define +defined +definement +definements +definer +definers +defines +definienda +definiendum +definiens +definientia +defining +definite +definitely +definiteness +definitenesses +definition +definitional +definitions +definitive +definitively +definitiveness +definitivenesses +definitives +definitize +definitized +definitizes +definitizing +definitude +definitudes +defis +deflagrate +deflagrated +deflagrates +deflagrating +deflagration +deflagrations +deflate +deflated +deflater +deflaters +deflates +deflating +deflation +deflationary +deflations +deflator +deflators +deflea +defleaed +defleaing +defleas +deflect +deflectable +deflected +deflecting +deflection +deflections +deflective +deflector +deflectors +deflects +deflexed +defloration +deflorations +deflower +deflowered +deflowerer +deflowerers +deflowering +deflowers +defoam +defoamed +defoamer +defoamers +defoaming +defoams +defocus +defocused +defocuses +defocusing +defocussed +defocusses +defocussing +defog +defogged +defogger +defoggers +defogging +defogs +defoliant +defoliants +defoliate +defoliated +defoliates +defoliating +defoliation +defoliations +defoliator +defoliators +deforce +deforced +deforcement +deforcements +deforces +deforcing +deforest +deforestation +deforestations +deforested +deforesting +deforests +deform +deformable +deformalize +deformalized +deformalizes +deformalizing +deformation +deformational +deformations +deformative +deformed +deformer +deformers +deforming +deformities +deformity +deforms +defraud +defrauded +defrauder +defrauders +defrauding +defrauds +defray +defrayable +defrayal +defrayals +defrayed +defrayer +defrayers +defraying +defrays +defrock +defrocked +defrocking +defrocks +defrost +defrosted +defroster +defrosters +defrosting +defrosts +deft +defter +deftest +deftly +deftness +deftnesses +defunct +defund +defunded +defunding +defunds +defuse +defused +defuses +defusing +defuze +defuzed +defuzes +defuzing +defy +defying +degage +degame +degames +degami +degamis +degas +degases +degassed +degasser +degassers +degasses +degassing +degauss +degaussed +degausser +degaussers +degausses +degaussing +degeneracies +degeneracy +degenerate +degenerated +degenerately +degenerateness +degeneratenesses +degenerates +degenerating +degeneration +degenerations +degenerative +degerm +degermed +degerming +degerms +deglaciated +deglaciation +deglaciations +deglamorization +deglamorizations +deglamorize +deglamorized +deglamorizes +deglamorizing +deglaze +deglazed +deglazes +deglazing +deglutition +deglutitions +degradable +degradation +degradations +degradative +degrade +degraded +degradedly +degrader +degraders +degrades +degrading +degradingly +degranulation +degranulations +degrease +degreased +degreaser +degreasers +degreases +degreasing degree +degreed +degrees +degressive +degressively +degringolade +degringolades +degum +degummed +degumming +degums +degust +degustation +degustations +degusted +degusting +degusts +dehisce +dehisced +dehiscence +dehiscences +dehiscent +dehisces +dehiscing +dehorn +dehorned +dehorner +dehorners +dehorning +dehorns +dehort +dehorted +dehorting +dehorts +dehumanization +dehumanizations +dehumanize +dehumanized +dehumanizes +dehumanizing +dehumidification +dehumidifications +dehumidified +dehumidifier +dehumidifiers +dehumidifies +dehumidify +dehumidifying +dehydrate +dehydrated +dehydrates +dehydrating +dehydration +dehydrations +dehydrator +dehydrators +dehydrochlorinase +dehydrochlorinases +dehydrochlorinate +dehydrochlorinated +dehydrochlorinates +dehydrochlorinating +dehydrochlorination +dehydrochlorinations +dehydrogenase +dehydrogenases +dehydrogenate +dehydrogenated +dehydrogenates +dehydrogenating +dehydrogenation +dehydrogenations +deice +deiced +deicer +deicers +deices +deicidal +deicide +deicides +deicing +deictic +deific +deifical +deification +deifications +deified +deifier +deifiers +deifies +deiform +deify +deifying +deign +deigned +deigning +deigns +deil +deils +deindustrialization +deindustrializations +deindustrialize +deindustrialized +deindustrializes +deindustrializing +deinonychus +deinonychuses +deinstitutionalization +deinstitutionalizations +deinstitutionalize +deinstitutionalized +deinstitutionalizes +deinstitutionalizing +deionization +deionizations +deionize +deionized +deionizer +deionizers +deionizes +deionizing +deism +deisms +deist +deistic +deistical +deistically +deists +deities +deity +deixis +deixises +deject +dejecta +dejected +dejectedly +dejectedness +dejectednesses +dejecting +dejection +dejections +dejects +dejeuner +dejeuners +dekagram +dekagrams +dekaliter +dekaliters +dekameter +dekameters +dekametric +dekare +dekares +deke +deked +dekes +deking +dekko +dekkos +del +delaine +delaines +delaminate +delaminated +delaminates +delaminating +delamination +delaminations +delate +delated +delates +delating +delation +delations +delator +delators delay +delayed +delayer +delayers +delaying +delays +dele +delead +deleaded +deleading +deleads +deleave +deleaved +deleaves +deleaving +delectabilities +delectability +delectable +delectables +delectably +delectation +delectations +deled +delegable +delegacies +delegacy +delegate +delegated +delegatee +delegatees +delegates +delegating +delegation +delegations +delegator +delegators +delegitimation +delegitimations +deleing +deles delete +deleted +deleterious +deleteriously +deleteriousness +deleteriousnesses +deletes +deleting +deletion +deletions +delf +delfs +delft +delfts +delftware +delftwares +deli +deliberate +deliberated deliberately +deliberateness +deliberatenesses +deliberates +deliberating +deliberation +deliberations +deliberative +deliberatively +deliberativeness +deliberativenesses +delicacies +delicacy +delicate +delicately +delicates +delicatessen +delicatessens delicious +deliciously +deliciousness +deliciousnesses +delict +delicts delight delighted +delightedly +delightedness +delightednesses +delighter +delighters +delightful +delightfully +delightfulness +delightfulnesses +delighting +delights +delightsome +delime +delimed +delimes +deliming +delimit +delimitation +delimitations +delimited +delimiter +delimiters +delimiting +delimits +delineate +delineated +delineates +delineating +delineation +delineations +delineative +delineator +delineators +delinquencies +delinquency +delinquent +delinquently +delinquents +deliquesce +deliquesced +deliquescence +deliquescences +deliquescent +deliquesces +deliquescing +deliria +delirious +deliriously +deliriousness +deliriousnesses +delirium +deliriums +delis +delist +delisted +delisting +delists deliver +deliverabilities +deliverability +deliverable +deliverance +deliverances +delivered +deliverer +deliverers +deliveries +delivering +delivers +delivery +deliveryman +deliverymen +dell +dellies +dells +delly +delocalization +delocalizations +delocalize +delocalized +delocalizes +delocalizing +delouse +deloused +delouser +delousers +delouses +delousing +delphic +delphically +delphinium +delphiniums +dels +delta +deltaic +deltas +deltic +deltoid +deltoidei +deltoideus +deltoids +delude +deluded +deluder +deluders +deludes +deluding +deluge +deluged +deluges +deluging +delusion +delusional +delusionary +delusions +delusive +delusively +delusiveness +delusivenesses +delusory +deluster +delustered +delustering +delusters +deluxe +delve +delved +delver +delvers +delves +delving +demagnetization +demagnetizations +demagnetize +demagnetized +demagnetizer +demagnetizers +demagnetizes +demagnetizing +demagog +demagoged +demagogic +demagogically +demagogies +demagoging +demagogs +demagogue +demagogued +demagogueries +demagoguery +demagogues +demagoguing +demagogy demand +demandable +demandant +demandants +demanded +demander +demanders +demanding +demandingly +demandingness +demandingnesses +demands +demantoid +demantoids +demarcate +demarcated +demarcates +demarcating +demarcation +demarcations +demarche +demarches +demark +demarked +demarking +demarks +demast +demasted +demasting +demasts +dematerialization +dematerializations +dematerialize +dematerialized +dematerializes +dematerializing +deme +demean +demeaned +demeaning +demeanor +demeanors +demeanour +demeanours +demeans +dement +demented +dementedly +dementedness +dementednesses +dementia +demential +dementias +dementing +dements +demerara +demeraras +demerge +demerged +demerger +demergered +demergering +demergers +demerges +demerging +demerit +demerited +demeriting +demerits +demersal +demes +demesne +demesnes +demeton +demetons +demies +demigod +demigoddess +demigoddesses +demigods +demijohn +demijohns +demilitarization +demilitarizations +demilitarize +demilitarized +demilitarizes +demilitarizing +demilune +demilunes +demimondaine +demimondaines +demimonde +demimondes +demineralization +demineralizations +demineralize +demineralized +demineralizer +demineralizers +demineralizes +demineralizing +demirep +demireps +demise +demised +demisemiquaver +demisemiquavers +demises +demising +demission +demissions +demit +demitasse +demitasses +demits +demitted +demitting +demiurge +demiurges +demiurgic +demiurgical +demivolt +demivolts +demiworld +demiworlds +demo +demob +demobbed +demobbing +demobilization +demobilizations +demobilize +demobilized +demobilizes +demobilizing +demobs +democracies +democracy +democrat +democratic +democratically +democratization +democratizations +democratize +democratized +democratizer +democratizers +democratizes +democratizing +democrats +demode +demoded +demodulate +demodulated +demodulates +demodulating +demodulation +demodulations +demodulator +demodulators +demographer +demographers +demographic +demographical +demographically +demographics +demographies +demography +demoiselle +demoiselles +demolish +demolished +demolisher +demolishers +demolishes +demolishing +demolishment +demolishments +demolition +demolitionist +demolitionists +demolitions +demon +demoness +demonesses +demonetization +demonetizations +demonetize +demonetized +demonetizes +demonetizing +demoniac +demoniacal +demoniacally +demoniacs +demonian +demonic +demonical +demonically +demonise +demonised +demonises +demonising +demonism +demonisms +demonist +demonists +demonization +demonizations +demonize +demonized +demonizes +demonizing +demonological +demonologies +demonologist +demonologists +demonology +demons +demonstrabilities +demonstrability +demonstrable +demonstrably +demonstrate +demonstrated +demonstrates +demonstrating +demonstration +demonstrational +demonstrations +demonstrative +demonstratively +demonstrativeness +demonstrativenesses +demonstratives +demonstrator +demonstrators +demoralization +demoralizations +demoralize +demoralized +demoralizer +demoralizers +demoralizes +demoralizing +demoralizingly +demos +demoses +demote +demoted +demotes +demotic +demotics +demoting +demotion +demotions +demotist +demotists +demount +demountable +demounted +demounting +demounts +dempster +dempsters +demulcent +demulcents +demultiplexer +demultiplexers +demur +demure +demurely +demureness +demurenesses +demurer +demurest +demurrage +demurrages +demurral +demurrals +demurred +demurrer +demurrers +demurring +demurs +demy +demyelinating +demyelination +demyelinations +demystification +demystifications +demystified +demystifies +demystify +demystifying +demythologization +demythologizations +demythologize +demythologized +demythologizer +demythologizers +demythologizes +demythologizing +den +denarii +denarius +denary +denationalization +denationalizations +denationalize +denationalized +denationalizes +denationalizing +denaturalization +denaturalizations +denaturalize +denaturalized +denaturalizes +denaturalizing +denaturant +denaturants +denaturation +denaturations +denature +denatured +denatures +denaturing +denazification +denazifications +denazified +denazifies +denazify +denazifying +dendriform +dendrite +dendrites +dendritic +dendrochronological +dendrochronologically +dendrochronologies +dendrochronologist +dendrochronologists +dendrochronology +dendrogram +dendrograms +dendroid +dendrologic +dendrological +dendrologies +dendrologist +dendrologists +dendrology +dendron +dendrons +dene +denegation +denegations +denervate +denervated +denervates +denervating +denervation +denervations +denes +dengue +dengues +deniabilities +deniability +deniable +deniably +denial +denials +denied +denier +deniers +denies +denigrate +denigrated +denigrates +denigrating +denigration +denigrations +denigrative +denigrator +denigrators +denigratory +denim +denims +denitrification +denitrifications +denitrified +denitrifier +denitrifiers +denitrifies +denitrify +denitrifying +denizen +denizened +denizening +denizens +denned +denning +denominal +denominate +denominated +denominates +denominating +denomination +denominational +denominationalism +denominationalisms +denominations +denominative +denominatives +denominator +denominators +denotation +denotations +denotative +denote +denoted +denotement +denotements +denotes +denoting +denotive +denouement +denouements +denounce +denounced +denouncement +denouncements +denouncer +denouncers +denounces +denouncing +dens +dense +densely +denseness +densenesses +denser +densest +densification +densifications +densified +densifies +densify +densifying +densities +densitometer +densitometers +densitometric +densitometries +densitometry +density +dent +dental +dentalia +dentalium +dentally +dentals +dentate +dentated +dented +denticle +denticles +denticulate +denticulated +denticulation +denticulations +dentiform +dentifrice +dentifrices +dentil +dentiled +dentils +dentin +dentinal +dentine +dentines +denting +dentins dentist +dentistries +dentistry +dentists +dentition +dentitions +dentoid +dents +dentulous +dentural +denture +dentures +denturist +denturists +denuclearization +denuclearizations +denuclearize +denuclearized +denuclearizes +denuclearizing +denudate +denudated +denudates +denudating +denudation +denudations +denude +denuded +denudement +denudements +denuder +denuders +denudes +denuding +denumerabilities +denumerability +denumerable +denumerably +denunciation +denunciations +denunciative +denunciatory +deny +denying +denyingly +deodand +deodands +deodar +deodara +deodaras +deodars +deodorant +deodorants +deodorization +deodorizations +deodorize +deodorized +deodorizer +deodorizers +deodorizes +deodorizing +deontic +deontological +deontologies +deontologist +deontologists +deontology +deorbit +deorbited +deorbiting +deorbits +deoxidation +deoxidations +deoxidize +deoxidized +deoxidizer +deoxidizers +deoxidizes +deoxidizing +deoxy +deoxygenate +deoxygenated +deoxygenates +deoxygenating +deoxygenation +deoxygenations +deoxyribonuclease +deoxyribonucleases +deoxyribonucleotide +deoxyribonucleotides +deoxyribose +deoxyriboses +depaint +depainted +depainting +depaints +depart +departed +departee +departees +departing department +departmental +departmentalization +departmentalizations +departmentalize +departmentalized +departmentalizes +departmentalizing +departmentally +departments +departs departure +departures +depauperate depend +dependabilities +dependability +dependable +dependableness +dependablenesses +dependably +dependance +dependances +dependant +dependants +depended +dependence +dependences +dependencies +dependency +dependent +dependently +dependents +depending +depends +deperm +depermed +deperming +deperms +depersonalization +depersonalizations +depersonalize +depersonalized +depersonalizes +depersonalizing +dephosphorylate +dephosphorylated +dephosphorylates +dephosphorylating +dephosphorylation +dephosphorylations +depict +depicted +depicter +depicters +depicting +depiction +depictions +depictor +depictors +depicts +depigmentation +depigmentations +depilate +depilated +depilates +depilating +depilation +depilations +depilatories +depilatory +deplane +deplaned +deplanes +deplaning +depletable +deplete +depleted +depletes +depleting +depletion +depletions +depletive +deplorable +deplorableness +deplorablenesses +deplorably +deplore +deplored +deplorer +deplorers +deplores +deploring +deploringly +deploy +deployable +deployed +deploying +deployment +deployments +deploys +deplume +deplumed +deplumes +depluming +depolarization +depolarizations +depolarize +depolarized +depolarizer +depolarizers +depolarizes +depolarizing +depolish +depolished +depolishes +depolishing +depoliticization +depoliticizations +depoliticize +depoliticized +depoliticizes +depoliticizing +depolymerization +depolymerizations +depolymerize +depolymerized +depolymerizes +depolymerizing +depone +deponed +deponent +deponents +depones +deponing +depopulate +depopulated +depopulates +depopulating +depopulation +depopulations +deport +deportable +deportation +deportations +deported +deportee +deportees +deporting +deportment +deportments +deports +deposal +deposals +depose +deposed +deposer +deposers +deposes +deposing deposit -dept +depositaries +depositary +deposited +depositing +deposition +depositional +depositions +depositor +depositories +depositors +depository +deposits +depot +depots +depravation +depravations +deprave +depraved +depravedly +depravedness +depravednesses +depravement +depravements +depraver +depravers +depraves +depraving +depravities +depravity +deprecate +deprecated +deprecates +deprecating +deprecatingly +deprecation +deprecations +deprecatorily +deprecatory +depreciable +depreciate +depreciated +depreciates +depreciating +depreciatingly +depreciation +depreciations +depreciative +depreciator +depreciators +depreciatory +depredate +depredated +depredates +depredating +depredation +depredations +depredator +depredators +depredatory +depress +depressant +depressants +depressed +depresses +depressible +depressing +depressingly +depression +depressions +depressive +depressively +depressives +depressor +depressors +depressurization +depressurizations +depressurize +depressurized +depressurizes +depressurizing +deprival +deprivals +deprivation +deprivations +deprive +deprived +depriver +deprivers +deprives +depriving +deprogram +deprogramed +deprograming +deprogrammed +deprogrammer +deprogrammers +deprogramming +deprograms +depside +depsides depth +depthless +depths +depurate +depurated +depurates +depurating +deputation +deputations +depute +deputed +deputes +deputies +deputing +deputization +deputizations +deputize +deputized +deputizes +deputizing +deputy +deracinate +deracinated +deracinates +deracinating +deracination +deracinations +deraign +deraigned +deraigning +deraigns +derail +derailed +derailing +derailleur +derailleurs +derailment +derailments +derails +derange +deranged +derangement +derangements +deranges +deranging +derat +derate +derated +derates +derating +derats +deratted +deratting +deray +derays +derbies +derby +dere +derealization +derealizations +deregulate +deregulated +deregulates +deregulating +deregulation +deregulations +derelict +dereliction +derelictions +derelicts +derepress +derepressed +derepresses +derepressing +derepression +derepressions +deride +derided +derider +deriders +derides +deriding +deridingly +deringer +deringers +derision +derisions +derisive +derisively +derisiveness +derisivenesses +derisory +derivable +derivate +derivates +derivation +derivational +derivations +derivative +derivatively +derivativeness +derivativenesses +derivatives +derivatization +derivatizations +derivatize +derivatized +derivatizes +derivatizing +derive +derived +deriver +derivers +derives +deriving +derm +derma +dermabrasion +dermabrasions +dermal +dermas +dermatites +dermatitides +dermatitis +dermatitises +dermatogen +dermatogens +dermatoglyphic +dermatoglyphics +dermatologic +dermatological +dermatologies +dermatologist +dermatologists +dermatology +dermatomal +dermatome +dermatomes +dermatophyte +dermatophytes +dermatoses +dermatosis +dermestid +dermestids +dermic +dermis +dermises +dermoid +dermoids +derms +dernier +derogate +derogated +derogates +derogating +derogation +derogations +derogative +derogatively +derogatorily +derogatory +derrick +derricks +derriere +derrieres +derries +derringer +derringers +derris +derrises +derry +dervish +dervishes +desacralization +desacralizations +desacralize +desacralized +desacralizes +desacralizing +desalinate +desalinated +desalinates +desalinating +desalination +desalinations +desalinator +desalinators +desalinization +desalinizations +desalinize +desalinized +desalinizes +desalinizing +desalt +desalted +desalter +desalters +desalting +desalts +desand +desanded +desanding +desands +descant +descanted +descanting +descants +descend +descendant +descendants +descended +descendent +descendents +descender +descenders +descendible +descending +descends +descension +descensions +descent +descents +describable describe +described +describer +describers +describes +describing +descried +descrier +descriers +descries description +descriptions +descriptive +descriptively +descriptiveness +descriptivenesses +descriptor +descriptors +descry +descrying +desecrate +desecrated +desecrater +desecraters +desecrates +desecrating +desecration +desecrations +desecrator +desecrators +desegregate +desegregated +desegregates +desegregating +desegregation +desegregations +deselect +deselected +deselecting +deselects +desensitization +desensitizations +desensitize +desensitized +desensitizer +desensitizers +desensitizes +desensitizing desert +deserted +deserter +deserters +desertic +desertification +desertifications +deserting +desertion +desertions +deserts deserve +deserved +deservedly +deservedness +deservednesses +deserver +deservers +deserves +deserving +deservings +desex +desexed +desexes +desexing +desexualization +desexualizations +desexualize +desexualized +desexualizes +desexualizing +deshabille +deshabilles +desiccant +desiccants +desiccate +desiccated +desiccates +desiccating +desiccation +desiccations +desiccative +desiccator +desiccators +desiderata +desiderate +desiderated +desiderates +desiderating +desideration +desiderations +desiderative +desideratum design +designate +designated +designates +designating +designation +designations +designative +designator +designators +designatory +designed +designedly +designee +designees +designer +designers +designing +designment +designments +designs +desilver +desilvered +desilvering +desilvers +desinent +desipramine +desipramines +desirabilities +desirability +desirable +desirableness +desirablenesses +desirables +desirably desire +desired +desirer +desirers +desires +desiring +desirous +desirously +desirousness +desirousnesses +desist +desistance +desistances +desisted +desisting +desists desk +deskbound +deskman +deskmen +desks +desktop +desktops +desman +desmans +desmid +desmids +desmoid +desmoids +desmosomal +desmosome +desmosomes +desolate +desolated +desolately +desolateness +desolatenesses +desolater +desolaters +desolates +desolating +desolatingly +desolation +desolations +desolator +desolators +desorb +desorbed +desorbing +desorbs +desorption +desorptions +desoxy +despair +despaired +despairer +despairers +despairing +despairingly +despairs +despatch +despatched +despatches +despatching +desperado +desperadoes +desperados desperate +desperately +desperateness +desperatenesses +desperation +desperations +despicable +despicableness +despicablenesses +despicably +despiritualize +despiritualized +despiritualizes +despiritualizing +despise +despised +despisement +despisements +despiser +despisers +despises +despising +despite +despited +despiteful +despitefully +despitefulness +despitefulnesses +despiteous +despiteously +despites +despiting +despoil +despoiled +despoiler +despoilers +despoiling +despoilment +despoilments +despoils +despoliation +despoliations +despond +desponded +despondence +despondences +despondencies +despondency +despondent +despondently +desponding +desponds +despot +despotic +despotically +despotism +despotisms +despots +desquamate +desquamated +desquamates +desquamating +desquamation +desquamations dessert +desserts +dessertspoon +dessertspoonful +dessertspoonfuls +dessertspoons +dessertspoonsful +destabilization +destabilizations +destabilize +destabilized +destabilizes +destabilizing +destain +destained +destaining +destains destination +destinations +destine +destined +destines +destinies +destining +destiny +destitute +destituteness +destitutenesses +destitution +destitutions +destrier +destriers destroy +destroyed +destroyer +destroyers +destroying +destroys +destruct +destructed +destructibilities +destructibility +destructible +destructing +destruction +destructionist +destructionists +destructions +destructive +destructively +destructiveness +destructivenesses +destructivities +destructivity +destructs +desuetude +desuetudes +desugar +desugared +desugaring +desugars +desulfur +desulfured +desulfuring +desulfurization +desulfurizations +desulfurize +desulfurized +desulfurizes +desulfurizing +desulfurs +desultorily +desultoriness +desultorinesses +desultory +detach +detachabilities +detachability +detachable +detachably +detached +detachedly +detachedness +detachednesses +detacher +detachers +detaches +detaching +detachment +detachments +detail +detailed +detailedly +detailedness +detailednesses +detailer +detailers +detailing +details +detain +detained +detainee +detainees +detainer +detainers +detaining +detainment +detainments +detains +detassel +detasseled +detasseling +detasselled +detasselling +detassels +detect +detectabilities +detectability +detectable +detected +detecter +detecters +detecting +detection +detections detective +detectivelike +detectives +detector +detectors +detects +detent +detente +detentes +detention +detentions +detents +deter +deterge +deterged +detergencies +detergency +detergent +detergents +deterger +detergers +deterges +deterging +deteriorate +deteriorated +deteriorates +deteriorating +deterioration +deteriorations +deteriorative +determent +determents +determinable +determinableness +determinablenesses +determinably +determinacies +determinacy +determinant +determinantal +determinants +determinate +determinately +determinateness +determinatenesses +determination +determinations +determinative +determinatives +determinator +determinators determine +determined +determinedly +determinedness +determinednesses +determiner +determiners +determines +determining +determinism +determinisms +determinist +deterministic +deterministically +determinists +deterrabilities +deterrability +deterrable +deterred +deterrence +deterrences +deterrent +deterrently +deterrents +deterrer +deterrers +deterring +deters +detersive +detersives +detest +detestable +detestableness +detestablenesses +detestably +detestation +detestations +detested +detester +detesters +detesting +detests +dethrone +dethroned +dethronement +dethronements +dethroner +dethroners +dethrones +dethroning +detick +deticked +deticker +detickers +deticking +deticks +detinue +detinues +detonabilities +detonability +detonable +detonatable +detonate +detonated +detonates +detonating +detonation +detonations +detonative +detonator +detonators +detour +detoured +detouring +detours +detox +detoxed +detoxes +detoxicant +detoxicants +detoxicate +detoxicated +detoxicates +detoxicating +detoxication +detoxications +detoxification +detoxifications +detoxified +detoxifies +detoxify +detoxifying +detoxing +detract +detracted +detracting +detraction +detractions +detractive +detractively +detractor +detractors +detracts +detrain +detrained +detraining +detrainment +detrainments +detrains +detribalization +detribalizations +detribalize +detribalized +detribalizes +detribalizing +detriment +detrimental +detrimentally +detrimentals +detriments +detrital +detrition +detritions +detritus +detrude +detruded +detrudes +detruding +detumescence +detumescences +detumescent +deuce +deuced +deucedly +deuces +deucing +deuteragonist +deuteragonists +deuteranomalies +deuteranomalous +deuteranomaly +deuteranope +deuteranopes +deuteranopia +deuteranopias +deuteranopic +deuterate +deuterated +deuterates +deuterating +deuteration +deuterations +deuteric +deuterium +deuteriums +deuterocanonical +deuteron +deuterons +deuterostome +deuterostomes +deutoplasm +deutoplasms +deutzia +deutzias +dev +deva +devaluate +devaluated +devaluates +devaluating +devaluation +devaluations +devalue +devalued +devalues +devaluing +devas +devastate +devastated +devastates +devastating +devastatingly +devastation +devastations +devastative +devastator +devastators +devein +deveined +deveining +deveins +devel +develed +develing develop +developable +develope +developed +developer +developers +developes +developing development +developmental +developmentally +developments +develops +devels +deverbal +deverbative +deverbatives +devest +devested +devesting +devests +deviance +deviances +deviancies +deviancy +deviant +deviants +deviate +deviated +deviates +deviating +deviation +deviationism +deviationisms +deviationist +deviationists +deviations +deviator +deviators +deviatory +device +devices +devil +deviled +devilfish +devilfishes +deviling +devilish +devilishly +devilishness +devilishnesses +devilkin +devilkins +devilled +devilling +devilment +devilments +devilries +devilry +devils +deviltries +deviltry +devilwood +devilwoods +devious +deviously +deviousness +deviousnesses +devisable +devisal +devisals +devise +devised +devisee +devisees +deviser +devisers +devises +devising +devisor +devisors +devitalize +devitalized +devitalizes +devitalizing +devitrification +devitrifications +devitrified +devitrifies +devitrify +devitrifying +devocalize +devocalized +devocalizes +devocalizing +devoice +devoiced +devoices +devoicing +devoid +devoir +devoirs +devolution +devolutionary +devolutionist +devolutionists +devolutions +devolve +devolved +devolves +devolving +devon +devons devote +devoted +devotedly +devotedness +devotednesses +devotee +devotees +devotement +devotements +devotes +devoting devotion +devotional +devotionally +devotionals +devotions +devour +devoured +devourer +devourers +devouring +devours +devout +devouter +devoutest +devoutly +devoutness +devoutnesses +devs +dew +dewan +dewans +dewar +dewars +dewater +dewatered +dewaterer +dewaterers +dewatering +dewaters +dewax +dewaxed +dewaxes +dewaxing +dewberries +dewberry +dewclaw +dewclaws +dewdrop +dewdrops +dewed +dewfall +dewfalls +dewier +dewiest +dewily +dewiness +dewinesses +dewing +dewlap +dewlapped +dewlaps +dewless +dewool +dewooled +dewooling +dewools +deworm +dewormed +dewormer +dewormers +deworming +deworms +dews +dewy +dex +dexamethasone +dexamethasones +dexes +dexie +dexies +dexter +dexterities +dexterity +dexterous +dexterously +dexterousness +dexterousnesses +dextral +dextran +dextranase +dextranases +dextrans +dextrin +dextrine +dextrines +dextrins +dextro +dextroamphetamine +dextroamphetamines +dextrorotary +dextrorotatory +dextrose +dextroses +dextrous +dexy +dey +deys +dezinc +dezinced +dezincing +dezincked +dezincking +dezincs +dhak +dhaks +dhal +dhals +dharma +dharmas +dharmic +dharna +dharnas +dhobi +dhobis +dhole +dholes +dhoolies +dhooly +dhoora +dhooras +dhooti +dhootie +dhooties +dhootis +dhoti +dhotis +dhourra +dhourras +dhow +dhows +dhurna +dhurnas +dhurrie +dhurries +dhuti +dhutis +diabase +diabases +diabasic +diabetes +diabetic +diabetics +diabetogenic +diabetologist +diabetologists +diablerie +diableries +diablery +diabolic +diabolical +diabolically +diabolicalness +diabolicalnesses +diabolism +diabolisms +diabolist +diabolists +diabolize +diabolized +diabolizes +diabolizing +diabolo +diabolos +diacetyl +diacetyls +diachronic +diachronically +diachronies +diachrony +diacid +diacidic +diacids +diaconal +diaconate +diaconates +diacritic +diacritical +diacritics +diadelphous +diadem +diademed +diademing +diadems +diadromous +diaereses +diaeresis +diaeretic +diageneses +diagenesis +diagenetic +diagenetically +diageotropic +diagnosable +diagnose +diagnoseable +diagnosed +diagnoses +diagnosing +diagnosis +diagnostic +diagnostical +diagnostically +diagnostician +diagnosticians +diagnostics +diagonal +diagonalizable +diagonalization +diagonalizations +diagonalize +diagonalized +diagonalizes +diagonalizing +diagonally +diagonals diagram +diagramed +diagraming +diagrammable +diagrammatic +diagrammatical +diagrammatically +diagrammed +diagramming +diagrams +diagraph +diagraphs +diakineses +diakinesis dial +dialect +dialectal +dialectally +dialectic +dialectical +dialectically +dialectician +dialecticians +dialectics +dialectological +dialectologically +dialectologies +dialectologist +dialectologists +dialectology +dialects +dialed +dialer +dialers +dialing +dialings +dialist +dialists +diallage +diallages +dialled +diallel +dialler +diallers +dialling +diallings +diallist +diallists dialog +dialoged +dialoger +dialogers +dialogic +dialogical +dialogically +dialoging +dialogist +dialogistic +dialogists +dialogs dialogue +dialogued +dialogues +dialoguing +dials +dialysate +dialysates +dialyse +dialysed +dialyser +dialysers +dialyses +dialysing +dialysis +dialytic +dialyzable +dialyzate +dialyzates +dialyze +dialyzed +dialyzer +dialyzers +dialyzes +dialyzing +diamagnetic +diamagnetism +diamagnetisms +diamante +diamantes +diameter +diameters +diametral +diametric +diametrical +diametrically +diamide +diamides +diamin +diamine +diamines +diamins diamond +diamondback +diamondbacks +diamonded +diamondiferous +diamonding +diamonds +dianthus +dianthuses +diapason +diapasons +diapause +diapaused +diapauses +diapausing +diapedeses +diapedesis +diaper +diapered +diapering +diapers +diaphaneities +diaphaneity +diaphanous +diaphanously +diaphanousness +diaphanousnesses +diaphone +diaphones +diaphonies +diaphony +diaphorase +diaphorases +diaphoreses +diaphoresis +diaphoretic +diaphoretics +diaphragm +diaphragmatic +diaphragmatically +diaphragms +diaphyseal +diaphyses +diaphysial +diaphysis +diapir +diapiric +diapirs +diapositive +diapositives +diapsid +diarchic +diarchies +diarchy +diaries +diarist +diarists +diarrhea +diarrheal +diarrheas +diarrheic +diarrhetic +diarrhoea +diarrhoeas +diarthroses +diarthrosis diary +diaspora +diasporas +diaspore +diaspores +diastase +diastases +diastatic +diastem +diastema +diastemata +diastems +diaster +diastereoisomer +diastereoisomeric +diastereoisomerism +diastereoisomerisms +diastereoisomers +diastereomer +diastereomeric +diastereomers +diasters +diastole +diastoles +diastolic +diastral +diastrophic +diastrophically +diastrophism +diastrophisms +diatessaron +diatessarons +diathermanous +diathermic +diathermies +diathermy +diatheses +diathesis +diathetic +diatom +diatomaceous +diatomic +diatomite +diatomites +diatoms +diatonic +diatonically +diatribe +diatribes +diatron +diatrons +diazepam +diazepams +diazin +diazine +diazines +diazinon +diazinons +diazins +diazo +diazole +diazoles +diazonium +diazoniums +diazotization +diazotizations +diazotize +diazotized +diazotizes +diazotizing +dib +dibasic +dibbed +dibber +dibbers +dibbing +dibble +dibbled +dibbler +dibblers +dibbles +dibbling +dibbuk +dibbukim +dibbuks +dibenzofuran +dibenzofurans +dibs +dicarboxylic +dicast +dicastic +dicasts +dice +diced +dicentra +dicentras +dicentric +dicentrics +dicer +dicers +dices +dicey +dichasia +dichasium +dichlorobenzene +dichlorobenzenes +dichlorodifluoromethane +dichlorodifluoromethanes +dichloroethane +dichloroethanes +dichlorvos +dichlorvoses +dichogamies +dichogamous +dichogamy +dichondra +dichondras +dichotic +dichotically +dichotomies +dichotomist +dichotomists +dichotomization +dichotomizations +dichotomize +dichotomized +dichotomizes +dichotomizing +dichotomous +dichotomously +dichotomousness +dichotomousnesses +dichotomy +dichroic +dichroism +dichroisms +dichromat +dichromate +dichromates +dichromatic +dichromatism +dichromatisms +dichromats +dichroscope +dichroscopes +dicier +diciest +dicing +dick +dickcissel +dickcissels +dicked +dickens +dickenses +dicker +dickered +dickering +dickers +dickey +dickeys +dickie +dickier +dickies +dickiest +dicking +dicks +dicky +diclinies +diclinous +dicliny +dicot +dicots +dicotyl +dicotyledon +dicotyledonous +dicotyledons +dicotyls +dicoumarin +dicoumarins +dicoumarol +dicoumarols +dicrotal +dicrotic +dicrotism +dicrotisms +dicta +dictate +dictated +dictates +dictating dictation +dictations +dictator +dictatorial +dictatorially +dictatorialness +dictatorialnesses +dictators +dictatorship +dictatorships +dictier +dictiest +diction +dictional +dictionally +dictionaries dictionary +dictions +dictum +dictums +dicty +dictyosome +dictyosomes +dictyostele +dictyosteles +dicumarol +dicumarols +dicyclic +dicyclies +dicycly +dicynodont +dicynodonts +did +didact +didactic +didactical +didactically +didacticism +didacticisms +didactics +didacts +didactyl +didapper +didappers +diddle +diddled +diddler +diddlers +diddles +diddley +diddleys +diddlies +diddling +diddly +diddlysquat +didgeridoo +didgeridoos +didie +didies +didjeridoo +didjeridoos +dido +didoes +didos +didst +didy +didymium +didymiums +didymous +didynamies +didynamy die +dieback +diebacks +diecious +died +dieffenbachia +dieffenbachias +diehard +diehards +dieing +diel +dieldrin +dieldrins +dielectric +dielectrics +diemaker +diemakers +diencephala +diencephalic +diencephalon +diencephalons +diene +dienes +diereses +dieresis +dieretic +dies +diesel +dieseled +dieseling +dieselings +dieselization +dieselizations +dieselize +dieselized +dieselizes +dieselizing +diesels +dieses +diesis +diester +diesters +diestock +diestocks +diestrous +diestrum +diestrums +diestrus +diestruses diet +dietaries +dietarily +dietary +dieted +dieter +dieters +dietetic +dietetically +dietetics +diether +diethers +diethylcarbamazine +diethylcarbamazines +diethylstilbestrol +diethylstilbestrols +dietician +dieticians +dieting +dietitian +dietitians +diets differ +differed difference +differenced +differences +differencing different +differentia +differentiabilities +differentiability +differentiable +differentiae +differential +differentially +differentials +differentiate +differentiated +differentiates +differentiating +differentiation +differentiations +differently +differentness +differentnesses +differing +differs +difficile difficult +difficulties +difficultly difficulty +diffidence +diffidences +diffident +diffidently +diffract +diffracted +diffracting +diffraction +diffractions +diffractometer +diffractometers +diffractometric +diffractometries +diffractometry +diffracts +diffuse +diffused +diffusely +diffuseness +diffusenesses +diffuser +diffusers +diffuses +diffusible +diffusing +diffusion +diffusional +diffusionism +diffusionisms +diffusionist +diffusionists +diffusions +diffusive +diffusively +diffusiveness +diffusivenesses +diffusivities +diffusivity +diffusor +diffusors +difunctional dig +digamies +digamist +digamists +digamma +digammas +digamous +digamy +digastric +digenetic digest +digested +digester +digesters +digestibilities +digestibility +digestible +digesting +digestion +digestions +digestive +digestively +digestives +digestor +digestors +digests +digged +digger +diggers +digging +diggings +dight +dighted +dighting +dights +digit digital +digitalin +digitalins +digitalis +digitalises +digitalization +digitalizations +digitalize +digitalized +digitalizes +digitalizing +digitally +digitals +digitate +digitately +digitigrade +digitization +digitizations +digitize +digitized +digitizer +digitizers +digitizes +digitizing +digitonin +digitonins +digitoxigenin +digitoxigenins +digitoxin +digitoxins +digits +diglot +diglots +diglyceride +diglycerides +dignified +dignifies +dignify +dignifying +dignitaries +dignitary +dignities dignity +digoxin +digoxins +digraph +digraphic +digraphically +digraphs +digress +digressed +digresses +digressing +digression +digressional +digressionary +digressions +digressive +digressively +digressiveness +digressivenesses +digs +dihedral +dihedrals +dihedron +dihedrons +dihybrid +dihybrids +dihydric +dihydroergotamine +dihydroergotamines +dihydroxyacetone +dihydroxyacetones +dikdik +dikdiks +dike +diked +diker +dikers +dikes +dikey +diking +diktat +diktats +dilapidate +dilapidated +dilapidates +dilapidating +dilapidation +dilapidations +dilatabilities +dilatability +dilatable +dilatancies +dilatancy +dilatant +dilatants +dilatate +dilatation +dilatational +dilatations +dilate +dilated +dilater +dilaters +dilates +dilating +dilation +dilations +dilative +dilatometer +dilatometers +dilatometric +dilatometries +dilatometry +dilator +dilatorily +dilatoriness +dilatorinesses +dilators +dilatory +dildo +dildoe +dildoes +dildos dilemma +dilemmas +dilemmatic +dilemmic +dilettante +dilettantes +dilettanti +dilettantish +dilettantism +dilettantisms +diligence +diligences +diligent +diligently +dill +dilled +dillies +dills +dilly +dillydallied +dillydallies +dillydally +dillydallying +diluent +diluents +dilute +diluted +diluteness +dilutenesses +diluter +diluters +dilutes +diluting +dilution +dilutions +dilutive +dilutor +dilutors +diluvia +diluvial +diluvian +diluvion +diluvions +diluvium +diluviums +dim +dime +dimenhydrinate +dimenhydrinates dimension +dimensional +dimensionalities +dimensionality +dimensionally +dimensioned +dimensioning +dimensionless +dimensions +dimer +dimercaprol +dimercaprols +dimeric +dimerism +dimerisms +dimerization +dimerizations +dimerize +dimerized +dimerizes +dimerizing +dimerous +dimers +dimes +dimeter +dimeters +dimethoate +dimethoates +dimethyl +dimethylhydrazine +dimethylhydrazines +dimethylnitrosamine +dimethylnitrosamines +dimethyls +dimethyltryptamine +dimethyltryptamines +dimetric +diminish +diminishable +diminished +diminishes +diminishing +diminishment +diminishments +diminuendo +diminuendos +diminution +diminutions +diminutive +diminutively +diminutiveness +diminutivenesses +diminutives +dimities +dimity +dimly +dimmable +dimmed +dimmer +dimmers +dimmest +dimming +dimness +dimnesses +dimorph +dimorphic +dimorphism +dimorphisms +dimorphous +dimorphs +dimout +dimouts +dimple +dimpled +dimples +dimplier +dimpliest +dimpling +dimply +dims +dimwit +dimwits +dimwitted +din +dinar +dinars +dindle +dindled +dindles +dindling +dine +dined +diner +dineric +dinero +dineros +diners +dines +dinette +dinettes +ding +dingbat +dingbats +dingdong +dingdonged +dingdonging +dingdongs +dinge +dinged +dinger +dingers +dinges +dingey +dingeys +dinghies +dinghy +dingier +dingies +dingiest +dingily +dinginess +dinginesses +dinging +dingle +dingleberries +dingleberry +dingles +dingo +dingoes +dings +dingus +dinguses +dingy +dining +dinitro +dinitrobenzene +dinitrobenzenes +dinitrophenol +dinitrophenols +dink +dinked +dinkey +dinkeys +dinkier +dinkies +dinkiest +dinking +dinkly +dinks +dinkum +dinkums +dinky +dinned dinner +dinnerless +dinners +dinnertime +dinnertimes +dinnerware +dinnerwares +dinning +dinoflagellate +dinoflagellates dinosaur +dinosaurian +dinosaurs +dins +dint +dinted +dinting +dints +dinucleotide +dinucleotides +diobol +diobolon +diobolons +diobols +diocesan +diocesans +diocese +dioceses +diode +diodes +dioecies +dioecious +dioecism +dioecisms +dioecy +dioicous +diol +diolefin +diolefins +diols +diopside +diopsides +diopsidic +dioptase +dioptases +diopter +diopters +dioptral +dioptre +dioptres +dioptric +diorama +dioramas +dioramic +diorite +diorites +dioritic +dioxan +dioxane +dioxanes +dioxans +dioxid dioxide +dioxides +dioxids +dioxin +dioxins dip +dipeptidase +dipeptidases +dipeptide +dipeptides +diphase +diphasic +diphenhydramine +diphenhydramines +diphenyl +diphenylamine +diphenylamines +diphenylhydantoin +diphenylhydantoins +diphenyls +diphosgene +diphosgenes +diphosphate +diphosphates +diphtheria +diphtherial +diphtherias +diphtheritic +diphtheroid +diphtheroids +diphthong +diphthongal +diphthongization +diphthongizations +diphthongize +diphthongized +diphthongizes +diphthongizing +diphthongs +diphyletic +diphyodont +diplegia +diplegias +diplex +diplexer +diplexers +diploblastic +diplococci +diplococcus +diplodocus +diplodocuses +diploe +diploes +diploic +diploid +diploidies +diploids +diploidy diploma +diplomacies +diplomacy +diplomaed +diplomaing +diplomas +diplomat +diplomata +diplomate +diplomates +diplomatic +diplomatically +diplomatist +diplomatists +diplomats +diplont +diplontic +diplonts +diplophase +diplophases +diplopia +diplopias +diplopic +diplopod +diplopods +diploses +diplosis +diplotene +diplotenes +dipnet +dipnets +dipnetted +dipnetting +dipnoan +dipnoans +dipodic +dipodies +dipody +dipolar +dipole +dipoles +dippable +dipped +dipper +dipperful +dipperfuls +dippers +dippier +dippiest +dipping +dippy +dips +dipsades +dipsas +dipso +dipsomania +dipsomaniac +dipsomaniacal +dipsomaniacs +dipsomanias +dipsos +dipstick +dipsticks +dipt +diptera +dipteral +dipteran +dipterans +dipterocarp +dipterocarps +dipteron +dipterous +diptyca +diptycas +diptych +diptychs +diquat +diquats +dirdum +dirdums +dire direct +directed +directedness +directednesses +directer +directest +directing direction +directional +directionalities +directionality +directionless +directionlessness +directionlessnesses +directions +directive +directives +directivities +directivity +directly +directness +directnesses director +directorate +directorates +directorial +directories +directors +directorship +directorships directory +directress +directresses +directrice +directrices +directrix +directrixes +directs +direful +direfully +direly +direness +direnesses +direr +direst +dirge +dirgeful +dirgelike +dirges +dirham +dirhams +dirigible +dirigibles +dirigisme +dirigismes +dirigiste +diriment +dirk +dirked +dirking +dirks +dirl +dirled +dirling +dirls +dirndl +dirndls dirt +dirtbag +dirtbags +dirtied +dirtier +dirties +dirtiest +dirtily +dirtiness +dirtinesses +dirts dirty +dirtying +dis +disabilities disability +disable disabled +disablement +disablements +disables +disabling +disabuse +disabused +disabuses +disabusing +disaccharidase +disaccharidases +disaccharide +disaccharides +disaccord +disaccorded +disaccording +disaccords +disaccustom +disaccustomed +disaccustoming +disaccustoms disadvantage +disadvantaged +disadvantagedness +disadvantagednesses +disadvantageous +disadvantageously +disadvantageousness +disadvantageousnesses +disadvantages +disadvantaging +disaffect +disaffected +disaffecting +disaffection +disaffections +disaffects +disaffiliate +disaffiliated +disaffiliates +disaffiliating +disaffiliation +disaffiliations +disaffirm +disaffirmance +disaffirmances +disaffirmed +disaffirming +disaffirms +disaggregate +disaggregated +disaggregates +disaggregating +disaggregation +disaggregations +disaggregative disagree +disagreeable +disagreeableness +disagreeablenesses +disagreeably +disagreed +disagreeing disagreement +disagreements +disagrees +disallow +disallowance +disallowances +disallowed +disallowing +disallows +disambiguate +disambiguated +disambiguates +disambiguating +disambiguation +disambiguations +disannul +disannulled +disannulling +disannuls disappear +disappearance +disappearances +disappeared +disappearing +disappears disappoint disappointed +disappointedly +disappointing +disappointingly +disappointment +disappointments +disappoints +disapprobation +disapprobations +disapproval +disapprovals +disapprove +disapproved +disapprover +disapprovers +disapproves +disapproving +disapprovingly +disarm +disarmament +disarmaments +disarmed +disarmer +disarmers +disarming +disarmingly +disarms +disarrange +disarranged +disarrangement +disarrangements +disarranges +disarranging +disarray +disarrayed +disarraying +disarrays +disarticulate +disarticulated +disarticulates +disarticulating +disarticulation +disarticulations +disassemble +disassembled +disassembles +disassemblies +disassembling +disassembly +disassociate +disassociated +disassociates +disassociating +disassociation +disassociations disaster +disasters +disastrous +disastrously +disavow +disavowable +disavowal +disavowals +disavowed +disavowing +disavows +disband +disbanded +disbanding +disbandment +disbandments +disbands +disbar +disbarment +disbarments +disbarred +disbarring +disbars +disbelief +disbeliefs +disbelieve +disbelieved +disbeliever +disbelievers +disbelieves +disbelieving +disbenefit +disbenefits +disbosom +disbosomed +disbosoming +disbosoms +disbound +disbowel +disboweled +disboweling +disbowelled +disbowelling +disbowels +disbud +disbudded +disbudding +disbuds +disburden +disburdened +disburdening +disburdenment +disburdenments +disburdens +disburse +disbursed +disbursement +disbursements +disburser +disbursers +disburses +disbursing disc +discalced +discant +discanted +discanting +discants +discard +discardable +discarded +discarder +discarders +discarding +discards +discarnate +discase +discased +discases +discasing +disced +discept +discepted +discepting +discepts +discern +discernable +discerned +discerner +discerners +discernible +discernibly +discerning +discerningly +discernment +discernments +discerns +discharge +dischargeable +discharged +dischargee +dischargees +discharger +dischargers +discharges +discharging +disci +disciform +discing +disciple +discipled +disciples +discipleship +discipleships +disciplinable +disciplinal +disciplinarian +disciplinarians +disciplinarily +disciplinarities +disciplinarity +disciplinary +discipline +disciplined +discipliner +discipliners +disciplines +discipling +disciplining +disclaim +disclaimed +disclaimer +disclaimers +disclaiming +disclaims +disclamation +disclamations +disclike +disclimax +disclimaxes +disclose +disclosed +discloser +disclosers +discloses +disclosing +disclosure +disclosures +disco +discoed +discographer +discographers +discographic +discographical +discographies +discography +discoid +discoidal +discoids +discoing +discolor +discoloration +discolorations +discolored +discoloring +discolors +discombobulate +discombobulated +discombobulates +discombobulating +discombobulation +discombobulations +discomfit +discomfited +discomfiting +discomfits +discomfiture +discomfitures +discomfort +discomfortable +discomforted +discomforting +discomforts +discommend +discommended +discommending +discommends +discommode +discommoded +discommodes +discommoding +discompose +discomposed +discomposes +discomposing +discomposure +discomposures +disconcert +disconcerted +disconcerting +disconcertingly +disconcertment +disconcertments +disconcerts +disconfirm +disconfirmed +disconfirming +disconfirms +disconformities +disconformity +disconnect +disconnected +disconnectedly +disconnectedness +disconnectednesses +disconnecting +disconnection +disconnections +disconnects +disconsolate +disconsolately +disconsolateness +disconsolatenesses +disconsolation +disconsolations +discontent +discontented +discontentedly +discontentedness +discontentednesses +discontenting +discontentment +discontentments +discontents +discontinuance +discontinuances +discontinuation +discontinuations +discontinue +discontinued +discontinues +discontinuing +discontinuities +discontinuity +discontinuous +discontinuously +discophile +discophiles +discord +discordance +discordances +discordancies +discordancy +discordant +discordantly +discorded +discording +discords +discos +discotheque +discotheques discount +discountable +discounted +discountenance +discountenanced +discountenances +discountenancing +discounter +discounters +discounting +discounts discourage +discourageable +discouraged +discouragement +discouragements +discourager +discouragers +discourages +discouraging +discouragingly +discourse +discoursed +discourser +discoursers +discourses +discoursing +discourteous +discourteously +discourteousness +discourteousnesses +discourtesies +discourtesy discover +discoverable +discovered +discoverer +discoverers +discoveries +discovering +discovers discovery +discredit +discreditable +discreditably +discredited +discrediting +discredits +discreet +discreeter +discreetest +discreetly +discreetness +discreetnesses +discrepancies +discrepancy +discrepant +discrepantly +discrete +discretely +discreteness +discretenesses +discretion +discretionary +discretions +discriminabilities +discriminability +discriminable +discriminably +discriminant +discriminants +discriminate +discriminated +discriminates +discriminating +discriminatingly discrimination +discriminational +discriminations +discriminative +discriminator +discriminatorily +discriminators +discriminatory +discrown +discrowned +discrowning +discrowns +discs +discursive +discursively +discursiveness +discursivenesses +discus +discuses discuss +discussable +discussant +discussants +discussed +discusser +discussers +discusses +discussible +discussing discussion +discussions +disdain +disdained +disdainful +disdainfully +disdainfulness +disdainfulnesses +disdaining +disdains disease +diseased +diseases +diseasing +diseconomies +diseconomy +disembark +disembarkation +disembarkations +disembarked +disembarking +disembarks +disembarrass +disembarrassed +disembarrasses +disembarrassing +disembodied +disembodies +disembody +disembodying +disembogue +disembogued +disembogues +disemboguing +disembowel +disemboweled +disemboweling +disembowelled +disembowelling +disembowelment +disembowelments +disembowels +disenchant +disenchanted +disenchanter +disenchanters +disenchanting +disenchantingly +disenchantment +disenchantments +disenchants +disencumber +disencumbered +disencumbering +disencumbers +disendow +disendowed +disendower +disendowers +disendowing +disendowment +disendowments +disendows +disenfranchise +disenfranchised +disenfranchisement +disenfranchisements +disenfranchises +disenfranchising +disengage +disengaged +disengagement +disengagements +disengages +disengaging +disentail +disentailed +disentailing +disentails +disentangle +disentangled +disentanglement +disentanglements +disentangles +disentangling +disenthral +disenthrall +disenthralled +disenthralling +disenthralls +disenthrals +disentitle +disentitled +disentitles +disentitling +disequilibrate +disequilibrated +disequilibrates +disequilibrating +disequilibration +disequilibrations +disequilibria +disequilibrium +disequilibriums +disestablish +disestablished +disestablishes +disestablishing +disestablishment +disestablishmentarian +disestablishmentarians +disestablishments +disesteem +disesteemed +disesteeming +disesteems +diseuse +diseuses +disfavor +disfavored +disfavoring +disfavors +disfigure +disfigured +disfigurement +disfigurements +disfigures +disfiguring +disfranchise +disfranchised +disfranchisement +disfranchisements +disfranchises +disfranchising +disfrock +disfrocked +disfrocking +disfrocks +disfunction +disfunctional +disfunctions +disfurnish +disfurnished +disfurnishes +disfurnishing +disfurnishment +disfurnishments +disgorge +disgorged +disgorges +disgorging +disgrace +disgraced +disgraceful +disgracefully +disgracefulness +disgracefulnesses +disgracer +disgracers +disgraces +disgracing +disgruntle +disgruntled +disgruntlement +disgruntlements +disgruntles +disgruntling +disguise +disguised +disguisedly +disguisement +disguisements +disguiser +disguisers +disguises +disguising +disgust +disgusted +disgustedly +disgustful +disgustfully disgusting +disgustingly +disgusts dish +dishabille +dishabilles +disharmonies +disharmonious +disharmonize +disharmonized +disharmonizes +disharmonizing +disharmony +dishcloth +dishcloths +dishclout +dishclouts +dishearten +disheartened +disheartening +dishearteningly +disheartenment +disheartenments +disheartens +dished +dishelm +dishelmed +dishelming +dishelms +disherit +disherited +disheriting +disherits +dishes +dishevel +disheveled +disheveling +dishevelled +dishevelling +dishevels +dishful +dishfuls +dishier +dishiest +dishing +dishlike +dishonest +dishonesties +dishonestly +dishonesty +dishonor +dishonorable +dishonorableness +dishonorablenesses +dishonorably +dishonored +dishonorer +dishonorers +dishonoring +dishonors +dishpan +dishpans +dishrag +dishrags +dishtowel +dishtowels +dishware +dishwares +dishwasher +dishwashers +dishwater +dishwaters +dishy +disillusion +disillusioned +disillusioning +disillusionment +disillusionments +disillusions +disincentive +disincentives +disinclination +disinclinations +disincline +disinclined +disinclines +disinclining +disinfect +disinfectant +disinfectants +disinfected +disinfecting +disinfection +disinfections +disinfects +disinfest +disinfestant +disinfestants +disinfestation +disinfestations +disinfested +disinfesting +disinfests +disinflation +disinflationary +disinflations +disinformation +disinformations +disingenuous +disingenuously +disingenuousness +disingenuousnesses +disinherit +disinheritance +disinheritances +disinherited +disinheriting +disinherits +disinhibit +disinhibited +disinhibiting +disinhibition +disinhibitions +disinhibits +disintegrate +disintegrated +disintegrates +disintegrating +disintegration +disintegrations +disintegrative +disintegrator +disintegrators +disinter +disinterest +disinterested +disinterestedly +disinterestedness +disinterestednesses +disinteresting +disinterests +disintermediation +disintermediations +disinterment +disinterments +disinterred +disinterring +disinters +disintoxicate +disintoxicated +disintoxicates +disintoxicating +disintoxication +disintoxications +disinvest +disinvested +disinvesting +disinvestment +disinvestments +disinvests +disinvite +disinvited +disinvites +disinviting +disject +disjected +disjecting +disjects +disjoin +disjoined +disjoining +disjoins +disjoint +disjointed +disjointedly +disjointedness +disjointednesses +disjointing +disjoints +disjunct +disjunction +disjunctions +disjunctive +disjunctively +disjunctives +disjuncts +disjuncture +disjunctures disk +disked +diskette +diskettes +disking +disklike +disks +dislikable dislike +dislikeable +disliked +disliker +dislikers +dislikes +disliking +dislimn +dislimned +dislimning +dislimns +dislocate +dislocated +dislocates +dislocating +dislocation +dislocations +dislodge +dislodged +dislodgement +dislodgements +dislodges +dislodging +dislodgment +dislodgments +disloyal +disloyally +disloyalties +disloyalty +dismal +dismaler +dismalest +dismally +dismalness +dismalnesses +dismals +dismantle +dismantled +dismantlement +dismantlements +dismantles +dismantling +dismast +dismasted +dismasting +dismasts +dismay +dismayed +dismaying +dismayingly +dismays +disme +dismember +dismembered +dismembering +dismemberment +dismemberments +dismembers +dismes dismiss +dismissal +dismissals +dismissed +dismisses +dismissing +dismission +dismissions +dismissive +dismissively +dismount +dismounted +dismounting +dismounts +disobedience +disobediences +disobedient +disobediently +disobey +disobeyed +disobeyer +disobeyers +disobeying +disobeys +disoblige +disobliged +disobliges +disobliging +disomic +disorder +disordered +disorderedly +disorderedness +disorderednesses +disordering +disorderliness +disorderlinesses +disorderly +disorders +disorganization +disorganizations +disorganize +disorganized +disorganizes +disorganizing +disorient +disorientate +disorientated +disorientates +disorientating +disorientation +disorientations +disoriented +disorienting +disorients +disown +disowned +disowning +disownment +disownments +disowns +disparage +disparaged +disparagement +disparagements +disparager +disparagers +disparages +disparaging +disparagingly +disparate +disparately +disparateness +disparatenesses +disparities +disparity +dispart +disparted +disparting +disparts +dispassion +dispassionate +dispassionately +dispassionateness +dispassionatenesses +dispassions +dispatch +dispatched +dispatcher +dispatchers +dispatches +dispatching +dispel +dispelled +dispelling +dispels +dispend +dispended +dispending +dispends +dispensabilities +dispensability +dispensable +dispensaries +dispensary +dispensation +dispensational +dispensations +dispensatories +dispensatory +dispense +dispensed +dispenser +dispensers +dispenses +dispensing +dispeople +dispeopled +dispeoples +dispeopling +dispersal +dispersals +dispersant +dispersants +disperse +dispersed +dispersedly +disperser +dispersers +disperses +dispersible +dispersing +dispersion +dispersions +dispersive +dispersively +dispersiveness +dispersivenesses +dispersoid +dispersoids +dispirit +dispirited +dispiritedly +dispiritedness +dispiritednesses +dispiriting +dispirits +dispiteous +displace +displaceable +displaced +displacement +displacements +displaces +displacing +displant +displanted +displanting +displants +display +displayable +displayed +displaying +displays +displease +displeased +displeases +displeasing +displeasure +displeasures +displode +disploded +displodes +disploding +displosion +displosions +displume +displumed +displumes +displuming +disport +disported +disporting +disportment +disportments +disports +disposabilities +disposability +disposable +disposables +disposal +disposals +dispose +disposed +disposer +disposers +disposes +disposing +disposition +dispositional +dispositions +dispositive +dispossess +dispossessed +dispossesses +dispossessing +dispossession +dispossessions +dispossessor +dispossessors +disposure +disposures +dispraise +dispraised +dispraiser +dispraisers +dispraises +dispraising +dispraisingly +dispread +dispreading +dispreads +disprize +disprized +disprizes +disprizing +disproof +disproofs +disproportion +disproportional +disproportionate +disproportionated +disproportionately +disproportionates +disproportionating +disproportionation +disproportionations +disproportioned +disproportioning +disproportions +disprovable +disprove +disproved +disproven +disproves +disproving +disputable +disputably +disputant +disputants +disputation +disputations +disputatious +disputatiously +disputatiousness +disputatiousnesses +dispute +disputed +disputer +disputers +disputes +disputing +disqualification +disqualifications +disqualified +disqualifies +disqualify +disqualifying +disquantitied +disquantities +disquantity +disquantitying +disquiet +disquieted +disquieting +disquietingly +disquietly +disquiets +disquietude +disquietudes +disquisition +disquisitions +disrate +disrated +disrates +disrating +disregard +disregarded +disregardful +disregarding +disregards +disrelated +disrelation +disrelations +disrelish +disrelished +disrelishes +disrelishing +disremember +disremembered +disremembering +disremembers +disrepair +disrepairs +disreputabilities +disreputability +disreputable +disreputableness +disreputablenesses +disreputably +disrepute +disreputes +disrespect +disrespectabilities +disrespectability +disrespectable +disrespected +disrespectful +disrespectfully +disrespectfulness +disrespectfulnesses +disrespecting +disrespects +disrobe +disrobed +disrober +disrobers +disrobes +disrobing +disroot +disrooted +disrooting +disroots +disrupt +disrupted +disrupter +disrupters +disrupting +disruption +disruptions +disruptive +disruptively +disruptiveness +disruptivenesses +disrupts +diss +dissatisfaction +dissatisfactions +dissatisfactory +dissatisfied +dissatisfies +dissatisfy +dissatisfying +dissave +dissaved +dissaves +dissaving +disseat +disseated +disseating +disseats +dissect +dissected +dissecting +dissection +dissections +dissector +dissectors +dissects +dissed +disseise +disseised +disseises +disseisin +disseising +disseisins +disseisor +disseisors +disseize +disseized +disseizes +disseizin +disseizing +disseizins +dissemble +dissembled +dissembler +dissemblers +dissembles +dissembling +disseminate +disseminated +disseminates +disseminating +dissemination +disseminations +disseminator +disseminators +disseminule +disseminules +dissension +dissensions +dissensus +dissensuses +dissent +dissented +dissenter +dissenters +dissentient +dissentients +dissenting +dissention +dissentions +dissentious +dissents +dissepiment +dissepiments +dissert +dissertate +dissertated +dissertates +dissertating +dissertation +dissertational +dissertations +dissertator +dissertators +disserted +disserting +disserts +disserve +disserved +disserves +disservice +disserviceable +disservices +disserving +disses +dissever +disseverance +disseverances +dissevered +dissevering +disseverment +disseverments +dissevers +dissidence +dissidences +dissident +dissidents +dissimilar +dissimilarities +dissimilarity +dissimilarly +dissimilars +dissimilate +dissimilated +dissimilates +dissimilating +dissimilation +dissimilations +dissimilatory +dissimilitude +dissimilitudes +dissimulate +dissimulated +dissimulates +dissimulating +dissimulation +dissimulations +dissimulator +dissimulators +dissing +dissipate +dissipated +dissipatedly +dissipatedness +dissipatednesses +dissipater +dissipaters +dissipates +dissipating +dissipation +dissipations +dissipative +dissociabilities +dissociability +dissociable +dissocial +dissociate +dissociated +dissociates +dissociating +dissociation +dissociations +dissociative +dissoluble +dissolute +dissolutely +dissoluteness +dissolutenesses +dissolution +dissolutions +dissolvable +dissolve +dissolved +dissolvent +dissolvents +dissolver +dissolvers +dissolves +dissolving +dissonance +dissonances +dissonant +dissonantly +dissuade +dissuaded +dissuader +dissuaders +dissuades +dissuading +dissuasion +dissuasions +dissuasive +dissuasively +dissuasiveness +dissuasivenesses +dissyllable +dissyllables +dissymmetric +dissymmetries +dissymmetry +distaff +distaffs +distain +distained +distaining +distains +distal +distally distance +distanced +distances +distancing distant +distantly +distantness +distantnesses +distaste +distasted +distasteful +distastefully +distastefulness +distastefulnesses +distastes +distasting +distaves +distelfink +distelfinks +distemper +distemperate +distemperature +distemperatures +distempered +distempering +distempers +distend +distended +distending +distends +distensibilities +distensibility +distensible +distension +distensions +distent +distention +distentions +distich +distichous +distichs +distil +distill +distillate +distillates +distillation +distillations +distilled +distiller +distilleries +distillers +distillery +distilling +distills +distils +distinct +distincter +distinctest distinction +distinctions +distinctive +distinctively +distinctiveness +distinctivenesses +distinctly +distinctness +distinctnesses +distingue distinguish +distinguishabilities +distinguishability +distinguishable +distinguishably +distinguished +distinguishes +distinguishing +distome +distomes +distort +distorted +distorter +distorters +distorting +distortion +distortional +distortions +distorts +distract +distractable +distracted +distractedly +distractibilities +distractibility +distractible +distracting +distractingly +distraction +distractions +distractive +distracts +distrain +distrainable +distrained +distrainer +distrainers +distraining +distrainor +distrainors +distrains +distraint +distraints +distrait +distraite +distraught +distraughtly +distress +distressed +distresses +distressful +distressfully +distressfulness +distressfulnesses +distressing +distressingly +distributaries +distributary distribute +distributed +distributee +distributees +distributes +distributing +distribution +distributional +distributions +distributive +distributively +distributivities +distributivity +distributor +distributors +distributorship +distributorships district +districted +districting +districts +distrust +distrusted +distrustful +distrustfully +distrustfulness +distrustfulnesses +distrusting +distrusts disturb +disturbance +disturbances +disturbed +disturber +disturbers disturbing +disturbingly +disturbs +disubstituted +disulfid +disulfide +disulfides +disulfids +disulfiram +disulfirams +disulfoton +disulfotons +disunion +disunionist +disunionists +disunions +disunite +disunited +disunites +disunities +disuniting +disunity +disuse +disused +disuses +disusing +disutilities +disutility +disvalue +disvalued +disvalues +disvaluing +disyllabic +disyllable +disyllables +disyoke +disyoked +disyokes +disyoking +dit +dita +ditas +ditch +ditchdigger +ditchdiggers +ditched +ditcher +ditchers +ditches +ditching +dite +dites +ditheism +ditheisms +ditheist +ditheists +dither +dithered +ditherer +ditherers +dithering +dithers +dithery +dithiocarbamate +dithiocarbamates +dithiol +dithyramb +dithyrambic +dithyrambically +dithyrambs +ditransitive +ditransitives +dits +ditsier +ditsiest +ditsy +dittanies +dittany +ditties +ditto +dittoed +dittoing +dittos +ditty +ditz +ditzes +ditzier +ditziest +ditzy +diureses +diuresis +diuretic +diuretically +diuretics +diurnal +diurnally +diurnals +diuron +diurons +diva +divagate +divagated +divagates +divagating +divagation +divagations +divalent +divan +divans +divaricate +divaricated +divaricates +divaricating +divarication +divarications +divas dive +divebomb +divebombed +divebombing +divebombs +dived +diver +diverge +diverged +divergence +divergences +divergencies +divergency +divergent +divergently +diverges +diverging +divers diverse +diversely +diverseness +diversenesses +diversification +diversifications +diversified +diversifier +diversifiers +diversifies +diversify +diversifying +diversion +diversionary +diversionist +diversionists +diversions +diversities +diversity +divert +diverted +diverter +diverters +diverticula +diverticular +diverticulites +diverticulitides +diverticulitis +diverticulitises +diverticuloses +diverticulosis +diverticulosises +diverticulum +divertimenti +divertimento +divertimentos +diverting +divertissement +divertissements +diverts +dives +divest +divested +divesting +divestiture +divestitures +divestment +divestments +divests +dividable divide +divided +dividedly +dividedness +dividednesses +dividend +dividendless +dividends +divider +dividers +divides +dividing +dividual +divination +divinations +divinatory +divine +divined +divinely +diviner +diviners +divines +divinest +diving +divining +divinise +divinised +divinises +divinising +divinities +divinity +divinize +divinized +divinizes +divinizing +divisibilities +divisibility +divisible division +divisional +divisionism +divisionisms +divisionist +divisionists +divisions +divisive +divisively +divisiveness +divisivenesses +divisor +divisors divorce +divorced +divorcee +divorcees +divorcement +divorcements +divorcer +divorcers +divorces +divorcing +divot +divots +divulge +divulged +divulgence +divulgences +divulger +divulgers +divulges +divulging +divvied +divvies +divvy +divvying +diwan +diwans +dixit +dixits +dizen +dizened +dizening +dizens +dizygotic +dizygous +dizzied +dizzier +dizzies +dizziest +dizzily +dizziness +dizzinesses dizzy +dizzying +dizzyingly +djebel +djebels +djellaba +djellabah +djellabahs +djellabas +djin +djinn +djinni +djinns +djinny +djins do +doable +doat +doated +doating +doats +dobber +dobbers +dobbies +dobbin +dobbins +dobby +dobie +dobies +dobla +doblas +doblon +doblones +doblons +dobra +dobras +dobson +dobsonflies +dobsonfly +dobsons +doby +doc +docent +docents +docetic +docile +docilely +docilities +docility +dock +dockage +dockages +docked +docker +dockers +docket +docketed +docketing +dockets +dockhand +dockhands +docking +dockland +docklands +dockmaster +dockmasters +docks +dockside +docksides +dockworker +dockworkers +dockyard +dockyards +docs doctor +doctoral +doctorate +doctorates +doctored +doctoring +doctorless +doctors +doctorship +doctorships +doctrinaire +doctrinaires +doctrinairism +doctrinairisms +doctrinal +doctrinally +doctrine +doctrines +docudrama +docudramas document +documentable +documental +documentalist +documentalists +documentarian +documentarians +documentaries +documentarily +documentarist +documentarists +documentary +documentation +documentational +documentations +documented +documenter +documenters +documenting +documents +dodder +doddered +dodderer +dodderers +doddering +dodders +doddery +dodecagon +dodecagons +dodecahedra +dodecahedral +dodecahedron +dodecahedrons +dodecaphonic +dodecaphonically +dodecaphonies +dodecaphonist +dodecaphonists +dodecaphony +dodge +dodgeball +dodgeballs +dodged +dodgem +dodgems +dodger +dodgeries +dodgers +dodgery +dodges +dodgier +dodgiest +dodginess +dodginesses +dodging +dodgy +dodo +dodoes +dodoism +dodoisms +dodos +doe +doer +doers +does +doeskin +doeskins +doest +doeth +doff +doffed +doffer +doffers +doffing +doffs dog +dogbane +dogbanes +dogberries +dogberry +dogcart +dogcarts +dogcatcher +dogcatchers +dogdom +dogdoms +doge +dogear +dogeared +dogearing +dogears +dogedom +dogedoms +doges +dogeship +dogeships +dogey +dogeys +dogface +dogfaces +dogfight +dogfighting +dogfights +dogfish +dogfishes +dogfought +dogged +doggedly +doggedness +doggednesses +dogger +doggerel +doggerels +doggeries +doggers +doggery +doggie +doggier +doggies +doggiest +dogging +doggish +doggishly +doggishness +doggishnesses +doggo +doggone +doggoned +doggoneder +doggonedest +doggoner +doggones +doggonest +doggoning +doggrel +doggrels +doggy +doghouse +doghouses +dogie +dogies +dogleg +doglegged +doglegging +doglegs +doglike +dogma +dogmas +dogmata +dogmatic +dogmatical +dogmatically +dogmaticalness +dogmaticalnesses +dogmatics +dogmatism +dogmatisms +dogmatist +dogmatists +dogmatization +dogmatizations +dogmatize +dogmatized +dogmatizer +dogmatizers +dogmatizes +dogmatizing +dognap +dognaped +dognaper +dognapers +dognaping +dognapped +dognapper +dognappers +dognapping +dognaps +dogs +dogsbodies +dogsbody +dogsled +dogsledded +dogsledder +dogsledders +dogsledding +dogsleds +dogteeth +dogtooth +dogtrot +dogtrots +dogtrotted +dogtrotting +dogvane +dogvanes +dogwatch +dogwatches +dogwood +dogwoods +dogy +doiled +doilies +doily +doing +doings +doit +doited +doits +dojo +dojos +dol +dolce +dolci +doldrums +dole +doled +doleful +dolefuller +dolefullest +dolefully +dolefulness +dolefulnesses +dolerite +dolerites +doleritic +doles +dolesome +dolichocephalic +dolichocephalies +dolichocephaly +doling doll dollar +dollars +dolled +dollhouse +dollhouses +dollied +dollies +dolling +dollish +dollishly +dollishness +dollishnesses +dollop +dolloped +dolloping +dollops +dolls +dolly +dollying +dolma +dolmades +dolman +dolmans +dolmas +dolmen +dolmens +dolomite +dolomites +dolomitic +dolomitization +dolomitizations +dolomitize +dolomitized +dolomitizes +dolomitizing +dolor +doloroso +dolorous +dolorously +dolorousness +dolorousnesses +dolors +dolour +dolours +dolphin +dolphinfish +dolphinfishes +dolphins +dols +dolt +doltish +doltishly +doltishness +doltishnesses +dolts +dom +domain +domains +domal +dome +domed +domelike +domes +domesday +domesdays +domestic +domestically +domesticate +domesticated +domesticates +domesticating +domestication +domestications +domesticities +domesticity +domestics +domic +domical +domicil +domicile +domiciled +domiciles +domiciliary +domiciliate +domiciliated +domiciliates +domiciliating +domiciliation +domiciliations +domiciling +domicils +dominance +dominances +dominant +dominantly +dominants +dominate +dominated +dominates +dominating +domination +dominations +dominative +dominator +dominators +dominatrices +dominatrix +dominatrixes +domine +domineer +domineered +domineering +domineeringly +domineeringness +domineeringnesses +domineers +domines +doming +dominical +dominick +dominicker +dominickers +dominicks +dominie +dominies +dominion +dominions +dominique +dominiques +dominium +dominiums +domino +dominoes +dominos +doms +don +dona +donas donate +donated +donates +donating +donation +donations +donative +donatives +donator +donators +done +donee +donees +doneness +donenesses +dong +donga +dongas +dongola +dongolas +dongs +donjon +donjons +donkey +donkeys +donkeywork +donkeyworks +donna +donnas +donne +donned +donnee +donnees +donnerd +donnered +donnert +donnicker +donnickers +donniker +donnikers +donning +donnish +donnishly +donnishness +donnishnesses +donnybrook +donnybrooks +donor +donors +dons +donsie +donsy +donut +donuts +donzel +donzels +doodad +doodads +doodle +doodlebug +doodlebugs +doodled +doodler +doodlers +doodles +doodling +doofus +doofuses +doohickey +doohickeys +doohickies +doolee +doolees +doolie +doolies +dooly +doom +doomed +doomful +doomfully +doomily +dooming +dooms +doomsayer +doomsayers +doomsaying +doomsayings +doomsday +doomsdayer +doomsdayers +doomsdays +doomster +doomsters +doomy door +doorbell +doorbells +doorjamb +doorjambs +doorkeeper +doorkeepers +doorknob +doorknobs +doorless +doorman +doormat +doormats +doormen +doornail +doornails +doorplate +doorplates +doorpost +doorposts +doors +doorsill +doorsills +doorstep +doorsteps +doorstop +doorstops +doorway +doorways +dooryard +dooryards +doozer +doozers +doozie +doozies +doozy +dopa +dopamine +dopaminergic +dopamines +dopant +dopants +dopas +dope +doped +dopehead +dopeheads +doper +dopers +dopes +dopester +dopesters +dopey +dopier +dopiest +dopiness +dopinesses +doping +doppelganger +doppelgangers +dopy +dor +dorado +dorados +dorbug +dorbugs +dore +dorhawk +dorhawks +dories +dork +dorkier +dorkiest +dorks +dorky dorm +dormancies +dormancy +dormant +dormer +dormers +dormice +dormie +dormient +dormin +dormins +dormitories dormitory +dormouse +dorms +dormy +dorneck +dornecks +dornick +dornicks +dornock +dornocks +doronicum +doronicums +dorp +dorper +dorpers +dorps +dorr +dorrs +dors +dorsa +dorsad +dorsal +dorsally +dorsals +dorsel +dorsels +dorser +dorsers +dorsiventral +dorsiventralities +dorsiventrality +dorsiventrally +dorsolateral +dorsoventral +dorsoventralities +dorsoventrality +dorsoventrally +dorsum +dorty +dory +dos +dosage +dosages +dose +dosed +doser +dosers +doses +dosimeter +dosimeters +dosimetric +dosimetries +dosimetry +dosing +doss +dossal +dossals +dossed +dossel +dossels +dosser +dosseret +dosserets +dossers +dosses +dossier +dossiers +dossil +dossils +dossing +dost dot +dotage +dotages +dotal +dotard +dotardly +dotards +dotation +dotations +dote +doted +doter +doters +dotes +doth +dotier +dotiest +doting +dotingly +dots +dotted +dottel +dottels +dotter +dotterel +dotterels +dotters +dottier +dottiest +dottily +dottiness +dottinesses +dotting +dottle +dottles +dottrel +dottrels +dotty +doty double +doubled +doubleheader +doubleheaders +doubleness +doublenesses +doubler +doublers +doubles +doublespeak +doublespeaker +doublespeakers +doublespeaks +doublet +doublethink +doublethinks +doubleton +doubletons +doublets +doubling +doubloon +doubloons +doublure +doublures +doubly doubt +doubtable +doubted +doubter +doubters +doubtful +doubtfully +doubtfulness +doubtfulnesses +doubting +doubtingly +doubtless +doubtlessly +doubtlessness +doubtlessnesses +doubts +douce +doucely +douceur +douceurs +douche +douched +douches +douching +dough +doughboy +doughboys +doughface +doughfaces +doughier +doughiest +doughlike +doughnut +doughnutlike +doughnuts +doughs +dought +doughtier +doughtiest +doughtily +doughtiness +doughtinesses +doughty +doughy +doum +douma +doumas +doums +doupioni +doupionis +dour +doura +dourah +dourahs +douras +dourer +dourest +dourine +dourines +dourly +dourness +dournesses +douroucouli +douroucoulis +douse +doused +douser +dousers +douses +dousing +doux +douzeper +douzepers +dove +dovecot +dovecote +dovecotes +dovecots +dovekey +dovekeys +dovekie +dovekies +dovelike +doven +dovened +dovening +dovens +doves +dovetail +dovetailed +dovetailing +dovetails +dovish +dovishness +dovishnesses +dow +dowable +dowager +dowagers +dowdier +dowdies +dowdiest +dowdily +dowdiness +dowdinesses +dowdy +dowdyish +dowed +dowel +doweled +doweling +dowelled +dowelling +dowels +dower +dowered +doweries +dowering +dowers +dowery +dowie +dowing +dowitcher +dowitchers down +downbeat +downbeats +downburst +downbursts +downcast +downcasts +downcome +downcomes +downcourt +downdraft +downdrafts +downed +downer +downers +downfall +downfallen +downfalls +downfield +downgrade +downgraded +downgrades +downgrading +downhaul +downhauls +downhearted +downheartedly +downheartedness +downheartednesses +downhill +downhiller +downhillers +downhills +downier +downiest +downing +downland +downlands +downlink +downlinks download +downloadable +downloaded +downloading +downloads +downpipe +downpipes +downplay +downplayed +downplaying +downplays +downpour +downpours +downrange +downright +downrightly +downrightness +downrightnesses +downriver +downs +downscale +downscaled +downscales +downscaling +downshift +downshifted +downshifting +downshifts +downside +downsides +downsize +downsized +downsizes +downsizing +downslide +downslides +downslope +downspout +downspouts +downstage +downstages downstairs +downstate +downstater +downstaters +downstates +downstream +downstroke +downstrokes +downswing +downswings +downtick +downticks +downtime +downtimes downtown +downtowner +downtowners +downtowns +downtrend +downtrends +downtrod +downtrodden +downturn +downturns +downward +downwardly +downwardness +downwardnesses +downwards +downwash +downwashes +downwind +downy +dowries +dowry +dows +dowsabel +dowsabels +dowse +dowsed +dowser +dowsers +dowses +dowsing +doxie +doxies +doxologies +doxology +doxorubicin +doxorubicins +doxy +doxycycline +doxycyclines +doyen +doyenne +doyennes +doyens +doyley +doyleys +doylies +doyly +doze +dozed dozen -dr +dozened +dozening +dozens +dozenth +dozenths +dozer +dozers +dozes +dozier +doziest +dozily +doziness +dozinesses +dozing +dozy +drab +drabbed +drabber +drabbest +drabbet +drabbets +drabbing +drabble +drabbled +drabbles +drabbling +drably +drabness +drabnesses +drabs +dracaena +dracaenas +drachm +drachma +drachmae +drachmai +drachmas +drachms +draconian +draconic +draff +draffier +draffiest +draffish +draffs +draffy draft +draftable +drafted +draftee +draftees +drafter +drafters +draftier +draftiest +draftily +draftiness +draftinesses +drafting +draftings +drafts +draftsman +draftsmanship +draftsmanships +draftsmen +draftsperson +draftspersons +drafty drag +dragee +dragees +dragged +dragger +draggers +draggier +draggiest +dragging +draggingly +draggle +draggled +draggles +draggling +draggy +dragline +draglines +dragnet +dragnets +dragoman +dragomans +dragomen +dragon +dragonet +dragonets +dragonflies +dragonfly +dragonhead +dragonheads +dragonish +dragons +dragoon +dragooned +dragooning +dragoons +dragrope +dragropes +drags +dragster +dragsters +drail +drails +drain +drainage +drainages +drained +drainer +drainers +draining +drainpipe +drainpipes +drains +drake +drakes +dram +drama +dramas +dramatic +dramatically +dramatics +dramatisation +dramatisations +dramatise +dramatised +dramatises +dramatising +dramatist +dramatists +dramatizable +dramatization +dramatizations +dramatize +dramatized +dramatizes +dramatizing +dramaturg +dramaturge +dramaturges +dramaturgic +dramaturgical +dramaturgically +dramaturgies +dramaturgs +dramaturgy +dramedies +dramedy +drammed +dramming +drammock +drammocks +drams +dramshop +dramshops +drank +drapabilities +drapability +drapable +drape +drapeabilities +drapeability +drapeable +draped +draper +draperies +drapers +drapery +drapes +drapey +draping +drastic +drastically +drat +drats +dratted +dratting +draught +draughted +draughtier +draughtiest +draughting +draughts +draughtsman +draughtsmen +draughty +drave draw +drawable drawback +drawbacks +drawbar +drawbars +drawbore +drawbores +drawbridge +drawbridges +drawdown +drawdowns +drawee +drawees drawer +drawerful +drawerfuls +drawers +drawing +drawings +drawknife +drawknives +drawl +drawled +drawler +drawlers +drawlier +drawliest +drawling +drawlingly +drawls +drawly +drawn +drawnwork +drawnworks +drawplate +drawplates +draws +drawshave +drawshaves +drawstring +drawstrings +drawtube +drawtubes +dray +drayage +drayages +drayed +draying +drayman +draymen +drays +dread +dreaded +dreadful +dreadfully +dreadfulness +dreadfulnesses +dreadfuls +dreading +dreadlock +dreadlocks +dreadnought +dreadnoughts +dreads dream +dreamed +dreamer +dreamers +dreamful +dreamfully +dreamfulness +dreamfulnesses +dreamier +dreamiest +dreamily +dreaminess +dreaminesses +dreaming +dreamland +dreamlands +dreamless +dreamlessly +dreamlessness +dreamlessnesses +dreamlike +dreams +dreamt +dreamtime +dreamtimes +dreamworld +dreamworlds +dreamy +drear +drearier +drearies +dreariest +drearily +dreariness +drearinesses +drears +dreary +dreck +drecks +drecky +dredge +dredged +dredger +dredgers +dredges +dredging +dredgings +dree +dreed +dreeing +drees +dreg +dreggier +dreggiest +dreggish +dreggy +dregs +dreich +dreidel +dreidels +dreidl +dreidls +dreigh +drek +dreks +drench +drenched +drencher +drenchers +drenches +drenching dress +dressage +dressages +dressed +dresser +dressers +dresses +dressier +dressiest +dressily +dressiness +dressinesses +dressing +dressings +dressmaker +dressmakers +dressmaking +dressmakings +dressy +drest +drew +drib +dribbed +dribbing +dribble +dribbled +dribbler +dribblers +dribbles +dribblet +dribblets +dribbling +dribbly +driblet +driblets +dribs +dried +driegh +drier +driers +dries +driest +drift +driftage +driftages +drifted +drifter +drifters +driftier +driftiest +drifting +driftingly +driftpin +driftpins +drifts +driftwood +driftwoods +drifty drill +drillabilities +drillability +drillable +drilled +driller +drillers +drilling +drillings +drillmaster +drillmasters +drills +drily drink +drinkabilities +drinkability +drinkable +drinkables +drinker +drinkers +drinking +drinks +drip +dripless +dripped +dripper +drippers +drippier +drippiest +dripping +drippings +drippy +drips +dripstone +dripstones +dript +drivabilities +drivability +drivable drive +driveabilities +driveability +driveable +drivel +driveled +driveler +drivelers +driveline +drivelines +driveling +drivelled +drivelling +drivels +driven +drivenness +drivennesses +driver +driverless +drivers +drives +driveshaft +driveshafts +drivetrain +drivetrains +driveway +driveways +driving +drivings +drizzle +drizzled +drizzles +drizzlier +drizzliest +drizzling +drizzlingly +drizzly +drogue +drogues +droit +droits +droll +drolled +droller +drolleries +drollery +drollest +drolling +drollness +drollnesses +drolls +drolly +dromedaries +dromedary +dromon +dromond +dromonds +dromons +drone +droned +droner +droners +drones +drongo +drongos +droning +droningly +dronish +drool +drooled +drooling +drools +droop +drooped +droopier +droopiest +droopily +drooping +droopingly +droops +droopy drop +dropcloth +dropcloths +drophead +dropheads +dropkick +dropkicker +dropkickers +dropkicks +droplet +droplets +droplight +droplights +dropout +dropouts +droppable +dropped +dropper +dropperful +dropperfuls +droppers +droppersful +dropping +droppings +drops +dropshot +dropshots +dropsical +dropsied +dropsies +dropsy +dropt +dropwort +dropworts +drosera +droseras +droshkies +droshky +droskies +drosky +drosophila +drosophilas +dross +drosses +drossier +drossiest +drossy +drought +droughtier +droughtiest +droughtiness +droughtinesses +droughts +droughty +drouk +drouked +drouking +drouks +drouth +drouthier +drouthiest +drouths +drouthy +drove +droved +drover +drovers +droves +droving +drown +drownd +drownded +drownding +drownds +drowned +drowner +drowners +drowning +drowns +drowse +drowsed +drowses +drowsier +drowsiest +drowsily +drowsiness +drowsinesses +drowsing +drowsy +drub +drubbed +drubber +drubbers +drubbing +drubbings +drubs +drudge +drudged +drudger +drudgeries +drudgers +drudgery +drudges +drudging +drudgingly drug +drugged +drugget +druggets +druggie +druggier +druggies +druggiest +drugging +druggist +druggists +druggy +drugmaker +drugmakers +drugs +drugstore +drugstores +druid +druidess +druidesses +druidic +druidical +druidism +druidisms +druids drum +drumbeat +drumbeater +drumbeaters +drumbeating +drumbeatings +drumbeats +drumble +drumbled +drumbles +drumbling +drumfire +drumfires +drumfish +drumfishes +drumhead +drumheads +drumlier +drumliest +drumlike +drumlin +drumlins +drumly +drummed +drummer +drummers +drumming +drumroll +drumrolls +drums +drumstick +drumsticks drunk +drunkard +drunkards +drunken +drunkenly +drunkenness +drunkennesses +drunker +drunkest +drunks +drupaceous +drupe +drupelet +drupelets +drupes +druse +druses +druthers dry +dryable +dryad +dryades +dryadic +dryads +dryasdust +dryasdusts +dryer +dryers +dryest +drying +dryish +dryland +drylot +drylots +dryly +dryness +drynesses +dryopithecine +dryopithecines +drypoint +drypoints +drys +drysalter +drysalteries +drysalters +drysaltery +drystone +drywall +drywalls +duad +duads +dual +dualism +dualisms +dualist +dualistic +dualistically +dualists +dualities +duality +dualize +dualized +dualizes +dualizing +dually +duals +dub +dubbed +dubber +dubbers +dubbin +dubbing +dubbings +dubbins +dubieties +dubiety +dubious +dubiously +dubiousness +dubiousnesses +dubitable +dubitation +dubitations +dubonnet +dubonnets +dubs +ducal +ducally +ducat +ducats +duce +duces +duchess +duchesses +duchies +duchy +duci duck +duckbill +duckbills +duckboard +duckboards +ducked +ducker +duckers +duckie +duckier +duckies +duckiest +ducking +duckling +ducklings +duckpin +duckpins +ducks +ducktail +ducktails +duckwalk +duckwalked +duckwalking +duckwalks +duckweed +duckweeds +ducky +duct +ductal +ducted +ductile +ductilities +ductility +ducting +ductings +ductless +ducts +ductule +ductules +ductwork +ductworks +dud +duddie +duddy +dude +duded +dudeen +dudeens +dudes +dudgeon +dudgeons +duding +dudish +dudishly +duds due +duecento +duecentos +duel +dueled +dueler +duelers +dueling +duelist +duelists +duelled +dueller +duellers +duelli +duelling +duellist +duellists +duello +duellos +duels +duende +duendes +dueness +duenesses +duenna +duennas +duennaship +duennaships +dues +duet +duets +duetted +duetting +duettist +duettists +duff +duffel +duffels +duffer +duffers +duffle +duffles +duffs +dug +dugong +dugongs +dugout +dugouts +dugs +dui +duiker +duikers +duit +duits +duke +duked +dukedom +dukedoms +dukes +duking +dulcet +dulcetly +dulcets +dulciana +dulcianas +dulcified +dulcifies +dulcify +dulcifying +dulcimer +dulcimers +dulcimore +dulcimores +dulcinea +dulcineas +dulia +dulias dull +dullard +dullards +dulled +duller +dullest +dulling +dullish +dullishly +dullness +dullnesses +dulls +dullsville +dullsvilles +dully +dulness +dulnesses +dulse +dulses +duly +duma +dumas +dumb +dumbbell +dumbbells +dumbcane +dumbcanes +dumbed +dumber +dumbest +dumbfound +dumbfounded +dumbfounder +dumbfoundered +dumbfoundering +dumbfounders +dumbfounding +dumbfounds +dumbhead +dumbheads +dumbing +dumbly +dumbness +dumbnesses +dumbs +dumbstruck +dumbwaiter +dumbwaiters +dumdum +dumdums +dumfound +dumfounded +dumfounding +dumfounds +dumka +dumky +dummied +dummies +dummkopf +dummkopfs +dummy +dummying +dumortierite +dumortierites +dump +dumpcart +dumpcarts +dumped +dumper +dumpers +dumpier +dumpiest +dumpily +dumpiness +dumpinesses +dumping +dumpings +dumpish dumpling +dumplings +dumps +dumpy +dun +dunam +dunams +dunce +dunces +dunch +dunches +duncical +duncish +dunderhead +dunderheaded +dunderheads +dundrearies +dune +duneland +dunelands +dunelike +dunes +dung +dungaree +dungarees +dunged +dungeon +dungeoned +dungeoning +dungeons +dunghill +dunghills +dungier +dungiest +dunging +dungs +dungy +dunite +dunites +dunitic +dunk +dunked +dunker +dunkers +dunking +dunks +dunlin +dunlins +dunnage +dunnages +dunned +dunner +dunness +dunnesses +dunnest +dunning +dunnite +dunnites +duns +dunt +dunted +dunting +dunts +duo +duodecillion +duodecillions +duodecimal +duodecimals +duodecimo +duodecimos +duodena +duodenal +duodenum +duodenums +duolog +duologs +duologue +duologues +duomi +duomo +duomos +duopolies +duopolistic +duopoly +duopsonies +duopsony +duos +duotone +duotones +dup +dupable +dupe +duped +duper +duperies +dupers +dupery +dupes +duping +duple +duplex +duplexed +duplexer +duplexers +duplexes +duplexing +duplicate +duplicated +duplicates +duplicating +duplication +duplications +duplicative +duplicator +duplicators +duplicities +duplicitous +duplicitously +duplicity +dupped +dupping +dups +dura +durabilities +durability +durable +durableness +durablenesses +durables +durably +dural +duralumin +duralumins +duramen +duramens +durance +durances +duras +duration +durations +durative +duratives +durbar +durbars +dure +dured +dures +duress +duresses +durian +durians during +durion +durions +durmast +durmasts +durn +durndest +durned +durneder +durnedest +durning +durns +duro +duroc +durocs +durometer +durometers +duros +durr +durra +durras +durrie +durries +durrs +durst +durum +durums dusk +dusked +duskier +duskiest +duskily +duskiness +duskinesses +dusking +duskish +dusks +dusky dust dustbin +dustbins +dustcover +dustcovers +dusted +duster +dusters +dustheap +dustheaps +dustier +dustiest +dustily +dustiness +dustinesses +dusting +dustless +dustlike +dustman +dustmen +dustoff +dustoffs +dustpan +dustpans +dustrag +dustrags +dusts +dustup +dustups dusty +dutch +dutchman +dutchmen +duteous +dutiable +duties +dutiful +dutifully +dutifulness +dutifulnesses duty -dvd +duumvir +duumvirate +duumvirates +duumviri +duumvirs +duvet +duvetine +duvetines +duvets +duvetyn +duvetyne +duvetynes +duvetyns +duxelles +dwarf +dwarfed +dwarfer +dwarfest +dwarfing +dwarfish +dwarfishly +dwarfishness +dwarfishnesses +dwarfism +dwarfisms +dwarflike +dwarfness +dwarfnesses +dwarfs +dwarves +dweeb +dweebs +dwell +dwelled +dweller +dwellers +dwelling +dwellings +dwells +dwelt +dwindle +dwindled +dwindles +dwindling +dwine +dwined +dwines +dwining +dyable +dyad +dyadic +dyadically +dyadics +dyads +dyarchic +dyarchies +dyarchy +dybbuk +dybbukim +dybbuks +dye +dyeabilities +dyeability +dyeable +dyed +dyeing +dyeings +dyer +dyers +dyes +dyestuff +dyestuffs +dyeweed +dyeweeds +dyewood +dyewoods +dying +dyings +dyke +dyked +dykes +dykey +dyking dynamic +dynamical +dynamically +dynamics +dynamism +dynamisms +dynamist +dynamistic +dynamists +dynamite +dynamited +dynamiter +dynamiters +dynamites +dynamitic +dynamiting +dynamo +dynamometer +dynamometers +dynamometric +dynamometries +dynamometry +dynamos +dynamotor +dynamotors +dynast +dynastic +dynastically +dynasties +dynasts dynasty +dynatron +dynatrons +dyne +dynein +dynel +dynels +dynes +dynode +dynodes +dysarthria +dysarthrias +dyscrasia +dyscrasias +dysenteric +dysenteries +dysentery +dysfunction +dysfunctional +dysfunctions +dysgeneses +dysgenesis +dysgenic +dyskinesia +dyskinesias +dyskinetic +dyslexia +dyslexias +dyslexic +dyslexics +dyslogistic +dyslogistically +dysmenorrhea +dysmenorrheas +dysmenorrheic +dyspepsia +dyspepsias +dyspepsies +dyspepsy +dyspeptic +dyspeptically +dyspeptics +dysphagia +dysphagias +dysphasia +dysphasias +dysphasic +dysphasics +dysphemism +dysphemisms +dysphemistic +dysphonia +dysphonias +dysphoria +dysphorias +dysphoric +dysplasia +dysplasias +dysplastic +dyspnea +dyspneal +dyspneas +dyspneic +dyspnoea +dyspnoeas +dyspnoic +dysprosium +dysprosiums +dysrhythmia +dysrhythmias +dysrhythmic +dystaxia +dystaxias +dystocia +dystocias +dystonia +dystonias +dystonic +dystopia +dystopian +dystopias +dystrophic +dystrophies +dystrophy +dysuria +dysurias +dysuric +dyvour +dyvours each eager +eagerer +eagerest +eagerly +eagerness +eagernesses +eagers eagle +eagles +eaglet +eaglets +eagre +eagres +ealdorman +ealdormen +eanling +eanlings ear +earache +earaches +eardrop +eardrops +eardrum +eardrums +eared +earflap +earflaps +earful +earfuls +earing +earings +earl +earlap +earlaps +earldom +earldoms +earless +earlier +earliest +earliness +earlinesses +earlobe +earlobes +earlock +earlocks +earls +earlship +earlships early +earlywood +earlywoods +earmark +earmarked +earmarking +earmarks +earmuff +earmuffs earn +earned +earner +earners +earnest +earnestly +earnestness +earnestnesses +earnests +earning +earnings +earns +earphone +earphones +earpiece +earpieces +earplug +earplugs +earring +earrings +ears +earshot +earshots +earsplitting +earstone +earstones earth +earthborn +earthbound +earthed +earthen +earthenware +earthenwares +earthier +earthiest +earthily +earthiness +earthinesses +earthing +earthlier +earthliest +earthlight +earthlights +earthlike +earthliness +earthlinesses +earthling +earthlings +earthly +earthman +earthmen +earthmover +earthmovers +earthmoving +earthmovings +earthnut +earthnuts +earthpea +earthpeas earthquake +earthquakes +earthrise +earthrises +earths +earthset +earthsets +earthshaker +earthshakers +earthshaking +earthshakingly +earthshine +earthshines +earthstar +earthstars +earthward +earthwards +earthwork +earthworks +earthworm +earthworms +earthy +earwax +earwaxes +earwig +earwigged +earwigging +earwigs +earwitness +earwitnesses +earworm +earworms +ease +eased +easeful +easefully +easel +easels +easement +easements +eases +easier +easies +easiest +easily +easiness +easinesses +easing east +eastbound easter +easterlies +easterly eastern +easterner +easterners +easternmost +easters +easting +eastings +easts +eastward +eastwards easy +easygoing +easygoingness +easygoingnesses eat +eatable +eatables +eaten +eater +eateries +eaters +eatery +eath +eating +eatings +eats +eau +eaux +eave +eaved +eaves +eavesdrop +eavesdropped +eavesdropper +eavesdroppers +eavesdropping +eavesdrops +ebb +ebbed +ebbet +ebbets +ebbing +ebbs +ebon +ebonies +ebonise +ebonised +ebonises +ebonising +ebonite +ebonites +ebonize +ebonized +ebonizes +ebonizing +ebons +ebony +ebullience +ebulliences +ebulliencies +ebulliency +ebullient +ebulliently +ebullition +ebullitions +ecarte +ecartes +ecaudate +ecbolic +ecbolics +eccentric +eccentrically +eccentricities +eccentricity +eccentrics +ecchymoses +ecchymosis +ecchymotic +ecclesia +ecclesiae +ecclesial +ecclesiastic +ecclesiastical +ecclesiastically +ecclesiasticism +ecclesiasticisms +ecclesiastics +ecclesiological +ecclesiologies +ecclesiologist +ecclesiologists +ecclesiology +eccrine +ecdyses +ecdysial +ecdysiast +ecdysiasts +ecdysis +ecdyson +ecdysone +ecdysones +ecdysons +ecesis +ecesises +echard +echards +eche +eched +echelle +echelles +echelon +echeloned +echeloning +echelons +eches +echeveria +echeverias +echidna +echidnae +echidnas +echinate +eching +echini +echinococci +echinococcoses +echinococcosis +echinococcus +echinoderm +echinodermatous +echinoderms +echinoid +echinoids +echinus +echiuroid +echiuroids +echo +echocardiogram +echocardiograms +echocardiographer +echocardiographers +echocardiographic +echocardiographies +echocardiography +echoed +echoer +echoers +echoes +echoey +echogram +echograms +echoic +echoing +echoism +echoisms +echolalia +echolalias +echolalic +echoless +echolocation +echolocations +echos +echovirus +echoviruses +eclair +eclaircissement +eclaircissements +eclairs +eclampsia +eclampsias +eclamptic +eclat +eclats +eclectic +eclectically +eclecticism +eclecticisms +eclectics +eclipse +eclipsed +eclipses +eclipsing +eclipsis +eclipsises +ecliptic +ecliptics +eclogite +eclogites +eclogue +eclogues +eclosion +eclosions +ecocatastrophe +ecocatastrophes +ecocidal +ecocide +ecocides +ecofreak +ecofreaks +ecologic +ecological +ecologically +ecologies +ecologist +ecologists ecology +econobox +econoboxes +econometric +econometrically +econometrician +econometricians +econometrics +econometrist +econometrists +economic +economical +economically +economics +economies +economise +economised +economises +economising +economist +economists +economize +economized +economizer +economizers +economizes +economizing +economy +ecophysiological +ecophysiologies +ecophysiology +ecospecies +ecosphere +ecospheres +ecosystem +ecosystems +ecotonal +ecotone +ecotones +ecotourism +ecotourisms +ecotourist +ecotourists +ecotype +ecotypes +ecotypic +ecraseur +ecraseurs +ecru +ecrus +ecstasies +ecstasy +ecstatic +ecstatically +ecstatics +ectases +ectasis +ectatic +ecthyma +ecthymata +ectoderm +ectodermal +ectoderms +ectomere +ectomeres +ectomorph +ectomorphic +ectomorphs +ectoparasite +ectoparasites +ectoparasitic +ectopia +ectopias +ectopic +ectopically +ectoplasm +ectoplasmic +ectoplasms +ectosarc +ectosarcs +ectotherm +ectothermic +ectotherms +ectotrophic +ectozoa +ectozoan +ectozoans +ectozoon +ectypal +ectype +ectypes +ecu +ecumenic +ecumenical +ecumenicalism +ecumenicalisms +ecumenically +ecumenicism +ecumenicisms +ecumenicist +ecumenicists +ecumenicities +ecumenicity +ecumenics +ecumenism +ecumenisms +ecumenist +ecumenists +ecus +eczema +eczemas +eczematous +ed +edacious +edacities +edacity +edaphic +edaphically +eddied +eddies +eddo +eddoes +eddy +eddying +edelweiss +edelweisses +edema +edemas +edemata +edematous +edenic +edentate +edentates +edentulous edge +edged +edgeless +edger +edgers +edges +edgeways +edgewise +edgier +edgiest +edgily +edginess +edginesses +edging +edgings +edgy +edh +edhs +edibilities +edibility +edible +edibleness +ediblenesses +edibles +edict +edictal +edicts +edification +edifications +edifice +edifices +edified +edifier +edifiers +edifies +edify +edifying +edile +ediles +edit +editable +edited +editing edition +editions editor +editorial +editorialist +editorialists +editorialization +editorializations +editorialize +editorialized +editorializer +editorializers +editorializes +editorializing +editorially +editorials +editors +editorship +editorships +editress +editresses +edits +educabilities +educability +educable +educables educate +educated +educatedness +educatednesses +educates +educating education +educational +educationalist +educationalists +educationally +educationese +educationeses +educationist +educationists +educations +educative educator +educators +educe +educed +educes +educible +educing +educt +eduction +eductions +eductive +eductor +eductors +educts +edulcorate +edulcorated +edulcorates +edulcorating +edutainment +edutainments +eel +eelgrass +eelgrasses +eelier +eeliest +eellike +eelpout +eelpouts +eels +eelworm +eelworms +eely +eerie +eerier +eeriest +eerily +eeriness +eerinesses +eery +ef +eff +effable +efface +effaceable +effaced +effacement +effacements +effacer +effacers +effaces +effacing effect +effected +effecter +effecters +effecting +effective +effectively +effectiveness +effectivenesses +effectives +effectivities +effectivity +effector +effectors +effects +effectual +effectualities +effectuality +effectually +effectualness +effectualnesses +effectuate +effectuated +effectuates +effectuating +effectuation +effectuations +effeminacies +effeminacy +effeminate +effeminately +effeminates +effendi +effendis +efferent +efferently +efferents +effervesce +effervesced +effervescence +effervescences +effervescent +effervescently +effervesces +effervescing +effete +effetely +effeteness +effetenesses +efficacies +efficacious +efficaciously +efficaciousness +efficaciousnesses +efficacities +efficacity +efficacy +efficiencies +efficiency +efficient +efficiently +effigial +effigies +effigy +effloresce +effloresced +efflorescence +efflorescences +efflorescent +effloresces +efflorescing +effluence +effluences +effluent +effluents +effluvia +effluvium +effluviums +efflux +effluxes +effluxion +effluxions effort +effortful +effortfully +effortfulness +effortfulnesses +effortless +effortlessly +effortlessness +effortlessnesses +efforts +effronteries +effrontery +effs +effulge +effulged +effulgence +effulgences +effulgent +effulges +effulging +effuse +effused +effuses +effusing +effusion +effusions +effusive +effusively +effusiveness +effusivenesses +efs +eft +efts +eftsoon +eftsoons +egad +egads +egal +egalitarian +egalitarianism +egalitarianisms +egalitarians +egalite +egalites +eger +egers +egest +egesta +egested +egesting +egestion +egestions +egestive +egests egg +eggar +eggars +eggbeater +eggbeaters +eggcup +eggcups +egged +egger +eggers +egghead +eggheaded +eggheadedness +eggheadednesses +eggheads +egging +eggless +eggnog +eggnogs eggplant +eggplants +eggs +eggshell +eggshells +eggy +egis +egises +eglantine +eglantines +eglatere +eglateres +eglomise +ego +egocentric +egocentrically +egocentricities +egocentricity +egocentrics +egocentrism +egocentrisms +egoism +egoisms +egoist +egoistic +egoistical +egoistically +egoists +egoless +egomania +egomaniac +egomaniacal +egomaniacally +egomaniacs +egomanias +egos +egotism +egotisms +egotist +egotistic +egotistical +egotistically +egotists +egregious +egregiously +egregiousness +egregiousnesses +egress +egressed +egresses +egressing +egression +egressions +egret +egrets +egyptian +egyptians +eh +eicosanoid +eicosanoids +eide +eider +eiderdown +eiderdowns +eiders +eidetic +eidetically +eidola +eidolic +eidolon +eidolons +eidos +eigenmode +eigenmodes +eigenvalue +eigenvalues +eigenvector +eigenvectors +eight +eighteen +eighteens +eighteenth +eighteenths +eightfold +eighth +eighthly +eighths +eighties +eightieth +eightieths +eights +eightvo +eightvos +eighty +eikon +eikones +eikons +einkorn +einkorns +einstein +einsteinium +einsteiniums +einsteins +eirenic +eisegeses +eisegesis +eisteddfod +eisteddfodau +eisteddfodic +eisteddfods +eiswein +eisweins either +ejaculate +ejaculated +ejaculates +ejaculating +ejaculation +ejaculations +ejaculator +ejaculators +ejaculatory +eject +ejecta +ejectable +ejected +ejecting +ejection +ejections +ejective +ejectives +ejectment +ejectments +ejector +ejectors +ejects +eke +eked +ekes +eking +ekistic +ekistics +ekpwele +ekpweles +ektexine +ektexines +ekuele +el +elaborate +elaborated +elaborately +elaborateness +elaboratenesses +elaborates +elaborating +elaboration +elaborations +elaborative +elain +elains +elan +eland +elands +elans +elaphine +elapid +elapids +elapine +elapse +elapsed +elapses +elapsing +elasmobranch +elasmobranchs +elastase +elastases +elastic +elastically +elasticities +elasticity +elasticized +elastics +elastin +elastins +elastomer +elastomeric +elastomers +elate +elated +elatedly +elatedness +elatednesses +elater +elaterid +elaterids +elaterin +elaterins +elaterite +elaterites +elaters +elates +elating +elation +elations +elative +elatives +elbow +elbowed +elbowing +elbowroom +elbowrooms +elbows +eld elder +elderberries +elderberry +elderlies +elderliness +elderlinesses +elderly +elders +eldership +elderships +eldest +eldress +eldresses +eldrich +eldritch +elds +elecampane +elecampanes elect +electabilities +electability +electable +elected +electee +electees +electing +election +electioneer +electioneered +electioneerer +electioneerers +electioneering +electioneers +elections +elective +electively +electiveness +electivenesses +electives +elector +electoral +electorally +electorate +electorates +electors +electress +electresses +electret +electrets electric electrical +electrically +electrician +electricians +electricities electricity +electrics +electrification +electrifications +electrified +electrifies +electrify +electrifying +electro +electroacoustic +electroacoustics +electroanalyses +electroanalysis +electroanalytical +electrocardiogram +electrocardiograms +electrocardiograph +electrocardiographic +electrocardiographically +electrocardiographies +electrocardiographs +electrocardiography +electrochemical +electrochemically +electrochemistries +electrochemistry +electroconvulsive +electrocorticogram +electrocorticograms +electrocute +electrocuted +electrocutes +electrocuting +electrocution +electrocutions +electrode +electrodeposit +electrodeposited +electrodepositing +electrodeposition +electrodepositions +electrodeposits +electrodermal +electrodes +electrodesiccation +electrodesiccations +electrodialyses +electrodialysis +electrodialytic +electrodynamic +electrodynamics +electrodynamometer +electrodynamometers +electroed +electroencephalogram +electroencephalograms +electroencephalograph +electroencephalographer +electroencephalographers +electroencephalographic +electroencephalographically +electroencephalographies +electroencephalographs +electroencephalography +electrofishing +electrofishings +electroform +electroformed +electroforming +electroforms +electrogeneses +electrogenesis +electrogenic +electrogram +electrograms +electrohydraulic +electroing +electrojet +electrojets +electrokinetic +electrokinetics +electroless +electrologies +electrologist +electrologists +electrology +electroluminescence +electroluminescences +electroluminescent +electrolyses +electrolysis +electrolyte +electrolytes +electrolytic +electrolytically +electrolyze +electrolyzed +electrolyzes +electrolyzing +electromagnet +electromagnetic +electromagnetically +electromagnetism +electromagnetisms +electromagnets +electromechanical +electromechanically +electrometallurgies +electrometallurgy +electrometer +electrometers +electromyogram +electromyograms +electromyograph +electromyographic +electromyographically +electromyographies +electromyographs +electromyography +electron +electronegative +electronegativities +electronegativity electronic +electronically +electronics +electrons +electrooculogram +electrooculograms +electrooculographies +electrooculography +electroosmoses +electroosmosis +electroosmotic +electropherogram +electropherograms +electrophile +electrophiles +electrophilic +electrophilicities +electrophilicity +electrophorese +electrophoresed +electrophoreses +electrophoresing +electrophoresis +electrophoretic +electrophoretically +electrophoretogram +electrophoretograms +electrophori +electrophorus +electrophotographic +electrophotographies +electrophotography +electrophysiologic +electrophysiological +electrophysiologically +electrophysiologies +electrophysiologist +electrophysiologists +electrophysiology +electroplate +electroplated +electroplates +electroplating +electropositive +electroretinogram +electroretinograms +electroretinograph +electroretinographic +electroretinographies +electroretinographs +electroretinography +electros +electroscope +electroscopes +electroshock +electroshocks +electrostatic +electrostatically +electrostatics +electrosurgeries +electrosurgery +electrosurgical +electrotherapies +electrotherapy +electrothermal +electrothermally +electrotonic +electrotonically +electrotonus +electrotonuses +electrotype +electrotyped +electrotyper +electrotypers +electrotypes +electrotyping +electroweak +electrowinning +electrowinnings +electrum +electrums +elects +electuaries +electuary +eledoisin +eledoisins +eleemosynary +elegance +elegances +elegancies +elegancy elegant +elegantly +elegiac +elegiacal +elegiacally +elegiacs +elegies +elegise +elegised +elegises +elegising +elegist +elegists +elegit +elegits +elegize +elegized +elegizes +elegizing +elegy +element +elemental +elementally +elementals +elementarily +elementariness +elementarinesses +elementary +elements +elemi +elemis +elenchi +elenchic +elenchus +elenctic elephant +elephantiases +elephantiasis +elephantine +elephants +elevate +elevated +elevateds +elevates +elevating +elevation +elevations +elevator +elevators +eleven +elevens +elevenses +eleventh +elevenths +elevon +elevons +elf +elfin +elfins +elfish +elfishly +elflike +elflock +elflocks +elhi +elicit +elicitation +elicitations +elicited +eliciting +elicitor +elicitors +elicits +elide +elided +elides +elidible +eliding +eligibilities +eligibility +eligible +eligibles +eligibly +eliminate +eliminated +eliminates +eliminating +elimination +eliminations +eliminative +eliminator +eliminators +elint +elints +elision +elisions +elite +elites +elitism +elitisms +elitist +elitists +elixir +elixirs +elk +elkhound +elkhounds +elks +ell +ellipse +ellipses +ellipsis +ellipsoid +ellipsoidal +ellipsoids +elliptic +elliptical +elliptically +ellipticals +ellipticities +ellipticity +ells +elm +elmier +elmiest +elms +elmy +elocution +elocutionary +elocutionist +elocutionists +elocutions +elodea +elodeas +eloign +eloigned +eloigner +eloigners +eloigning +eloigns +eloin +eloined +eloiner +eloiners +eloining +eloins +elongate +elongated +elongates +elongating +elongation +elongations +elope +eloped +elopement +elopements +eloper +elopers +elopes +eloping +eloquence +eloquences +eloquent +eloquently +els else -email +elsewhere +eluant +eluants +eluate +eluates +elucidate +elucidated +elucidates +elucidating +elucidation +elucidations +elucidative +elucidator +elucidators +elucubrate +elucubrated +elucubrates +elucubrating +elucubration +elucubrations +elude +eluded +eluder +eluders +eludes +eluding +eluent +eluents +elusion +elusions +elusive +elusively +elusiveness +elusivenesses +elusory +elute +eluted +elutes +eluting +elution +elutions +elutriate +elutriated +elutriates +elutriating +elutriation +elutriations +elutriator +elutriators +eluvia +eluvial +eluviate +eluviated +eluviates +eluviating +eluviation +eluviations +eluvium +eluviums +elver +elvers +elves +elvish +elvishly +elysian +elytra +elytroid +elytron +elytrous +elytrum +em +emaciate +emaciated +emaciates +emaciating +emaciation +emaciations +emalangeni +emanate +emanated +emanates +emanating +emanation +emanations +emanative +emanator +emanators +emancipate +emancipated +emancipates +emancipating +emancipation +emancipationist +emancipationists +emancipations +emancipator +emancipators +emarginate +emargination +emarginations +emasculate +emasculated +emasculates +emasculating +emasculation +emasculations +emasculator +emasculators +embalm +embalmed +embalmer +embalmers +embalming +embalmment +embalmments +embalms +embank +embanked +embanking +embankment +embankments +embanks +embar +embarcadero +embarcaderos +embargo +embargoed +embargoes +embargoing +embark +embarkation +embarkations +embarked +embarking +embarkment +embarkments +embarks embarrass +embarrassable +embarrassed +embarrassedly +embarrasses +embarrassing +embarrassingly +embarrassment +embarrassments +embarred +embarring +embars +embassage +embassages +embassies embassy +embattle +embattled +embattlement +embattlements +embattles +embattling +embay +embayed +embaying +embayment +embayments +embays +embed +embedded +embedding +embeddings +embedment +embedments +embeds +embellish +embellished +embellisher +embellishers +embellishes +embellishing +embellishment +embellishments +ember +embers +embezzle +embezzled +embezzlement +embezzlements +embezzler +embezzlers +embezzles +embezzling +embitter +embittered +embittering +embitterment +embitterments +embitters +emblaze +emblazed +emblazer +emblazers +emblazes +emblazing +emblazon +emblazoned +emblazoner +emblazoners +emblazoning +emblazonment +emblazonments +emblazonries +emblazonry +emblazons +emblem +emblematic +emblematical +emblematically +emblematize +emblematized +emblematizes +emblematizing +emblemed +emblements +embleming +emblems +embodied +embodier +embodiers +embodies +embodiment +embodiments +embody +embodying +embolden +emboldened +emboldening +emboldens +embolectomies +embolectomy +emboli +embolic +embolies +embolism +embolismic +embolisms +embolization +embolizations +embolus +emboly +embonpoint +embonpoints +emborder +embordered +embordering +emborders +embosk +embosked +embosking +embosks +embosom +embosomed +embosoming +embosoms +emboss +embossable +embossed +embosser +embossers +embosses +embossing +embossment +embossments +embouchure +embouchures +embourgeoisement +embourgeoisements +embow +embowed +embowel +emboweled +emboweling +embowelled +embowelling +embowels +embower +embowered +embowering +embowers +embowing +embows +embrace +embraceable +embraced +embracement +embracements +embraceor +embraceors +embracer +embraceries +embracers +embracery +embraces +embracing +embracingly +embracive +embrangle +embrangled +embranglement +embranglements +embrangles +embrangling +embrasure +embrasures +embrittle +embrittled +embrittlement +embrittlements +embrittles +embrittling +embrocation +embrocations +embroider +embroidered +embroiderer +embroiderers +embroideries +embroidering +embroiders +embroidery +embroil +embroiled +embroiling +embroilment +embroilments +embroils +embrown +embrowned +embrowning +embrowns +embrue +embrued +embrues +embruing +embrute +embruted +embrutes +embruting +embryo +embryogeneses +embryogenesis +embryogenetic +embryogenic +embryogenies +embryogeny +embryoid +embryoids +embryological +embryologically +embryologies +embryologist +embryologists +embryology +embryon +embryonal +embryonated +embryonic +embryonically +embryons +embryophyte +embryophytes +embryos +emcee +emceed +emceeing +emcees +eme +emeer +emeerate +emeerates +emeers +emend +emendable +emendate +emendated +emendates +emendating +emendation +emendations +emended +emender +emenders +emending +emends +emerald +emeralds +emerge +emerged +emergence +emergences +emergencies emergency +emergent +emergents +emerges +emerging +emeries +emerita +emeritae +emeriti +emeritus +emerod +emerods +emeroid +emeroids +emersed +emersion +emersions +emery +emes +emeses +emesis +emetic +emetically +emetics +emetin +emetine +emetines +emetins +emeu +emeus +emeute +emeutes +emf +emfs +emic +emigrant +emigrants +emigrate +emigrated +emigrates +emigrating +emigration +emigrations +emigre +emigres +eminence +eminences +eminencies +eminency +eminent +eminently +emir +emirate +emirates +emirs +emissaries +emissary +emission +emissions +emissive +emissivities +emissivity +emit +emits +emittance +emittances +emitted +emitter +emitters +emitting +emmenagogue +emmenagogues +emmer +emmers +emmet +emmets +emodin +emodins +emollient +emollients +emolument +emoluments +emote +emoted +emoter +emoters +emotes +emoting +emotion +emotional +emotionalism +emotionalisms +emotionalist +emotionalistic +emotionalists +emotionalities +emotionality +emotionalize +emotionalized +emotionalizes +emotionalizing +emotionally +emotionless +emotionlessly +emotionlessness +emotionlessnesses +emotions +emotive +emotively +emotivities +emotivity +empale +empaled +empaler +empalers +empales +empaling +empanada +empanadas +empanel +empaneled +empaneling +empanelled +empanelling +empanels +empathetic +empathetically +empathic +empathically +empathies +empathise +empathised +empathises +empathising +empathize +empathized +empathizes +empathizing +empathy +empennage +empennages +emperies emperor +emperors +emperorship +emperorships +empery +emphases +emphasis +emphasise +emphasised +emphasises +emphasising +emphasize +emphasized +emphasizes +emphasizing +emphatic +emphatically +emphysema +emphysemas +emphysematous +emphysemic +empire +empires +empiric +empirical +empirically +empiricism +empiricisms +empiricist +empiricists +empirics +emplace +emplaced +emplacement +emplacements +emplaces +emplacing +emplane +emplaned +emplanes +emplaning employ +employabilities +employability +employable +employables +employe +employed +employee +employees +employer +employers +employes +employing +employment +employments +employs +empoison +empoisoned +empoisoning +empoisonment +empoisonments +empoisons +emporia +emporium +emporiums +empower +empowered +empowering +empowerment +empowerments +empowers +empress +empressement +empressements +empresses +emprise +emprises +emprize +emprizes +emptied +emptier +emptiers +empties +emptiest +emptily +emptiness +emptinesses +emptings +emptins empty +emptying +empurple +empurpled +empurples +empurpling +empyema +empyemas +empyemata +empyemic +empyreal +empyrean +empyreans +ems +emu +emulate +emulated +emulates +emulating +emulation +emulations +emulative +emulatively +emulator +emulators +emulous +emulously +emulousness +emulousnesses +emulsifiable +emulsification +emulsifications +emulsified +emulsifier +emulsifiers +emulsifies +emulsify +emulsifying +emulsion +emulsions +emulsive +emulsoid +emulsoidal +emulsoids +emus +emyd +emyde +emydes +emyds +en +enable +enabled +enabler +enablers +enables +enabling +enact +enacted +enacting +enactive +enactment +enactments +enactor +enactors +enactory +enacts +enamel +enameled +enameler +enamelers +enameling +enamelist +enamelists +enamelled +enamelling +enamels +enamelware +enamelwares +enamine +enamines +enamor +enamoration +enamorations +enamored +enamoring +enamors +enamour +enamoured +enamouring +enamours +enantiomer +enantiomeric +enantiomers +enantiomorph +enantiomorphic +enantiomorphism +enantiomorphisms +enantiomorphous +enantiomorphs +enate +enates +enatic +enation +enations +encaenia +encage +encaged +encages +encaging +encamp +encamped +encamping +encampment +encampments +encamps +encapsulate +encapsulated +encapsulates +encapsulating +encapsulation +encapsulations +encapsule +encapsuled +encapsules +encapsuling +encase +encased +encasement +encasements +encases +encash +encashable +encashed +encashes +encashing +encashment +encashments +encasing +encaustic +encaustics +enceinte +enceintes +encephala +encephalitic +encephalitides +encephalitis +encephalitogen +encephalitogenic +encephalitogens +encephalogram +encephalograms +encephalograph +encephalographies +encephalographs +encephalography +encephalomyelitides +encephalomyelitis +encephalomyocarditis +encephalomyocarditises +encephalon +encephalopathic +encephalopathies +encephalopathy +enchain +enchained +enchaining +enchainment +enchainments +enchains +enchant +enchanted +enchanter +enchanters +enchanting +enchantingly +enchantment +enchantments +enchantress +enchantresses +enchants +enchase +enchased +enchaser +enchasers +enchases +enchasing +enchilada +enchiladas +enchiridia +enchiridion +enchiridions +enchoric +encina +encinal +encinas +encipher +enciphered +encipherer +encipherers +enciphering +encipherment +encipherments +enciphers +encircle +encircled +encirclement +encirclements +encircles +encircling +enclasp +enclasped +enclasping +enclasps +enclave +enclaves +enclitic +enclitics +enclose +enclosed +encloser +enclosers +encloses +enclosing +enclosure +enclosures +encode +encoded +encoder +encoders +encodes +encoding +encomia +encomiast +encomiastic +encomiasts +encomium +encomiums +encompass +encompassed +encompasses +encompassing +encompassment +encompassments +encore +encored +encores +encoring +encounter +encountered +encountering +encounters encourage +encouraged encouragement +encouragements +encourager +encouragers +encourages +encouraging +encouragingly +encrimson +encrimsoned +encrimsoning +encrimsons +encroach +encroached +encroacher +encroachers +encroaches +encroaching +encroachment +encroachments +encrust +encrustation +encrustations +encrusted +encrusting +encrusts +encrypt +encrypted +encrypting +encryption +encryptions +encrypts +encumber +encumbered +encumbering +encumbers +encumbrance +encumbrancer +encumbrancers +encumbrances +encyclic +encyclical +encyclicals +encyclics +encyclopaedia +encyclopaedias +encyclopaedic +encyclopedia +encyclopedias +encyclopedic +encyclopedically +encyclopedism +encyclopedisms +encyclopedist +encyclopedists +encyst +encysted +encysting +encystment +encystments +encysts end +endamage +endamaged +endamages +endamaging +endameba +endamebae +endamebas +endamoeba +endamoebae +endamoebas +endanger +endangered +endangering +endangerment +endangerments +endangers +endarch +endarchies +endarchy +endarterectomies +endarterectomy +endbrain +endbrains +endear +endeared +endearing +endearingly +endearment +endearments +endears +endeavor +endeavored +endeavoring +endeavors +endeavour +endeavoured +endeavouring +endeavours +ended +endemial +endemic +endemically +endemicities +endemicity +endemics +endemism +endemisms +ender +endergonic +endermic +enders +endexine +endexines +endgame +endgames ending +endings +endite +endited +endites +enditing +endive +endives +endleaf +endleaves endless +endlessly +endlessness +endlessnesses +endlong +endmost +endnote +endnotes +endobiotic +endocardia +endocardial +endocarditis +endocarditises +endocardium +endocarp +endocarps +endocast +endocasts +endochondral +endocrine +endocrines +endocrinologic +endocrinological +endocrinologies +endocrinologist +endocrinologists +endocrinology +endocytoses +endocytosis +endocytosises +endocytotic +endoderm +endodermal +endodermis +endodermises +endoderms +endodontic +endodontically +endodontics +endodontist +endodontists +endoenzyme +endoenzymes +endoergic +endogamies +endogamous +endogamy +endogen +endogenic +endogenies +endogenous +endogenously +endogens +endogeny +endolithic +endolymph +endolymphatic +endolymphs +endometria +endometrial +endometrioses +endometriosis +endometriosises +endometrites +endometritides +endometritis +endometritises +endometrium +endomitoses +endomitosis +endomitotic +endomixis +endomixises +endomorph +endomorphic +endomorphies +endomorphism +endomorphisms +endomorphs +endomorphy +endonuclease +endonucleases +endonucleolytic +endoparasite +endoparasites +endoparasitic +endoparasitism +endoparasitisms +endopeptidase +endopeptidases +endoperoxide +endoperoxides +endophyte +endophytes +endophytic +endoplasm +endoplasmic +endoplasms +endopod +endopodite +endopodites +endopods +endopolyploid +endopolyploidies +endopolyploidy +endorphin +endorphins +endorsable +endorse +endorsed +endorsee +endorsees +endorsement +endorsements +endorser +endorsers +endorses +endorsing +endorsor +endorsors +endosarc +endosarcs +endoscope +endoscopes +endoscopic +endoscopically +endoscopies +endoscopy +endoskeletal +endoskeleton +endoskeletons +endosmos +endosmoses +endosome +endosomes +endosperm +endosperms +endospore +endospores +endostea +endosteal +endosteally +endosteum +endostyle +endostyles +endosulfan +endosulfans +endosymbiont +endosymbionts +endosymbioses +endosymbiosis +endosymbiotic +endothecia +endothecium +endothelia +endothelial +endothelioma +endotheliomas +endotheliomata +endothelium +endotherm +endothermic +endothermies +endotherms +endothermy +endotoxic +endotoxin +endotoxins +endotracheal +endotrophic +endow +endowed +endower +endowers +endowing +endowment +endowments +endows +endozoic +endpaper +endpapers +endplate +endplates +endpoint +endpoints +endrin +endrins +ends +endue +endued +endues +enduing +endurable +endurably +endurance +endurances +endure +endured +endures +enduring +enduringly +enduringness +enduringnesses +enduro +enduros +endways +endwise +enema +enemas +enemata +enemies enemy energetic +energetically +energetics +energid +energids +energies +energise +energised +energises +energising +energization +energizations +energize +energized +energizer +energizers +energizes +energizing energy +enervate +enervated +enervates +enervating +enervation +enervations +enface +enfaced +enfaces +enfacing +enfeeble +enfeebled +enfeeblement +enfeeblements +enfeebles +enfeebling +enfeoff +enfeoffed +enfeoffing +enfeoffment +enfeoffments +enfeoffs +enfetter +enfettered +enfettering +enfetters +enfever +enfevered +enfevering +enfevers +enfilade +enfiladed +enfilades +enfilading +enflame +enflamed +enflames +enflaming +enfleurage +enfleurages +enfold +enfolded +enfolder +enfolders +enfolding +enfolds +enforce +enforceabilities +enforceability +enforceable +enforced +enforcement +enforcements +enforcer +enforcers +enforces +enforcing +enframe +enframed +enframement +enframements +enframes +enframing +enfranchise +enfranchised +enfranchisement +enfranchisements +enfranchises +enfranchising +eng +engage +engaged +engagement +engagements +engager +engagers +engages +engaging +engagingly +engarland +engarlanded +engarlanding +engarlands +engender +engendered +engendering +engenders +engild +engilded +engilding +engilds +engine +engined engineer +engineered +engineering +engineerings +engineers +engineries +enginery +engines +engining +enginous +engird +engirded +engirding +engirdle +engirdled +engirdles +engirdling +engirds +engirt +english +englished +englishes +englishing +englut +engluts +englutted +englutting +engorge +engorged +engorgement +engorgements +engorges +engorging +engraft +engrafted +engrafting +engraftment +engraftments +engrafts +engrail +engrailed +engrailing +engrails +engrain +engrained +engraining +engrains +engram +engramme +engrammes +engrams +engrave +engraved +engraver +engravers +engraves +engraving +engravings +engross +engrossed +engrosser +engrossers +engrosses +engrossing +engrossingly +engrossment +engrossments +engs +engulf +engulfed +engulfing +engulfment +engulfments +engulfs +enhalo +enhaloed +enhaloes +enhaloing +enhalos +enhance +enhanced +enhancement +enhancements +enhancer +enhancers +enhances +enhancing +enharmonic +enharmonically +enigma +enigmas +enigmata +enigmatic +enigmatical +enigmatically +enisle +enisled +enisles +enisling +enjambed +enjambement +enjambements +enjambment +enjambments +enjoin +enjoined +enjoiner +enjoiners +enjoining +enjoins enjoy enjoyable +enjoyableness +enjoyablenesses +enjoyably +enjoyed +enjoyer +enjoyers +enjoying +enjoyment +enjoyments +enjoys +enkephalin +enkephalins +enkindle +enkindled +enkindles +enkindling +enlace +enlaced +enlacement +enlacements +enlaces +enlacing enlarge +enlargeable +enlarged +enlargement +enlargements +enlarger +enlargers +enlarges +enlarging +enlighten +enlightened +enlightening +enlightenment +enlightenments +enlightens +enlist +enlisted +enlistee +enlistees +enlister +enlisters +enlisting +enlistment +enlistments +enlists +enliven +enlivened +enlivening +enlivens +enmesh +enmeshed +enmeshes +enmeshing +enmeshment +enmeshments +enmities +enmity +ennead +enneadic +enneads +enneagon +enneagons +ennoble +ennobled +ennoblement +ennoblements +ennobler +ennoblers +ennobles +ennobling +ennui +ennuis +ennuye +ennuyee +enoki +enokidake +enokidakes +enokis +enol +enolase +enolases +enolic +enological +enologies +enologist +enologists +enology +enols +enorm +enormities +enormity +enormous +enormously +enormousness +enormousnesses +enosis +enosises enough +enoughs +enounce +enounced +enounces +enouncing +enow +enows +enplane +enplaned +enplanes +enplaning +enquire +enquired +enquires +enquiries +enquiring enquiry +enrage +enraged +enrages +enraging +enrapt +enrapture +enraptured +enraptures +enrapturing +enravish +enravished +enravishes +enravishing +enregister +enregistered +enregistering +enregisters +enrich +enriched +enricher +enrichers +enriches +enriching +enrichment +enrichments +enrobe +enrobed +enrober +enrobers +enrobes +enrobing +enrol +enroll +enrolled +enrollee +enrollees +enroller +enrollers +enrolling +enrollment +enrollments +enrolls +enrols +enroot +enrooted +enrooting +enroots +ens +ensample +ensamples +ensanguine +ensanguined +ensanguines +ensanguining +ensconce +ensconced +ensconces +ensconcing +enscroll +enscrolled +enscrolling +enscrolls +ensemble +ensembles +enserf +enserfed +enserfing +enserfment +enserfments +enserfs +ensheath +ensheathe +ensheathed +ensheathes +ensheathing +ensheaths +enshrine +enshrined +enshrinee +enshrinees +enshrinement +enshrinements +enshrines +enshrining +enshroud +enshrouded +enshrouding +enshrouds +ensiform +ensign +ensigncies +ensigncy +ensigns +ensilage +ensilaged +ensilages +ensilaging +ensile +ensiled +ensiles +ensiling +enskied +enskies +ensky +enskyed +enskying +enslave +enslaved +enslavement +enslavements +enslaver +enslavers +enslaves +enslaving +ensnare +ensnared +ensnarer +ensnarers +ensnares +ensnaring +ensnarl +ensnarled +ensnarling +ensnarls +ensorcel +ensorceled +ensorceling +ensorcell +ensorcelled +ensorcelling +ensorcellment +ensorcellments +ensorcells +ensorcels +ensoul +ensouled +ensouling +ensouls +ensphere +ensphered +enspheres +ensphering +ensue +ensued +ensues +ensuing +ensure +ensured +ensurer +ensurers +ensures +ensuring +enswathe +enswathed +enswathes +enswathing +entablature +entablatures +entail +entailed +entailer +entailers +entailing +entailment +entailments +entails +entameba +entamebae +entamebas +entamoeba +entamoebae +entamoebas +entangle +entangled +entanglement +entanglements +entangler +entanglers +entangles +entangling +entases +entasia +entasias +entasis +entastic +entelechies +entelechy +entellus +entelluses +entente +ententes enter +entera +enterable +enteral +enterally +entered +enterer +enterers +enteric +entering +enteritides +enteritis +enteritises +enterobacteria +enterobacterial +enterobacterium +enterobiases +enterobiasis +enterochromaffin +enterococcal +enterococci +enterococcus +enterocoel +enterocoele +enterocoeles +enterocoelic +enterocoelous +enterocoels +enterocolitis +enterocolitises +enterogastrone +enterogastrones +enterokinase +enterokinases +enteron +enterons +enteropathies +enteropathogenic +enteropathy +enterostomal +enterostomies +enterostomy +enterotoxin +enterotoxins +enteroviral +enterovirus +enteroviruses enterprise +enterpriser +enterprisers +enterprises +enterprising +enters +entertain +entertained +entertainer +entertainers +entertaining +entertainingly entertainment +entertainments +entertains +enthalpies +enthalpy +enthetic +enthral +enthrall +enthralled +enthralling +enthrallment +enthrallments +enthralls +enthrals +enthrone +enthroned +enthronement +enthronements +enthrones +enthroning +enthuse +enthused +enthuses +enthusiasm +enthusiasms +enthusiast enthusiastic +enthusiastically +enthusiasts +enthusing +enthymeme +enthymemes +entia +entice +enticed +enticement +enticements +enticer +enticers +entices +enticing +enticingly entire +entirely +entireness +entirenesses +entires +entireties +entirety +entities +entitle +entitled +entitlement +entitlements +entitles +entitling +entity +entoderm +entodermal +entodermic +entoderms +entoil +entoiled +entoiling +entoils +entomb +entombed +entombing +entombment +entombments +entombs +entomofauna +entomofaunae +entomofaunas +entomological +entomologically +entomologies +entomologist +entomologists +entomology +entomophagous +entomophilies +entomophilous +entomophily +entopic +entoproct +entoprocts +entourage +entourages +entozoa +entozoal +entozoan +entozoans +entozoic +entozoon +entrails +entrain +entrained +entrainer +entrainers +entraining +entrainment +entrainments +entrains entrance +entranced +entrancement +entrancements +entrances +entranceway +entranceways +entrancing +entrant +entrants +entrap +entrapment +entrapments +entrapped +entrapping +entraps +entreat +entreated +entreaties +entreating +entreatingly +entreatment +entreatments +entreats +entreaty +entrechat +entrechats +entrecote +entrecotes +entree +entrees +entremets +entrench +entrenched +entrenches +entrenching +entrenchment +entrenchments +entrepot +entrepots +entrepreneur +entrepreneurial +entrepreneurialism +entrepreneurialisms +entrepreneurially +entrepreneurs +entrepreneurship +entrepreneurships +entresol +entresols +entries +entropic +entropically +entropies +entropion +entropions +entropy +entrust +entrusted +entrusting +entrustment +entrustments +entrusts entry +entryway +entryways +entwine +entwined +entwines +entwining +entwist +entwisted +entwisting +entwists +enucleate +enucleated +enucleates +enucleating +enucleation +enucleations +enumerabilities +enumerability +enumerable +enumerate +enumerated +enumerates +enumerating +enumeration +enumerations +enumerative +enumerator +enumerators +enunciable +enunciate +enunciated +enunciates +enunciating +enunciation +enunciations +enunciator +enunciators +enure +enured +enures +enuresis +enuresises +enuretic +enuretics +enuring +envelop envelope +enveloped +envelopes +enveloping +envelopment +envelopments +envelops +envenom +envenomed +envenoming +envenomization +envenomizations +envenoms +enviable +enviableness +enviablenesses +enviably +envied +envier +enviers +envies +envious +enviously +enviousness +enviousnesses +environ +environed +environing environment +environmental +environmentalism +environmentalisms +environmentalist +environmentalists +environmentally +environments +environs +envisage +envisaged +envisages +envisaging +envision +envisioned +envisioning +envisions +envoi +envois +envoy +envoys envy +envying +envyingly +enwheel +enwheeled +enwheeling +enwheels +enwind +enwinding +enwinds +enwomb +enwombed +enwombing +enwombs +enwound +enwrap +enwrapped +enwrapping +enwraps +enwreathe +enwreathed +enwreathes +enwreathing +enzootic +enzootics +enzym +enzymatic +enzymatically +enzyme +enzymes +enzymic +enzymically +enzymologies +enzymologist +enzymologists +enzymology +enzyms +eobiont +eobionts +eohippus +eohippuses +eolian +eolipile +eolipiles +eolith +eolithic +eoliths +eolopile +eolopiles +eon +eonian +eonism +eonisms +eons +eosin +eosine +eosines +eosinic +eosinophil +eosinophilia +eosinophilias +eosinophilic +eosinophils +eosins +epact +epacts +eparch +eparchies +eparchs +eparchy +epaulet +epaulets +epaulette +epauletted +epaulettes +epazote +epazotes +epee +epeeist +epeeists +epees +epeiric +epeirogenic +epeirogenically +epeirogenies +epeirogeny +ependyma +ependymas +epentheses +epenthesis +epenthetic +epergne +epergnes +epexegeses +epexegesis +epexegetic +epexegetical +epexegetically +epha +ephah +ephahs +ephas +ephebe +ephebes +ephebi +ephebic +epheboi +ephebos +ephebus +ephedra +ephedras +ephedrin +ephedrine +ephedrines +ephedrins +ephemera +ephemerae +ephemeral +ephemeralities +ephemerality +ephemerally +ephemerals +ephemeras +ephemerid +ephemerides +ephemerids +ephemeris +ephemeron +ephod +ephods +ephor +ephoral +ephorate +ephorates +ephori +ephors +epiblast +epiblastic +epiblasts +epibolic +epibolies +epiboly +epic +epical +epically +epicalyces +epicalyx +epicalyxes +epicardia +epicardial +epicardium +epicarp +epicarps +epicedia +epicedium +epicene +epicenes +epicenism +epicenisms +epicenter +epicenters +epicentral +epichlorohydrin +epichlorohydrins +epiclike +epicontinental +epicotyl +epicotyls +epicritic +epics +epicure +epicurean +epicureanism +epicureanisms +epicureans +epicures +epicurism +epicurisms +epicuticle +epicuticles +epicuticular +epicycle +epicycles +epicyclic +epicycloid +epicycloidal +epicycloids +epidemic +epidemical +epidemically +epidemicities +epidemicity +epidemics +epidemiologic +epidemiological +epidemiologically +epidemiologies +epidemiologist +epidemiologists +epidemiology +epidendrum +epidendrums +epiderm +epidermal +epidermic +epidermis +epidermises +epidermoid +epiderms +epidiascope +epidiascopes +epididymal +epididymides +epididymis +epididymites +epididymitides +epididymitis +epididymitises +epidote +epidotes +epidotic +epidural +epifauna +epifaunae +epifaunal +epifaunas +epifocal +epigastric +epigeal +epigean +epigeic +epigene +epigeneses +epigenesis +epigenetic +epigenetically +epigenic +epigeous +epiglottal +epiglottic +epiglottides +epiglottis +epiglottises +epigon +epigone +epigones +epigoni +epigonic +epigonism +epigonisms +epigonous +epigons +epigonus +epigram +epigrammatic +epigrammatically +epigrammatism +epigrammatisms +epigrammatist +epigrammatists +epigrammatize +epigrammatized +epigrammatizer +epigrammatizers +epigrammatizes +epigrammatizing +epigrams +epigraph +epigrapher +epigraphers +epigraphic +epigraphical +epigraphically +epigraphies +epigraphist +epigraphists +epigraphs +epigraphy +epigynies +epigynous +epigyny +epilation +epilations +epilepsies +epilepsy +epileptic +epileptically +epileptics +epileptiform +epileptogenic +epileptoid +epilimnion +epilimnions +epilog +epilogs +epilogue +epilogued +epilogues +epiloguing +epimer +epimerase +epimerases +epimere +epimeres +epimeric +epimers +epimysia +epimysium +epinaoi +epinaos +epinasties +epinasty +epinephrin +epinephrine +epinephrines +epinephrins +epineuria +epineurium +epineuriums +epipelagic +epiphanic +epiphanies +epiphanous +epiphany +epiphenomena +epiphenomenal +epiphenomenalism +epiphenomenalisms +epiphenomenally +epiphenomenon +epiphragm +epiphragms +epiphyseal +epiphyses +epiphysial +epiphysis +epiphyte +epiphytes +epiphytic +epiphytically +epiphytism +epiphytisms +epiphytologies +epiphytology +epiphytotic +epiphytotics +episcia +episcias +episcopacies +episcopacy +episcopal +episcopally +episcopate +episcopates +episcope +episcopes +episiotomies +episiotomy +episode +episodes +episodic +episodical +episodically +episomal +episomally +episome +episomes +epistases +epistasies +epistasis +epistasy +epistatic +epistaxes +epistaxis +epistemic +epistemically +epistemological +epistemologically +epistemologies +epistemologist +epistemologists +epistemology +epistle +epistler +epistlers +epistles +epistolaries +epistolary +epistoler +epistolers +epistome +epistomes +epistrophe +epistrophes +epistyle +epistyles +epitaph +epitaphial +epitaphic +epitaphs +epitases +epitasis +epitaxial +epitaxially +epitaxic +epitaxies +epitaxy +epithalamia +epithalamic +epithalamion +epithalamium +epithalamiums +epithelia +epithelial +epithelialization +epithelializations +epithelialize +epithelialized +epithelializes +epithelializing +epithelioid +epithelioma +epitheliomas +epitheliomata +epitheliomatous +epithelium +epitheliums +epithelization +epithelizations +epithelize +epithelized +epithelizes +epithelizing +epithet +epithetic +epithetical +epithets +epitome +epitomes +epitomic +epitomical +epitomise +epitomised +epitomises +epitomising +epitomize +epitomized +epitomizes +epitomizing +epitope +epitopes +epizoa +epizoic +epizoism +epizoisms +epizoite +epizoites +epizoon +epizootic +epizootics +epizooties +epizootiologic +epizootiological +epizootiologies +epizootiology +epizooty +epoch +epochal +epochally +epochs +epode +epodes +eponym +eponymic +eponymies +eponymous +eponyms +eponymy +epopee +epopees +epopoeia +epopoeias +epos +eposes +epoxidation +epoxidations +epoxide +epoxides +epoxidize +epoxidized +epoxidizes +epoxidizing +epoxied +epoxies +epoxy +epoxyed +epoxying +epsilon +epsilonic +epsilons +equabilities +equability +equable +equableness +equablenesses +equably equal +equaled +equaling +equalise +equalised +equaliser +equalisers +equalises +equalising +equalitarian +equalitarianism +equalitarianisms +equalitarians +equalities equality +equalization +equalizations +equalize +equalized +equalizer +equalizers +equalizes +equalizing +equalled +equalling +equally +equals +equanimities +equanimity +equate +equated +equates +equating +equation +equational +equationally +equations +equator +equatorial +equators +equatorward +equerries +equerry +equestrian +equestrians +equestrienne +equestriennes +equiangular +equicaloric +equid +equidistant +equidistantly +equids +equilateral +equilibrant +equilibrants +equilibrate +equilibrated +equilibrates +equilibrating +equilibration +equilibrations +equilibrator +equilibrators +equilibratory +equilibria +equilibrist +equilibristic +equilibrists +equilibrium +equilibriums +equimolar +equine +equinely +equines +equinities +equinity +equinoctial +equinoctials +equinox +equinoxes equip +equipage +equipages equipment +equipments +equipoise +equipoised +equipoises +equipoising +equipollence +equipollences +equipollent +equipollently +equipollents +equiponderant +equipotential +equipped +equipper +equippers +equipping +equiprobable +equips +equiseta +equisetum +equisetums +equitabilities +equitability +equitable +equitableness +equitablenesses +equitably +equitant +equitation +equitations +equites +equities +equity +equivalence +equivalences +equivalencies +equivalency +equivalent +equivalently +equivalents +equivocal +equivocalities +equivocality +equivocally +equivocalness +equivocalnesses +equivocate +equivocated +equivocates +equivocating +equivocation +equivocations +equivocator +equivocators +equivoke +equivokes +equivoque +equivoques +er +era +eradiate +eradiated +eradiates +eradiating +eradicable +eradicate +eradicated +eradicates +eradicating +eradication +eradications +eradicator +eradicators +eras +erasabilities +erasability +erasable +erase +erased eraser +erasers +erases +erasing +erasion +erasions +erasure +erasures +erbium +erbiums +ere +erect +erectable +erected +erecter +erecters +erectile +erectilities +erectility +erecting +erection +erections +erective +erectly +erectness +erectnesses +erector +erectors +erects +erelong +eremite +eremites +eremitic +eremitical +eremitism +eremitisms +eremuri +eremurus +erenow +erepsin +erepsins +erethic +erethism +erethisms +erewhile +erewhiles +erg +ergastic +ergastoplasm +ergastoplasmic +ergastoplasms +ergate +ergates +ergative +ergo +ergodic +ergodicities +ergodicity +ergograph +ergographs +ergometer +ergometers +ergometric +ergonomic +ergonomically +ergonomics +ergonomist +ergonomists +ergonovine +ergonovines +ergosterol +ergosterols +ergot +ergotamine +ergotamines +ergotic +ergotism +ergotisms +ergotized +ergots +ergs +erica +ericaceous +ericas +ericoid +erigeron +erigerons +eringo +eringoes +eringos +eriophyid +eriophyids +eristic +eristical +eristically +eristics +erlking +erlkings +ermine +ermined +ermines +ern +erne +ernes +erns +erode +eroded +erodent +erodes +erodibilities +erodibility +erodible +eroding +erogenic +erogenous +eros +erose +erosely +eroses +erosible +erosion +erosional +erosionally +erosions +erosive +erosiveness +erosivenesses +erosivities +erosivity +erotic +erotica +erotical +erotically +eroticism +eroticisms +eroticist +eroticists +eroticization +eroticizations +eroticize +eroticized +eroticizes +eroticizing +erotics +erotism +erotisms +erotization +erotizations +erotize +erotized +erotizes +erotizing +erotogenic +err +errancies +errancy +errand +errands +errant +errantly +errantries +errantry +errants +errata +erratas +erratic +erratical +erratically +erraticism +erraticisms +erratics +erratum +erred +errhine +errhines +erring +erringly +erroneous +erroneously +erroneousness +erroneousnesses error +errorless +errors +errs +ers +ersatz +ersatzes +erses +erst +erstwhile +eruct +eructate +eructated +eructates +eructating +eructation +eructations +eructed +eructing +eructs +erudite +eruditely +erudition +eruditions +erugo +erugos +erumpent erupt +erupted +eruptible +erupting +eruption +eruptions +eruptive +eruptively +eruptives +erupts +ervil +ervils +eryngo +eryngoes +eryngos +erysipelas +erysipelases +erythema +erythemas +erythematous +erythorbate +erythorbates +erythremia +erythremias +erythrism +erythrismal +erythrisms +erythristic +erythrite +erythrites +erythroblast +erythroblastic +erythroblastoses +erythroblastosis +erythroblasts +erythrocyte +erythrocytes +erythrocytic +erythroid +erythromycin +erythromycins +erythron +erythrons +erythropoieses +erythropoiesis +erythropoietic +erythropoietin +erythropoietins +erythrosin +erythrosine +erythrosines +erythrosins +es +escadrille +escadrilles +escalade +escaladed +escalader +escaladers +escalades +escalading +escalate +escalated +escalates +escalating +escalation +escalations +escalator +escalators +escalatory +escallop +escalloped +escalloping +escallops +escalop +escaloped +escaloping +escalops +escapade +escapades escape +escaped +escapee +escapees +escapement +escapements +escaper +escapers +escapes +escaping +escapism +escapisms +escapist +escapists +escapologies +escapologist +escapologists +escapology +escar +escargot +escargots +escarole +escaroles +escarp +escarped +escarping +escarpment +escarpments +escarps +escars +eschalot +eschalots +eschar +escharotic +escharotics +eschars +eschatological +eschatologically +eschatologies +eschatology +escheat +escheatable +escheated +escheating +escheats +eschew +eschewal +eschewals +eschewed +eschewing +eschews +escolar +escolars +escort +escorted +escorting +escorts +escot +escoted +escoting +escots +escritoire +escritoires +escrow +escrowed +escrowing +escrows +escuage +escuages +escudo +escudos +esculent +esculents +escutcheon +escutcheons +esemplastic +eserine +eserines +eses +eskar +eskars +esker +eskers +esophageal +esophagi +esophagus +esoteric +esoterica +esoterically +esotericism +esotericisms +espadrille +espadrilles +espalier +espaliered +espaliering +espaliers +espanol +espanoles +esparto +espartos +especial especially +esperance +esperances +espial +espials +espied +espiegle +espieglerie +espiegleries +espies +espionage +espionages +esplanade +esplanades +espousal +espousals +espouse +espoused +espouser +espousers +espouses +espousing +espresso +espressos +esprit +esprits +espy +espying +esquire +esquired +esquires +esquiring +ess essay -europe -european +essayed +essayer +essayers +essaying +essayist +essayistic +essayists +essays +essence +essences +essential +essentialism +essentialisms +essentialist +essentialists +essentialities +essentiality +essentialize +essentialized +essentializes +essentializing +essentially +essentialness +essentialnesses +essentials +esses +essoin +essoins +essonite +essonites +establish +establishable +established +establisher +establishers +establishes +establishing +establishment +establishmentarian +establishmentarianism +establishmentarianisms +establishmentarians +establishments +estaminet +estaminets +estancia +estancias +estate +estated +estates +estating +esteem +esteemed +esteeming +esteems +ester +esterase +esterases +esterification +esterifications +esterified +esterifies +esterify +esterifying +esters +estheses +esthesia +esthesias +esthesis +esthesises +esthete +esthetes +esthetic +esthetician +estheticians +estheticism +estheticisms +esthetics +estimable +estimableness +estimablenesses +estimably +estimate +estimated +estimates +estimating +estimation +estimations +estimative +estimator +estimators +estival +estivate +estivated +estivates +estivating +estivation +estivations +estop +estopped +estoppel +estoppels +estopping +estops +estovers +estradiol +estradiols +estragon +estragons +estral +estrange +estranged +estrangement +estrangements +estranger +estrangers +estranges +estranging +estray +estrayed +estraying +estrays +estreat +estreated +estreating +estreats +estrin +estrins +estriol +estriols +estrogen +estrogenic +estrogenically +estrogens +estrone +estrones +estrous +estrual +estrum +estrums +estrus +estruses +estuarial +estuaries +estuarine +estuary +esurience +esuriences +esurient +esuriently +et +eta +etagere +etageres +etalon +etalons +etamin +etamine +etamines +etamins +etape +etapes +etas +etatism +etatisms +etatist +etcetera +etceteras +etch +etchant +etchants +etched +etcher +etchers +etches +etching +etchings +eternal +eternalize +eternalized +eternalizes +eternalizing +eternally +eternalness +eternalnesses +eternals +eterne +eternise +eternised +eternises +eternising +eternities +eternity +eternization +eternizations +eternize +eternized +eternizes +eternizing +etesian +etesians +eth +ethambutol +ethambutols +ethane +ethanes +ethanol +ethanolamine +ethanolamines +ethanols +ethene +ethenes +ethephon +ethephons +ether +ethereal +etherealities +ethereality +etherealization +etherealizations +etherealize +etherealized +etherealizes +etherealizing +ethereally +etherealness +etherealnesses +etheric +etherified +etherifies +etherify +etherifying +etherish +etherization +etherizations +etherize +etherized +etherizer +etherizers +etherizes +etherizing +ethers +ethic +ethical +ethicalities +ethicality +ethically +ethicalness +ethicalnesses +ethicals +ethician +ethicians +ethicist +ethicists +ethicize +ethicized +ethicizes +ethicizing +ethics +ethinyl +ethinyls +ethion +ethionamide +ethionamides +ethionine +ethionines +ethions +ethmoid +ethmoidal +ethmoids +ethnarch +ethnarchs +ethnic +ethnical +ethnically +ethnicities +ethnicity +ethnics +ethnobotanical +ethnobotanies +ethnobotanist +ethnobotanists +ethnobotany +ethnocentric +ethnocentricities +ethnocentricity +ethnocentrism +ethnocentrisms +ethnographer +ethnographers +ethnographic +ethnographical +ethnographically +ethnographies +ethnography +ethnohistorian +ethnohistorians +ethnohistoric +ethnohistorical +ethnohistories +ethnohistory +ethnologic +ethnological +ethnologies +ethnologist +ethnologists +ethnology +ethnomethodologies +ethnomethodologist +ethnomethodologists +ethnomethodology +ethnomusicological +ethnomusicologies +ethnomusicologist +ethnomusicologists +ethnomusicology +ethnos +ethnoscience +ethnosciences +ethnoses +ethological +ethologies +ethologist +ethologists +ethology +ethos +ethoses +ethoxies +ethoxy +ethoxyl +ethoxyls +eths +ethyl +ethylate +ethylated +ethylates +ethylating +ethylbenzene +ethylbenzenes +ethylene +ethylenediaminetetraacetate +ethylenediaminetetraacetates +ethylenes +ethylenic +ethylic +ethyls +ethyne +ethynes +ethynyl +ethynyls +etic +etiolate +etiolated +etiolates +etiolating +etiolation +etiolations +etiologic +etiological +etiologically +etiologies +etiology +etiquette +etiquettes +etna +etnas +etoile +etoiles +etouffee +etouffees +etude +etudes +etui +etuis +etwee +etwees +etyma +etymological +etymologically +etymologies +etymologise +etymologised +etymologises +etymologising +etymologist +etymologists +etymologize +etymologized +etymologizes +etymologizing +etymology +etymon +etymons +eucaine +eucaines +eucalypt +eucalypti +eucalyptol +eucalyptole +eucalyptoles +eucalyptols +eucalypts +eucalyptus +eucalyptuses +eucaryote +eucaryotes +eucharis +eucharises +eucharistic +euchre +euchred +euchres +euchring +euchromatic +euchromatin +euchromatins +euclase +euclases +euclidean +euclidian +eucrite +eucrites +eucritic +eudaemon +eudaemonism +eudaemonisms +eudaemonist +eudaemonistic +eudaemonists +eudaemons +eudaimonism +eudaimonisms +eudemon +eudemons +eudiometer +eudiometers +eudiometric +eudiometrically +eugenia +eugenias +eugenic +eugenically +eugenicist +eugenicists +eugenics +eugenist +eugenists +eugenol +eugenols +eugeosynclinal +eugeosyncline +eugeosynclines +euglena +euglenas +euglenoid +euglenoids +euglobulin +euglobulins +euhemerism +euhemerisms +euhemerist +euhemeristic +euhemerists +eukaryote +eukaryotes +eukaryotic +eulachan +eulachans +eulachon +eulachons +eulogia +eulogiae +eulogias +eulogies +eulogise +eulogised +eulogises +eulogising +eulogist +eulogistic +eulogistically +eulogists +eulogium +eulogiums +eulogize +eulogized +eulogizer +eulogizers +eulogizes +eulogizing +eulogy +eunuch +eunuchism +eunuchisms +eunuchoid +eunuchoids +eunuchs +euonymus +euonymuses +eupatrid +eupatridae +eupatrids +eupepsia +eupepsias +eupepsies +eupepsy +eupeptic +euphausiid +euphausiids +euphemise +euphemised +euphemises +euphemising +euphemism +euphemisms +euphemist +euphemistic +euphemistically +euphemists +euphemize +euphemized +euphemizer +euphemizers +euphemizes +euphemizing +euphenic +euphenics +euphonic +euphonically +euphonies +euphonious +euphoniously +euphoniousness +euphoniousnesses +euphonium +euphoniums +euphony +euphorbia +euphorbias +euphoria +euphoriant +euphoriants +euphorias +euphoric +euphorically +euphotic +euphrasies +euphrasy +euphroe +euphroes +euphuism +euphuisms +euphuist +euphuistic +euphuistically +euphuists +euploid +euploidies +euploids +euploidy +eupnea +eupneas +eupneic +eupnoea +eupnoeas +eupnoeic +eureka +eurhythmic +eurhythmics +eurhythmies +eurhythmy +euripi +euripus +euro +eurokies +eurokous +euroky +europium +europiums +euros +eurybath +eurybathic +eurybaths +euryhaline +euryokies +euryoky +eurypterid +eurypterids +eurythermal +eurythermic +eurythermous +eurythmic +eurythmics +eurythmies +eurythmy +eurytopic +eustacies +eustacy +eustatic +eustele +eusteles +eutaxies +eutaxy +eutectic +eutectics +eutectoid +eutectoids +euthanasia +euthanasias +euthanasic +euthanatize +euthanatized +euthanatizes +euthanatizing +euthanize +euthanized +euthanizes +euthanizing +euthenics +euthenist +euthenists +eutherian +eutherians +euthyroid +eutrophic +eutrophication +eutrophications +eutrophies +eutrophy +euxenite +euxenites +evacuant +evacuants +evacuate +evacuated +evacuates +evacuating +evacuation +evacuations +evacuative +evacuee +evacuees +evadable +evade +evaded +evader +evaders +evades +evadible +evading +evagination +evaginations evaluate +evaluated +evaluates +evaluating +evaluation +evaluations +evaluative +evaluator +evaluators +evanesce +evanesced +evanescence +evanescences +evanescent +evanesces +evanescing +evangel +evangelic +evangelical +evangelically +evangelism +evangelisms +evangelist +evangelistic +evangelistically +evangelists +evangelization +evangelizations +evangelize +evangelized +evangelizes +evangelizing +evangels +evanish +evanished +evanishes +evanishing +evaporate +evaporated +evaporates +evaporating +evaporation +evaporations +evaporative +evaporator +evaporators +evaporite +evaporites +evaporitic +evapotranspiration +evapotranspirations +evasion +evasions +evasive +evasively +evasiveness +evasivenesses +eve +evection +evections even +evened +evener +eveners +evenest +evenfall +evenfalls +evenhanded +evenhandedly +evenhandedness +evenhandednesses evening +evenings +evenly +evenness +evennesses +evens +evensong +evensongs event +eventful +eventfully +eventfulness +eventfulnesses +eventide +eventides +eventless +events +eventual +eventualities +eventuality +eventually +eventuate +eventuated +eventuates +eventuating ever +everblooming +everduring +everglade +everglades +evergreen +evergreens +everlasting +everlastingly +everlastingness +everlastingnesses +everlastings +evermore +eversible +eversion +eversions +evert +everted +everting +evertor +evertors +everts every everybody everyday +everydayness +everydaynesses +everyman +everymen everyone +everyplace everything +everyway everywhere +everywoman +everywomen +eves +evict +evicted +evictee +evictees +evicting +eviction +evictions +evictor +evictors +evicts evidence +evidenced +evidences +evidencing evident +evidential +evidentially +evidentiary +evidently +evil +evildoer +evildoers +evildoing +evildoings +eviler +evilest +eviller +evillest +evilly +evilness +evilnesses +evils +evince +evinced +evinces +evincible +evincing +evincive +eviscerate +eviscerated +eviscerates +eviscerating +evisceration +eviscerations +evitable +evite +evited +evites +eviting +evocable +evocation +evocations +evocative +evocatively +evocativeness +evocativenesses +evocator +evocators +evoke +evoked +evoker +evokers +evokes +evoking +evolute +evolutes evolution +evolutionarily +evolutionary +evolutionism +evolutionisms +evolutionist +evolutionists +evolutions +evolvable +evolve +evolved +evolvement +evolvements +evolver +evolvers +evolves +evolving +evonymus +evonymuses +evulsion +evulsions +evzone +evzones +ewe +ewer +ewers +ewes +ex +exacerbate +exacerbated +exacerbates +exacerbating +exacerbation +exacerbations exact +exacta +exactable +exactas +exacted +exacter +exacters +exactest +exacting +exactingly +exactingness +exactingnesses +exaction +exactions +exactitude +exactitudes +exactly +exactness +exactnesses +exactor +exactors +exacts +exaggerate +exaggerated +exaggeratedly +exaggeratedness +exaggeratednesses +exaggerates +exaggerating +exaggeration +exaggerations +exaggerative +exaggerator +exaggerators +exaggeratory +exalt +exaltation +exaltations +exalted +exaltedly +exalter +exalters +exalting +exalts exam +examen +examens +examinable +examinant +examinants examination +examinational +examinations examine +examined +examinee +examinees +examiner +examiners +examines +examining example +exampled +examples +exampling +exams +exanimate +exanthem +exanthema +exanthemas +exanthemata +exanthematic +exanthematous +exanthems +exarch +exarchal +exarchate +exarchates +exarchies +exarchs +exarchy +exasperate +exasperated +exasperatedly +exasperates +exasperating +exasperatingly +exasperation +exasperations +excavate +excavated +excavates +excavating +excavation +excavational +excavations +excavator +excavators +exceed +exceeded +exceeder +exceeders +exceeding +exceedingly +exceeds +excel +excelled +excellence +excellences +excellencies +excellency excellent +excellently +excelling +excels +excelsior +excelsiors except +excepted +excepting +exception +exceptionabilities +exceptionability +exceptionable +exceptionably +exceptional +exceptionalism +exceptionalisms +exceptionalities +exceptionality +exceptionally +exceptionalness +exceptionalnesses +exceptions +exceptive +excepts +excerpt +excerpted +excerpter +excerpters +excerpting +excerption +excerptions +excerptor +excerptors +excerpts +excess +excessed +excesses +excessing +excessive +excessively +excessiveness +excessivenesses exchange +exchangeabilities +exchangeability +exchangeable +exchanged +exchanger +exchangers +exchanges +exchanging +exchequer +exchequers +excide +excided +excides +exciding +excimer +excimers +excipient +excipients +exciple +exciples +excisable +excise +excised +exciseman +excisemen +excises +excising +excision +excisional +excisions +excitabilities +excitability +excitable +excitableness +excitablenesses +excitant +excitants +excitation +excitations +excitative +excitatory excite +excited +excitedly +excitement +excitements +exciter +exciters +excites +exciting +excitingly +exciton +excitonic +excitons +excitor +excitors +exclaim +exclaimed +exclaimer +exclaimers +exclaiming +exclaims +exclamation +exclamations +exclamatory +exclave +exclaves +excludabilities +excludability +excludable +exclude +excluded +excluder +excluders +excludes +excludible +excluding +exclusion +exclusionary +exclusionist +exclusionists +exclusions +exclusive +exclusively +exclusiveness +exclusivenesses +exclusives +exclusivism +exclusivisms +exclusivist +exclusivists +exclusivities +exclusivity +excogitate +excogitated +excogitates +excogitating +excogitation +excogitations +excogitative +excommunicate +excommunicated +excommunicates +excommunicating +excommunication +excommunications +excommunicative +excommunicator +excommunicators +excoriate +excoriated +excoriates +excoriating +excoriation +excoriations +excrement +excremental +excrementitious +excrements +excrescence +excrescences +excrescencies +excrescency +excrescent +excrescently +excreta +excretal +excrete +excreted +excreter +excreters +excretes +excreting +excretion +excretions +excretory +excruciate +excruciated +excruciates +excruciating +excruciatingly +excruciation +excruciations +exculpate +exculpated +exculpates +exculpating +exculpation +exculpations +exculpatory +excurrent +excursion +excursionist +excursionists +excursions +excursive +excursively +excursiveness +excursivenesses +excursus +excursuses +excusable +excusableness +excusablenesses +excusably +excusatory excuse +excused +excuser +excusers +excuses +excusing +exec +execrable +execrableness +execrablenesses +execrably +execrate +execrated +execrates +execrating +execration +execrations +execrative +execrator +execrators +execs +executable +executables +executant +executants +execute +executed +executer +executers +executes +executing +execution +executioner +executioners +executions +executive +executives +executor +executorial +executors +executorship +executorships +executory +executrices +executrix +executrixes +exedra +exedrae +exegeses +exegesis +exegete +exegetes +exegetic +exegetical +exegetist +exegetists +exempla +exemplar +exemplarily +exemplariness +exemplarinesses +exemplarities +exemplarity +exemplars +exemplary +exemplification +exemplifications +exemplified +exemplifies +exemplify +exemplifying +exemplum +exempt +exempted +exempting +exemption +exemptions +exempts +exenterate +exenterated +exenterates +exenterating +exenteration +exenterations +exequial +exequies +exequy +exercisable exercise +exercised +exerciser +exercisers +exercises +exercising +exercitation +exercitations +exergonic +exergual +exergue +exergues +exert +exerted +exerting +exertion +exertions +exertive +exerts +exes +exeunt +exfoliate +exfoliated +exfoliates +exfoliating +exfoliation +exfoliations +exfoliative +exhalant +exhalants +exhalation +exhalations +exhale +exhaled +exhalent +exhalents +exhales +exhaling +exhaust +exhausted +exhauster +exhausters +exhaustibilities +exhaustibility +exhaustible +exhausting +exhaustion +exhaustions +exhaustive +exhaustively +exhaustiveness +exhaustivenesses +exhaustivities +exhaustivity +exhaustless +exhaustlessly +exhaustlessness +exhaustlessnesses +exhausts +exhibit +exhibited +exhibiting exhibition +exhibitioner +exhibitioners +exhibitionism +exhibitionisms +exhibitionist +exhibitionistic +exhibitionistically +exhibitionists +exhibitions +exhibitive +exhibitor +exhibitors +exhibitory +exhibits +exhilarate +exhilarated +exhilarates +exhilarating +exhilaratingly +exhilaration +exhilarations +exhilarative +exhort +exhortation +exhortations +exhortative +exhortatory +exhorted +exhorter +exhorters +exhorting +exhorts +exhumation +exhumations +exhume +exhumed +exhumer +exhumers +exhumes +exhuming +exigence +exigences +exigencies +exigency +exigent +exigently +exigible +exiguities +exiguity +exiguous +exiguously +exiguousness +exiguousnesses +exile +exiled +exiles +exilian +exilic +exiling +eximious +exine +exines exist +existed existence +existences +existent +existential +existentialism +existentialisms +existentialist +existentialistic +existentialistically +existentialists +existentially +existents +existing +exists exit +exited +exiting +exitless +exits +exobiological +exobiologies +exobiologist +exobiologists +exobiology +exocarp +exocarps +exocrine +exocrines +exocyclic +exocytoses +exocytosis +exocytotic +exoderm +exodermis +exodermises +exoderms +exodoi +exodontia +exodontias +exodontist +exodontists +exodos +exodus +exoduses +exoenzyme +exoenzymes +exoergic +exoerythrocytic +exogamic +exogamies +exogamous +exogamy +exogen +exogenous +exogenously +exogens +exon +exonerate +exonerated +exonerates +exonerating +exoneration +exonerations +exonerative +exonic +exons +exonuclease +exonucleases +exonumia +exopeptidase +exopeptidases +exophthalmic +exophthalmos +exophthalmoses +exophthalmus +exophthalmuses +exorable +exorbitance +exorbitances +exorbitant +exorbitantly +exorcise +exorcised +exorciser +exorcisers +exorcises +exorcising +exorcism +exorcisms +exorcist +exorcistic +exorcistical +exorcists +exorcize +exorcized +exorcizes +exorcizing +exordia +exordial +exordium +exordiums +exoskeletal +exoskeleton +exoskeletons +exosmic +exosmose +exosmoses +exosphere +exospheres +exospheric +exospore +exospores +exostoses +exostosis +exoteric +exoterically +exothermal +exothermally +exothermic +exothermically +exothermicities +exothermicity +exotic +exotica +exotically +exoticism +exoticisms +exoticness +exoticnesses +exotics +exotism +exotisms +exotoxic +exotoxin +exotoxins expand +expandabilities +expandability +expandable +expanded +expander +expanders +expanding +expandor +expandors +expands +expanse +expanses +expansibilities +expansibility +expansible +expansion +expansional +expansionary +expansionism +expansionisms +expansionist +expansionistic +expansionists +expansions +expansive +expansively +expansiveness +expansivenesses +expansivities +expansivity +expat +expatiate +expatiated +expatiates +expatiating +expatiation +expatiations +expatriate +expatriated +expatriates +expatriating +expatriation +expatriations +expatriatism +expatriatisms +expats expect +expectable +expectably +expectance +expectances +expectancies +expectancy +expectant +expectantly +expectants expectation +expectational +expectations +expectative +expected +expectedly +expectedness +expectednesses +expecting +expectorant +expectorants +expectorate +expectorated +expectorates +expectorating +expectoration +expectorations +expects +expedience +expediences +expediencies +expediency +expedient +expediential +expediently +expedients +expedite +expedited +expediter +expediters +expedites +expediting +expedition +expeditionary +expeditions +expeditious +expeditiously +expeditiousness +expeditiousnesses +expeditor +expeditors +expel +expellable +expelled +expellee +expellees +expeller +expellers +expelling +expels +expend +expendabilities +expendability +expendable +expendables +expended +expender +expenders +expending +expenditure +expenditures +expends expense +expensed +expenses +expensing expensive +expensively +expensiveness +expensivenesses experience +experienced +experiences +experiencing +experiential +experientially experiment +experimental +experimentalism +experimentalisms +experimentalist +experimentalists +experimentally +experimentation +experimentations +experimented +experimenter +experimenters +experimenting +experiments expert +experted +experting +expertise +expertises +expertism +expertisms +expertize +expertized +expertizes +expertizing +expertly +expertness +expertnesses +experts +expiable +expiate +expiated +expiates +expiating +expiation +expiations +expiator +expiators +expiatory +expiration +expirations +expiratory +expire +expired +expirer +expirers +expires +expiries +expiring +expiry explain +explainable +explained +explainer +explainers +explaining +explains explanation +explanations +explanative +explanatively +explanatorily +explanatory +explant +explantation +explantations +explanted +explanting +explants +expletive +expletives +expletory +explicable +explicably +explicate +explicated +explicates +explicating +explication +explications +explicative +explicatively +explicator +explicators +explicatory explicit +explicitly +explicitness +explicitnesses +explicits explode +exploded +exploder +exploders +explodes +exploding +exploit +exploitable +exploitation +exploitations +exploitative +exploitatively +exploited +exploiter +exploiters +exploiting +exploitive +exploits +exploration +explorational +explorations +explorative +exploratively +exploratory explore +explored +explorer +explorers +explores +exploring +explosion +explosions +explosive +explosively +explosiveness +explosivenesses +explosives +expo +exponent +exponential +exponentially +exponentials +exponentiation +exponentiations +exponents export +exportabilities +exportability +exportable +exportation +exportations +exported +exporter +exporters +exporting +exports +expos +exposal +exposals expose +exposed +exposer +exposers +exposes +exposing +exposit +exposited +expositing +exposition +expositional +expositions +expositive +expositor +expositors +expository +exposits +expostulate +expostulated +expostulates +expostulating +expostulation +expostulations +expostulatory +exposure +exposures +expound +expounded +expounder +expounders +expounding +expounds express +expressage +expressages +expressed +expresser +expressers +expresses +expressible +expressing expression +expressional +expressionism +expressionisms +expressionist +expressionistic +expressionistically +expressionists +expressionless +expressionlessly +expressionlessness +expressionlessnesses +expressions +expressive +expressively +expressiveness +expressivenesses +expressivities +expressivity +expressly +expressman +expressmen +expresso +expressos +expressway +expressways +expropriate +expropriated +expropriates +expropriating +expropriation +expropriations +expropriator +expropriators +expulse +expulsed +expulses +expulsing +expulsion +expulsions +expulsive +expunction +expunctions +expunge +expunged +expunger +expungers +expunges +expunging +expurgate +expurgated +expurgates +expurgating +expurgation +expurgations +expurgator +expurgatorial +expurgators +expurgatory +exquisite +exquisitely +exquisiteness +exquisitenesses +exquisites +exsanguinate +exsanguinated +exsanguinates +exsanguinating +exsanguination +exsanguinations +exscind +exscinded +exscinding +exscinds +exsecant +exsecants +exsect +exsected +exsecting +exsects +exsert +exserted +exsertile +exserting +exsertion +exsertions +exserts +exsiccate +exsiccated +exsiccates +exsiccating +exsiccation +exsiccations +exsolution +exsolutions +extant +extemporal +extemporally +extemporaneities +extemporaneity +extemporaneous +extemporaneously +extemporaneousness +extemporaneousnesses +extemporarily +extemporary +extempore +extemporisation +extemporisations +extemporise +extemporised +extemporises +extemporising +extemporization +extemporizations +extemporize +extemporized +extemporizer +extemporizers +extemporizes +extemporizing +extend +extendabilities +extendability +extendable +extended +extendedly +extendedness +extendednesses +extender +extenders +extendible +extending +extends +extensibilities +extensibility +extensible +extensile extension +extensional +extensionalities +extensionality +extensionally +extensions +extensities +extensity +extensive +extensively +extensiveness +extensivenesses +extensometer +extensometers +extensor +extensors +extent +extents +extenuate +extenuated +extenuates +extenuating +extenuation +extenuations +extenuator +extenuators +extenuatory +exterior +exteriorise +exteriorised +exteriorises +exteriorising +exteriorities +exteriority +exteriorization +exteriorizations +exteriorize +exteriorized +exteriorizes +exteriorizing +exteriorly +exteriors +exterminate +exterminated +exterminates +exterminating +extermination +exterminations +exterminator +exterminators +exterminatory +extermine +extermined +extermines +extermining +extern +external +externalisation +externalisations +externalise +externalised +externalises +externalising +externalism +externalisms +externalities +externality +externalization +externalizations +externalize +externalized +externalizes +externalizing +externally +externals +externe +externes +externs +externship +externships +exteroceptive +exteroceptor +exteroceptors +exterritorial +exterritorialities +exterritoriality +extinct +extincted +extincting +extinction +extinctions +extinctive +extincts +extinguish +extinguishable +extinguished +extinguisher +extinguishers +extinguishes +extinguishing +extinguishment +extinguishments +extirpate +extirpated +extirpates +extirpating +extirpation +extirpations +extirpator +extirpators +extol +extoll +extolled +extoller +extollers +extolling +extolls +extolment +extolments +extols +extort +extorted +extorter +extorters +extorting +extortion +extortionary +extortionate +extortionately +extortioner +extortioners +extortionist +extortionists +extortions +extortive +extorts extra +extracellular +extracellularly +extrachromosomal +extracorporeal +extracorporeally +extracranial +extract +extractabilities +extractability +extractable +extracted +extracting +extraction +extractions +extractive +extractively +extractives +extractor +extractors +extracts +extracurricular +extracurriculars +extraditable +extradite +extradited +extradites +extraditing +extradition +extraditions +extrados +extradoses +extraembryonic +extragalactic +extrahepatic +extrajudicial +extrajudicially +extralegal +extralegally +extralimital +extralinguistic +extralinguistically +extraliterary +extralities +extrality +extralogical +extramarital +extramundane +extramural +extramurally +extramusical +extraneous +extraneously +extraneousness +extraneousnesses +extranuclear +extraordinaire +extraordinarily +extraordinariness +extraordinarinesses extraordinary +extrapolate +extrapolated +extrapolates +extrapolating +extrapolation +extrapolations +extrapolative +extrapolator +extrapolators +extrapyramidal +extras +extrasensory +extrasystole +extrasystoles +extraterrestrial +extraterrestrials +extraterritorial +extraterritorialities +extraterritoriality +extratextual +extrauterine +extravagance +extravagances +extravagancies +extravagancy +extravagant +extravagantly +extravaganza +extravaganzas +extravagate +extravagated +extravagates +extravagating +extravasate +extravasated +extravasates +extravasating +extravasation +extravasations +extravascular +extravehicular +extraversion +extraversions +extravert +extraverted +extraverts +extrema extreme +extremely +extremeness +extremenesses +extremer +extremes +extremest +extremism +extremisms +extremist +extremists +extremities +extremity +extremum +extricable +extricate +extricated +extricates +extricating +extrication +extrications +extrinsic +extrinsically +extrorse +extroversion +extroversions +extrovert +extroverted +extroverts +extrudabilities +extrudability +extrudable +extrude +extruded +extruder +extruders +extrudes +extruding +extrusion +extrusions +extrusive +extubate +extubated +extubates +extubating +exuberance +exuberances +exuberant +exuberantly +exuberate +exuberated +exuberates +exuberating +exudate +exudates +exudation +exudations +exudative +exude +exuded +exudes +exuding +exult +exultance +exultances +exultancies +exultancy +exultant +exultantly +exultation +exultations +exulted +exulting +exultingly +exults +exurb +exurban +exurbanite +exurbanites +exurbia +exurbias +exurbs +exuvia +exuviae +exuvial +exuviate +exuviated +exuviates +exuviating +exuviation +exuviations +exuvium +eyas +eyases eye +eyeable +eyeball +eyeballed +eyeballing +eyeballs +eyebar +eyebars +eyebeam +eyebeams +eyebolt +eyebolts +eyebright +eyebrights +eyebrow +eyebrows +eyecup +eyecups +eyed +eyedness +eyednesses +eyedropper +eyedroppers +eyedrops +eyeful +eyefuls +eyeglass +eyeglasses +eyehole +eyeholes +eyehook +eyehooks +eyeing +eyelash +eyelashes +eyeless +eyelet +eyelets +eyeletted +eyeletting +eyelid +eyelids +eyelike +eyeliner +eyeliners +eyen +eyepiece +eyepieces +eyepoint +eyepoints +eyepopper +eyepoppers +eyer +eyers +eyes +eyeshade +eyeshades +eyeshot +eyeshots eyesight +eyesights +eyesome +eyesore +eyesores +eyespot +eyespots +eyestalk +eyestalks +eyestone +eyestones +eyestrain +eyestrains +eyestrings +eyeteeth +eyetooth +eyewash +eyewashes +eyewater +eyewaters +eyewear +eyewink +eyewinks +eyewitness +eyewitnesses +eying +eyne +eyra +eyras +eyre +eyres +eyrie +eyries +eyrir +eyry +fa +fable +fabled +fabler +fablers +fables +fabliau +fabliaux +fabling +fabric +fabricant +fabricants +fabricate +fabricated +fabricates +fabricating +fabrication +fabrications +fabricator +fabricators +fabrics +fabular +fabulist +fabulistic +fabulists +fabulous +fabulously +fabulousness +fabulousnesses +facade +facades face +faceable +facecloth +facecloths +faced +facedown +facedowns +faceless +facelessness +facelessnesses +faceplate +faceplates +facer +facers +faces +facet +facete +faceted +facetely +facetiae +faceting +facetious +facetiously +facetiousness +facetiousnesses +facets +facetted +facetting +faceup +facia facial +facially +facials +facias +faciend +faciends +facies +facile +facilely +facileness +facilenesses +facilitate +facilitated +facilitates +facilitating +facilitation +facilitations +facilitative +facilitator +facilitators +facilitatory +facilities +facility +facing +facings +facsimile +facsimiles fact +factful +facticities +facticity +faction +factional +factionalism +factionalisms +factionally +factions +factious +factiously +factiousness +factiousnesses +factitious +factitiously +factitiousness +factitiousnesses +factitive +factitively +factoid +factoids +factor +factorable +factorage +factorages +factored +factorial +factorials +factories +factoring +factorization +factorizations +factorize +factorized +factorizes +factorizing +factors +factorship +factorships factory +factorylike +factotum +factotums +facts +factual +factualism +factualisms +factualist +factualists +factualities +factuality +factually +factualness +factualnesses +facture +factures +facula +faculae +facular +facultative +facultatively +faculties +faculty +fad +fadable +faddier +faddiest +faddish +faddishness +faddishnesses +faddism +faddisms +faddist +faddists +faddy fade +fadeaway +fadeaways +faded +fadedly +fadeless +fader +faders +fades +fadge +fadged +fadges +fadging +fading +fadings +fado +fados +fads +faecal +faeces +faena +faenas +faerie +faeries +faery +fag +fagged +fagging +faggot +faggoted +faggoting +faggotings +faggotries +faggotry +faggots +faggoty +faggy +fagin +fagins +fagot +fagoted +fagoter +fagoters +fagoting +fagotings +fagots +fags +fahlband +fahlbands +faience +faiences fail +failed +failing +failingly +failings +faille +failles +fails failure +failures +fain +faineant +faineants +fainer +fainest +faint +fainted +fainter +fainters +faintest +fainthearted +faintheartedly +faintheartedness +faintheartednesses +fainting +faintish +faintishness +faintishnesses +faintly +faintness +faintnesses +faints fair +faired +fairer +fairest +fairground +fairgrounds +fairies +fairing +fairings +fairish +fairishly +fairlead +fairleader +fairleaders +fairleads +fairly +fairness +fairnesses +fairs +fairway +fairways +fairy +fairyism +fairyisms +fairyland +fairylands +fairylike faith +faithed +faithful +faithfully +faithfulness +faithfulnesses +faithfuls +faithing +faithless +faithlessly +faithlessness +faithlessnesses +faiths +faitour +faitours +fajita +fajitas +fake +faked +fakeer +fakeers +faker +fakeries +fakers +fakery +fakes +fakey +faking +fakir +fakirs +falafel +falbala +falbalas +falcate +falcated +falces +falchion +falchions +falciform +falcon +falconer +falconers +falconet +falconets +falconine +falconries +falconry +falcons +falderal +falderals +falderol +falderols +faldstool +faldstools fall +fallacies +fallacious +fallaciously +fallaciousness +fallaciousnesses +fallacy +fallal +fallaleries +fallalery +fallals +fallaway +fallaways +fallback +fallbacks +fallen +faller +fallers +fallfish +fallfishes +fallibilities +fallibility +fallible +fallibly +falling +falloff +falloffs +fallout +fallouts +fallow +fallowed +fallowing +fallowness +fallownesses +fallows +falls false +falsehood +falsehoods +falsely +falseness +falsenesses +falser +falsest +falsetto +falsettos +falsework +falseworks +falsie +falsies +falsifiabilities +falsifiability +falsifiable +falsification +falsifications +falsified +falsifier +falsifiers +falsifies +falsify +falsifying +falsities +falsity +faltboat +faltboats +falter +faltered +falterer +falterers +faltering +falteringly +falters +falx +fame +famed +fameless +fames +familial familiar +familiarise +familiarised +familiarises +familiarising +familiarities +familiarity +familiarization +familiarizations +familiarize +familiarized +familiarizes +familiarizing +familiarly +familiarness +familiarnesses +familiars +families +familism +familisms +familistic family +famine +famines +faming +famish +famished +famishes +famishing +famishment +famishments famous +famously +famousness +famousnesses +famuli +famulus fan +fanatic +fanatical +fanatically +fanaticalness +fanaticalnesses +fanaticism +fanaticisms +fanaticize +fanaticized +fanaticizes +fanaticizing +fanatics +fancied +fancier +fanciers +fancies +fanciest +fancified +fancifies +fanciful +fancifully +fancifulness +fancifulnesses +fancify +fancifying +fancily +fanciness +fancinesses fancy +fancying +fancywork +fancyworks +fandango +fandangos +fandom +fandoms +fane +fanega +fanegada +fanegadas +fanegas +fanes +fanfare +fanfares +fanfaron +fanfaronade +fanfaronades +fanfarons +fanfold +fanfolded +fanfolding +fanfolds +fang +fanga +fangas +fanged +fangless +fanglike +fangs +fanion +fanions +fanjet +fanjets +fanlight +fanlights +fanlike +fanned +fanner +fanners +fannies +fanning +fanny +fano +fanon +fanons +fanos +fans +fantabulous +fantail +fantails +fantasia +fantasias +fantasie +fantasied +fantasies +fantasise +fantasised +fantasises +fantasising +fantasist +fantasists +fantasize +fantasized +fantasizer +fantasizers +fantasizes +fantasizing +fantasm +fantasms +fantast fantastic +fantastical +fantasticalities +fantasticality +fantastically +fantasticalness +fantasticalnesses +fantasticate +fantasticated +fantasticates +fantasticating +fantastication +fantastications +fantastico +fantasticoes +fantastics +fantasts fantasy +fantasying +fantasyland +fantasylands +fantoccini +fantod +fantods +fantom +fantoms +fanum +fanums +fanwise +fanwort +fanworts +fanzine +fanzines +faqir +faqirs +faquir +faquirs far +farad +faradaic +faraday +faradays +faradic +faradise +faradised +faradises +faradising +faradism +faradisms +faradize +faradized +faradizes +faradizing +farads +farandole +farandoles +faraway +farce +farced +farcer +farcers +farces +farceur +farceurs +farci +farcical +farcicalities +farcicality +farcically +farcie +farcies +farcing +farcy +fard +farded +fardel +fardels +farding +fards fare +fared +farer +farers +fares +farewell +farewelled +farewelling +farewells +farfal +farfals +farfel +farfels +farfetchedness +farfetchednesses +farina +farinaceous +farinas +faring +farinha +farinhas +farinose +farkleberries +farkleberry +farl +farle +farles +farls farm +farmable +farmed farmer +farmerette +farmerettes +farmers +farmhand +farmhands +farmhouse +farmhouses +farming +farmings +farmland +farmlands +farms +farmstead +farmsteads +farmwife +farmwives +farmwork +farmworker +farmworkers +farmworks +farmyard +farmyards +farnesol +farnesols +farness +farnesses +faro +faros +farouche +farraginous +farrago +farragoes +farrier +farrieries +farriers +farriery +farrow +farrowed +farrowing +farrows +farseeing +farside +farsides +farsighted +farsightedly +farsightedness +farsightednesses +fart +farted +farther +farthermost +farthest +farthing +farthingale +farthingales +farthings +farting +farts +fas +fasces +fascia +fasciae +fascial +fascias +fasciate +fasciated +fasciation +fasciations +fascicle +fascicled +fascicles +fascicular +fascicularly +fasciculate +fasciculated +fasciculation +fasciculations +fascicule +fascicules +fasciculi +fasciculus +fascinate +fascinated +fascinates +fascinating +fascinatingly +fascination +fascinations +fascinator +fascinators +fascine +fascines +fascioliases +fascioliasis +fascism +fascisms +fascist +fascistic +fascistically +fascists +fash +fashed +fashes +fashing +fashion +fashionabilities +fashionability +fashionable +fashionableness +fashionablenesses +fashionables +fashionably +fashioned +fashioner +fashioners +fashioning +fashionmonger +fashionmongers +fashions +fashious fast +fastback +fastbacks +fastball +fastballer +fastballers +fastballs +fasted fasten +fastened +fastener +fasteners +fastening +fastenings +fastens +faster +fastest +fastidious +fastidiously +fastidiousness +fastidiousnesses +fastigiate +fasting +fastings +fastness +fastnesses +fasts +fastuous fat +fatal +fatalism +fatalisms +fatalist +fatalistic +fatalistically +fatalists +fatalities +fatality +fatally +fatback +fatbacks +fatbird +fatbirds +fate +fated +fateful +fatefully +fatefulness +fatefulnesses +fates +fathead +fatheaded +fatheadedly +fatheadedness +fatheadednesses +fatheads father +fathered +fatherhood +fatherhoods +fathering +fatherland +fatherlands +fatherless +fatherlike +fatherliness +fatherlinesses +fatherly +fathers +fathom +fathomable +fathomed +fathoming +fathomless +fathomlessly +fathomlessness +fathomlessnesses +fathoms +fatidic +fatidical +fatigabilities +fatigability +fatigable +fatigue +fatigued +fatigues +fatiguing +fatiguingly +fating +fatless +fatlike +fatling +fatlings +fatly +fatness +fatnesses +fats +fatshedera +fatshederas +fatso +fatsoes +fatsos +fatstock +fatstocks +fatted +fatten +fattened +fattener +fatteners +fattening +fattens +fatter +fattest +fattier +fatties +fattiest +fattily +fattiness +fattinesses +fatting +fattish +fatty +fatuities +fatuity +fatuous +fatuously +fatuousness +fatuousnesses +fatwa +fatwas +fatwood +fatwoods +faubourg +faubourgs +faucal +faucals +fauces +faucet +faucets +faucial +faugh +fauld +faulds fault +faulted +faultfinder +faultfinders +faultfinding +faultfindings +faultier +faultiest +faultily +faultiness +faultinesses +faulting +faultless +faultlessly +faultlessness +faultlessnesses +faults +faulty +faun +fauna +faunae +faunal +faunally +faunas +faunistic +faunistically +faunlike +fauns +fauteuil +fauteuils +fauve +fauves +fauvism +fauvisms +fauvist +fauvists +faux +fava +favas +fave +favela +favelas +favella +favellas +faves +favism +favisms +favonian favor +favorable +favorableness +favorablenesses +favorably +favored +favorer +favorers +favoring favorite +favorites +favoritism +favoritisms +favors favour -favourite +favoured +favourer +favourers +favouring +favours +favus +favuses +fawn +fawned +fawner +fawners +fawnier +fawniest +fawning +fawningly +fawnlike +fawns +fawny +fax +faxed +faxes +faxing +fay +fayalite +fayalites +fayed +faying +fays +faze +fazed +fazenda +fazendas +fazes +fazing +feal +fealties +fealty fear +feared +fearer +fearers +fearful +fearfuller +fearfullest +fearfully +fearfulness +fearfulnesses +fearing +fearless +fearlessly +fearlessness +fearlessnesses +fears +fearsome +fearsomely +fearsomeness +fearsomenesses +feasance +feasances +fease +feased +feases +feasibilities +feasibility +feasible +feasibly +feasing feast +feasted +feaster +feasters +feastful +feasting +feasts +feat +feater +featest feather +featherbed +featherbedded +featherbedding +featherbeddings +featherbeds +featherbrain +featherbrained +featherbrains +feathered +featheredge +featheredged +featheredges +featheredging +featherhead +featherheaded +featherheads +featherier +featheriest +feathering +featherings +featherless +featherlight +feathers +featherstitch +featherstitched +featherstitches +featherstitching +featherweight +featherweights +feathery +featlier +featliest +featly +feats +feature +featured +featureless +features +featurette +featurettes +featuring +feaze +feazed +feazes +feazing +febrific +febrifuge +febrifuges +febrile +fecal +feces +fecial +fecials +feck +feckless +fecklessly +fecklessness +fecklessnesses +feckly +fecks +fecula +feculae +feculence +feculences +feculent +fecund +fecundate +fecundated +fecundates +fecundating +fecundation +fecundations +fecundities +fecundity +fed +fedayee +fedayeen +federacies +federacy federal +federalese +federaleses +federalism +federalisms +federalist +federalists +federalization +federalizations +federalize +federalized +federalizes +federalizing +federally +federals +federate +federated +federates +federating +federation +federations +federative +federatively +fedora +fedoras +feds fee +feeble +feebleminded +feeblemindedly +feeblemindedness +feeblemindednesses +feebleness +feeblenesses +feebler +feeblest +feeblish +feebly feed +feedable +feedback +feedbacks +feedbag +feedbags +feedbox +feedboxes +feeder +feeders +feedhole +feedholes +feeding +feedlot +feedlots +feeds +feedstock +feedstocks +feedstuff +feedstuffs +feeing feel +feeler +feelers +feeless feeling +feelingly +feelingness +feelingnesses +feelings +feels +fees +feet +feetfirst +feetless +feeze +feezed +feezes +feezing +feh +fehs +feign +feigned +feigner +feigners +feigning +feigns +feijoa +feijoas +feint +feinted +feinting +feints +feirie +feist +feistier +feistiest +feistiness +feistinesses +feists +feisty +felafel +feldsher +feldshers +feldspar +feldspars +feldspathic +felicific +felicitate +felicitated +felicitates +felicitating +felicitation +felicitations +felicitator +felicitators +felicities +felicitous +felicitously +felicitousness +felicitousnesses +felicity +felid +felids +feline +felinely +felines +felinities +felinity +fell +fella +fellable +fellah +fellaheen +fellahin +fellahs +fellas +fellate +fellated +fellates +fellating +fellatio +fellation +fellations +fellatios +fellator +fellators +felled +feller +fellers +fellest +fellies +felling +fellmonger +fellmongered +fellmongeries +fellmongering +fellmongerings +fellmongers +fellmongery +fellness +fellnesses +felloe +felloes fellow +fellowed +fellowing +fellowly +fellowman +fellowmen +fellows +fellowship +fellowshiped +fellowshiping +fellowshipped +fellowshipping +fellowships +fells +felly +felon +felonies +felonious +feloniously +feloniousness +feloniousnesses +felonries +felonry +felons +felony +felsite +felsites +felsitic +felspar +felspars +felstone +felstones +felt +felted +felting +feltings +feltlike +felts +felucca +feluccas +felwort +felworts +fem female +femaleness +femalenesses +females +feme +femes +feminacies +feminacy +feminie +feminine +femininely +feminineness +femininenesses +feminines +femininities +femininity +feminise +feminised +feminises +feminising +feminism +feminisms +feminist +feministic +feminists +feminities +feminity +feminization +feminizations +feminize +feminized +feminizes +feminizing +femme +femmes +femora +femoral +fems +femtosecond +femtoseconds +femur +femurs +fen +fenagle +fenagled +fenagles +fenagling fence +fenced +fenceless +fencelessness +fencelessnesses +fencer +fencerow +fencerows +fencers +fences +fencible +fencibles +fencing +fencings +fend +fended +fender +fendered +fenderless +fenders +fending +fends +fenestra +fenestrae +fenestral +fenestrate +fenestrated +fenestration +fenestrations +fenland +fenlands +fennec +fennecs +fennel +fennels +fenny +fens +fenthion +fenthions +fenugreek +fenugreeks +fenuron +fenurons +feod +feodaries +feodary +feods +feoff +feoffed +feoffee +feoffees +feoffer +feoffers +feoffing +feoffment +feoffments +feoffor +feoffors +feoffs +fer +feracities +feracity +feral +ferbam +ferbams +fere +feres +feretories +feretory +feria +feriae +ferial +ferias +ferine +ferities +ferity +ferlie +ferlies +ferly +fermata +fermatas +fermate +ferment +fermentable +fermentation +fermentations +fermentative +fermented +fermenter +fermenters +fermenting +fermentor +fermentors +ferments +fermi +fermion +fermions +fermis +fermium +fermiums +fern +ferneries +fernery +fernier +ferniest +fernless +fernlike +ferns +ferny +ferocious +ferociously +ferociousness +ferociousnesses +ferocities +ferocity +ferrate +ferrates +ferredoxin +ferredoxins +ferrel +ferreled +ferreling +ferrelled +ferrelling +ferrels +ferreous +ferret +ferreted +ferreter +ferreters +ferreting +ferretings +ferrets +ferrety +ferriage +ferriages +ferric +ferricyanide +ferricyanides +ferried +ferries +ferriferous +ferrimagnet +ferrimagnetic +ferrimagnetically +ferrimagnetism +ferrimagnetisms +ferrimagnets +ferrite +ferrites +ferritic +ferritin +ferritins +ferrocene +ferrocenes +ferroconcrete +ferroconcretes +ferrocyanide +ferrocyanides +ferroelectric +ferroelectricities +ferroelectricity +ferroelectrics +ferromagnesian +ferromagnet +ferromagnetic +ferromagnetism +ferromagnetisms +ferromagnets +ferromanganese +ferromanganeses +ferrosilicon +ferrosilicons +ferrotype +ferrotypes +ferrous +ferruginous +ferrule +ferruled +ferrules +ferruling +ferrum +ferrums ferry +ferryboat +ferryboats +ferrying +ferryman +ferrymen +fertile +fertilely +fertileness +fertilenesses +fertilities +fertility +fertilizable +fertilization +fertilizations +fertilize +fertilized +fertilizer +fertilizers +fertilizes +fertilizing +ferula +ferulae +ferulas +ferule +feruled +ferules +feruling +fervencies +fervency +fervent +fervently +fervid +fervidly +fervidness +fervidnesses +fervor +fervors +fervour +fervours +fescennine +fescue +fescues +fess +fesse +fessed +fesses +fessing +fesswise +festal +festally +fester +festered +festering +festers +festinate +festinated +festinately +festinates +festinating festival +festivalgoer +festivalgoers +festivals +festive +festively +festiveness +festivenesses +festivities +festivity +festoon +festooned +festooneries +festoonery +festooning +festoons +fet +feta +fetal +fetas +fetation +fetations fetch +fetched +fetcher +fetchers +fetches +fetching +fetchingly +fete +feted +feterita +feteritas +fetes +fetial +fetiales +fetialis +fetials +fetich +fetiches +fetichism +fetichisms +feticide +feticides +fetid +fetidly +fetidness +fetidnesses +feting +fetish +fetishes +fetishism +fetishisms +fetishist +fetishistic +fetishistically +fetishists +fetlock +fetlocks +fetologies +fetologist +fetologists +fetology +fetoprotein +fetoproteins +fetor +fetors +fetoscope +fetoscopes +fetoscopies +fetoscopy +fets +fetted +fetter +fettered +fetterer +fetterers +fettering +fetters +fetting +fettle +fettled +fettles +fettling +fettlings +fettuccine +fettuccini +fettucine +fettucini +fetus +fetuses +feu +feuar +feuars +feud +feudal +feudalism +feudalisms +feudalist +feudalistic +feudalists +feudalities +feudality +feudalization +feudalizations +feudalize +feudalized +feudalizes +feudalizing +feudally +feudaries +feudary +feudatories +feudatory +feuded +feuding +feudist +feudists +feuds +feued +feuilleton +feuilletonism +feuilletonisms +feuilletonist +feuilletonists +feuilletons +feuing +feus fever +fevered +feverfew +feverfews +fevering +feverish +feverishly +feverishness +feverishnesses +feverous +fevers +feverwort +feverworts few +fewer +fewest +fewness +fewnesses +fewtrils +fey +feyer +feyest +feyly +feyness +feynesses +fez +fezes +fezzed +fezzes +fiacre +fiacres +fiance +fiancee +fiancees +fiances +fianchetti +fianchetto +fianchettoed +fianchettoing +fianchettos +fiar +fiars +fiaschi +fiasco +fiascoes +fiascos +fiat +fiats +fib +fibbed +fibber +fibbers +fibbing fiber +fiberboard +fiberboards +fibered +fiberfill +fiberfills +fiberglass +fiberglassed +fiberglasses +fiberglassing +fiberization +fiberizations +fiberize +fiberized +fiberizes +fiberizing +fibers +fiberscope +fiberscopes +fibranne +fibrannes fibre +fibreboard +fibreboards +fibrefill +fibrefills +fibreglass +fibreglasses +fibres +fibril +fibrilla +fibrillae +fibrillar +fibrillate +fibrillated +fibrillates +fibrillating +fibrillation +fibrillations +fibrils +fibrin +fibrinogen +fibrinogens +fibrinoid +fibrinoids +fibrinolyses +fibrinolysin +fibrinolysins +fibrinolysis +fibrinolytic +fibrinopeptide +fibrinopeptides +fibrins +fibroblast +fibroblastic +fibroblasts +fibrocystic +fibroid +fibroids +fibroin +fibroins +fibroma +fibromas +fibromata +fibromatous +fibronectin +fibronectins +fibrosarcoma +fibrosarcomas +fibrosarcomata +fibroses +fibrosis +fibrosites +fibrositides +fibrositis +fibrositises +fibrotic +fibrous +fibrovascular +fibs +fibula +fibulae +fibular +fibulas +fice +fices +fiche +fiches +fichu +fichus +ficin +ficins +fickle +fickleness +ficklenesses +fickler +ficklest +fickly +fico +ficoes +fictile fiction +fictional +fictionalise +fictionalised +fictionalises +fictionalising +fictionalities +fictionality +fictionalization +fictionalizations +fictionalize +fictionalized +fictionalizes +fictionalizing +fictionally +fictioneer +fictioneering +fictioneerings +fictioneers +fictionist +fictionists +fictionization +fictionizations +fictionize +fictionized +fictionizes +fictionizing +fictions +fictitious +fictitiously +fictitiousness +fictitiousnesses +fictive +fictively +fictiveness +fictivenesses +ficus +ficuses +fid +fiddle +fiddleback +fiddlebacks +fiddled +fiddlehead +fiddleheads +fiddler +fiddlers +fiddles +fiddlestick +fiddlesticks +fiddling +fiddly +fideism +fideisms +fideist +fideistic +fideists +fidelities +fidelity +fidge +fidged +fidges +fidget +fidgeted +fidgeter +fidgeters +fidgetiness +fidgetinesses +fidgeting +fidgets +fidgety +fidging +fido +fidos +fids +fiducial +fiducially +fiduciaries +fiduciary +fie +fief +fiefdom +fiefdoms +fiefs field +fielded +fielder +fielders +fieldfare +fieldfares +fielding +fieldpiece +fieldpieces +fields +fieldstone +fieldstones +fieldstrip +fieldstripped +fieldstripping +fieldstrips +fieldstript +fieldwork +fieldworks +fiend +fiendish +fiendishly +fiendishness +fiendishnesses +fiends fierce +fiercely +fierceness +fiercenesses +fiercer +fiercest +fierier +fieriest +fierily +fieriness +fierinesses +fiery +fiesta +fiestas +fife +fifed +fifer +fifers +fifes +fifing +fifteen +fifteens +fifteenth +fifteenths +fifth +fifthly +fifths +fifties +fiftieth +fiftieths +fifty +fiftyish +fig +figeater +figeaters +figged +figging fight +fighter +fighters +fighting +fightings +fights +figment +figments +figs +figuline +figulines +figural +figurant +figurants +figurate +figuration +figurations +figurative +figuratively +figurativeness +figurativenesses figure +figured +figurehead +figureheads +figurer +figurers +figures +figurine +figurines +figuring +figwort +figworts +fil +fila +filagree +filagreed +filagreeing +filagrees +filament +filamentary +filamentous +filaments +filar +filaree +filarees +filaria +filariae +filarial +filarian +filariases +filariasis +filariid +filariids +filature +filatures +filbert +filberts +filch +filched +filcher +filchers +filches +filching file +fileable +filed +filefish +filefishes +filemot +filer +filers +files +filet +fileted +fileting +filets +filial +filially +filiate +filiated +filiates +filiating +filiation +filiations +filibeg +filibegs +filibuster +filibustered +filibusterer +filibusterers +filibustering +filibusters +filicide +filicides +filiform +filigree +filigreed +filigreeing +filigrees +filing +filings +filiopietistic +filister +filisters fill +fille +filled +filler +fillers +filles +fillet +filleted +filleting +fillets +fillies +filling +fillings +fillip +filliped +filliping +fillips +fillo +fillos +fills +filly film +filmable +filmcard +filmcards +filmdom +filmdoms +filmed +filmer +filmers +filmgoer +filmgoers +filmic +filmically +filmier +filmiest +filmily +filminess +filminesses +filming +filmland +filmlands +filmmaker +filmmakers +filmmaking +filmmakings +filmographies +filmography +films +filmset +filmsets +filmsetter +filmsetters +filmsetting +filmsettings +filmstrip +filmstrips +filmy +filo +filos +filose +fils +filter +filterabilities +filterability +filterable +filtered +filterer +filterers +filtering +filters +filth +filthier +filthiest +filthily +filthiness +filthinesses +filths +filthy +filtrable +filtrate +filtrated +filtrates +filtrating +filtration +filtrations +filum +fimble +fimbles +fimbria +fimbriae +fimbrial +fimbriate +fimbriated +fimbriation +fimbriations +fin +finable +finagle +finagled +finagler +finaglers +finagles +finagling final +finale +finales +finalis +finalise +finalised +finalises +finalising +finalism +finalisms +finalist +finalists +finalities +finality +finalization +finalizations +finalize +finalized +finalizes +finalizing +finally +finals finance +financed +finances +financial +financially +financier +financiers +financing +financings +finback +finbacks +finch +finches find +findable +finder +finders +finding +findings +finds fine +fineable +fined +finely +fineness +finenesses +finer +fineries +finery +fines +finespun +finesse +finessed +finesses +finessing +finest +finfish +finfishes +finfoot +finfoots finger +fingerboard +fingerboards +fingered +fingerer +fingerers +fingerhold +fingerholds +fingering +fingerings +fingerlike +fingerling +fingerlings fingernail +fingernails +fingerpick +fingerpicked +fingerpicking +fingerpickings +fingerpicks +fingerpost +fingerposts +fingerprint +fingerprinted +fingerprinting +fingerprintings +fingerprints +fingers +fingertip +fingertips +finial +finialed +finials +finical +finically +finicalness +finicalnesses +finickier +finickiest +finickin +finickiness +finickinesses +finicking +finicky +finikin +finiking +fining +finings +finis +finises finish +finished +finisher +finishers +finishes +finishing +finite +finitely +finiteness +finitenesses +finites +finitude +finitudes +fink +finked +finking +finks +finless +finlike +finmark +finmarks +finned +finnickier +finnickiest +finnicky +finnier +finniest +finning +finnmark +finnmarks +finny +fino +finochio +finochios +finos +fins +fiord +fiords +fioritura +fioriture +fipple +fipples +fique +fiques +fir fire +fireable +firearm +firearms +fireback +firebacks +fireball +fireballer +fireballers +fireballing +fireballs +firebase +firebases +firebird +firebirds +fireboat +fireboats +firebomb +firebombed +firebombing +firebombs +firebox +fireboxes +firebrand +firebrands +firebrat +firebrats +firebreak +firebreaks +firebrick +firebricks +firebug +firebugs +fireclay +fireclays +firecracker +firecrackers +fired +firedamp +firedamps +firedog +firedogs +firedrake +firedrakes +firefang +firefanged +firefanging +firefangs +firefight +firefighter +firefighters +firefights +fireflies +firefly +fireguard +fireguards +firehall +firehalls +firehouse +firehouses +fireless +firelight +firelights +firelit +firelock +firelocks +fireman +firemanic +firemen +firepan +firepans +firepink +firepinks +fireplace +fireplaced +fireplaces +fireplug +fireplugs +firepot +firepots +firepower +firepowers +fireproof +fireproofed +fireproofing +fireproofs +firer +fireroom +firerooms +firers +fires +fireside +firesides +firestone +firestones +firestorm +firestorms +firethorn +firethorns +firetrap +firetraps +firewater +firewaters +fireweed +fireweeds +firewood +firewoods +firework fireworks +fireworm +fireworms +firing +firings +firkin +firkins firm +firmament +firmamental +firmaments +firman +firmans +firmed +firmer +firmers +firmest +firming +firmly +firmness +firmnesses +firms +firmware +firmwares +firn +firns +firry +firs +first +firstborn +firstborns +firstfruits +firsthand +firstling +firstlings +firstly +firsts +firth +firths +fisc +fiscal +fiscally +fiscals +fiscs fish +fishabilities +fishability +fishable +fishbolt +fishbolts +fishbone +fishbones +fishbowl +fishbowls +fished +fisher +fisherfolk +fisheries +fisherman +fishermen +fishers +fisherwoman +fisherwomen +fishery +fishes +fisheye +fisheyes +fishgig +fishgigs +fishhook +fishhooks +fishier +fishiest +fishily +fishing +fishings +fishless +fishlike +fishline +fishlines +fishmeal +fishmeals +fishmonger +fishmongers +fishnet +fishnets +fishplate +fishplates +fishpole +fishpoles +fishpond +fishponds +fishtail +fishtailed +fishtailing +fishtails +fishway +fishways +fishwife +fishwives +fishworm +fishworms +fishy +fissate +fissile +fissilities +fissility +fission +fissionabilities +fissionability +fissionable +fissionables +fissional +fissioned +fissioning +fissions +fissiparous +fissiparousness +fissiparousnesses +fissiped +fissipeds +fissure +fissured +fissures +fissuring fist +fisted +fistfight +fistfights +fistful +fistfuls +fistic +fisticuffs +fisting +fistnote +fistnotes +fists +fistula +fistulae +fistular +fistulas +fistulous fit +fitch +fitchee +fitches +fitchet +fitchets +fitchew +fitchews +fitchy +fitful +fitfully +fitfulness +fitfulnesses +fitly +fitment +fitments +fitness +fitnesses +fits +fittable +fitted +fitter +fitters +fittest +fitting +fittingly +fittingness +fittingnesses +fittings +five +fivefold +fivepins +fiver +fivers +fives fix +fixable +fixate +fixated +fixates +fixatif +fixatifs +fixating +fixation +fixations +fixative +fixatives +fixed +fixedly +fixedness +fixednesses +fixer +fixers +fixes +fixing +fixings +fixit +fixities +fixity +fixt +fixture +fixtures +fixure +fixures +fiz +fizgig +fizgigs +fizz +fizzed +fizzer +fizzers +fizzes +fizzier +fizziest +fizzing +fizzle +fizzled +fizzles +fizzling +fizzy +fjeld +fjelds +fjord +fjords +flab +flabbergast +flabbergasted +flabbergasting +flabbergastingly +flabbergasts +flabbier +flabbiest +flabbily +flabbiness +flabbinesses +flabby +flabella +flabellate +flabelliform +flabellum +flabs +flaccid +flaccidities +flaccidity +flaccidly +flack +flacked +flackeries +flackery +flacking +flacks +flacon +flacons flag +flagella +flagellant +flagellantism +flagellantisms +flagellants +flagellar +flagellate +flagellated +flagellates +flagellating +flagellation +flagellations +flagellin +flagellins +flagellum +flagellums +flageolet +flageolets +flagged +flagger +flaggers +flaggier +flaggiest +flagging +flaggingly +flaggings +flaggy +flagitious +flagitiously +flagitiousness +flagitiousnesses +flagless +flagman +flagmen +flagon +flagons +flagpole +flagpoles +flagrance +flagrances +flagrancies +flagrancy +flagrant +flagrantly +flags +flagship +flagships +flagstaff +flagstaffs +flagstaves +flagstick +flagsticks +flagstone +flagstones +flail +flailed +flailing +flails +flair +flairs +flak +flake +flaked +flaker +flakers +flakes +flakey +flakier +flakiest +flakily +flakiness +flakinesses +flaking +flaky +flam +flambe +flambeau +flambeaus +flambeaux +flambee +flambeed +flambeing +flambes +flamboyance +flamboyances +flamboyancies +flamboyancy +flamboyant +flamboyantly +flamboyants flame +flamed +flamen +flamenco +flamencos +flamens +flameout +flameouts +flameproof +flameproofed +flameproofer +flameproofers +flameproofing +flameproofs +flamer +flamers +flames +flamethrower +flamethrowers +flamier +flamiest +flamines +flaming +flamingly +flamingo +flamingoes +flamingos +flammabilities +flammability +flammable +flammables +flammed +flamming +flams +flamy +flan +flancard +flancards +flanerie +flaneries +flanes +flaneur +flaneurs +flange +flanged +flanger +flangers +flanges +flanging +flank +flanked +flanken +flanker +flankers +flanking +flanks +flannel +flanneled +flannelette +flannelettes +flanneling +flannelled +flannelling +flannelly +flannelmouthed +flannels +flans +flap +flapdoodle +flapdoodles +flapjack +flapjacks +flapless +flappable +flapped +flapper +flappers +flappier +flappiest +flapping +flappy +flaps +flare +flared +flares +flaring +flaringly flash +flashback +flashbacks +flashboard +flashboards +flashbulb +flashbulbs +flashcard +flashcards +flashcube +flashcubes +flashed +flasher +flashers +flashes +flashgun +flashguns +flashier +flashiest +flashily +flashiness +flashinesses +flashing +flashings +flashlamp +flashlamps flashlight +flashlights +flashover +flashovers +flashtube +flashtubes +flashy +flask +flasket +flaskets +flasks flat +flatbed +flatbeds +flatboat +flatboats +flatcap +flatcaps +flatcar +flatcars +flatfeet +flatfish +flatfishes +flatfoot +flatfooted +flatfooting +flatfoots +flathead +flatheads +flatiron +flatirons +flatland +flatlander +flatlanders +flatlands +flatlet +flatlets +flatling +flatlings +flatlong +flatly +flatmate +flatmates +flatness +flatnesses +flats +flatted +flatten +flattened +flattener +flatteners +flattening +flattens +flatter +flattered +flatterer +flatterers +flatteries +flattering +flatteringly +flatters +flattery +flattest +flatting +flattish +flattop +flattops +flatulence +flatulences +flatulencies +flatulency +flatulent +flatulently +flatus +flatuses +flatware +flatwares +flatwash +flatwashes +flatways +flatwise +flatwork +flatworks +flatworm +flatworms +flaunt +flaunted +flaunter +flaunters +flauntier +flauntiest +flaunting +flauntingly +flaunts +flaunty +flautist +flautists +flavanol +flavanols +flavanone +flavanones +flavin +flavine +flavines +flavins +flavone +flavones +flavonoid +flavonoids +flavonol +flavonols +flavoprotein +flavoproteins +flavor +flavored +flavorer +flavorers +flavorful +flavorfully +flavoring +flavorings +flavorist +flavorists +flavorless +flavors +flavorsome +flavory +flavour +flavoured +flavouring +flavours +flavoury +flaw +flawed +flawier +flawiest +flawing +flawless +flawlessly +flawlessness +flawlessnesses +flaws +flawy +flax +flaxen +flaxes +flaxier +flaxiest +flaxseed +flaxseeds +flaxy +flay +flayed +flayer +flayers +flaying +flays +flea +fleabag +fleabags +fleabane +fleabanes +fleabite +fleabites +fleahopper +fleahoppers +fleam +fleams +fleapit +fleapits +fleas +fleawort +fleaworts +fleche +fleches +flechette +flechettes +fleck +flecked +flecking +flecks +flecky +flection +flections +fled +fledge +fledged +fledges +fledgier +fledgiest +fledging +fledgling +fledglings +fledgy flee +fleece +fleeced +fleecer +fleecers +fleeces +fleech +fleeched +fleeches +fleeching +fleecier +fleeciest +fleecily +fleecing +fleecy +fleeing +fleer +fleered +fleering +fleeringly +fleers +flees +fleet +fleeted +fleeter +fleetest +fleeting +fleetingly +fleetingness +fleetingnesses +fleetly +fleetness +fleetnesses +fleets +fleishig +flemish +flemished +flemishes +flemishing +flench +flenched +flenches +flenching +flense +flensed +flenser +flensers +flenses +flensing flesh +fleshed +flesher +fleshers +fleshes +fleshier +fleshiest +fleshiness +fleshinesses +fleshing +fleshings +fleshlier +fleshliest +fleshly +fleshment +fleshments +fleshpot +fleshpots +fleshy +fletch +fletched +fletcher +fletchers +fletches +fletching +fletchings +fleury +flew +flews +flex +flexagon +flexagons +flexed +flexes +flexibilities +flexibility flexible +flexibly +flexile +flexing +flexion +flexions +flexitime +flexitimes +flexographic +flexographically +flexographies +flexography +flexor +flexors +flextime +flextimes +flexuose +flexuous +flexural +flexure +flexures +fley +fleyed +fleying +fleys +flibbertigibbet +flibbertigibbets +flibbertigibbety +flic +flichter +flichtered +flichtering +flichters +flick +flicked +flicker +flickered +flickering +flickeringly +flickers +flickery +flicking +flicks +flics +flied +flier +fliers +flies +fliest flight +flighted +flightier +flightiest +flightily +flightiness +flightinesses +flighting +flightless +flights +flighty +flimflam +flimflammed +flimflammer +flimflammeries +flimflammers +flimflammery +flimflamming +flimflams +flimsier +flimsies +flimsiest +flimsily +flimsiness +flimsinesses +flimsy +flinch +flinched +flincher +flinchers +flinches +flinching +flinder +flinders +fling +flinger +flingers +flinging +flings +flinkite +flinkites +flint +flinted +flintier +flintiest +flintily +flintiness +flintinesses +flinting +flintlike +flintlock +flintlocks +flints +flinty +flip +flippancies +flippancy +flippant +flippantly +flipped +flipper +flippers +flippest +flipping +flippy +flips +flirt +flirtation +flirtations +flirtatious +flirtatiously +flirtatiousness +flirtatiousnesses +flirted +flirter +flirters +flirtier +flirtiest +flirting +flirts +flirty +flit +flitch +flitched +flitches +flitching +flite +flited +flites +fliting +flits +flitted +flitter +flittered +flittering +flitters +flitting +flivver +flivvers float +floatage +floatages +floatation +floatations +floated +floatel +floatels +floater +floaters +floatier +floatiest +floating +floatplane +floatplanes +floats +floaty +floc +flocced +flocci +floccing +floccose +flocculant +flocculants +flocculate +flocculated +flocculates +flocculating +flocculation +flocculations +flocculator +flocculators +floccule +flocculent +floccules +flocculi +flocculus +floccus +flock +flocked +flockier +flockiest +flocking +flockings +flocks +flocky +flocs +floe +floes +flog +flogged +flogger +floggers +flogging +floggings +flogs +flokati +flokatis +flong +flongs flood +flooded +flooder +flooders +floodgate +floodgates +flooding +floodlight +floodlighted +floodlighting +floodlights +floodlit +floodplain +floodplains +floods +floodwater +floodwaters +floodway +floodways +flooey +flooie floor +floorage +floorages +floorboard +floorboards +floorcloth +floorcloths +floored +floorer +floorers +flooring +floorings +floors +floorwalker +floorwalkers +floosie +floosies +floosy +floozie +floozies +floozy +flop +flophouse +flophouses +flopover +flopovers +flopped +flopper +floppers +floppier +floppies +floppiest +floppily +floppiness +floppinesses +flopping +floppy +flops +flora +florae +floral +florally +florals +floras +florence +florences +florescence +florescences +florescent +floret +florets +floriated +floriation +floriations +floribunda +floribundas +floricultural +floriculture +floricultures +floriculturist +floriculturists +florid +floridities +floridity +floridly +floridness +floridnesses +floriferous +floriferousness +floriferousnesses +florigen +florigenic +florigens +florilegia +florilegium +florin +florins +florist +floristic +floristically +floristries +floristry +florists +floruit +floruits +floss +flossed +flosses +flossie +flossier +flossies +flossiest +flossily +flossing +flossy +flota +flotage +flotages +flotas +flotation +flotations +flotilla +flotillas +flotsam +flotsams +flounce +flounced +flounces +flouncier +flounciest +flouncing +flouncings +flouncy +flounder +floundered +floundering +flounders flour +floured +flouring +flourish +flourished +flourisher +flourishers +flourishes +flourishing +flourishingly +flourless +flours +floury +flout +flouted +flouter +flouters +flouting +flouts flow +flowage +flowages +flowchart +flowcharting +flowchartings +flowcharts +flowed flower +flowerage +flowerages +flowered +flowerer +flowerers +floweret +flowerets +flowerette +flowerettes +flowerful +flowerier +floweriest +flowerily +floweriness +flowerinesses +flowering +flowerless +flowerlike +flowerpot +flowerpots +flowers +flowery +flowing +flowingly +flowmeter +flowmeters +flown +flows +flowstone +flowstones flu +flub +flubbed +flubber +flubbers +flubbing +flubdub +flubdubs +flubs +fluctuant +fluctuate +fluctuated +fluctuates +fluctuating +fluctuation +fluctuational +fluctuations +flue +flued +fluegelhorn +fluegelhorns +fluencies fluency fluent +fluently +flueric +fluerics +flues +fluff +fluffed +fluffier +fluffiest +fluffily +fluffiness +fluffinesses +fluffing +fluffs +fluffy +flugelhorn +flugelhornist +flugelhornists +flugelhorns +fluid +fluidal +fluidally +fluidextract +fluidextracts +fluidic +fluidics +fluidise +fluidised +fluidises +fluidising +fluidities +fluidity +fluidization +fluidizations +fluidize +fluidized +fluidizer +fluidizers +fluidizes +fluidizing +fluidly +fluidness +fluidnesses +fluidram +fluidrams +fluids +fluke +fluked +flukes +flukey +flukier +flukiest +fluking +fluky +flume +flumed +flumes +fluming +flummeries +flummery +flummox +flummoxed +flummoxes +flummoxing +flump +flumped +flumping +flumps +flung +flunk +flunked +flunker +flunkers +flunkey +flunkeys +flunkies +flunking +flunks +flunky +fluor +fluorene +fluorenes +fluoresce +fluoresced +fluorescein +fluoresceins +fluorescence +fluorescences +fluorescent +fluorescents +fluorescer +fluorescers +fluoresces +fluorescing +fluoric +fluorid +fluoridate +fluoridated +fluoridates +fluoridating +fluoridation +fluoridations +fluoride +fluorides +fluorids +fluorimeter +fluorimeters +fluorimetric +fluorimetries +fluorimetry +fluorin +fluorinate +fluorinated +fluorinates +fluorinating +fluorination +fluorinations +fluorine +fluorines +fluorins +fluorite +fluorites +fluorocarbon +fluorocarbons +fluorochrome +fluorochromes +fluorographic +fluorographies +fluorography +fluorometer +fluorometers +fluorometric +fluorometries +fluorometry +fluoroscope +fluoroscoped +fluoroscopes +fluoroscopic +fluoroscopically +fluoroscopies +fluoroscoping +fluoroscopist +fluoroscopists +fluoroscopy +fluoroses +fluorosis +fluorotic +fluorouracil +fluorouracils +fluors +fluorspar +fluorspars +fluphenazine +fluphenazines +flurried +flurries +flurry +flurrying +flus +flush +flushable +flushed +flusher +flushers +flushes +flushest +flushing +flushness +flushnesses +fluster +flustered +flusteredly +flustering +flusters +flute +fluted +flutelike +fluter +fluters +flutes +flutey +flutier +flutiest +fluting +flutings +flutist +flutists +flutter +flutterboard +flutterboards +fluttered +flutterer +flutterers +fluttering +flutters +fluttery +fluty +fluvial +fluviatile +flux +fluxed +fluxes +fluxgate +fluxgates +fluxing +fluxion +fluxional +fluxions +fluyt +fluyts fly +flyable +flyaway +flyaways +flybelt +flybelts +flyblew +flyblow +flyblowing +flyblown +flyblows +flyboat +flyboats +flyboy +flyboys +flybridge +flybridges +flyby +flybys +flycatcher +flycatchers +flyer +flyers +flying +flyings +flyleaf +flyleaves +flyless +flyman +flymen +flyoff +flyoffs +flyover +flyovers +flypaper +flypapers +flypast +flypasts +flysch +flysches +flyspeck +flyspecked +flyspecking +flyspecks +flyswatter +flyswatters +flyte +flyted +flytes +flytier +flytiers +flyting +flytings +flytrap +flytraps +flyway +flyways +flyweight +flyweights +flywheel +flywheels +foal +foaled +foaling +foals +foam +foamable +foamed +foamer +foamers +foamflower +foamflowers +foamier +foamiest +foamily +foaminess +foaminesses +foaming +foamless +foamlike +foams +foamy +fob +fobbed +fobbing +fobs +focaccia +focaccias +focal +focalise +focalised +focalises +focalising +focalization +focalizations +focalize +focalized +focalizes +focalizing +focally +foci focus +focusable +focused +focuser +focusers +focuses +focusing +focusless +focussed +focusses +focussing +fodder +foddered +foddering +fodders +fodgel +foe +foehn +foehns +foeman +foemen +foes +foetal +foetid +foetor +foetors +foetus +foetuses fog +fogbound +fogbow +fogbows +fogdog +fogdogs +fogey +fogeys +fogfruit +fogfruits +foggage +foggages +fogged +fogger +foggers +foggier +foggiest +foggily +fogginess +fogginesses +fogging foggy +foghorn +foghorns +fogie +fogies +fogless +fogs +fogy +fogyish +fogyism +fogyisms +foh +fohn +fohns +foible +foibles +foil +foilable +foiled +foiling +foils +foilsman +foilsmen +foin +foined +foining +foins +foison +foisons +foist +foisted +foisting +foists +folacin +folacins +folate +folates fold +foldable +foldaway +foldboat +foldboats +folded +folder +folderol +folderols +folders +folding +foldout +foldouts +folds +folia +foliaceous +foliage +foliaged +foliages +foliar +foliate +foliated +foliates +foliating +foliation +foliations +folio +folioed +folioing +folios +foliose +folious +folium +foliums folk +folkie +folkies +folkish +folkishness +folkishnesses +folklife +folklike +folklives +folklore +folklores +folkloric +folklorish +folklorist +folkloristic +folklorists +folkmoot +folkmoots +folkmot +folkmote +folkmotes +folkmots +folks +folksier +folksiest +folksily +folksiness +folksinesses +folksinger +folksingers +folksinging +folksingings +folksy +folktale +folktales +folkway +folkways +folky +folles +follicle +follicles +follicular +folliculites +folliculitides +folliculitis +folliculitises +follies +follis follow +followed +follower +followers +followership +followerships +following +followings +follows +folly +foment +fomentation +fomentations +fomented +fomenter +fomenters +fomenting +foments +fomite +fomites +fon fond +fondant +fondants +fonded +fonder +fondest +fonding +fondle +fondled +fondler +fondlers +fondles +fondling +fondlings +fondly +fondness +fondnesses +fonds +fondu +fondue +fondues +fondus +fons +font +fontal +fontanel +fontanelle +fontanelles +fontanels +fontina +fontinas +fonts food +foodie +foodies +foodless +foodlessness +foodlessnesses +foods +foodstuff +foodstuffs +foodways +foofaraw +foofaraws fool +fooled +fooleries +foolery +foolfish +foolfishes +foolhardier +foolhardiest +foolhardily +foolhardiness +foolhardinesses +foolhardy +fooling foolish +foolisher +foolishest +foolishly +foolishness +foolishnesses +foolproof +fools +foolscap +foolscaps foot +footage +footages football +footballer +footballers +footballs +footbath +footbaths +footboard +footboards +footboy +footboys +footbridge +footbridges +footcloth +footcloths +footdragger +footdraggers +footed +footer +footers +footfall +footfalls +footfault +footfaulted +footfaulting +footfaults +footgear +footgears +foothill +foothills +foothold +footholds +footie +footier +footies +footiest +footing +footings +footlambert +footlamberts +footle +footled +footler +footlers +footles +footless +footlessly +footlessness +footlessnesses +footlights +footlike +footling +footlocker +footlockers +footloose +footman +footmark +footmarks +footmen +footnote +footnoted +footnotes +footnoting +footpace +footpaces +footpad +footpads +footpath +footpaths +footprint +footprints +footrace +footraces +footrest +footrests +footrope +footropes +foots +footsie +footsies +footslog +footslogged +footslogger +footsloggers +footslogging +footslogs +footsore +footsoreness +footsorenesses +footstep +footsteps +footstone +footstones +footstool +footstools +footsy +footwall +footwalls +footway +footways +footwear +footwork +footworks +footworn +footy +foozle +foozled +foozler +foozlers +foozles +foozling +fop +fopped +fopperies +foppery +fopping +foppish +foppishly +foppishness +foppishnesses +fops for +fora +forage +foraged +forager +foragers +forages +foraging +foram +foramen +foramens +foramina +foraminal +foraminifer +foraminifera +foraminiferal +foraminiferan +foraminiferans +foraminifers +foraminous +forams +foray +forayed +forayer +forayers +foraying +forays +forb +forbad +forbade +forbear +forbearance +forbearances +forbearer +forbearers +forbearing +forbears forbid +forbidal +forbidals +forbiddance +forbiddances +forbidden +forbidder +forbidders +forbidding +forbiddingly +forbids +forbode +forboded +forbodes +forboding +forbore +forborne +forbs +forby +forbye force +forced +forcedly +forceful +forcefully +forcefulness +forcefulnesses +forceless +forcemeat +forcemeats +forceps +forcepslike +forcer +forcers +forces +forcible +forcibleness +forciblenesses +forcibly +forcing +forcipes +ford +fordable +forded +fordid +fording +fordless +fordo +fordoes +fordoing +fordone +fords +fore +forearm +forearmed +forearming +forearms +forebay +forebays +forebear +forebears +forebode +foreboded +foreboder +foreboders +forebodes +forebodies +foreboding +forebodingly +forebodingness +forebodingnesses +forebodings +forebody +foreboom +forebooms +forebrain +forebrains +foreby +forebye +forecaddie +forecaddies forecast +forecastable +forecasted +forecaster +forecasters +forecasting +forecastle +forecastles +forecasts +forecheck +forechecked +forechecker +forecheckers +forechecking +forechecks +foreclose +foreclosed +forecloses +foreclosing +foreclosure +foreclosures +forecourt +forecourts +foredate +foredated +foredates +foredating +foredeck +foredecks +foredid +foredo +foredoes +foredoing +foredone +foredoom +foredoomed +foredooming +foredooms +foreface +forefaces +forefather +forefathers +forefeel +forefeeling +forefeels +forefeet +forefelt +forefend +forefended +forefending +forefends +forefinger +forefingers +forefoot +forefront +forefronts +foregather +foregathered +foregathering +foregathers +forego +foregoer +foregoers +foregoes +foregoing +foregone +foreground +foregrounded +foregrounding +foregrounds +foregut +foreguts +forehand +forehanded +forehandedly +forehandedness +forehandednesses +forehands forehead +foreheads +forehoof +forehoofs +forehooves foreign foreigner +foreigners +foreignism +foreignisms +foreignness +foreignnesses +forejudge +forejudged +forejudges +forejudging +foreknew +foreknow +foreknowing +foreknowledge +foreknowledges +foreknown +foreknows +foreladies +forelady +foreland +forelands +foreleg +forelegs +forelimb +forelimbs +forelock +forelocked +forelocking +forelocks +foreman +foremanship +foremanships +foremast +foremasts +foremen +foremilk +foremilks +foremost +foremother +foremothers +forename +forenamed +forenames +forenoon +forenoons +forensic +forensically +forensics +foreordain +foreordained +foreordaining +foreordains +foreordination +foreordinations +forepart +foreparts +forepassed +forepast +forepaw +forepaws +forepeak +forepeaks +foreplay +foreplays +forequarter +forequarters +foreran +forerank +foreranks +forereach +forereached +forereaches +forereaching +forerun +forerunner +forerunners +forerunning +foreruns +fores +foresaid +foresail +foresails +foresaw foresee +foreseeabilities +foreseeability +foreseeable +foreseeing +foreseen +foreseer +foreseers +foresees +foreshadow +foreshadowed +foreshadower +foreshadowers +foreshadowing +foreshadows +foreshank +foreshanks +foresheet +foresheets +foreshock +foreshocks +foreshore +foreshores +foreshorten +foreshortened +foreshortening +foreshortens +foreshow +foreshowed +foreshowing +foreshown +foreshows +foreside +foresides +foresight +foresighted +foresightedly +foresightedness +foresightednesses +foresightful +foresights +foreskin +foreskins +forespeak +forespeaking +forespeaks +forespoke +forespoken forest +forestage +forestages +forestal +forestall +forestalled +forestaller +forestallers +forestalling +forestallment +forestallments +forestalls +forestation +forestations +forestay +forestays +forestaysail +forestaysails +forested +forester +foresters +forestial +foresting +forestland +forestlands +forestries +forestry +forests +foreswear +foreswearing +foreswears +foreswore +foresworn +foretaste +foretasted +foretastes +foretasting +foretell +foreteller +foretellers +foretelling +foretells +forethought +forethoughtful +forethoughtfully +forethoughtfulness +forethoughtfulnesses +forethoughts +foretime +foretimes +foretoken +foretokened +foretokening +foretokens +foretold +foretop +foretopman +foretopmen +foretops forever +forevermore +foreverness +forevernesses +forevers +forewarn +forewarned +forewarning +forewarns +forewent +forewing +forewings +forewoman +forewomen +foreword +forewords +foreworn +foreyard +foreyards +forfeit +forfeitable +forfeited +forfeiter +forfeiters +forfeiting +forfeits +forfeiture +forfeitures +forfend +forfended +forfending +forfends +forgat +forgather +forgathered +forgathering +forgathers +forgave +forge +forgeabilities +forgeability +forgeable +forged +forger +forgeries +forgers +forgery +forges forget forgetful +forgetfully +forgetfulness +forgetfulnesses +forgetive +forgets +forgettable +forgetter +forgetters +forgetting +forging +forgings +forgivable +forgivably forgive +forgiven +forgiveness +forgivenesses +forgiver +forgivers +forgives +forgiving +forgivingly +forgivingness +forgivingnesses +forgo +forgoer +forgoers +forgoes +forgoing +forgone +forgot +forgotten +forint +forints +forjudge +forjudged +forjudges +forjudging fork +forkball +forkballs +forked +forkedly +forker +forkers +forkful +forkfuls +forkier +forkiest +forking +forkless +forklift +forklifted +forklifting +forklifts +forklike +forks +forksful +forky +forlorn +forlorner +forlornest +forlornly +forlornness +forlornnesses form +formabilities +formability +formable +formal +formaldehyde +formaldehydes +formalin +formalins +formalise +formalised +formalises +formalising +formalism +formalisms +formalist +formalistic +formalists +formalities +formality +formalizable +formalization +formalizations +formalize +formalized +formalizer +formalizers +formalizes +formalizing +formally +formalness +formalnesses +formals +formamide +formamides +formant +formants format +formate +formates +formation +formations +formative +formatively +formatives +formats +formatted +formatter +formatters +formatting +forme +formed +formee former +formerly +formers +formes +formfitting +formful +formic +formicaries +formicary +formidabilities +formidability +formidable +formidableness +formidablenesses +formidably +forming +formless +formlessly +formlessness +formlessnesses +formol +formols +forms +formula +formulae +formulaic +formulaically +formularies +formularization +formularizations +formularize +formularized +formularizer +formularizers +formularizes +formularizing +formulary +formulas +formulate +formulated +formulates +formulating +formulation +formulations +formulator +formulators +formulize +formulized +formulizes +formulizing +formwork +formworks +formyl +formyls +fornical +fornicate +fornicated +fornicates +fornicating +fornication +fornications +fornicator +fornicators +fornices +fornix +forrader +forrarder +forrit +forsake +forsaken +forsaker +forsakers +forsakes +forsaking +forsook +forsooth +forspent +forswear +forswearing +forswears +forswore +forsworn +forsythia +forsythias +fort +fortalice +fortalices +forte +fortepiano +fortepianos +fortes +forth +forthcoming +forthright +forthrightly +forthrightness +forthrightnesses +forthrights +forthwith +forties +fortieth +fortieths +fortification +fortifications +fortified +fortifier +fortifiers +fortifies +fortify +fortifying +fortis +fortissimi +fortissimo +fortissimos +fortitude +fortitudes fortnight +fortnightlies +fortnightly +fortnights +fortress +fortressed +fortresses +fortressing +fortresslike +forts +fortuities +fortuitous +fortuitously +fortuitousness +fortuitousnesses +fortuity fortunate +fortunately +fortunateness +fortunatenesses fortune +fortuned +fortunes +fortuneteller +fortunetellers +fortunetelling +fortunetellings +fortuning +forty +fortyish +forum +forums forward +forwarded +forwarder +forwarders +forwardest +forwarding +forwardly +forwardness +forwardnesses +forwards +forwent +forwhy +forworn +forzando +forzandos +foss +fossa +fossae +fossas +fossate +fosse +fosses +fossette +fossettes +fossick +fossicked +fossicker +fossickers +fossicking +fossicks +fossil +fossiliferous +fossilise +fossilised +fossilises +fossilising +fossilization +fossilizations +fossilize +fossilized +fossilizes +fossilizing +fossils +fossorial foster +fosterage +fosterages +fostered +fosterer +fosterers +fostering +fosterling +fosterlings +fosters +fou +fouette +fouettes +fought +foughten +foul +foulard +foulards +foulbrood +foulbroods +fouled +fouler +foulest +fouling +foulings +foully +foulmouthed +foulness +foulnesses +fouls found +foundation +foundational +foundationally +foundationless +foundations +founded +founder +foundered +foundering +founders +founding +foundling +foundlings +foundries +foundry +founds +fount fountain +fountained +fountainhead +fountainheads +fountaining +fountains +founts +four +fourchee +fourdrinier +fourdriniers +fourfold +fourgon +fourgons +fourplex +fourplexes +fourragere +fourrageres +fours +fourscore +foursome +foursomes +foursquare +fourteen +fourteener +fourteeners +fourteens +fourteenth +fourteenths +fourth +fourthly +fourths +fovea +foveae +foveal +foveas +foveate +foveated +foveola +foveolae +foveolar +foveolas +foveole +foveoles +foveolet +foveolets +fowl +fowled +fowler +fowlers +fowling +fowlings +fowlpox +fowlpoxes +fowls fox +foxed +foxes +foxfire +foxfires +foxfish +foxfishes +foxglove +foxgloves +foxhole +foxholes +foxhound +foxhounds +foxhunt +foxhunted +foxhunter +foxhunters +foxhunting +foxhuntings +foxhunts +foxier +foxiest +foxily +foxiness +foxinesses +foxing +foxings +foxlike +foxskin +foxskins +foxtail +foxtails +foxtrot +foxtrots +foxtrotted +foxtrotting +foxy +foy +foyer +foyers +foys +fozier +foziest +foziness +fozinesses +fozy +frabjous +fracas +fracases +fractal +fractals +fracted +fracti +fraction +fractional +fractionalization +fractionalizations +fractionalize +fractionalized +fractionalizes +fractionalizing +fractionally +fractionate +fractionated +fractionates +fractionating +fractionation +fractionations +fractionator +fractionators +fractioned +fractioning +fractions +fractious +fractiously +fractiousness +fractiousnesses +fractur +fracture +fractured +fractures +fracturing +fracturs +fractus +frae +fraena +fraenum +fraenums +frag +fragged +fragging +fraggings fragile +fragilities +fragility +fragment +fragmental +fragmentally +fragmentarily +fragmentariness +fragmentarinesses +fragmentary +fragmentate +fragmentated +fragmentates +fragmentating +fragmentation +fragmentations +fragmented +fragmenting +fragmentize +fragmentized +fragmentizes +fragmentizing +fragments +fragrance +fragrances +fragrancies +fragrancy fragrant +fragrantly +frags +frail +frailer +frailest +frailly +frailness +frailnesses +frails +frailties +frailty +fraise +fraises +fraktur +frakturs +framable +frambesia +frambesias +framboise +framboises +frame +frameable +framed +framer +framers +frames +frameshift +frameshifts framework +frameworks +framing +framings franc +franchise +franchised +franchisee +franchisees +franchiser +franchisers +franchises +franchising +franchisor +franchisors +francium +franciums +francolin +francolins +francophone +francs +frangibilities +frangibility +frangible +frangipane +frangipanes +frangipani +frangipanis +frangipanni +franglais +frank +frankable +franked +franker +frankers +frankest +frankfurt +frankfurter +frankfurters +frankfurts +frankincense +frankincenses +franking +franklin +franklinite +franklinites +franklins +frankly +frankness +franknesses +frankpledge +frankpledges +franks +frantic +frantically +franticness +franticnesses +frap +frappe +frapped +frappes +frapping +fraps +frass +frasses +frat +frater +fraternal +fraternalism +fraternalisms +fraternally +fraternities +fraternity +fraternization +fraternizations +fraternize +fraternized +fraternizer +fraternizers +fraternizes +fraternizing +fraters +fratricidal +fratricide +fratricides +frats +fraud +frauds +fraudulence +fraudulences +fraudulent +fraudulently +fraudulentness +fraudulentnesses +fraught +fraughted +fraughting +fraughts +fraulein +frauleins +fraxinella +fraxinellas +fray +frayed +fraying +frayings +frays +frazil +frazils +frazzle +frazzled +frazzles +frazzling +freak +freaked +freakier +freakiest +freakily +freakiness +freakinesses +freaking +freakish +freakishly +freakishness +freakishnesses +freakout +freakouts +freaks +freaky +freckle +freckled +freckles +frecklier +freckliest +freckling +freckly free +freebase +freebased +freebaser +freebasers +freebases +freebasing +freebee +freebees +freebie +freebies +freeboard +freeboards +freeboot +freebooted +freebooter +freebooters +freebooting +freeboots +freeborn +freed +freedman +freedmen freedom +freedoms +freedwoman +freedwomen +freeform +freehand +freehanded +freehandedly +freehandedness +freehandednesses +freehearted +freeheartedly +freehold +freeholder +freeholders +freeholds +freeing +freelance +freelanced +freelancer +freelancers +freelances +freelancing +freeload +freeloaded +freeloader +freeloaders +freeloading +freeloads +freely +freeman +freemartin +freemartins +freemasonries +freemasonry +freemen +freeness +freenesses +freer +freers +frees +freesia +freesias +freest +freestanding +freestone +freestones +freestyle +freestyler +freestylers +freestyles +freethinker +freethinkers +freethinking +freethinkings freeway +freeways +freewheel +freewheeled +freewheeler +freewheelers +freewheeling +freewheelingly +freewheels +freewill +freewriting +freewritings freeze +freezer +freezers +freezes freezing +freezingly +freight +freightage +freightages +freighted +freighter +freighters +freighting +freights +fremd +fremitus +fremituses +frena +french +frenched +frenches +frenchification +frenchifications +frenchified +frenchifies +frenchify +frenchifying +frenching +frenetic +frenetically +freneticism +freneticisms +frenetics +frenula +frenulum +frenulums +frenum +frenums +frenzied +frenziedly +frenzies +frenzily +frenzy +frenzying +frequence +frequences +frequencies +frequency frequent +frequentation +frequentations +frequentative +frequentatives +frequented +frequenter +frequenters +frequentest +frequenting +frequently +frequentness +frequentnesses +frequents +frere +freres +fresco +frescoed +frescoer +frescoers +frescoes +frescoing +frescos fresh +freshed +freshen +freshened +freshener +fresheners +freshening +freshens +fresher +freshes +freshest +freshet +freshets +freshing +freshly +freshman +freshmen +freshness +freshnesses +freshwater +freshwaters +fresnel +fresnels +fret +fretful +fretfully +fretfulness +fretfulnesses +fretless +frets +fretsaw +fretsaws +fretsome +fretted +fretter +fretters +frettier +frettiest +fretting +fretty +fretwork +fretworks +friabilities +friability +friable +friar +friaries +friarly +friars +friary +fribble +fribbled +fribbler +fribblers +fribbles +fribbling +fricandeau +fricandeaus +fricandeaux +fricando +fricandoes +fricassee +fricasseed +fricasseeing +fricassees +fricative +fricatives friction +frictional +frictionally +frictionless +frictionlessly +frictions fridge +fridges +fried +friedcake +friedcakes friend +friended +friending +friendless +friendlessness +friendlessnesses +friendlier +friendlies +friendliest +friendlily +friendliness +friendlinesses friendly +friends friendship +friendships +frier +friers +fries +frieze +friezelike +friezes +frig +frigate +frigates +frigged +frigging +fright +frighted frighten +frightened +frightening +frighteningly +frightens +frightful +frightfully +frightfulness +frightfulnesses +frighting +frights +frigid +frigidities +frigidity +frigidly +frigidness +frigidnesses +frigorific +frigs +frijol +frijole +frijoles +frill +frilled +friller +frillers +frillier +frilliest +frilling +frillings +frills +frilly +fringe +fringed +fringes +fringier +fringiest +fringing +fringy +fripperies +frippery +frise +frises +frisette +frisettes +friseur +friseurs +frisk +frisked +frisker +friskers +frisket +friskets +friskier +friskiest +friskily +friskiness +friskinesses +frisking +frisks +frisky +frisson +frissons +frit +frith +friths +fritillaria +fritillarias +fritillaries +fritillary +frits +fritt +frittata +frittatas +fritted +fritter +frittered +fritterer +fritterers +frittering +fritters +fritting +fritts +fritz +fritzes +frivol +frivoled +frivoler +frivolers +frivoling +frivolities +frivolity +frivolled +frivoller +frivollers +frivolling +frivolous +frivolously +frivolousness +frivolousnesses +frivols +friz +frized +frizer +frizers +frizes +frizette +frizettes +frizing +frizz +frizzed +frizzer +frizzers +frizzes +frizzier +frizziest +frizzily +frizziness +frizzinesses +frizzing +frizzle +frizzled +frizzler +frizzlers +frizzles +frizzlier +frizzliest +frizzling +frizzly +frizzy +fro +frock +frocked +frocking +frocks +froe +froes frog +frogeye +frogeyed +frogeyes +frogfish +frogfishes +frogged +froggier +froggiest +frogging +froggy +froghopper +froghoppers +froglike +frogman +frogmen +frogs +frolic +frolicked +frolicking +frolicky +frolics +frolicsome from +fromage +fromages +fromenties +fromenty +frond +fronded +frondeur +frondeurs +frondose +fronds +frons front +frontage +frontages +frontal +frontalities +frontality +frontally +frontals +frontcourt +frontcourts +fronted +fronter +frontes frontier +frontiers +frontiersman +frontiersmen +fronting +frontispiece +frontispieces +frontless +frontlet +frontlets +frontline +frontogeneses +frontogenesis +frontolyses +frontolysis +fronton +frontons +frontrunner +frontrunners +fronts +frontward +frontwards +frore +frosh frost +frostbit +frostbite +frostbites +frostbiting +frostbitings +frostbitten +frosted +frosteds +frostier +frostiest +frostily +frostiness +frostinesses +frosting +frostings +frosts +frostwork +frostworks +frosty +froth +frothed +frothier +frothiest +frothily +frothiness +frothinesses +frothing +froths +frothy +frottage +frottages +frotteur +frotteurs +froufrou +froufrous +frounce +frounced +frounces +frouncing +frouzier +frouziest +frouzy +frow +froward +frowardly +frowardness +frowardnesses +frown +frowned +frowner +frowners +frowning +frowningly +frowns +frows +frowsier +frowsiest +frowst +frowsted +frowstier +frowstiest +frowsting +frowsts +frowsty +frowsy +frowzier +frowziest +frowzily +frowzy +froze +frozen +frozenly +frozenness +frozennesses +fructification +fructifications +fructified +fructifies +fructify +fructifying +fructose +fructoses +fructuous +frug +frugal +frugalities +frugality +frugally +frugged +frugging +frugivore +frugivores +frugivorous +frugs fruit +fruitage +fruitages +fruitarian +fruitarians +fruitcake +fruitcakes +fruited +fruiter +fruiterer +fruiterers +fruiters +fruitful +fruitfuller +fruitfullest +fruitfully +fruitfulness +fruitfulnesses +fruitier +fruitiest +fruitily +fruitiness +fruitinesses +fruiting +fruition +fruitions +fruitless +fruitlessly +fruitlessness +fruitlessnesses +fruitlet +fruitlets +fruits +fruitwood +fruitwoods +fruity +frumenties +frumenty +frump +frumpier +frumpiest +frumpily +frumpish +frumps +frumpy +frusta +frustrate +frustrated +frustrates +frustrating +frustratingly +frustration +frustrations +frustule +frustules +frustum +frustums +frutescent +fruticose fry +fryer +fryers +frying +frypan +frypans +fub +fubbed +fubbing +fubs +fubsier +fubsiest +fubsy +fuchsia +fuchsias +fuchsin +fuchsine +fuchsines +fuchsins +fuci +fuck +fucked +fucker +fuckers +fucking +fucks +fuckup +fuckups +fucoid +fucoidal +fucoids +fucose +fucoses +fucous +fucoxanthin +fucoxanthins +fucus +fucuses +fud +fuddle +fuddled +fuddles +fuddling +fudge +fudged +fudges +fudging +fuds +fuehrer +fuehrers fuel +fueled +fueler +fuelers +fueling +fuelled +fueller +fuellers +fuelling +fuels +fuelwood +fuelwoods +fug +fugacious +fugacities +fugacity +fugal +fugally +fugato +fugatos +fugged +fuggier +fuggiest +fuggily +fugging +fuggy +fugio +fugios +fugitive +fugitively +fugitiveness +fugitivenesses +fugitives +fugle +fugled +fugleman +fuglemen +fugles +fugling +fugs +fugu +fugue +fugued +fugues +fuguing +fuguist +fuguists +fugus +fuhrer +fuhrers +fuji +fujis +fulcra +fulcrum +fulcrums +fulfil +fulfill +fulfilled +fulfiller +fulfillers +fulfilling +fulfillment +fulfillments +fulfills +fulfils +fulgent +fulgently +fulgid +fulgurant +fulgurate +fulgurated +fulgurates +fulgurating +fulguration +fulgurations +fulgurite +fulgurites +fulgurous +fulham +fulhams +fuliginous +fuliginously full +fullam +fullams +fullback +fullbacks +fulled +fuller +fullered +fullerene +fullerenes +fulleries +fullering +fullers +fullery +fullest +fullface +fullfaces +fulling +fullmouthed +fullness +fullnesses +fulls +fully +fulmar +fulmars +fulminant +fulminate +fulminated +fulminates +fulminating +fulmination +fulminations +fulmine +fulmined +fulmines +fulminic +fulmining +fulness +fulnesses +fulsome +fulsomely +fulsomeness +fulsomenesses +fulvous +fumarase +fumarases +fumarate +fumarates +fumaric +fumarole +fumaroles +fumarolic +fumatories +fumatory +fumble +fumbled +fumbler +fumblers +fumbles +fumbling +fumblingly +fume +fumed +fumeless +fumelike +fumer +fumers +fumes +fumet +fumets +fumette +fumettes +fumier +fumiest +fumigant +fumigants +fumigate +fumigated +fumigates +fumigating +fumigation +fumigations +fumigator +fumigators +fuming +fumingly +fumitories +fumitory +fumuli +fumulus +fumy fun +funambulism +funambulisms +funambulist +funambulists function +functional +functionalism +functionalisms +functionalist +functionalistic +functionalists +functionalities +functionality +functionally +functionaries +functionary +functioned +functioning +functionless +functions +functor +functors +fund +fundament fundamental +fundamentalism +fundamentalisms +fundamentalist +fundamentalistic +fundamentalists +fundamentally +fundamentals +fundaments +funded +fundi +fundic +funding +fundraiser +fundraisers +fundraising +fundraisings +funds +fundus funeral +funerals +funerary +funereal +funereally +funest +funfair +funfairs +fungal +fungals +fungi +fungibilities +fungibility +fungible +fungibles +fungic +fungicidal +fungicidally +fungicide +fungicides +fungiform +fungistatic +fungo +fungoes +fungoid +fungoids +fungous +fungus +funguses +funicle +funicles +funicular +funiculars +funiculi +funiculus +funk +funked +funker +funkers +funkia +funkias +funkier +funkiest +funkiness +funkinesses +funking +funks +funky +funned +funnel +funneled +funnelform +funneling +funnelled +funnelling +funnels +funner +funnest +funnier +funnies +funniest +funnily +funniness +funninesses +funning funny +funnyman +funnymen +funs fur +furan +furane +furanes +furanose +furanoses +furanoside +furanosides +furans +furazolidone +furazolidones +furbearer +furbearers +furbelow +furbelowed +furbelowing +furbelows +furbish +furbished +furbisher +furbishers +furbishes +furbishing +furcate +furcated +furcates +furcating +furcation +furcations +furcraea +furcraeas +furcula +furculae +furcular +furculum +furfur +furfural +furfurals +furfuran +furfurans +furfures +furibund +furies +furioso +furious +furiously +furl +furlable +furled +furler +furlers +furless +furling +furlong +furlongs +furlough +furloughed +furloughing +furloughs +furls +furmenties +furmenty +furmeties +furmety +furmities +furmity +furnace +furnaced +furnaces +furnacing +furnish furnished +furnisher +furnishers +furnishes +furnishing +furnishings furniture +furnitures +furor +furore +furores +furors +furosemide +furosemides +furred +furrier +furrieries +furriers +furriery +furriest +furrily +furriner +furriners +furring +furrings +furrow +furrowed +furrower +furrowers +furrowing +furrows +furrowy +furry +furs further +furtherance +furtherances +furthered +furtherer +furtherers +furthering +furthermore +furthermost +furthers +furthest +furtive +furtively +furtiveness +furtivenesses +furuncle +furuncles +furunculoses +furunculosis +fury +furze +furzes +furzier +furziest +furzy +fusain +fusains +fuscous +fuse +fused +fusee +fusees +fusel +fuselage +fuselages +fuseless +fusels +fuses +fusibilities +fusibility +fusible +fusibly +fusiform +fusil +fusile +fusileer +fusileers +fusilier +fusiliers +fusillade +fusillades +fusilli +fusillis +fusils +fusing +fusion +fusionist +fusionists +fusions +fuss +fussbudget +fussbudgets +fussbudgety +fussed +fusser +fussers +fusses +fussier +fussiest +fussily +fussiness +fussinesses +fussing +fusspot +fusspots +fussy +fustian +fustians +fustic +fustics +fustier +fustiest +fustigate +fustigated +fustigates +fustigating +fustigation +fustigations +fustily +fustiness +fustinesses +fusty +fusulinid +fusulinids +futharc +futharcs +futhark +futharks +futhorc +futhorcs +futhork +futhorks +futile +futilely +futileness +futilenesses +futilitarian +futilitarianism +futilitarianisms +futilitarians +futilities +futility +futon +futons +futtock +futtocks +futural future +futureless +futurelessness +futurelessnesses +futures +futurism +futurisms +futurist +futuristic +futuristically +futuristics +futurists +futurities +futurity +futurological +futurologies +futurologist +futurologists +futurology +futz +futzed +futzes +futzing +fuze +fuzed +fuzee +fuzees +fuzes +fuzil +fuzils +fuzing +fuzz +fuzzed +fuzzes +fuzzier +fuzziest +fuzzily +fuzziness +fuzzinesses +fuzzing +fuzzy +fyce +fyces +fyke +fykes +fylfot +fylfots +fytte +fyttes +gab +gabardine +gabardines +gabbard +gabbards +gabbart +gabbarts +gabbed +gabber +gabbers +gabbier +gabbiest +gabbing +gabble +gabbled +gabbler +gabblers +gabbles +gabbling +gabbro +gabbroic +gabbroid +gabbros +gabby +gabelle +gabelled +gabelles +gaberdine +gaberdines +gabfest +gabfests +gabies +gabion +gabions +gable +gabled +gables +gabling +gaboon +gaboons +gabs +gaby +gad +gadabout +gadabouts +gadarene +gadded +gadder +gadders +gaddi +gadding +gaddis +gadflies +gadfly +gadget +gadgeteer +gadgeteers +gadgetries +gadgetry +gadgets +gadgety +gadi +gadid +gadids +gadis +gadoid +gadoids +gadolinite +gadolinites +gadolinium +gadoliniums +gadroon +gadrooned +gadrooning +gadroonings +gadroons +gads +gadwall +gadwalls +gadzookeries +gadzookery +gadzooks +gae +gaed +gaeing +gaen +gaes +gaff +gaffe +gaffed +gaffer +gaffers +gaffes +gaffing +gaffs +gag +gaga +gagaku +gagakus +gage +gaged +gager +gagers +gages +gagged +gagger +gaggers +gagging +gaggle +gaggled +gaggles +gaggling +gaging +gagman +gagmen +gags +gagster +gagsters +gahnite +gahnites +gaieties +gaiety +gaijin +gaillardia +gaillardias +gaily gain +gainable +gained +gainer +gainers +gainful +gainfully +gainfulness +gainfulnesses +gaingiving +gaingivings +gaining +gainless +gainlier +gainliest +gainly +gains +gainsaid +gainsay +gainsayer +gainsayers +gainsaying +gainsays +gainst +gait +gaited +gaiter +gaiters +gaiting +gaits +gal +gala +galabia +galabias +galabieh +galabiehs +galabiya +galabiyas +galactic +galactorrhea +galactorrheas +galactosamine +galactosamines +galactose +galactosemia +galactosemias +galactosemic +galactoses +galactosidase +galactosidases +galactoside +galactosides +galactosyl +galactosyls +galago +galagos +galah +galahs +galangal +galangals +galantine +galantines +galas +galatea +galateas +galavant +galavanted +galavanting +galavants +galax +galaxes +galaxies +galaxy +galbanum +galbanums +gale +galea +galeae +galeas +galeate +galeated +galena +galenas +galenic +galenical +galenicals +galenite +galenites +galere +galeres +gales +galilee +galilees +galingale +galingales +galiot +galiots +galipot +galipots +galivant +galivanted +galivanting +galivants +gall +gallamine +gallamines +gallant +gallanted +gallanting +gallantly +gallantries +gallantry +gallants +gallate +gallates +gallbladder +gallbladders +galleass +galleasses +galled +gallein +galleins +galleon +galleons +galleria +gallerias +galleried +galleries gallery +gallerygoer +gallerygoers +gallerying +galleryite +galleryites +gallet +galleta +galletas +galleted +galleting +gallets +galley +galleys +gallflies +gallfly +galliard +galliards +galliass +galliasses +gallic +gallican +gallicism +gallicisms +gallicization +gallicizations +gallicize +gallicized +gallicizes +gallicizing +gallied +gallies +galligaskins +gallimaufries +gallimaufry +gallinaceous +galling +gallingly +gallinipper +gallinippers +gallinule +gallinules +galliot +galliots +gallipot +gallipots +gallium +galliums +gallivant +gallivanted +gallivanting +gallivants +gallnut +gallnuts gallon +gallonage +gallonages +gallons +galloon +galloons +galloot +galloots +gallop +gallopade +gallopades +galloped +galloper +gallopers +galloping +gallops +gallous +gallowglass +gallowglasses +gallows +gallowses +galls +gallstone +gallstones +gallus +gallused +galluses +gally +gallying +galoot +galoots +galop +galopade +galopades +galoped +galoping +galops +galore +galores +galosh +galoshe +galoshed +galoshes +gals +galumph +galumphed +galumphing +galumphs +galvanic +galvanically +galvanise +galvanised +galvanises +galvanising +galvanism +galvanisms +galvanization +galvanizations +galvanize +galvanized +galvanizer +galvanizers +galvanizes +galvanizing +galvanometer +galvanometers +galvanometric +galvanoscope +galvanoscopes +galyac +galyacs +galyak +galyaks +gam +gama +gamas +gamashes +gamay +gamays +gamb +gamba +gambade +gambades +gambado +gambadoes +gambados +gambas +gambe +gambes +gambeson +gambesons +gambia +gambias +gambier +gambiers +gambir +gambirs +gambit +gambits +gamble +gambled +gambler +gamblers +gambles +gambling +gamboge +gamboges +gambol +gamboled +gamboling +gambolled +gambolling +gambols +gambrel +gambrels +gambs +gambusia +gambusias game +gamecock +gamecocks +gamed +gamekeeper +gamekeepers +gamelan +gamelans +gamelike +gamely +gameness +gamenesses +gamer +gamers +games +gamesman +gamesmanship +gamesmanships +gamesmen +gamesome +gamesomely +gamesomeness +gamesomenesses +gamest +gamester +gamesters +gametangia +gametangium +gamete +gametes +gametic +gametically +gametocyte +gametocytes +gametogeneses +gametogenesis +gametogenic +gametogenous +gametophore +gametophores +gametophyte +gametophytes +gametophytic +gamey +gamic +gamier +gamiest +gamily +gamin +gamine +gamines +gaminess +gaminesses +gaming +gamings +gamins +gamma +gammadia +gammadion +gammas +gammed +gammer +gammers +gammier +gammiest +gamming +gammon +gammoned +gammoner +gammoners +gammoning +gammons +gammy +gamodeme +gamodemes +gamopetalous +gamp +gamps +gams +gamut +gamuts +gamy +gan +ganache +ganaches +gander +gandered +gandering +ganders +gane +ganef +ganefs +ganev +ganevs +gang +gangbang +gangbanger +gangbangers +gangbangs +gangbuster +gangbusters +ganged +ganger +gangers +ganging +gangland +ganglands +ganglia +ganglial +gangliar +ganglier +gangliest +gangling +ganglion +ganglionated +ganglionic +ganglions +ganglioside +gangliosides +gangly +gangplank +gangplanks +gangplow +gangplows +gangrel +gangrels +gangrene +gangrened +gangrenes +gangrening +gangrenous +gangs +gangster +gangsterdom +gangsterdoms +gangsterish +gangsterism +gangsterisms +gangsters +gangue +gangues +gangway +gangways +ganister +ganisters +ganja +ganjah +ganjahs +ganjas +gannet +gannets +gannister +gannisters +ganof +ganofs +ganoid +ganoids +gantelope +gantelopes +gantlet +gantleted +gantleting +gantlets +gantline +gantlines +gantlope +gantlopes +gantries +gantry +ganymede +ganymedes +gaol +gaoled +gaoler +gaolers +gaoling +gaols +gap +gape +gaped +gaper +gapers +gapes +gapeseed +gapeseeds +gapeworm +gapeworms +gaping +gapingly +gaposis +gaposises +gapped +gappier +gappiest +gapping +gappy +gaps +gapy +gar garage +garaged +garageman +garagemen +garages +garaging +garb garbage +garbageman +garbagemen +garbages +garbanzo +garbanzos +garbed +garbing +garble +garbled +garbler +garblers +garbles +garbless +garbling +garboard +garboards +garboil +garboils +garbs +garcon +garcons +gardant garden +gardened +gardener +gardeners +gardenful +gardenfuls +gardenia +gardenias +gardening +gardens +garderobe +garderobes +gardyloo +garfish +garfishes +garganey +garganeys +gargantuan +garget +gargets +gargety +gargle +gargled +gargler +garglers +gargles +gargling +gargoyle +gargoyled +gargoyles +garibaldi +garibaldis +garigue +garigues +garish +garishly +garishness +garishnesses +garland +garlanded +garlanding +garlands garlic +garlicked +garlicky +garlics garment +garmented +garmenting +garments +garner +garnered +garnering +garners +garnet +garnetiferous +garnets +garni +garnierite +garnierites +garnish +garnished +garnishee +garnisheed +garnisheeing +garnishees +garnishes +garnishing +garnishment +garnishments +garniture +garnitures +garote +garoted +garotes +garoting +garotte +garotted +garotter +garotters +garottes +garotting +garpike +garpikes +garred +garret +garrets +garring +garrison +garrisoned +garrisoning +garrisons +garron +garrons +garrote +garroted +garroter +garroters +garrotes +garroting +garrotte +garrotted +garrottes +garrotting +garrulities +garrulity +garrulous +garrulously +garrulousness +garrulousnesses +gars +garter +gartered +gartering +garters +garth +garths +garvey +garveys gas +gasalier +gasaliers +gasbag +gasbags +gascon +gasconade +gasconaded +gasconader +gasconaders +gasconades +gasconading +gascons +gaselier +gaseliers +gaseous +gaseousness +gaseousnesses +gases +gash +gashed +gasher +gashes +gashest +gashing +gasholder +gasholders +gashouse +gashouses +gasification +gasifications +gasified +gasifier +gasifiers +gasifies +gasiform +gasify +gasifying +gasket +gaskets +gaskin +gasking +gaskings +gaskins +gasless +gaslight +gaslights +gaslit +gasman +gasmen +gasogene +gasogenes +gasohol +gasohols +gasolene +gasolenes +gasolier +gasoliers +gasoline +gasolines +gasolinic +gasometer +gasometers +gasp +gasped +gasper +gaspers +gasping +gasps +gassed +gasser +gassers +gasses +gassier +gassiest +gassily +gassiness +gassinesses +gassing +gassings +gassy +gast +gasted +gaster +gasters +gastight +gastightness +gastightnesses +gasting +gastness +gastnesses +gastraea +gastraeas +gastral +gastrea +gastreas +gastrectomies +gastrectomy +gastric +gastrin +gastrins +gastritides +gastritis +gastrocnemii +gastrocnemius +gastroduodenal +gastroenteritides +gastroenteritis +gastroenteritises +gastroenterological +gastroenterologies +gastroenterologist +gastroenterologists +gastroenterology +gastroesophageal +gastrointestinal +gastrolith +gastroliths +gastronome +gastronomes +gastronomic +gastronomical +gastronomically +gastronomies +gastronomist +gastronomists +gastronomy +gastropod +gastropods +gastroscope +gastroscopes +gastroscopic +gastroscopies +gastroscopist +gastroscopists +gastroscopy +gastrotrich +gastrotrichs +gastrovascular +gastrula +gastrulae +gastrular +gastrulas +gastrulate +gastrulated +gastrulates +gastrulating +gastrulation +gastrulations +gasts +gasworks +gat gate +gateau +gateaux +gated +gatefold +gatefolds +gatehouse +gatehouses +gatekeeper +gatekeepers +gatekeeping +gateless +gatelike +gateman +gatemen +gatepost +gateposts +gates +gateway +gateways gather +gathered +gatherer +gatherers +gathering +gatherings +gathers +gating +gator +gators +gats +gauche +gauchely +gaucheness +gauchenesses +gaucher +gaucherie +gaucheries +gauchest +gaucho +gauchos +gaud +gauderies +gaudery +gaudier +gaudies +gaudiest +gaudily +gaudiness +gaudinesses +gauds +gaudy +gauffer +gauffered +gauffering +gauffers +gauge +gauged +gauger +gaugers +gauges +gauging +gault +gaults +gaum +gaumed +gauming +gaums +gaun +gaunt +gaunter +gauntest +gauntlet +gauntleted +gauntleting +gauntlets +gauntly +gauntness +gauntnesses +gauntries +gauntry +gaur +gaurs +gauss +gausses +gauze +gauzelike +gauzes +gauzier +gauziest +gauzily +gauzy +gavage +gavages +gave +gavel +gaveled +gaveling +gavelkind +gavelkinds +gavelled +gavelling +gavelock +gavelocks +gavels +gavial +gavials +gavot +gavots +gavotte +gavotted +gavottes +gavotting +gawk +gawked +gawker +gawkers +gawkier +gawkies +gawkiest +gawkily +gawkiness +gawkinesses +gawking +gawkish +gawkishly +gawkishness +gawkishnesses +gawks +gawky +gawp +gawped +gawper +gawpers +gawping +gawps +gawsie +gawsy gay +gayal +gayals +gayer +gayest +gayeties +gayety +gayly +gayness +gaynesses +gays +gaywings +gazabo +gazaboes +gazabos +gazania +gazanias +gazar +gazars +gaze +gazebo +gazeboes +gazebos +gazed +gazehound +gazehounds +gazelle +gazelles +gazer +gazers +gazes +gazette +gazetted +gazetteer +gazetteers +gazettes +gazetting +gazing +gazogene +gazogenes +gazpacho +gazpachos +gazump +gazumped +gazumper +gazumpers +gazumping +gazumps +geanticline +geanticlines +gear +gearbox +gearboxes +gearcase +gearcases +gearchange +gearchanges +geared +gearing +gearings +gearless +gears +gearshift +gearshifts +gearwheel +gearwheels +geck +gecked +gecking +gecko +geckoes +geckos +gecks +ged +gedankenexperiment +gedankenexperiments +geds +gee +geed +geegaw +geegaws +geeing +geek +geekier +geekiest +geeks +geeky +geepound +geepounds +gees +geese +geest +geests +geez +geezer +geezers +gegenschein +gegenscheins +geisha +geishas +gel +gelable +gelada +geladas +gelandesprung +gelandesprungs +gelant +gelants +gelate +gelated +gelates +gelati +gelatin +gelatine +gelatines +gelating +gelatinization +gelatinizations +gelatinize +gelatinized +gelatinizes +gelatinizing +gelatinous +gelatinously +gelatinousness +gelatinousnesses +gelatins +gelation +gelations +gelato +gelatos +geld +gelded +gelder +gelders +gelding +geldings +gelds +gelee +gelees +gelid +gelidities +gelidity +gelidly +gelignite +gelignites +gellant +gellants +gelled +gelling +gels +gelsemia +gelsemium +gelsemiums +gelt +gelts +gem +gemeinschaft +gemeinschaften +gemeinschafts +geminal +geminally +geminate +geminated +geminates +geminating +gemination +geminations +gemlike +gemma +gemmae +gemmate +gemmated +gemmates +gemmating +gemmation +gemmations +gemmed +gemmier +gemmiest +gemmily +gemming +gemmologies +gemmologist +gemmologists +gemmology +gemmule +gemmules +gemmy +gemological +gemologies +gemologist +gemologists +gemology +gemot +gemote +gemotes +gemots +gems +gemsbok +gemsboks +gemsbuck +gemsbucks +gemstone +gemstones +gemutlich +gemutlichkeit +gemutlichkeits +gen +gendarme +gendarmerie +gendarmeries +gendarmery +gendarmes +gender +gendered +gendering +genders +gene +genealogical +genealogically +genealogies +genealogist +genealogists +genealogy +genera +generable general +generalisation +generalisations +generalise +generalised +generalises +generalising +generalissimo +generalissimos +generalist +generalists +generalities +generality +generalizabilities +generalizability +generalizable +generalization +generalizations +generalize +generalized +generalizer +generalizers +generalizes +generalizing +generally +generals +generalship +generalships +generate +generated +generates +generating generation +generational +generationally +generations +generative +generator +generators +generatrices +generatrix +generic +generically +genericness +genericnesses +generics +generosities +generosity generous +generously +generousness +generousnesses +genes +geneses +genesis +genet +genetic +genetical +genetically +geneticist +geneticists +genetics +genets +genette +genettes +geneva +genevas +genial +genialities +geniality +genially +genic +genically +geniculate +geniculated +genie +genies +genii +genip +genipap +genipaps +genips +genital +genitalia +genitalic +genitally +genitals +genitival +genitivally +genitive +genitives +genitor +genitors +genitourinary +geniture +genitures +genius +geniuses +genoa +genoas +genocidal +genocide +genocides +genoise +genoises +genom +genome +genomes +genomic +genoms +genotype +genotypes +genotypic +genotypical +genotypically +genre +genres +genro +genros +gens +genseng +gensengs +gent +gentamicin +gentamicins +genteel +genteeler +genteelest +genteelism +genteelisms +genteelly +genteelness +genteelnesses +gentes +gentian +gentians +gentil +gentile +gentiles +gentilesse +gentilesses +gentilities +gentility gentle +gentled +gentlefolk +gentlefolks gentleman +gentlemanlike +gentlemanlikeness +gentlemanlikenesses +gentlemanliness +gentlemanlinesses +gentlemanly +gentlemen +gentleness +gentlenesses +gentleperson +gentlepersons +gentler +gentles +gentlest +gentlewoman +gentlewomen +gentling +gently +gentoo +gentoos +gentrice +gentrices +gentries +gentrification +gentrifications +gentrified +gentrifier +gentrifiers +gentrifies +gentrify +gentrifying +gentry +gents +genu +genua +genuflect +genuflected +genuflecting +genuflection +genuflections +genuflects +genuine +genuinely +genuineness +genuinenesses +genus +genuses +geobotanic +geobotanical +geobotanies +geobotanist +geobotanists +geobotany +geocentric +geocentrically +geochemical +geochemically +geochemist +geochemistries +geochemistry +geochemists +geochronologic +geochronological +geochronologically +geochronologies +geochronologist +geochronologists +geochronology +geode +geodes +geodesic +geodesics +geodesies +geodesist +geodesists +geodesy +geodetic +geodetical +geodic +geoduck +geoducks +geognosies +geognosy +geographer +geographers +geographic +geographical +geographically +geographies geography +geohydrologic +geohydrologies +geohydrologist +geohydrologists +geohydrology +geoid +geoidal +geoids +geologer +geologers +geologic +geological +geologically +geologies +geologist +geologists +geologize +geologized +geologizes +geologizing +geology +geomagnetic +geomagnetically +geomagnetism +geomagnetisms +geomancer +geomancers +geomancies +geomancy +geomantic +geometer +geometers +geometric +geometrical +geometrically +geometrician +geometricians +geometrics +geometrid +geometrids +geometries +geometrise +geometrised +geometrises +geometrising +geometrization +geometrizations +geometrize +geometrized +geometrizes +geometrizing geometry +geomorphic +geomorphological +geomorphologies +geomorphologist +geomorphologists +geomorphology +geophagies +geophagy +geophone +geophones +geophysical +geophysically +geophysicist +geophysicists +geophysics +geophyte +geophytes +geopolitical +geopolitically +geopolitician +geopoliticians +geopolitics +geoponic +geopressured +geoprobe +geoprobes +georgette +georgettes +georgic +georgics +geoscience +geosciences +geoscientist +geoscientists +geostationary +geostrategic +geostrategies +geostrategist +geostrategists +geostrategy +geostrophic +geostrophically +geosynchronous +geosynclinal +geosyncline +geosynclines +geotactic +geotaxes +geotaxis +geotechnical +geotectonic +geotectonically +geothermal +geothermally +geotropic +geotropically +geotropism +geotropisms +gerah +gerahs +geranial +geranials +geraniol +geraniols +geranium +geraniums +gerardia +gerardias +gerbera +gerberas +gerbil +gerbille +gerbilles +gerbils +gerent +gerents +gerenuk +gerenuks +gerfalcon +gerfalcons +geriatric +geriatrician +geriatricians +geriatrics +germ +german +germander +germanders +germane +germanely +germanic +germanium +germaniums +germanization +germanizations +germanize +germanized +germanizes +germanizing +germans +germen +germens +germfree +germicidal +germicide +germicides +germier +germiest +germina +germinabilities +germinability +germinal +germinally +germinate +germinated +germinates +germinating +germination +germinations +germinative +germproof +germs +germy +gerontic +gerontocracies +gerontocracy +gerontocrat +gerontocratic +gerontocrats +gerontologic +gerontological +gerontologies +gerontologist +gerontologists +gerontology +gerontomorphic +gerrymander +gerrymandered +gerrymandering +gerrymanders +gerund +gerundive +gerundives +gerunds +gesellschaft +gesellschaften +gesellschafts +gesneria +gesneriad +gesneriads +gesso +gessoed +gessoes +gest +gestalt +gestalten +gestaltist +gestaltists +gestalts +gestapo +gestapos +gestate +gestated +gestates +gestating +gestation +gestational +gestations +geste +gestes +gestic +gestical +gesticulant +gesticulate +gesticulated +gesticulates +gesticulating +gesticulation +gesticulations +gesticulative +gesticulator +gesticulators +gesticulatory +gests +gestural +gesturally gesture +gestured +gesturer +gesturers +gestures +gesturing +gesundheit get +geta +getable +getas +getatable +getaway +getaways +gets +gettable +getter +gettered +gettering +getters +getting +getup +getups +geum +geums +gewgaw +gewgaws +gewurztraminer +gewurztraminers +gey +geyser +geyserite +geyserites +geysers +gharial +gharials +gharri +gharries +gharris +gharry +ghast +ghastful +ghastfully +ghastlier +ghastliest +ghastliness +ghastlinesses +ghastly +ghat +ghats +ghaut +ghauts +ghazi +ghazies +ghazis +ghee +ghees +gherao +gheraoed +gheraoes +gheraoing +gherkin +gherkins +ghetto +ghettoed +ghettoes +ghettoing +ghettoization +ghettoizations +ghettoize +ghettoized +ghettoizes +ghettoizing +ghettos +ghi +ghibli +ghiblis +ghillie +ghillies +ghis +ghost +ghosted +ghostier +ghostiest +ghosting +ghostings +ghostlier +ghostliest +ghostlike +ghostliness +ghostlinesses +ghostly +ghosts +ghostwrite +ghostwriter +ghostwriters +ghostwrites +ghostwriting +ghostwritten +ghostwrote +ghosty +ghoul +ghoulie +ghoulies +ghoulish +ghoulishly +ghoulishness +ghoulishnesses +ghouls +ghyll +ghylls +giant +giantess +giantesses +giantism +giantisms +giantlike +giants +giaour +giaours +giardiases +giardiasis +gib +gibbed +gibber +gibbered +gibberellin +gibberellins +gibbering +gibberish +gibberishes +gibbers +gibbet +gibbeted +gibbeting +gibbets +gibbetted +gibbetting +gibbing +gibbon +gibbons +gibbose +gibbosities +gibbosity +gibbous +gibbsite +gibbsites +gibe +gibed +giber +gibers +gibes +gibing +gibingly +giblet +giblets +gibs +gibson +gibsons +gid +giddap +giddied +giddier +giddies +giddiest +giddily +giddiness +giddinesses +giddy +giddyap +giddying +giddyup +gids +gie +gied +gieing +gien +gies gift gifted +giftedly +giftedness +giftednesses +gifting +giftless +gifts +giftware +giftwares +gig +giga +gigabit +gigabits +gigabyte +gigabytes +gigahertz +gigantesque +gigantic +gigantically +gigantism +gigantisms +gigas +gigaton +gigatons +gigawatt +gigawatts +gigged +gigging +giggle +giggled +giggler +gigglers +giggles +gigglier +giggliest +giggling +gigglingly +giggly +gighe +giglet +giglets +giglot +giglots +gigolo +gigolos +gigot +gigots +gigs +gigue +gigues +gilbert +gilberts +gild +gilded +gilder +gilders +gildhall +gildhalls +gilding +gildings +gilds +gill +gilled +giller +gillers +gillie +gillied +gillies +gilling +gillnet +gillnets +gillnetted +gillnetter +gillnetters +gillnetting +gills +gilly +gillyflower +gillyflowers +gillying +gilt +gilthead +giltheads +gilts +gimbal +gimbaled +gimbaling +gimballed +gimballing +gimbals +gimcrack +gimcrackeries +gimcrackery +gimcracks +gimel +gimels +gimlet +gimleted +gimleting +gimlets +gimmal +gimmals +gimme +gimmes +gimmick +gimmicked +gimmicking +gimmickries +gimmickry +gimmicks +gimmicky +gimmie +gimmies +gimp +gimped +gimpier +gimpiest +gimping +gimps +gimpy +gin +gingal +gingall +gingalls +gingals +gingeley +gingeleys +gingeli +gingelies +gingelis +gingelli +gingellies +gingellis +gingelly +gingely +ginger +gingerbread +gingerbreaded +gingerbreads +gingerbready +gingered +gingering +gingerliness +gingerlinesses +gingerly +gingerroot +gingerroots +gingers +gingersnap +gingersnaps +gingery +gingham +ginghams +gingili +gingilis +gingilli +gingillis +gingiva +gingivae +gingival +gingivectomies +gingivectomy +gingivites +gingivitides +gingivitis +gingivitises +gingko +gingkoes +gink +ginkgo +ginkgoes +ginkgos +ginks +ginned +ginner +ginners +ginnier +ginniest +ginning +ginnings +ginny +gins +ginseng +ginsengs +gip +gipon +gipons +gipped +gipper +gippers +gipping +gips +gipsied +gipsies +gipsy +gipsying giraffe +giraffes +giraffish +girandole +girandoles +girasol +girasole +girasoles +girasols +gird +girded +girder +girders +girding +girdle +girdled +girdler +girdlers +girdles +girdling +girds girl +girlfriend +girlfriends +girlhood +girlhoods +girlie +girlies +girlish +girlishly +girlishness +girlishnesses +girls +girly +girn +girned +girning +girns +giro +giron +girons +giros +girosol +girosols +girsh +girshes +girt +girted +girth +girthed +girthing +girths +girting +girts +gisarme +gisarmes +gismo +gismos +gist +gists +git +gitano +gitanos +gits +gittern +gitterns +gittin give +giveable +giveaway +giveaways +giveback +givebacks +given +givens +giver +givers +gives +giving +gizmo +gizmos +gizzard +gizzards +gjetost +gjetosts +glabella +glabellae +glabellar +glabrate +glabrescent +glabrous +glace +glaceed +glaceing +glaces +glacial +glacially +glaciate +glaciated +glaciates +glaciating +glaciation +glaciations +glacier +glaciers +glaciological +glaciologies +glaciologist +glaciologists +glaciology +glacis +glacises glad +gladded +gladden +gladdened +gladdening +gladdens +gladder +gladdest +gladding +glade +glades +gladiate +gladiator +gladiatorial +gladiators +gladier +gladiest +gladiola +gladiolas +gladioli +gladiolus +gladioluses +gladlier +gladliest +gladly +gladness +gladnesses +glads +gladsome +gladsomely +gladsomeness +gladsomenesses +gladsomer +gladsomest +gladstone +gladstones +glady +glaiket +glaikit +glair +glaire +glaired +glaires +glairier +glairiest +glairing +glairs +glairy +glaive +glaived +glaives +glamor +glamorise +glamorised +glamorises +glamorising +glamorization +glamorizations +glamorize +glamorized +glamorizer +glamorizers +glamorizes +glamorizing +glamorous +glamorously +glamorousness +glamorousnesses +glamors +glamour +glamoured +glamouring +glamourize +glamourized +glamourizes +glamourizing +glamourless +glamourous +glamours glance +glanced +glancer +glancers +glances +glancing +glancingly +gland +glandered +glanders +glandes +glandless +glands +glandular +glandularly +glandule +glandules +glans glare +glared +glares +glarier +glariest +glaring +glaringly +glaringness +glaringnesses +glary +glasnost +glasnosts glass +glassblower +glassblowers +glassblowing +glassblowings +glassed +glasses +glassful +glassfuls +glasshouse +glasshouses +glassie +glassier +glassies +glassiest +glassily +glassine +glassines +glassiness +glassinesses +glassing +glassless +glassmaker +glassmakers +glassmaking +glassmakings +glassman +glassmen +glasspaper +glasspapered +glasspapering +glasspapers +glassware +glasswares +glasswork +glassworker +glassworkers +glassworks +glasswort +glassworts +glassy +glaucoma +glaucomas +glauconite +glauconites +glauconitic +glaucous +glaucousness +glaucousnesses +glaze +glazed +glazer +glazers +glazes +glazier +glazieries +glaziers +glaziery +glaziest +glazing +glazings +glazy +gleam +gleamed +gleamer +gleamers +gleamier +gleamiest +gleaming +gleams +gleamy +glean +gleanable +gleaned +gleaner +gleaners +gleaning +gleanings +gleans +gleba +glebae +glebe +glebes +gled +glede +gledes +gleds +glee +gleed +gleeds +gleeful +gleefully +gleefulness +gleefulnesses +gleek +gleeked +gleeking +gleeks +gleeman +gleemen +glees +gleesome +gleet +gleeted +gleetier +gleetiest +gleeting +gleets +gleety +gleg +glegly +glegness +glegnesses +gleization +gleizations +glen +glengarries +glengarry +glenlike +glenoid +glens +gley +gleyed +gleying +gleyings +gleys +glia +gliadin +gliadine +gliadines +gliadins +glial +glias +glib +glibber +glibbest +glibly +glibness +glibnesses +glide +glided +glider +gliders +glides +gliding +gliff +gliffs +glim +glime +glimed +glimes +gliming +glimmer +glimmered +glimmering +glimmerings +glimmers +glimpse +glimpsed +glimpser +glimpsers +glimpses +glimpsing +glims +glint +glinted +glinting +glints +glioblastoma +glioblastomas +glioblastomata +glioma +gliomas +gliomata +glissade +glissaded +glissader +glissaders +glissades +glissading +glissandi +glissando +glissandos +glisten +glistened +glistening +glistens +glister +glistered +glistering +glisters +glitch +glitches +glitchy +glitter +glitterati +glittered +glittering +glitteringly +glitters +glittery +glitz +glitzes +glitzier +glitziest +glitzy +gloam +gloaming +gloamings +gloams +gloat +gloated +gloater +gloaters +gloating +gloatingly +gloats +glob +global +globalise +globalised +globalises +globalising +globalism +globalisms +globalist +globalists +globalization +globalizations +globalize +globalized +globalizes +globalizing +globally +globate +globated +globbier +globbiest +globby globe +globed +globefish +globefishes +globeflower +globeflowers +globes +globin +globing +globins +globoid +globoids +globose +globous +globs +globular +globule +globules +globulin +globulins +glochid +glochidia +glochidium +glochids +glockenspiel +glockenspiels +glogg +gloggs +glom +glomera +glomerular +glomerule +glomerules +glomeruli +glomerulonephritides +glomerulonephritis +glomerulus +glommed +glomming +gloms +glomus +glonoin +glonoins +gloom +gloomed +gloomful +gloomier +gloomiest +gloomily +gloominess +gloominesses +glooming +gloomings +glooms +gloomy +glop +glopped +glopping +gloppy +glops +gloria +glorias +gloried +glories +glorification +glorifications +glorified +glorifier +glorifiers +glorifies +glorify +glorifying +gloriole +glorioles +glorious +gloriously +gloriousness +gloriousnesses glory +glorying +gloss +glossa +glossae +glossal +glossarial +glossaries +glossarist +glossarists +glossary +glossas +glossator +glossators +glossed +glosseme +glossemes +glosser +glossers +glosses +glossier +glossies +glossiest +glossily +glossina +glossinas +glossiness +glossinesses +glossing +glossitis +glossitises +glossographer +glossographers +glossolalia +glossolalias +glossolalist +glossolalists +glossopharyngeal +glossopharyngeals +glossy +glost +glosts +glottal +glottic +glottides +glottis +glottises +glottochronological +glottochronologies +glottochronology +glout +glouted +glouting +glouts glove +gloved +glover +glovers +gloves +gloving +glow +glowed +glower +glowered +glowering +glowers +glowflies +glowfly +glowing +glowingly +glows +glowworm +glowworms +gloxinia +gloxinias +gloze +glozed +glozes +glozing +glucagon +glucagons +glucan +glucans +glucinic +glucinum +glucinums +glucocorticoid +glucocorticoids +glucokinase +glucokinases +gluconate +gluconates +gluconeogeneses +gluconeogenesis +glucosamine +glucosamines +glucose +glucoses +glucosic +glucosidase +glucosidases +glucoside +glucosides +glucosidic +glucuronidase +glucuronidases +glucuronide +glucuronides glue +glued +glueing +gluelike +gluepot +gluepots +gluer +gluers +glues +gluey +glug +glugged +glugging +glugs +gluier +gluiest +gluily +gluing +glum +glume +glumes +glumly +glummer +glummest +glumness +glumnesses +glumpier +glumpiest +glumpily +glumpy +glunch +glunched +glunches +glunching +gluon +gluons +glut +glutamate +glutamates +glutaminase +glutaminases +glutamine +glutamines +glutaraldehyde +glutaraldehydes +glutathione +glutathiones +gluteal +glutei +glutelin +glutelins +gluten +glutenous +glutens +glutethimide +glutethimides +gluteus +glutinous +glutinously +gluts +glutted +glutting +glutton +gluttonies +gluttonous +gluttonously +gluttonousness +gluttonousnesses +gluttons +gluttony +glycan +glycans +glyceraldehyde +glyceraldehydes +glyceric +glyceride +glycerides +glyceridic +glycerin +glycerinate +glycerinated +glycerinates +glycerinating +glycerine +glycerines +glycerins +glycerol +glycerols +glyceryl +glyceryls +glycin +glycine +glycines +glycins +glycogen +glycogeneses +glycogenesis +glycogenolyses +glycogenolysis +glycogenolytic +glycogens +glycol +glycolic +glycolipid +glycolipids +glycols +glycolyses +glycolysis +glycolytic +glyconic +glyconics +glycopeptide +glycopeptides +glycoprotein +glycoproteins +glycosaminoglycan +glycosaminoglycans +glycosidase +glycosidases +glycoside +glycosides +glycosidic +glycosidically +glycosuria +glycosurias +glycosyl +glycosylate +glycosylated +glycosylates +glycosylating +glycosylation +glycosylations +glycosyls +glycyl +glycyls +glyph +glyphic +glyphs +glyptic +glyptics +gnar +gnarl +gnarled +gnarlier +gnarliest +gnarling +gnarls +gnarly +gnarr +gnarred +gnarring +gnarrs +gnars +gnash +gnashed +gnashes +gnashing +gnat +gnatcatcher +gnatcatchers +gnathal +gnathic +gnathion +gnathions +gnathite +gnathites +gnatlike +gnats +gnattier +gnattiest +gnatty +gnaw +gnawable +gnawed +gnawer +gnawers +gnawing +gnawings +gnawn +gnaws +gneiss +gneisses +gneissic +gneissoid +gneissose +gnocchi +gnome +gnomelike +gnomes +gnomic +gnomical +gnomish +gnomist +gnomists +gnomon +gnomonic +gnomons +gnoses +gnosis +gnostic +gnosticism +gnosticisms +gnotobiotic +gnotobiotically +gnu +gnus go +goa +goad +goaded +goading +goadlike +goads goal +goaled +goalie +goalies +goaling +goalkeeper +goalkeepers +goalless +goalmouth +goalmouths +goalpost +goalposts +goals +goaltender +goaltenders +goaltending +goaltendings +goalward +goanna +goannas +goas goat +goatee +goateed +goatees +goatfish +goatfishes +goatherd +goatherds +goatish +goatlike +goats +goatskin +goatskins +goatsucker +goatsuckers +gob +goban +gobang +gobangs +gobans +gobbed +gobbet +gobbets +gobbing +gobble +gobbled +gobbledegook +gobbledegooks +gobbledygook +gobbledygooks +gobbler +gobblers +gobbles +gobbling +gobies +gobioid +gobioids +goblet +goblets +goblin +goblins +gobo +goboes +gobonee +gobony +gobos +gobs +goby god +godchild +godchildren +goddam +goddammed +goddamming +goddamn +goddamned +goddamning +goddamns +goddams +goddaughter +goddaughters +godded +goddess +goddesses +godding +godet +godets +godfather +godfathered +godfathering +godfathers +godforsaken +godhead +godheads +godhood +godhoods +godless +godlessness +godlessnesses +godlier +godliest +godlike +godlikeness +godlikenesses +godlily +godliness +godlinesses +godling +godlings +godly +godmother +godmothers +godown +godowns +godparent +godparents +godroon +godroons +gods +godsend +godsends +godship +godships +godson +godsons +godwit +godwits +goer +goers +goes +goethite +goethites +gofer +gofers +goffer +goffered +goffering +goffers +goggle +goggled +goggler +gogglers +goggles +gogglier +goggliest +goggling +goggly +goglet +goglets +gogo +gogos +going +goings +goiter +goiters +goitre +goitres +goitrogen +goitrogenic +goitrogenicities +goitrogenicity +goitrogens +goitrous +golconda +golcondas gold +goldarn +goldarns +goldbrick +goldbricked +goldbricking +goldbricks +goldbug +goldbugs golden +goldener +goldenest +goldeneye +goldeneyes +goldenly +goldenness +goldennesses +goldenrod +goldenrods +goldenseal +goldenseals +golder +goldest +goldeye +goldeyes +goldfield +goldfields +goldfinch +goldfinches +goldfish +goldfishes +golds +goldsmith +goldsmiths +goldstone +goldstones +goldurn +goldurns +golem +golems golf +golfed +golfer +golfers +golfing +golfings +golfs +golgotha +golgothas +goliard +goliardic +goliards +golliwog +golliwogg +golliwoggs +golliwogs +golly +gollywog +gollywogs +golosh +goloshe +goloshes +gombo +gombos +gombroon +gombroons +gomeral +gomerals +gomerel +gomerels +gomeril +gomerils +gomuti +gomutis +gonad +gonadal +gonadectomies +gonadectomized +gonadectomy +gonadial +gonadic +gonadotrophic +gonadotrophin +gonadotrophins +gonadotropic +gonadotropin +gonadotropins +gonads +gondola +gondolas +gondolier +gondoliers +gone +gonef +gonefs +goneness +gonenesses +goner +goners +gonfalon +gonfalons +gonfanon +gonfanons +gong +gonged +gonging +gonglike +gongoristic +gongs +gonia +gonidia +gonidial +gonidic +gonidium +gonif +goniff +goniffs +gonifs +goniometer +goniometers +goniometric +goniometries +goniometry +gonion +gonium +gonococcal +gonococci +gonococcus +gonocyte +gonocytes +gonof +gonofs +gonoph +gonophore +gonophores +gonophs +gonopore +gonopores +gonorrhea +gonorrheal +gonorrheas +gonzo +goo +goober +goobers good +goodby +goodbye +goodbyes +goodbys +goodie +goodies +goodish +goodlier +goodliest +goodly +goodman +goodmen +goodness +goodnesses goods +goodwife +goodwill +goodwilled +goodwills +goodwives +goody +gooey +gooeyness +gooeynesses +goof +goofball +goofballs +goofed +goofier +goofiest +goofily +goofiness +goofinesses +goofing +goofs +goofy +googlies +googly +googol +googolplex +googolplexes +googols +gooier +gooiest +gook +gooks +gooky +goombah +goombahs +goombay +goombays +goon +gooney +gooneys +goonie +goonies +goons +goony +goop +goopier +goopiest +goops +goopy +gooral +goorals +goos +goosander +goosanders goose +gooseberries +gooseberry +goosed +goosefish +goosefishes +gooseflesh +goosefleshes +goosefoot +goosefoots +goosegrass +goosegrasses +gooseneck +goosenecked +goosenecks +gooses +goosey +goosier +goosiest +goosing +goosy +gopher +gophers +gor +goral +gorals +gorbellies +gorbelly +gorblimy +gorcock +gorcocks +gore +gored +gores +gorge +gorged +gorgedly +gorgeous +gorgeously +gorgeousness +gorgeousnesses +gorger +gorgerin +gorgerins +gorgers +gorges +gorget +gorgeted +gorgets +gorging +gorgon +gorgonian +gorgonians +gorgonize +gorgonized +gorgonizes +gorgonizing +gorgons +gorhen +gorhens +gorier +goriest +gorilla +gorillas +gorily +goriness +gorinesses +goring +gormand +gormandise +gormandised +gormandises +gormandising +gormandize +gormandized +gormandizer +gormandizers +gormandizes +gormandizing +gormands +gormless +gorp +gorps +gorse +gorses +gorsier +gorsiest +gorsy +gory +gosh +goshawk +goshawks +gosling +goslings +gospel +gospeler +gospelers +gospeller +gospellers +gospels +gosport +gosports +gossamer +gossamers +gossamery +gossan +gossans +gossip +gossiped +gossiper +gossipers +gossiping +gossipmonger +gossipmongers +gossipped +gossipping +gossipries +gossipry +gossips +gossipy +gossoon +gossoons +gossypol +gossypols +got +gothic +gothically +gothicize +gothicized +gothicizes +gothicizing +gothics +gothite +gothites +gotten +gouache +gouaches +gouge +gouged +gouger +gougers +gouges +gouging +goulash +goulashes +gourami +gouramies +gouramis +gourd +gourde +gourdes +gourds +gourmand +gourmandise +gourmandises +gourmandism +gourmandisms +gourmandize +gourmandized +gourmandizes +gourmandizing +gourmands +gourmet +gourmets +gout +goutier +goutiest +goutily +gouts +gouty govern +governable +governance +governances +governed +governess +governesses +governessy +governing government +governmental +governmentalism +governmentalisms +governmentalist +governmentalists +governmentalize +governmentalized +governmentalizes +governmentalizing +governmentally +governmentese +governmenteses +governments +governor +governorate +governorates +governors +governorship +governorships +governs +gowan +gowaned +gowans +gowany +gowd +gowds +gowk +gowks +gown +gowned +gowning +gowns +gownsman +gownsmen +gox +goxes +goy +goyim +goyish +goys +graal +graals +grab +grabbed +grabber +grabbers +grabbier +grabbiest +grabbing +grabble +grabbled +grabbler +grabblers +grabbles +grabbling +grabby +graben +grabens +grabs +grace +graced +graceful +gracefuller +gracefullest +gracefully +gracefulness +gracefulnesses +graceless +gracelessly +gracelessness +gracelessnesses +graces +gracile +gracileness +gracilenesses +graciles +gracilis +gracilities +gracility +gracing +gracioso +graciosos +gracious +graciously +graciousness +graciousnesses +grackle +grackles +grad +gradable +gradate +gradated +gradates +gradating +gradation +gradational +gradationally +gradations grade +graded +gradeless +grader +graders +grades +gradient +gradients +gradin +gradine +gradines +grading +gradins +gradiometer +gradiometers +grads gradual +gradualism +gradualisms +gradualist +gradualists +gradually +gradualness +gradualnesses +graduals +graduand +graduands graduate +graduated +graduates +graduating graduation +graduations +graduator +graduators +gradus +graduses +graecize +graecized +graecizes +graecizing +graffiti +graffitist +graffitists +graffito +graft +graftage +graftages +grafted +grafter +grafters +grafting +grafts +graham +grahams +grail +grails grain +grained +grainer +grainers +grainfield +grainfields +grainier +grainiest +graininess +graininesses +graining +grains +grainy gram +grama +gramaries +gramary +gramarye +gramaryes +gramas +gramercies +gramercy +gramicidin +gramicidins +gramineous +graminivorous grammar +grammarian +grammarians +grammars +grammatical +grammaticalities +grammaticality +grammatically +grammaticalness +grammaticalnesses +gramme +grammes +gramophone +gramophones +gramp +gramps +grampus +grampuses +grams +gran +grana +granadilla +granadillas +granaries +granary grand +grandad +grandaddies +grandaddy +grandads +grandam +grandame +grandames +grandams +grandaunt +grandaunts +grandbabies +grandbaby grandchild +grandchildren +granddad +granddaddies +granddaddy +granddads +granddam +granddams granddaughter +granddaughters +grandee +grandees +grander +grandest +grandeur +grandeurs grandfather +grandfathered +grandfathering +grandfatherly +grandfathers +grandiflora +grandiflorae +grandifloras +grandiloquence +grandiloquences +grandiloquent +grandiloquently +grandiose +grandiosely +grandioseness +grandiosenesses +grandiosities +grandiosity +grandioso +grandkid +grandkids +grandly grandma +grandmas +grandmaster +grandmasters grandmother +grandmotherly +grandmothers +grandnephew +grandnephews +grandness +grandnesses +grandniece +grandnieces grandpa +grandparent +grandparental +grandparenthood +grandparenthoods grandparents +grandpas +grands +grandsir +grandsire +grandsires +grandsirs grandson +grandsons +grandstand +grandstanded +grandstander +grandstanders +grandstanding +grandstands +granduncle +granduncles +grange +granger +grangerism +grangerisms +grangers +granges +granita +granitas +granite +granitelike +granites +graniteware +granitewares +granitic +granitoid +granivorous +grannie +grannies granny +granodiorite +granodiorites +granodioritic +granola +granolas +granolithic +granophyre +granophyres +granophyric +grans +grant +grantable +granted +grantee +grantees +granter +granters +granting +grantor +grantors +grants +grantsman +grantsmanship +grantsmanships +grantsmen +granular +granularities +granularity +granulate +granulated +granulates +granulating +granulation +granulations +granulator +granulators +granule +granules +granulite +granulites +granulitic +granulocyte +granulocytes +granulocytic +granulocytopoieses +granulocytopoiesis +granuloma +granulomas +granulomata +granulomatous +granulose +granuloses +granulosis +granum grape +grapefruit +grapefruits +grapelike +graperies +grapery +grapes +grapeshot +grapevine +grapevines +grapey graph +graphed +grapheme +graphemes +graphemic +graphemically +graphemics +graphic +graphical +graphically +graphicness +graphicnesses +graphics +graphing +graphite +graphites +graphitic +graphitizable +graphitization +graphitizations +graphitize +graphitized +graphitizes +graphitizing +grapholect +grapholects +graphological +graphologies +graphologist +graphologists +graphology +graphs +grapier +grapiest +grapiness +grapinesses +graplin +grapline +graplines +graplins +grapnel +grapnels +grappa +grappas +grapple +grappled +grappler +grapplers +grapples +grappling +grapplings +graptolite +graptolites +grapy grasp +graspable +grasped +grasper +graspers +grasping +graspingly +graspingness +graspingnesses +grasps grass +grassed +grasses +grasshopper +grasshoppers +grassier +grassiest +grassily +grassing +grassland +grasslands +grassless +grasslike +grassroot +grassroots +grassy +grat +grate +grated grateful +gratefuller +gratefullest +gratefully +gratefulness +gratefulnesses +grater +graters +grates +graticule +graticules +gratification +gratifications +gratified +gratifies +gratify +gratifying +gratifyingly +gratin +gratine +gratinee +gratineed +gratineeing +gratinees +grating +gratingly +gratings +gratins +gratis +gratitude +gratitudes +gratuities +gratuitous +gratuitously +gratuitousness +gratuitousnesses +gratuity +gratulate +gratulated +gratulates +gratulating +gratulation +gratulations +gratulatory +graupel +graupels +gravamen +gravamens +gravamina +grave +graved +gravel +graveled +graveless +graveling +gravelled +gravelling +gravelly +gravels +gravely +graven +graveness +gravenesses +graver +gravers +graves +graveside +gravesides +gravest +gravestone +gravestones +graveyard +graveyards +gravid +gravida +gravidae +gravidas +gravidities +gravidity +gravidly +gravies +gravimeter +gravimeters +gravimetric +gravimetrically +gravimetries +gravimetry +graving +gravitas +gravitases +gravitate +gravitated +gravitates +gravitating +gravitation +gravitational +gravitationally +gravitations +gravitative +gravities +graviton +gravitons gravity +gravlaks +gravlax +gravure +gravures +gravy gray +grayback +graybacks +graybeard +graybeards +grayed +grayer +grayest +grayfish +grayfishes +graying +grayish +graylag +graylags +grayling +graylings +grayly +graymail +graymails +grayness +graynesses +grayout +grayouts +grays +graywacke +graywackes +grazable +graze +grazeable +grazed +grazer +grazers +grazes +grazier +graziers +grazing +grazings +grazioso +grease +greaseball +greaseballs +greased +greaseless +greasepaint +greasepaints +greaseproof +greaseproofs +greaser +greasers +greases +greasewood +greasewoods +greasier +greasiest +greasily +greasiness +greasinesses +greasing +greasy great +greatcoat +greatcoats +greaten +greatened +greatening +greatens +greater +greatest +greathearted +greatheartedly +greatheartedness +greatheartednesses +greatly +greatness +greatnesses +greats +greave +greaved +greaves +grebe +grebes +grecianize +grecianized +grecianizes +grecianizing +grecize +grecized +grecizes +grecizing +gree +greed +greedier +greediest +greedily +greediness +greedinesses +greeds greedy +greegree +greegrees +greeing +greek green +greenback +greenbacker +greenbackers +greenbackism +greenbackisms +greenbacks +greenbelt +greenbelts +greenbrier +greenbriers +greenbug +greenbugs +greened +greener +greeneries +greenery +greenest +greenfinch +greenfinches +greenflies +greenfly +greengage +greengages greengrocer +greengroceries +greengrocers +greengrocery +greenhead +greenheads +greenheart +greenhearts +greenhorn +greenhorns +greenhouse +greenhouses +greenie +greenier +greenies +greeniest +greening +greenings +greenish +greenishness +greenishnesses +greenkeeper +greenkeepers +greenlet +greenlets +greenling +greenlings +greenly +greenmail +greenmailed +greenmailer +greenmailers +greenmailing +greenmails +greenness +greennesses +greenockite +greenockites +greenroom +greenrooms +greens +greensand +greensands +greenshank +greenshanks +greensick +greensickness +greensicknesses +greenskeeper +greenskeepers +greenstone +greenstones +greenstuff +greenstuffs +greensward +greenswards +greenth +greenths +greenway +greenways +greenwing +greenwings +greenwood +greenwoods +greeny +grees greet +greeted +greeter +greeters greeting +greetings +greets +gregarine +gregarines +gregarious +gregariously +gregariousness +gregariousnesses +grego +gregos +greige +greiges +greisen +greisens +gremial +gremials +gremlin +gremlins +gremmie +gremmies +gremmy +grenade +grenades +grenadier +grenadiers +grenadine +grenadines +grew +grewsome +grewsomer +grewsomest grey +greyed +greyer +greyest +greyhen +greyhens +greyhound +greyhounds +greying +greyish +greylag +greylags +greyly +greyness +greynesses +greys +gribble +gribbles +grid +gridder +gridders +griddle +griddlecake +griddlecakes +griddled +griddles +griddling +gride +grided +grides +griding +gridiron +gridirons +gridlock +gridlocked +gridlocking +gridlocks +grids +grief +griefs +grievance +grievances +grievant +grievants +grieve +grieved +griever +grievers +grieves +grieving +grievous +grievously +grievousness +grievousnesses +griff +griffe +griffes +griffin +griffins +griffon +griffons +griffs +grift +grifted +grifter +grifters +grifting +grifts +grig +grigri +grigris +grigs grill +grillade +grillades +grillage +grillages +grille +grilled +griller +grillers +grilles +grilling +grillroom +grillrooms +grills +grillwork +grillworks +grilse +grilses +grim +grimace +grimaced +grimacer +grimacers +grimaces +grimacing +grimalkin +grimalkins +grime +grimed +grimes +grimier +grimiest +grimily +griminess +griminesses +griming +grimly +grimmer +grimmest +grimness +grimnesses +grimy +grin +grinch +grinches +grind +grinded +grinder +grinderies +grinders +grindery +grinding +grindingly +grinds +grindstone +grindstones +gringo +gringos +grinned +grinner +grinners +grinning +grinningly +grins +griot +griots +grip +gripe +griped +griper +gripers +gripes +gripey +gripier +gripiest +griping +gripman +gripmen +grippe +gripped +gripper +grippers +grippes +grippier +grippiest +gripping +grippingly +gripple +grippy +grips +gripsack +gripsacks +gript +gripy +grisaille +grisailles +griseofulvin +griseofulvins +griseous +grisette +grisettes +griskin +griskins +grislier +grisliest +grisliness +grislinesses +grisly +grison +grisons +grist +gristle +gristles +gristlier +gristliest +gristliness +gristlinesses +gristly +gristmill +gristmills +grists +grit +grith +griths +grits +gritted +grittier +grittiest +grittily +grittiness +grittinesses +gritting +gritty +grivet +grivets +grizzle +grizzled +grizzler +grizzlers +grizzles +grizzlier +grizzlies +grizzliest +grizzling +grizzly +groan +groaned +groaner +groaners +groaning +groans +groat +groats grocer +groceries +grocers grocery +grog +groggeries +groggery +groggier +groggiest +groggily +grogginess +grogginesses +groggy +grogram +grograms +grogs +grogshop +grogshops +groin +groined +groining +groins +grommet +grommets +gromwell +gromwells +groom +groomed +groomer +groomers +grooming +grooms +groomsman +groomsmen +groove +grooved +groover +groovers +grooves +groovier +grooviest +grooving +groovy +grope +groped +groper +gropers +gropes +groping +grosbeak +grosbeaks +groschen +grosgrain +grosgrains +gross +grossed +grosser +grossers +grosses +grossest +grossing +grossly +grossness +grossnesses +grossular +grossularite +grossularites +grossulars +grosz +grosze +groszy +grot +grotesque +grotesquely +grotesqueness +grotesquenesses +grotesquerie +grotesqueries +grotesquery +grotesques +grots +grottier +grottiest +grotto +grottoes +grottos +grotty +grouch +grouched +grouches +grouchier +grouchiest +grouchily +grouchiness +grouchinesses +grouching +grouchy ground +groundbreaker +groundbreakers +groundbreaking +groundburst +groundbursts +grounded +grounder +grounders +groundfish +groundfishes +groundhog +groundhogs +grounding +groundings +groundless +groundlessly +groundlessness +groundlessnesses +groundling +groundlings +groundmass +groundmasses +groundnut +groundnuts +groundout +groundouts +grounds +groundsel +groundsels +groundsheet +groundsheets +groundskeeper +groundskeepers +groundsman +groundsmen +groundswell +groundswells +groundwater +groundwaters +groundwood +groundwoods +groundwork +groundworks group +groupable +grouped +grouper +groupers +groupie +groupies +grouping +groupings +groupoid +groupoids +groups +groupthink +groupthinks +groupuscule +groupuscules +grouse +groused +grouser +grousers +grouses +grousing +grout +grouted +grouter +grouters +groutier +groutiest +grouting +grouts +grouty +grove +groved +grovel +groveled +groveler +grovelers +groveling +grovelingly +grovelled +grovelling +grovels +groves grow +growable +grower +growers +growing +growingly +growl +growled +growler +growlers +growlier +growliest +growliness +growlinesses +growling +growlingly +growls +growly +grown +grownup +grownups +grows growth +growthier +growthiest +growthiness +growthinesses +growths +growthy +groyne +groynes +grub +grubbed +grubber +grubbers +grubbier +grubbiest +grubbily +grubbiness +grubbinesses +grubbing +grubby +grubs +grubstake +grubstaked +grubstaker +grubstakers +grubstakes +grubstaking +grubworm +grubworms +grudge +grudged +grudger +grudgers +grudges +grudging +grudgingly +grue +gruel +grueled +grueler +gruelers +grueling +gruelingly +gruelings +gruelled +grueller +gruellers +gruelling +gruellings +gruels +grues +gruesome +gruesomely +gruesomeness +gruesomenesses +gruesomer +gruesomest +gruff +gruffed +gruffer +gruffest +gruffier +gruffiest +gruffily +gruffing +gruffish +gruffly +gruffness +gruffnesses +gruffs +gruffy +grugru +grugrus +gruiform +grum +grumble +grumbled +grumbler +grumblers +grumbles +grumbling +grumblingly +grumbly +grume +grumes +grummer +grummest +grummet +grummets +grumose +grumous +grump +grumped +grumphie +grumphies +grumphy +grumpier +grumpiest +grumpily +grumpiness +grumpinesses +grumping +grumpish +grumps +grumpy +grunge +grunges +grungier +grungiest +grungy +grunion +grunions +grunt +grunted +grunter +grunters +grunting +gruntle +gruntled +gruntles +gruntling +grunts +grushie +grutch +grutched +grutches +grutching +grutten +gruyere +gruyeres +gryphon +gryphons +guacamole +guacamoles +guacharo +guacharoes +guacharos +guaco +guacos +guaiac +guaiacol +guaiacols +guaiacs +guaiacum +guaiacums +guaiocum +guaiocums +guan +guanaco +guanacos +guanase +guanases +guanay +guanays +guanethidine +guanethidines +guanidin +guanidine +guanidines +guanidins +guanin +guanine +guanines +guanins +guano +guanos +guanosine +guanosines +guans +guar +guarani +guaranies +guaranis guarantee +guaranteed +guaranteeing +guarantees +guarantied +guaranties +guarantor +guarantors +guaranty +guarantying guard +guardant +guardants +guarded +guardedly +guardedness +guardednesses +guarder +guarders +guardhouse +guardhouses +guardian +guardians +guardianship +guardianships +guarding +guardrail +guardrails +guardroom +guardrooms +guards +guardsman +guardsmen +guars +guava +guavas +guayabera +guayaberas +guayule +guayules +gubernatorial +guck +gucks +gude +gudes +gudgeon +gudgeoned +gudgeoning +gudgeons +guenon +guenons +guerdon +guerdoned +guerdoning +guerdons +gueridon +gueridons +guerilla +guerillas +guernsey +guernseys +guerrilla +guerrillas guess +guessable +guessed +guesser +guessers +guesses +guessing +guesstimate +guesstimated +guesstimates +guesstimating +guesswork +guessworks guest +guested +guesthouse +guesthouses +guesting +guests +guff +guffaw +guffawed +guffawing +guffaws +guffs +guggle +guggled +guggles +guggling +guglet +guglets +guid +guidable guidance +guidances guide +guidebook +guidebooks +guided +guideline +guidelines +guidepost +guideposts +guider +guiders +guides +guideway +guideways +guiding +guidon +guidons +guids +guidwillie +guild +guilder +guilders +guildhall +guildhalls +guilds +guildship +guildships +guildsman +guildsmen +guile +guiled +guileful +guilefully +guilefulness +guilefulnesses +guileless +guilelessly +guilelessness +guilelessnesses +guiles +guiling +guillemet +guillemets +guillemot +guillemots +guilloche +guilloches +guillotine +guillotined +guillotines +guillotining +guilt +guiltier +guiltiest +guiltily +guiltiness +guiltinesses +guiltless +guiltlessly +guiltlessness +guiltlessnesses +guilts guilty +guimpe +guimpes +guinea +guineas +guipure +guipures +guiro +guiros +guisard +guisards +guise +guised +guises +guising guitar +guitarfish +guitarfishes +guitarist +guitarists +guitars +guitguit +guitguits +gul +gulag +gulags +gular +gulch +gulches +gulden +guldens +gules +gulf +gulfed +gulfier +gulfiest +gulfing +gulflike +gulfs +gulfweed +gulfweeds +gulfy +gull +gullable +gullably +gulled +gullet +gullets +gulley +gulleys +gullibilities +gullibility +gullible +gullibly +gullied +gullies +gulling +gulls +gully +gullying +gulosities +gulosity +gulp +gulped +gulper +gulpers +gulpier +gulpiest +gulping +gulps +gulpy +guls +gum +gumbo +gumboil +gumboils +gumboot +gumboots +gumbos +gumbotil +gumbotils +gumdrop +gumdrops +gumless +gumlike +gumma +gummas +gummata +gummatous +gummed +gummer +gummers +gummier +gummiest +gumminess +gumminesses +gumming +gummite +gummites +gummose +gummoses +gummosis +gummous +gummy +gumption +gumptions +gums +gumshoe +gumshoed +gumshoeing +gumshoes +gumtree +gumtrees +gumweed +gumweeds +gumwood +gumwoods gun +gunboat +gunboats +guncotton +guncottons +gundog +gundogs +gunfight +gunfighter +gunfighters +gunfighting +gunfights +gunfire +gunfires +gunflint +gunflints +gunfought +gunite +gunites +gunk +gunkhole +gunkholed +gunkholes +gunkholing +gunks +gunky +gunless +gunlock +gunlocks +gunman +gunmen +gunmetal +gunmetals +gunned +gunnel +gunnels +gunnen +gunner +gunneries +gunners +gunnery +gunnies +gunning +gunnings +gunny +gunnybag +gunnybags +gunnysack +gunnysacks +gunpaper +gunpapers +gunplay +gunplays +gunpoint +gunpoints +gunpowder +gunpowders +gunroom +gunrooms +gunrunner +gunrunners +gunrunning +gunrunnings +guns +gunsel +gunsels +gunship +gunships +gunshot +gunshots +gunslinger +gunslingers +gunslinging +gunslingings +gunsmith +gunsmithing +gunsmithings +gunsmiths +gunstock +gunstocks +gunwale +gunwales +guppies +guppy +gurge +gurged +gurges +gurging +gurgle +gurgled +gurgles +gurglet +gurglets +gurgling +gurnard +gurnards +gurnet +gurnets +gurney +gurneys +gurries +gurry +gursh +gurshes +guru +gurus +guruship +guruships +gush +gushed +gusher +gushers +gushes +gushier +gushiest +gushily +gushiness +gushinesses +gushing +gushingly +gushy +gusset +gusseted +gusseting +gussets +gussie +gussied +gussies +gussy +gussying +gust +gustable +gustables +gustation +gustations +gustatorily +gustatory +gusted +gustier +gustiest +gustily +gustiness +gustinesses +gusting +gustless +gusto +gustoes +gusts +gusty +gut +gutbucket +gutbuckets +gutless +gutlessness +gutlessnesses +gutlike +guts +gutsier +gutsiest +gutsily +gutsiness +gutsinesses +gutsy +gutta +guttae +guttate +guttated +guttation +guttations +gutted +gutter +guttered +guttering +gutterings +gutters +guttersnipe +guttersnipes +guttersnipish +guttery +guttier +guttiest +gutting +guttle +guttled +guttler +guttlers +guttles +guttling +guttural +gutturalism +gutturalisms +gutturals +gutty +guv +guvs +guy +guyed +guying +guyline +guylines +guyot +guyots +guys +guzzle +guzzled +guzzler +guzzlers +guzzles +guzzling +gweduc +gweduck +gweducks +gweducs +gybe +gybed +gybes +gybing gym +gymkhana +gymkhanas +gymnasia gymnasium +gymnasiums +gymnast +gymnastic +gymnastically gymnastics +gymnasts +gymnosophist +gymnosophists +gymnosperm +gymnospermies +gymnospermous +gymnosperms +gymnospermy +gyms +gynaecea +gynaeceum +gynaecia +gynaecium +gynaecologies +gynaecology +gynandries +gynandromorph +gynandromorphic +gynandromorphies +gynandromorphism +gynandromorphisms +gynandromorphs +gynandromorphy +gynandrous +gynandry +gynarchies +gynarchy +gynecia +gynecic +gynecium +gynecocracies +gynecocracy +gynecocratic +gynecoid +gynecologic +gynecological +gynecologies +gynecologist +gynecologists +gynecology +gynecomastia +gynecomastias +gyniatries +gyniatry +gynoecia +gynoecium +gynogeneses +gynogenesis +gynogenetic +gynophore +gynophores +gyp +gyplure +gyplures +gypped +gypper +gyppers +gypping +gyps +gypseian +gypseous +gypsied +gypsies +gypsiferous +gypsophila +gypsophilas +gypster +gypsters +gypsum +gypsums +gypsy +gypsydom +gypsydoms +gypsying +gypsyish +gypsyism +gypsyisms +gyral +gyrally +gyrase +gyrases +gyrate +gyrated +gyrates +gyrating +gyration +gyrational +gyrations +gyrator +gyrators +gyratory +gyre +gyred +gyrene +gyrenes +gyres +gyrfalcon +gyrfalcons +gyri +gyring +gyro +gyrocompass +gyrocompasses +gyrofrequencies +gyrofrequency +gyroidal +gyromagnetic +gyron +gyrons +gyroplane +gyroplanes +gyros +gyroscope +gyroscopes +gyroscopic +gyroscopically +gyrose +gyrostabilizer +gyrostabilizers +gyrostat +gyrostats +gyrus +gyve +gyved +gyves +gyving +ha +haaf +haafs +haar +haars +habanera +habaneras +habdalah +habdalahs +haberdasher +haberdasheries +haberdashers +haberdashery +habergeon +habergeons +habile +habiliment +habiliments +habilitate +habilitated +habilitates +habilitating +habilitation +habilitations habit +habitabilities +habitability +habitable +habitableness +habitablenesses +habitably +habitan +habitans +habitant +habitants +habitat +habitation +habitations +habitats +habited +habiting +habits +habitual +habitually +habitualness +habitualnesses +habituate +habituated +habituates +habituating +habituation +habituations +habitude +habitudes +habitue +habitues +habitus +haboob +haboobs +habu +habus +hacek +haceks +hacendado +hacendados +hachure +hachured +hachures +hachuring +hacienda +haciendado +haciendados +haciendas +hack +hackamore +hackamores +hackberries +hackberry +hackbut +hackbuts +hacked +hackee +hackees +hacker +hackers +hackie +hackies +hacking +hackle +hackled +hackler +hacklers +hackles +hacklier +hackliest +hackling +hackly +hackman +hackmatack +hackmatacks +hackmen +hackney +hackneyed +hackneying +hackneys +hacks +hacksaw +hacksaws +hackwork +hackworks +had +hadal +hadarim +haddest +haddock +haddocks +hade +haded +hades +hading +hadith +hadiths +hadj +hadjee +hadjees +hadjes +hadji +hadjis +hadron +hadronic +hadrons +hadrosaur +hadrosaurs +hadst +hae +haecceities +haecceity +haed +haeing +haem +haemal +haematal +haematic +haematics +haematin +haematins +haematite +haematites +haemic +haemin +haemins +haemoid +haems +haen +haeredes +haeres +haes +haet +haets +haffet +haffets +haffit +haffits +hafis +hafiz +hafnium +hafniums +haft +haftara +haftarah +haftarahs +haftaras +haftarot +haftaroth +hafted +hafter +hafters +hafting +haftorah +haftorahs +haftorot +haftoroth +hafts +hag +hagadic +hagadist +hagadists +hagberries +hagberry +hagborn +hagbush +hagbushes +hagbut +hagbuts +hagdon +hagdons +hagfish +hagfishes +haggada +haggadah +haggadahs +haggadas +haggadic +haggadist +haggadistic +haggadists +haggadot +haggadoth +haggard +haggardly +haggardness +haggardnesses +haggards +hagged +hagging +haggis +haggises +haggish +haggle +haggled +haggler +hagglers +haggles +haggling +hagiographer +hagiographers +hagiographic +hagiographical +hagiographies +hagiography +hagiologic +hagiological +hagiologies +hagiology +hagioscope +hagioscopes +hagioscopic +hagridden +hagride +hagrides +hagriding +hagrode +hags +hah +haha +hahas +hahnium +hahniums +hahs +haik +haika +haiks +haiku +hail +hailed +hailer +hailers +hailing +hails +hailstone +hailstones +hailstorm +hailstorms hair +hairball +hairballs +hairband +hairbands +hairbreadth +hairbreadths +hairbrush +hairbrushes +haircap +haircaps +haircloth +haircloths haircut +haircuts +haircutter +haircutters +haircutting +haircuttings +hairdo +hairdos +hairdresser +hairdressers +hairdressing +hairdressings +haired +hairier +hairiest +hairiness +hairinesses +hairless +hairlessness +hairlessnesses +hairlike +hairline +hairlines +hairlock +hairlocks +hairnet +hairnets +hairpiece +hairpieces +hairpin +hairpins +hairs +hairsbreadth +hairsbreadths +hairsplitter +hairsplitters +hairsplitting +hairsplittings +hairspring +hairsprings +hairstreak +hairstreaks +hairstyle +hairstyles +hairstyling +hairstylings +hairstylist +hairstylists +hairwork +hairworks +hairworm +hairworms +hairy +haj +hajes +haji +hajis +hajj +hajjes +hajji +hajjis +hake +hakeem +hakeems +hakes +hakim +hakims +halacha +halachas +halachot +halachoth +halakah +halakahs +halakha +halakhas +halakhot +halakic +halakist +halakists +halakoth +halala +halalah +halalahs +halalas +halation +halations +halavah +halavahs +halazone +halazones +halberd +halberds +halbert +halberts +halcyon +halcyons +hale +haled +haleness +halenesses +haler +halers +haleru +hales +halest half +halfback +halfbacks +halfbeak +halfbeaks +halfhearted +halfheartedly +halfheartedness +halfheartednesses +halflife +halflives +halfness +halfnesses +halfpence +halfpennies +halfpenny +halftime +halftimes +halftone +halftones +halfway +halibut +halibuts +halid +halide +halides +halidom +halidome +halidomes +halidoms +halids +haling +halite +halites +halitoses +halitosis +halitus +halituses hall +hallah +hallahs +hallel +hallels +hallelujah +hallelujahs +halliard +halliards +hallmark +hallmarked +hallmarking +hallmarks +hallo +halloa +halloaed +halloaing +halloas +halloed +halloes +halloing +halloo +hallooed +hallooing +halloos +hallos +hallot +halloth +hallow +hallowed +hallower +hallowers +hallowing +hallows +halls +halluces +hallucinate +hallucinated +hallucinates +hallucinating +hallucination +hallucinations +hallucinator +hallucinators +hallucinatory +hallucinogen +hallucinogenic +hallucinogenics +hallucinogens +hallucinoses +hallucinosis +hallucinosises +hallux +hallway +hallways +halm +halma +halmas +halms +halo +halocarbon +halocarbons +halocline +haloclines +haloed +haloes +halogen +halogenate +halogenated +halogenates +halogenating +halogenation +halogenations +halogenous +halogens +halogeton +halogetons +haloid +haloids +haloing +halolike +halomorphic +haloperidol +haloperidols +halophile +halophiles +halophilic +halophyte +halophytes +halophytic +halos +halothane +halothanes +halt +halted +halter +halterbreak +halterbreaking +halterbreaks +halterbroke +halterbroken +haltere +haltered +halteres +haltering +halters +halting +haltingly +haltless +halts +halutz +halutzim +halva +halvah +halvahs +halvas +halve +halved +halvers +halves +halving +halyard +halyards ham +hamada +hamadas +hamadryad +hamadryades +hamadryads +hamal +hamals +hamantasch +hamantaschen +hamartia +hamartias +hamate +hamates +hamaul +hamauls +hambone +hamboned +hambones +hamboning +hamburg hamburger +hamburgers +hamburgs +hame +hames +hamlet +hamlets +hammada +hammadas +hammal +hammals +hammed hammer +hammered +hammerer +hammerers +hammerhead +hammerheads +hammering +hammerless +hammerlock +hammerlocks +hammers +hammertoe +hammertoes +hammier +hammiest +hammily +hamminess +hamminesses +hamming +hammock +hammocks +hammy +hamper +hampered +hamperer +hamperers +hampering +hampers +hams +hamster +hamsters +hamstring +hamstringing +hamstrings +hamstrung +hamular +hamulate +hamuli +hamulose +hamulous +hamulus +hamza +hamzah +hamzahs +hamzas +hanaper +hanapers +hance +hances hand handbag +handbags +handball +handballs +handbarrow +handbarrows +handbasket +handbaskets +handbell +handbells +handbill +handbills +handblown +handbook +handbooks +handbreadth +handbreadths +handcar +handcars +handcart +handcarts +handclasp +handclasps +handcraft +handcrafted +handcrafting +handcrafts +handcraftsman +handcraftsmanship +handcraftsmanships +handcraftsmen +handcuff +handcuffed +handcuffing +handcuffs +handed +handedness +handednesses +handfast +handfasted +handfasting +handfastings +handfasts handful +handfuls +handgrip +handgrips +handgun +handguns +handheld +handhelds +handhold +handholding +handholdings +handholds +handicap +handicapped +handicapper +handicappers +handicapping +handicaps +handicraft +handicrafter +handicrafters +handicrafts +handicraftsman +handicraftsmen +handier +handiest +handily +handiness +handinesses +handing +handiwork +handiworks handkerchief +handkerchiefs +handkerchieves handle +handleable +handlebar +handlebars +handled +handleless +handler +handlers +handles +handless +handlike +handling +handlings +handlist +handlists +handloom +handlooms +handmade +handmaid +handmaiden +handmaidens +handmaids +handoff +handoffs +handout +handouts +handover +handovers +handpick +handpicked +handpicking +handpicks +handpress +handpresses +handprint +handprints +handrail +handrailing +handrailings +handrails +hands +handsaw +handsaws +handsbreadth +handsbreadths +handsel +handseled +handseling +handselled +handselling +handsels +handset +handsets +handsewn +handsful +handshake +handshakes handsome +handsomely +handsomeness +handsomenesses +handsomer +handsomest +handspike +handspikes +handspring +handsprings +handstand +handstands +handwheel +handwheels +handwork +handworker +handworkers +handworks +handwoven +handwringer +handwringers +handwringing +handwringings +handwrit +handwrite +handwrites handwriting +handwritings +handwritten +handwrote +handwrought handy +handyman +handymen +handyperson +handypersons hang +hangable +hangar +hangared +hangaring +hangars +hangbird +hangbirds +hangdog +hangdogs +hanged +hanger +hangers +hangfire +hangfires +hanging +hangings +hangman +hangmen +hangnail +hangnails +hangnest +hangnests +hangout +hangouts +hangover +hangovers +hangs +hangtag +hangtags +hangul +hangup +hangups +haniwa +hank +hanked +hanker +hankered +hankerer +hankerers +hankering +hankers +hankie +hankies +hanking +hanks +hanky +hansa +hansas +hanse +hansel +hanseled +hanseling +hanselled +hanselling +hansels +hanses +hansom +hansoms +hant +hanted +hanting +hantle +hantles +hants +hanuman +hanumans +hao +haole +haoles +hap +hapax +hapaxes +haphazard +haphazardly +haphazardness +haphazardnesses +haphazardries +haphazardry +haphazards +haphtara +haphtaras +haphtarot +haphtaroth +hapless +haplessly +haplessness +haplessnesses +haplite +haplites +haploid +haploidies +haploids +haploidy +haplologies +haplology +haplont +haplontic +haplonts +haplopia +haplopias +haploses +haplosis +haplotype +haplotypes +haply +happed happen +happenchance +happenchances +happened +happening +happenings +happens +happenstance +happenstances +happier +happiest +happily happiness +happinesses +happing happy +haps +hapten +haptene +haptenes +haptenic +haptens +haptic +haptical +haptoglobin +haptoglobins +harangue +harangued +haranguer +haranguers +harangues +haranguing +harass +harassed +harasser +harassers +harasses +harassing +harassment +harassments +harbinger +harbingered +harbingering +harbingers harbor +harborage +harborages +harbored +harborer +harborers +harborful +harborfuls +harboring +harborless +harbormaster +harbormasters +harbors +harborside harbour +harboured +harbouring +harbours hard +hardback +hardbacks +hardball +hardballs +hardboard +hardboards +hardboot +hardboots +hardbound +hardcase +hardcore +hardcover +hardcovers +hardedge +hardedges +harden +hardened +hardener +hardeners +hardening +hardenings +hardens +harder +hardest +hardfisted +hardhack +hardhacks +hardhanded +hardhandedness +hardhandednesses +hardhat +hardhats +hardhead +hardheaded +hardheadedly +hardheadedness +hardheadednesses +hardheads +hardhearted +hardheartedness +hardheartednesses +hardier +hardies +hardiest +hardihood +hardihoods +hardily +hardiment +hardiments +hardiness +hardinesses +hardinggrass +hardinggrasses +hardline hardly +hardmouthed +hardness +hardnesses +hardnose +hardnoses +hardpan +hardpans +hards +hardscrabble +hardset hardship +hardships +hardstand +hardstanding +hardstandings +hardstands +hardtack +hardtacks +hardtop +hardtops +hardware +hardwares +hardwire +hardwired +hardwires +hardwiring +hardwood +hardwoods hardworking +hardy +hare +harebell +harebells +harebrained +hared +hareem +hareems +harelike +harelip +harelips +harem +harems +hares +hariana +harianas +haricot +haricots +harijan +harijans +haring +hark +harked +harken +harkened +harkener +harkeners +harkening +harkens +harking +harks +harl +harlequin +harlequinade +harlequinades +harlequins +harlot +harlotries +harlotry +harlots +harls harm +harmattan +harmattans +harmed +harmer +harmers harmful +harmfully +harmfulness +harmfulnesses +harmin +harmine +harmines +harming +harmins +harmless +harmlessly +harmlessness +harmlessnesses +harmonic +harmonica +harmonically +harmonicas +harmonicist +harmonicists +harmonics +harmonies +harmonious +harmoniously +harmoniousness +harmoniousnesses +harmonise +harmonised +harmonises +harmonising +harmonium +harmoniums +harmonization +harmonizations +harmonize +harmonized +harmonizer +harmonizers +harmonizes +harmonizing harmony +harms +harness +harnessed +harnesses +harnessing +harp +harped +harper +harpers +harpies +harpin +harping +harpings +harpins +harpist +harpists +harpoon +harpooned +harpooner +harpooners +harpooning +harpoons +harps +harpsichord +harpsichordist +harpsichordists +harpsichords +harpy +harquebus +harquebuses +harquebusier +harquebusiers +harridan +harridans +harried +harrier +harriers +harries +harrow +harrowed +harrower +harrowers +harrowing +harrows +harrumph +harrumphed +harrumphing +harrumphs +harry +harrying +harsh +harshen +harshened +harshening +harshens +harsher +harshest +harshly +harshness +harshnesses +harslet +harslets +hart +hartal +hartals +hartebeest +hartebeests +harts +hartshorn +hartshorns +harumph +harumphed +harumphing +harumphs +haruspex +haruspication +haruspications +haruspices harvest +harvestable +harvested +harvester +harvesters +harvesting +harvestman +harvestmen +harvests +harvesttime +harvesttimes +has +hasenpfeffer +hasenpfeffers +hash +hashed +hasheesh +hasheeshes +hashes +hashhead +hashheads +hashing +hashish +hashishes +haslet +haslets +hasp +hasped +hasping +hasps +hassel +hassels +hassle +hassled +hassles +hassling +hassock +hassocks +hast +hastate +haste +hasted +hasteful +hasten +hastened +hastener +hasteners +hastening +hastens +hastes +hastier +hastiest +hastily +hastiness +hastinesses +hasting +hasty hat +hatable +hatband +hatbands +hatbox +hatboxes hatch +hatchabilities +hatchability +hatchable +hatchback +hatchbacks +hatcheck +hatched +hatchel +hatcheled +hatcheling +hatchelled +hatchelling +hatchels +hatcher +hatcheries +hatchers +hatchery +hatches +hatchet +hatchets +hatching +hatchings +hatchling +hatchlings +hatchment +hatchments +hatchway +hatchways hate +hateable +hated +hateful +hatefully +hatefulness +hatefulnesses +hatemonger +hatemongers +hater +haters +hates +hatful +hatfuls +hath +hating +hatless +hatlike +hatmaker +hatmakers +hatpin +hatpins +hatrack +hatracks +hatred +hatreds +hats +hatsful +hatted +hatter +hatteria +hatterias +hatters +hatting +hauberk +hauberks +haugh +haughs +haughtier +haughtiest +haughtily +haughtiness +haughtinesses +haughty +haul +haulage +haulages +hauled +hauler +haulers +haulier +hauliers +hauling +haulm +haulmier +haulmiest +haulms +haulmy +hauls +haulyard +haulyards +haunch +haunched +haunches +haunt +haunted +haunter +haunters +haunting +hauntingly +haunts +hausen +hausens +hausfrau +hausfrauen +hausfraus +haustella +haustellum +haustoria +haustorial +haustorium +haut +hautbois +hautboy +hautboys +haute +hauteur +hauteurs +havarti +havartis +havdalah +havdalahs have +havelock +havelocks +haven +havened +havening +havens +haver +havered +haverel +haverels +havering +havers +haversack +haversacks +haves +having +havior +haviors +haviour +haviours +havoc +havocked +havocker +havockers +havocking +havocs +haw +hawed +hawfinch +hawfinches +hawing +hawk +hawkbill +hawkbills +hawked +hawker +hawkers +hawkey +hawkeyed +hawkeys +hawkie +hawkies +hawking +hawkings +hawkish +hawkishly +hawkishness +hawkishnesses +hawklike +hawkmoth +hawkmoths +hawknose +hawknoses +hawks +hawksbill +hawksbills +hawkshaw +hawkshaws +hawkweed +hawkweeds +haws +hawse +hawsehole +hawseholes +hawser +hawsers +hawses +hawthorn +hawthorns +hay +haycock +haycocks +hayed +hayer +hayers +hayfield +hayfields +hayfork +hayforks +haying +hayings +haylage +haylages +hayloft +haylofts +haymaker +haymakers +haymow +haymows +hayrack +hayracks +hayrick +hayricks +hayride +hayrides +hays +hayseed +hayseeds +haystack +haystacks +hayward +haywards +haywire +haywires +hazan +hazanim +hazans +hazard +hazarded +hazarding +hazardous +hazardously +hazardousness +hazardousnesses +hazards +haze +hazed +hazel +hazelhen +hazelhens +hazelly +hazelnut +hazelnuts +hazels +hazer +hazers +hazes +hazier +haziest +hazily +haziness +hazinesses +hazing +hazings +hazy +hazzan +hazzanim +hazzans he head headache +headaches +headachier +headachiest +headachy +headband +headbands +headboard +headboards +headcheese +headcheeses +headdress +headdresses +headed +header +headers +headfirst +headfish +headfishes +headforemost +headgate +headgates +headgear +headgears +headhunt +headhunted +headhunter +headhunters +headhunting +headhunts +headier +headiest +headily +headiness +headinesses +heading +headings +headlamp +headlamps +headland +headlands +headless +headlessness +headlessnesses +headlight +headlights headline +headlined +headliner +headliners +headlines +headlining +headlock +headlocks +headlong +headman headmaster +headmasters +headmastership +headmasterships +headmen headmistress +headmistresses +headmost +headnote +headnotes +headphone +headphones +headpiece +headpieces +headpin +headpins +headquarter +headquartered +headquartering +headquarters +headrace +headraces +headrest +headrests +headroom +headrooms +heads +headsail +headsails +headset +headsets +headship +headships +headshrinker +headshrinkers +headsman +headsmen +headspace +headspaces +headspring +headsprings +headstall +headstalls +headstand +headstands +headstay +headstays +headstock +headstocks +headstone +headstones +headstream +headstreams +headstrong +headwaiter +headwaiters +headwater +headwaters +headway +headways +headwind +headwinds +headword +headwords +headwork +headworks +heady +heal +healable +healed +healer +healers +healing +heals health +healthful +healthfully +healthfulness +healthfulnesses +healthier +healthiest +healthily +healthiness +healthinesses +healths healthy +heap +heaped +heaping +heaps hear +hearable +heard +hearer +hearers hearing +hearings +hearken +hearkened +hearkening +hearkens +hears +hearsay +hearsays +hearse +hearsed +hearses +hearsing heart +heartache +heartaches +heartbeat +heartbeats +heartbreak +heartbreaker +heartbreakers +heartbreaking +heartbreakingly +heartbreaks +heartbroken +heartburn +heartburning +heartburnings +heartburns +hearted +hearten +heartened +heartening +hearteningly +heartens +heartfelt +hearth +hearths +hearthstone +hearthstones +heartier +hearties +heartiest +heartily +heartiness +heartinesses +hearting +heartland +heartlands +heartless +heartlessly +heartlessness +heartlessnesses +heartrending +heartrendingly +hearts +heartsease +heartseases +heartsick +heartsickness +heartsicknesses +heartsome +heartsomely +heartsore +heartstring +heartstrings +heartthrob +heartthrobs +heartwarming +heartwood +heartwoods +heartworm +heartworms +hearty heat +heatable +heated +heatedly +heater +heaters +heath +heathen +heathendom +heathendoms +heathenish +heathenishly +heathenism +heathenisms +heathenize +heathenized +heathenizes +heathenizing +heathens +heather +heathers +heathery +heathier +heathiest +heathland +heathlands +heathless +heathlike +heaths +heathy +heating +heatless +heatproof +heats +heatstroke +heatstrokes +heaume +heaumes +heave +heaved heaven +heavenlier +heavenliest +heavenliness +heavenlinesses +heavenly +heavens +heavenward +heavenwards +heaver +heavers +heaves +heavier +heavies +heaviest +heavily +heaviness +heavinesses +heaving heavy +heavyhearted +heavyheartedly +heavyheartedness +heavyheartednesses +heavyset +heavyweight +heavyweights +hebdomad +hebdomadal +hebdomadally +hebdomads +hebe +hebephrenia +hebephrenias +hebephrenic +hebephrenics +hebes +hebetate +hebetated +hebetates +hebetating +hebetation +hebetations +hebetic +hebetude +hebetudes +hebetudinous +hebraization +hebraizations +hebraize +hebraized +hebraizes +hebraizing +hecatomb +hecatombs +heck +heckle +heckled +heckler +hecklers +heckles +heckling +hecks +hectare +hectares +hectic +hectical +hectically +hecticly +hectogram +hectograms +hectograph +hectographed +hectographing +hectographs +hectoliter +hectoliters +hectometer +hectometers +hector +hectored +hectoring +hectoringly +hectors +heddle +heddles +heder +heders +hedge +hedged +hedgehog +hedgehogs +hedgehop +hedgehopped +hedgehopper +hedgehoppers +hedgehopping +hedgehops +hedgepig +hedgepigs +hedger +hedgerow +hedgerows +hedgers +hedges +hedgier +hedgiest +hedging +hedgingly +hedgy +hedonic +hedonically +hedonics +hedonism +hedonisms +hedonist +hedonistic +hedonistically +hedonists +heed +heeded +heeder +heeders +heedful +heedfully +heedfulness +heedfulnesses +heeding +heedless +heedlessly +heedlessness +heedlessnesses +heeds +heehaw +heehawed +heehawing +heehaws heel +heelball +heelballs +heeled +heeler +heelers +heeling +heelings +heelless +heelpiece +heelpieces +heelpost +heelposts +heels +heeltap +heeltaps +heeze +heezed +heezes +heezing +heft +hefted +hefter +hefters +heftier +heftiest +heftily +heftiness +heftinesses +hefting +hefts +hefty +hegari +hegaris +hegemonic +hegemonies +hegemony +hegira +hegiras +hegumen +hegumene +hegumenes +hegumenies +hegumens +hegumeny +heh +hehs +heifer +heifers +heigh height +heighten +heightened +heightening +heightens +heighth +heighths +heights +heil +heiled +heiling +heils +heimish +heinie +heinies +heinous +heinously +heinousness +heinousnesses +heir +heirdom +heirdoms +heired +heiress +heiresses +heiring +heirless +heirloom +heirlooms +heirs +heirship +heirships +heishi +heist +heisted +heister +heisters +heisting +heists +hejira +hejiras +hektare +hektares +held +heldentenor +heldentenors +heliac +heliacal +heliacally +heliast +heliasts +helical +helically +helices +helicities +helicity +helicoid +helicoidal +helicoids +helicon +helicons +helicopt +helicopted helicopter +helicoptered +helicoptering +helicopters +helicopting +helicopts +helilift +helilifted +helilifting +helilifts +helio +heliocentric +heliograph +heliographed +heliographic +heliographing +heliographs +heliolatries +heliolatrous +heliolatry +heliometer +heliometers +heliometric +heliometrically +helios +heliostat +heliostats +heliotrope +heliotropes +heliotropic +heliotropism +heliotropisms +heliozoan +heliozoans +helipad +helipads +heliport +heliports +helistop +helistops +helium +heliums +helix +helixes +hell +hellacious +hellaciously +hellbender +hellbenders +hellbent +hellbox +hellboxes +hellbroth +hellbroths +hellcat +hellcats +hellebore +hellebores +helled +hellenization +hellenizations +hellenize +hellenized +hellenizes +hellenizing +heller +helleri +helleries +hellers +hellery +hellfire +hellfires +hellgrammite +hellgrammites +hellhole +hellholes +hellhound +hellhounds +helling +hellion +hellions +hellish +hellishly +hellishness +hellishnesses +hellkite +hellkites hello +helloed +helloes +helloing +hellos +hells +helluva +helm +helmed helmet +helmeted +helmeting +helmetlike +helmets +helming +helminth +helminthiases +helminthiasis +helminthic +helminthologies +helminthology +helminths +helmless +helms +helmsman +helmsmanship +helmsmanships +helmsmen +helo +helos +helot +helotage +helotages +helotism +helotisms +helotries +helotry +helots help +helpable +helped +helper +helpers helpful +helpfully +helpfulness +helpfulnesses +helping +helpings +helpless +helplessly +helplessness +helplessnesses +helpmate +helpmates +helpmeet +helpmeets +helps +helve +helved +helves +helving +hem +hemacytometer +hemacytometers +hemagglutinate +hemagglutinated +hemagglutinates +hemagglutinating +hemagglutination +hemagglutinations +hemagglutinin +hemagglutinins +hemagog +hemagogs +hemal +hemangioma +hemangiomas +hemangiomata +hematal +hematein +hemateins +hematic +hematics +hematin +hematine +hematines +hematinic +hematinics +hematins +hematite +hematites +hematitic +hematocrit +hematocrits +hematogenous +hematoid +hematologic +hematological +hematologies +hematologist +hematologists +hematology +hematoma +hematomas +hematomata +hematophagous +hematopoieses +hematopoiesis +hematopoietic +hematoporphyrin +hematoporphyrins +hematoxylin +hematoxylins +hematuria +hematurias +heme +hemelytra +hemelytron +hemerocallis +hemerocallises +hemerythrin +hemerythrins +hemes +hemiacetal +hemiacetals +hemic +hemicellulose +hemicelluloses +hemichordate +hemichordates +hemicycle +hemicycles +hemidemisemiquaver +hemidemisemiquavers +hemihedral +hemihydrate +hemihydrated +hemihydrates +hemimetabolous +hemimorphic +hemimorphism +hemimorphisms +hemin +hemins +hemiola +hemiolas +hemiolia +hemiolias +hemiplegia +hemiplegias +hemiplegic +hemiplegics +hemipter +hemipteran +hemipterans +hemipterous +hemipters +hemisphere +hemispheres +hemispheric +hemispherical +hemistich +hemistichs +hemizygous +hemline +hemlines +hemlock +hemlocks +hemmed +hemmer +hemmers +hemming +hemochromatoses +hemochromatosis +hemochromatosises +hemocoel +hemocoels +hemocyanin +hemocyanins +hemocyte +hemocytes +hemocytometer +hemocytometers +hemodialyses +hemodialysis +hemodilution +hemodilutions +hemodynamic +hemodynamically +hemodynamics +hemoflagellate +hemoflagellates +hemoglobin +hemoglobinopathies +hemoglobinopathy +hemoglobins +hemoglobinuria +hemoglobinurias +hemoglobinuric +hemoid +hemolymph +hemolymphs +hemolyses +hemolysin +hemolysins +hemolysis +hemolytic +hemolyze +hemolyzed +hemolyzes +hemolyzing +hemophilia +hemophiliac +hemophiliacs +hemophilias +hemophilic +hemophilics +hemopoieses +hemopoiesis +hemopoietic +hemoprotein +hemoproteins +hemoptyses +hemoptysis +hemorrhage +hemorrhaged +hemorrhages +hemorrhagic +hemorrhaging +hemorrhoid +hemorrhoidal +hemorrhoidals +hemorrhoids +hemosiderin +hemosiderins +hemostases +hemostasis +hemostat +hemostatic +hemostatics +hemostats +hemp +hempen +hempie +hempier +hempiest +hemplike +hemps +hempseed +hempseeds +hempweed +hempweeds +hempy +hems +hemstitch +hemstitched +hemstitcher +hemstitchers +hemstitches +hemstitching hen +henbane +henbanes +henbit +henbits +hence +henceforth +henceforward +henchman +henchmen +hencoop +hencoops +hendecasyllabic +hendecasyllabics +hendecasyllable +hendecasyllables +hendiadys +hendiadyses +henequen +henequens +henequin +henequins +henhouse +henhouses +heniquen +heniquens +henlike +henna +hennaed +hennaing +hennas +henneries +hennery +henotheism +henotheisms +henotheist +henotheistic +henotheists +henpeck +henpecked +henpecking +henpecks +henries +henry +henrys +hens +hent +hented +henting +hents +hep +heparin +heparinized +heparins +hepatectomies +hepatectomized +hepatectomy +hepatic +hepatica +hepaticae +hepaticas +hepatics +hepatitides +hepatitis +hepatize +hepatized +hepatizes +hepatizing +hepatocellular +hepatocyte +hepatocytes +hepatoma +hepatomas +hepatomata +hepatomegalies +hepatomegaly +hepatopancreas +hepatopancreases +hepatotoxic +hepatotoxicities +hepatotoxicity +hepcat +hepcats +heptachlor +heptachlors +heptad +heptads +heptagon +heptagonal +heptagons +heptameter +heptameters +heptane +heptanes +heptarch +heptarchies +heptarchs +heptarchy +heptose +heptoses her +herald +heralded +heraldic +heraldically +heralding +heraldries +heraldry +heralds herb +herbaceous +herbage +herbages +herbal +herbalist +herbalists +herbals +herbaria +herbarium +herbariums +herbed +herbicidal +herbicidally +herbicide +herbicides +herbier +herbiest +herbivore +herbivores +herbivories +herbivorous +herbivory +herbless +herblike +herbs +herby +herculean +hercules +herculeses +herd +herded +herder +herders +herdic +herdics +herding +herdlike +herdman +herdmen +herds +herdsman +herdsmen here +hereabout +hereabouts +hereafter +hereafters +hereat +hereaway +hereaways +hereby +heredes +hereditament +hereditaments +hereditarian +hereditarians +hereditarily +hereditary +heredities +heredity +herein +hereinabove +hereinafter +hereinbefore +hereinbelow +hereinto +hereof +hereon +heres +heresiarch +heresiarchs +heresies +heresy +heretic +heretical +heretically +heretics +hereto +heretofore +heretrices +heretrix +heretrixes +hereunder +hereunto +hereupon +herewith +heriot +heriots +heritabilities +heritability +heritable +heritage +heritages +heritor +heritors +heritrices +heritrix +heritrixes +herl +herls +herm +herma +hermae +hermaean +hermai +hermaphrodite +hermaphrodites +hermaphroditic +hermaphroditism +hermaphroditisms +hermatypic +hermeneutic +hermeneutical +hermeneutically +hermeneutics +hermetic +hermetical +hermetically +hermeticism +hermeticisms +hermetism +hermetisms +hermetist +hermetists +hermit +hermitage +hermitages +hermitic +hermitism +hermitisms +hermitries +hermitry +hermits +herms +hern +hernia +herniae +hernial +hernias +herniate +herniated +herniates +herniating +herniation +herniations +herns hero +heroes +heroic +heroical +heroically +heroicomic +heroicomical +heroics +heroin +heroine +heroines +heroinism +heroinisms +heroins +heroism +heroisms +heroize +heroized +heroizes +heroizing +heron +heronries +heronry +herons +heros +herpes +herpesvirus +herpesviruses +herpetic +herpetological +herpetologies +herpetologist +herpetologists +herpetology +herrenvolk +herrenvolks +herried +herries +herring +herringbone +herringboned +herringbones +herringboning +herrings +herry +herrying hers herself +herstories +herstory +hertz +hertzes +hes +hesitance +hesitances +hesitancies +hesitancy +hesitant +hesitantly hesitate +hesitated +hesitater +hesitaters +hesitates +hesitating +hesitatingly +hesitation +hesitations +hesperidia +hesperidin +hesperidins +hesperidium +hessian +hessians +hessite +hessites +hessonite +hessonites +hest +hests +het +hetaera +hetaerae +hetaeras +hetaeric +hetaira +hetairai +hetairas +hetero +heteroatom +heteroatoms +heteroauxin +heteroauxins +heterocercal +heterochromatic +heterochromatin +heterochromatins +heteroclite +heteroclites +heterocycle +heterocycles +heterocyclic +heterocyclics +heterocyst +heterocystous +heterocysts +heterodox +heterodoxies +heterodoxy +heteroduplex +heteroduplexes +heterodyne +heterodyned +heterodynes +heterodyning +heteroecious +heteroecism +heteroecisms +heterogamete +heterogametes +heterogametic +heterogameties +heterogamety +heterogamies +heterogamous +heterogamy +heterogeneities +heterogeneity +heterogeneous +heterogeneously +heterogeneousness +heterogeneousnesses +heterogenies +heterogenous +heterogeny +heterogonic +heterogonies +heterogony +heterograft +heterografts +heterokaryon +heterokaryons +heterokaryoses +heterokaryosis +heterokaryosises +heterokaryotic +heterologous +heterologously +heterolyses +heterolysis +heterolytic +heteromorphic +heteromorphism +heteromorphisms +heteronomies +heteronomous +heteronomy +heteronym +heteronyms +heterophil +heterophile +heterophonies +heterophony +heterophyllies +heterophyllous +heterophylly +heteroploid +heteroploidies +heteroploids +heteroploidy +heteropterous +heteros +heteroses +heterosexual +heterosexualities +heterosexuality +heterosexually +heterosexuals +heterosis +heterospories +heterosporous +heterospory +heterothallic +heterothallism +heterothallisms +heterotic +heterotopic +heterotroph +heterotrophic +heterotrophically +heterotrophies +heterotrophs +heterotrophy +heterotypic +heterozygoses +heterozygosis +heterozygosities +heterozygosity +heterozygote +heterozygotes +heterozygous +heth +heths +hetman +hetmans +hets +heuch +heuchs +heugh +heughs +heulandite +heulandites +heuristic +heuristically +heuristics +hew +hewable +hewed +hewer +hewers +hewing +hewn +hews +hex +hexachlorethane +hexachlorethanes +hexachloroethane +hexachloroethanes +hexachlorophene +hexachlorophenes +hexachord +hexachords +hexad +hexade +hexadecimal +hexadecimals +hexades +hexadic +hexads +hexagon +hexagonal +hexagonally +hexagons +hexagram +hexagrams +hexahedra +hexahedron +hexahedrons +hexahydrate +hexahydrates +hexameter +hexameters +hexamethonium +hexamethoniums +hexamethylenetetramine +hexamethylenetetramines +hexamine +hexamines +hexane +hexanes +hexapla +hexaplar +hexaplas +hexaploid +hexaploidies +hexaploids +hexaploidy +hexapod +hexapodies +hexapods +hexapody +hexarchies +hexarchy +hexed +hexer +hexerei +hexereis +hexers +hexes +hexing +hexobarbital +hexobarbitals +hexokinase +hexokinases +hexone +hexones +hexosaminidase +hexosaminidases +hexosan +hexosans +hexose +hexoses +hexyl +hexylresorcinol +hexylresorcinols +hexyls +hey +heyday +heydays +heydey +heydeys hi +hiatal +hiatus +hiatuses +hibachi +hibachis +hibakusha +hibernacula +hibernaculum +hibernal +hibernate +hibernated +hibernates +hibernating +hibernation +hibernations +hibernator +hibernators +hibiscus +hibiscuses +hic +hiccough +hiccoughed +hiccoughing +hiccoughs +hiccup +hiccuped +hiccuping +hiccupped +hiccupping +hiccups +hick +hickey +hickeys +hickies +hickish +hickories +hickory +hicks +hid +hidable +hidalgo +hidalgos +hidden +hiddenite +hiddenites +hiddenly +hiddenness +hiddennesses hide +hideaway +hideaways +hidebound +hided +hideless +hideosities +hideosity +hideous +hideously +hideousness +hideousnesses +hideout +hideouts +hider +hiders +hides +hiding +hidings +hidroses +hidrosis +hidrotic +hidrotics +hie +hied +hieing +hiemal +hierarch +hierarchal +hierarchic +hierarchical +hierarchically +hierarchies +hierarchize +hierarchized +hierarchizes +hierarchizing +hierarchs +hierarchy +hieratic +hieratically +hierodule +hierodules +hieroglyph +hieroglyphic +hieroglyphical +hieroglyphically +hieroglyphics +hieroglyphs +hierophant +hierophantic +hierophants +hies +hifalutin +higgle +higgled +higgler +higglers +higgles +higgling high +highball +highballed +highballing +highballs +highbinder +highbinders +highborn +highboy +highboys +highbred +highbrow +highbrowed +highbrowism +highbrowisms +highbrows +highbush +highchair +highchairs +higher +highest +highfalutin +highflier +highfliers +highflyer +highflyers +highhanded +highhandedly +highhandedness +highhandednesses +highjack +highjacked +highjacking +highjacks +highland +highlander +highlanders +highlands +highlife +highlifes +highlight +highlighted +highlighter +highlighters +highlighting +highlights +highly +highness +highnesses +highroad +highroads +highs +highspot +highspots +hight +hightail +hightailed +hightailing +hightails +highted +highth +highths +highting +hights highway +highwayman +highwaymen +highways +hijack +hijacked +hijacker +hijackers +hijacking +hijackings +hijacks +hijinks +hike +hiked +hiker +hikers +hikes +hiking +hila +hilar +hilarious +hilariously +hilariousness +hilariousnesses +hilarities +hilarity +hilding +hildings +hili hill +hillbillies +hillbilly +hillcrest +hillcrests +hilled +hiller +hillers +hillier +hilliest +hilling +hillo +hilloa +hilloaed +hilloaing +hilloas +hillock +hillocks +hillocky +hilloed +hilloes +hilloing +hillos +hills +hillside +hillsides +hilltop +hilltops +hilly +hilt +hilted +hilting +hiltless +hilts +hilum +hilus him +himatia +himation +himations himself +hin +hind +hindbrain +hindbrains +hinder +hindered +hinderer +hinderers +hindering +hinders +hindgut +hindguts +hindmost +hindquarter +hindquarters +hindrance +hindrances +hinds +hindsight +hindsights +hinge +hinged +hinger +hingers +hinges +hinging +hinnied +hinnies +hinny +hinnying +hins +hint +hinted +hinter +hinterland +hinterlands +hinters +hinting +hints +hip +hipbone +hipbones +hipless +hiplike +hipline +hiplines +hipness +hipnesses +hipparch +hipparchs +hipped +hipper +hippest +hippie +hippiedom +hippiedoms +hippieness +hippienesses +hippier +hippies +hippiest +hippiness +hippinesses +hipping +hippish +hippo +hippocampal +hippocampi +hippocampus +hippocras +hippocrases +hippodrome +hippodromes +hippogriff +hippogriffs +hippopotami +hippopotamus +hippopotamuses +hippos +hippy +hips +hipshot +hipster +hipsterism +hipsterisms +hipsters +hirable +hiragana +hiraganas +hircine hire +hireable +hired +hireling +hirelings +hirer +hirers +hires +hiring +hirple +hirpled +hirples +hirpling +hirsel +hirseled +hirseling +hirselled +hirselling +hirsels +hirsle +hirsled +hirsles +hirsling +hirsute +hirsuteness +hirsutenesses +hirsutism +hirsutisms +hirudin +hirudins his +hisn +hispanidad +hispanidads +hispanism +hispanisms +hispid +hiss +hissed +hisself +hisser +hissers +hisses +hissies +hissing +hissings +hissy +hist +histamin +histaminase +histaminases +histamine +histaminergic +histamines +histamins +histed +histidin +histidine +histidines +histidins +histing +histiocyte +histiocytes +histiocytic +histochemical +histochemically +histochemistries +histochemistry +histocompatibilities +histocompatibility +histogen +histogeneses +histogenesis +histogenetic +histogens +histogram +histograms +histoid +histologic +histological +histologically +histologies +histologist +histologists +histology +histolyses +histolysis +histone +histones +histopathologic +histopathological +histopathologically +histopathologies +histopathologist +histopathologists +histopathology +histophysiologic +histophysiological +histophysiologies +histophysiology +histoplasmoses +histoplasmosis +histoplasmosises +historian +historians +historic +historical +historically +historicalness +historicalnesses +historicism +historicisms +historicist +historicists +historicities +historicity +historicize +historicized +historicizes +historicizing +histories +historiographer +historiographers +historiographic +historiographical +historiographically +historiographies +historiography history +histrionic +histrionically +histrionics +hists hit +hitch +hitched +hitcher +hitchers +hitches +hitchhike +hitchhiked +hitchhiker +hitchhikers +hitchhikes +hitchhiking +hitching +hither +hithermost +hitherto +hitherward +hitless +hits +hitter +hitters +hitting +hive +hived +hiveless +hives +hiving +hizzoner +hizzoners +hm +hmm +ho +hoactzin +hoactzines +hoactzins +hoagie +hoagies +hoagy +hoar +hoard +hoarded +hoarder +hoarders +hoarding +hoardings +hoards +hoarfrost +hoarfrosts +hoarier +hoariest +hoarily +hoariness +hoarinesses +hoars +hoarse +hoarsely +hoarsen +hoarsened +hoarseness +hoarsenesses +hoarsening +hoarsens +hoarser +hoarsest +hoary +hoatzin +hoatzines +hoatzins +hoax +hoaxed +hoaxer +hoaxers +hoaxes +hoaxing +hob +hobbed +hobbies +hobbing +hobbit +hobbits +hobble +hobblebush +hobblebushes +hobbled +hobbledehoy +hobbledehoys +hobbler +hobblers +hobbles +hobbling hobby +hobbyhorse +hobbyhorses +hobbyist +hobbyists +hobgoblin +hobgoblins +hoblike +hobnail +hobnailed +hobnailing +hobnails +hobnob +hobnobbed +hobnobber +hobnobbers +hobnobbing +hobnobs +hobo +hoboed +hoboes +hoboing +hoboism +hoboisms +hobos +hobs +hock +hocked +hocker +hockers +hockey +hockeys +hocking +hocks +hockshop +hockshops +hocus +hocused +hocuses +hocusing +hocussed +hocusses +hocussing +hod +hodad +hodaddies +hodaddy +hodads +hodden +hoddens +hoddin +hoddins +hodgepodge +hodgepodges +hodoscope +hodoscopes +hods +hoe +hoecake +hoecakes +hoed +hoedown +hoedowns +hoeing +hoelike +hoer +hoers +hoes +hog +hogan +hogans +hogback +hogbacks +hogfish +hogfishes +hogg +hogged +hogger +hoggers +hogget +hoggets +hogging +hoggish +hoggishly +hoggishness +hoggishnesses +hoggs +hoglike +hogmanay +hogmanays +hogmane +hogmanes +hogmenay +hogmenays +hognose +hognoses +hognut +hognuts +hogs +hogshead +hogsheads +hogtie +hogtied +hogtieing +hogties +hogtying +hogwash +hogwashes +hogweed +hogweeds +hoick +hoicked +hoicking +hoicks +hoiden +hoidened +hoidening +hoidens +hoise +hoised +hoises +hoising +hoist +hoisted +hoister +hoisters +hoisting +hoists +hoke +hoked +hokes +hokey +hokeyness +hokeynesses +hokeypokey +hokeypokeys +hokier +hokiest +hokily +hokiness +hokinesses +hoking +hokku +hokum +hokums +hokypokies +hokypoky +holandric +holard +holards hold +holdable +holdall +holdalls +holdback +holdbacks +holden +holder +holders +holdfast +holdfasts +holding +holdings +holdout +holdouts +holdover +holdovers +holds +holdup +holdups hole +holed +holeless +holes +holey +holibut +holibuts holiday +holidayed +holidayer +holidayers +holidaying +holidaymaker +holidaymakers +holidays +holier +holies +holiest +holily +holiness +holinesses +holing +holism +holisms +holist +holistic +holistically +holists +holk +holked +holking +holks +holla +hollaed +hollaing +holland +hollandaise +hollandaises +hollands +hollas +holler +hollered +hollering +hollers +hollies +hollo +holloa +holloaed +holloaing +holloas +holloed +holloes +holloing +holloo +hollooed +hollooing +holloos +hollos +hollow +holloware +hollowares +hollowed +hollower +hollowest +hollowing +hollowly +hollowness +hollownesses +hollows +hollowware +hollowwares +holly +hollyhock +hollyhocks +holm +holmic +holmium +holmiums +holms +holoblastic +holocaust +holocausts +holocrine +holoenzyme +holoenzymes +hologamies +hologamy +hologram +holograms +holograph +holographed +holographer +holographers +holographic +holographically +holographies +holographing +holographs +holography +hologynies +hologyny +holohedral +holometabolism +holometabolisms +holometabolous +holophrastic +holophytic +holothurian +holothurians +holotype +holotypes +holotypic +holozoic +holp +holpen +hols +holstein +holsteins +holster +holstered +holstering +holsters +holt +holts holy +holyday +holydays +holystone +holystoned +holystones +holystoning +holytide +holytides +homage +homaged +homager +homagers +homages +homaging +hombre +hombres +homburg +homburgs home +homebodies +homebody +homebound +homeboy +homeboys +homebred +homebreds +homebuilt +homecoming +homecomings +homed +homegrown homeland +homelands +homeless +homelessness +homelessnesses +homelier +homeliest +homelike +homeliness +homelinesses +homely +homemade +homemaker +homemakers +homemaking +homemakings +homeobox +homeoboxes +homeomorphic +homeomorphism +homeomorphisms +homeopath +homeopathic +homeopathically +homeopathies +homeopaths +homeopathy +homeostases +homeostasis +homeostatic +homeotherm +homeothermic +homeothermies +homeotherms +homeothermy +homeotic +homeowner +homeowners +homeport +homeported +homeporting +homeports +homer +homered +homering +homeroom +homerooms +homers +homes +homeschool +homeschooled +homeschooler +homeschoolers +homeschooling +homeschools +homesick +homesickness +homesicknesses +homesite +homesites +homespun +homespuns +homestay +homestays +homestead +homesteaded +homesteader +homesteaders +homesteading +homesteads +homestretch +homestretches hometown +hometowns +homeward +homewards homework +homeworks +homey +homeyness +homeynesses +homicidal +homicidally +homicide +homicides +homier +homiest +homiletic +homiletical +homiletics +homilies +homilist +homilists +homily +homines +hominess +hominesses +homing +hominian +hominians +hominid +hominids +hominies +hominine +hominization +hominizations +hominize +hominized +hominizes +hominizing +hominoid +hominoids +hominy +hommock +hommocks +hommos +hommoses +homo +homocercal +homoerotic +homoeroticism +homoeroticisms +homogametic +homogamies +homogamous +homogamy +homogenate +homogenates +homogeneities +homogeneity +homogeneous +homogeneously +homogeneousness +homogeneousnesses +homogenies +homogenisation +homogenisations +homogenise +homogenised +homogenises +homogenising +homogenization +homogenizations +homogenize +homogenized +homogenizer +homogenizers +homogenizes +homogenizing +homogenous +homogeny +homogonies +homogony +homograft +homografts +homograph +homographic +homographs +homoiotherm +homoiothermic +homoiotherms +homoiousian +homoiousians +homolog +homologate +homologated +homologates +homologating +homologation +homologations +homological +homologically +homologies +homologize +homologized +homologizer +homologizers +homologizes +homologizing +homologous +homologs +homologue +homologues +homology +homolyses +homolysis +homolytic +homomorphic +homomorphism +homomorphisms +homonuclear +homonym +homonymic +homonymies +homonymous +homonymously +homonyms +homonymy +homoousian +homoousians +homophile +homophobe +homophobes +homophobia +homophobias +homophobic +homophone +homophones +homophonic +homophonies +homophonous +homophony +homoplasies +homoplastic +homoplasy +homopolar +homopolymer +homopolymeric +homopolymers +homopteran +homopterans +homopterous +homos +homoscedastic +homoscedasticities +homoscedasticity +homosex +homosexes +homosexual +homosexualities +homosexuality +homosexually +homosexuals +homospories +homosporous +homospory +homothallic +homothallism +homothallisms +homotransplant +homotransplantation +homotransplantations +homotransplants +homozygoses +homozygosis +homozygosities +homozygosity +homozygote +homozygotes +homozygous +homozygously +homunculi +homunculus +homy +hon +honan +honans +honcho +honchoed +honchoing +honchos +honda +hondas +hondle +hondled +hondles +hondling +hone +honed +honer +honers +hones honest +honester +honestest +honesties +honestly +honesty +honewort +honeworts honey +honeybee +honeybees +honeybun +honeybunch +honeybunches +honeybuns +honeycomb +honeycombed +honeycombing +honeycombs +honeycreeper +honeycreepers +honeydew +honeydews +honeyeater +honeyeaters +honeyed +honeyful +honeyguide +honeyguides +honeying +honeymoon +honeymooned +honeymooner +honeymooners +honeymooning +honeymoons +honeys +honeysuckle +honeysuckles +hong +hongs +honied +honing +honk +honked +honker +honkers +honkey +honkeys +honkie +honkies +honking +honks +honky honor +honorabilities +honorability +honorable +honorableness +honorablenesses +honorably +honorand +honorands +honoraria +honoraries +honorarily +honorarium +honorariums +honorary +honored +honoree +honorees +honorer +honorers +honorific +honorifically +honorifics +honoring +honors honour +honourable +honoured +honourer +honourers +honouring +honours +hons +hooch +hooches +hood +hooded +hoodedness +hoodednesses +hoodie +hoodier +hoodies +hoodiest +hooding +hoodless +hoodlike +hoodlum +hoodlumish +hoodlumism +hoodlumisms +hoodlums +hoodoo +hoodooed +hoodooing +hoodooism +hoodooisms +hoodoos +hoods +hoodwink +hoodwinked +hoodwinker +hoodwinkers +hoodwinking +hoodwinks +hoody +hooey +hooeys +hoof +hoofbeat +hoofbeats +hoofed +hoofer +hoofers +hoofing +hoofless +hooflike +hoofprint +hoofprints +hoofs hook +hooka +hookah +hookahs +hookas +hooked +hooker +hookers +hookey +hookeys +hookier +hookies +hookiest +hooking +hookless +hooklet +hooklets +hooklike +hooknose +hooknoses +hooks +hookup +hookups +hookworm +hookworms +hooky +hoolie +hooligan +hooliganism +hooliganisms +hooligans +hooly +hoop +hooped +hooper +hoopers +hooping +hoopla +hooplas +hoopless +hooplike +hoopoe +hoopoes +hoopoo +hoopoos +hoops +hoopskirt +hoopskirts +hoopster +hoopsters +hoorah +hoorahed +hoorahing +hoorahs +hooray +hoorayed +hooraying +hoorays +hoosegow +hoosegows +hoosgow +hoosgows +hoot +hootch +hootches +hooted +hootenannies +hootenanny +hooter +hooters +hootier +hootiest +hooting +hoots +hooty +hooved +hooves +hop hope +hoped hopeful +hopefully +hopefulness +hopefulnesses +hopefuls hopeless +hopelessly +hopelessness +hopelessnesses +hoper +hopers +hopes +hophead +hopheads +hoping +hoplite +hoplites +hoplitic +hopped +hopper +hoppers +hoppier +hoppiest +hopping +hoppings +hopple +hoppled +hopples +hoppling +hoppy +hops +hopsack +hopsacking +hopsackings +hopsacks +hopscotch +hopscotched +hopscotches +hopscotching +hoptoad +hoptoads +hora +horah +horahs +horal +horary +horas +horde +horded +hordein +hordeins +hordes +hording +horehound +horehounds +horizon +horizonal +horizonless +horizons +horizontal +horizontalities +horizontality +horizontally +horizontals +hormogonia +hormogonium +hormonal +hormonally +hormone +hormonelike +hormones +hormonic +horn +hornbeam +hornbeams +hornbill +hornbills +hornblende +hornblendes +hornblendic +hornbook +hornbooks +horned +hornedness +hornednesses +hornet +hornets +hornfels +hornier +horniest +hornily +horniness +horninesses +horning +hornist +hornists +hornito +hornitos +hornless +hornlessness +hornlessnesses +hornlike +hornpipe +hornpipes +hornpout +hornpouts +horns +hornstone +hornstones +hornswoggle +hornswoggled +hornswoggles +hornswoggling +horntail +horntails +hornworm +hornworms +hornwort +hornworts +horny +horologe +horologes +horological +horologies +horologist +horologists +horology +horoscope +horoscopes +horrendous +horrendously +horrent horrible +horribleness +horriblenesses +horribles +horribly +horrid +horridly +horridness +horridnesses +horrific +horrifically +horrified +horrifies +horrify +horrifying +horrifyingly +horror +horrors horse +horseback +horsebacks +horsebean +horsebeans +horsecar +horsecars +horsed +horsefeathers +horseflesh +horsefleshes +horseflies +horsefly +horsehair +horsehairs +horsehide +horsehides +horselaugh +horselaughs +horseless +horselike +horseman +horsemanship +horsemanships +horsemen +horsemint +horsemints +horseplay +horseplayer +horseplayers +horseplays +horsepower +horsepowers +horsepox +horsepoxes +horseradish +horseradishes +horses +horseshit +horseshits +horseshod +horseshoe +horseshoed +horseshoeing +horseshoer +horseshoers +horseshoes +horsetail +horsetails +horseweed +horseweeds +horsewhip +horsewhipped +horsewhipper +horsewhippers +horsewhipping +horsewhips +horsewoman +horsewomen +horsey +horsier +horsiest +horsily +horsiness +horsinesses +horsing +horst +horste +horstes +horsts +horsy +hortative +hortatively +hortatory +horticultural +horticulturally +horticulture +horticultures +horticulturist +horticulturists +hosanna +hosannaed +hosannah +hosannahs +hosannaing +hosannas +hose +hosed +hosel +hosels +hosen +hosepipe +hosepipes +hoses +hosier +hosieries +hosiers +hosiery +hosing +hospice +hospices +hospitable +hospitably hospital +hospitalise +hospitalised +hospitalises +hospitalising +hospitalities +hospitality +hospitalization +hospitalizations +hospitalize +hospitalized +hospitalizes +hospitalizing +hospitals +hospitia +hospitium +hospodar +hospodars host +hosta +hostage +hostages +hostas +hosted +hostel +hosteled +hosteler +hostelers +hosteling +hostelled +hosteller +hostellers +hostelling +hostelries +hostelry +hostels hostess +hostessed +hostesses +hostessing +hostile +hostilely +hostiles +hostilities +hostility +hosting +hostler +hostlers +hostly +hosts hot +hotbed +hotbeds +hotblood +hotbloods +hotbox +hotboxes +hotcake +hotcakes +hotch +hotched +hotches +hotching +hotchpot +hotchpotch +hotchpotches +hotchpots hotdog +hotdogged +hotdogger +hotdoggers +hotdogging +hotdogs hotel +hoteldom +hoteldoms +hotelier +hoteliers +hotelman +hotelmen +hotels +hotfoot +hotfooted +hotfooting +hotfoots +hothead +hotheaded +hotheadedly +hotheadedness +hotheadednesses +hotheads +hothouse +hothouses +hotline +hotlines +hotly +hotness +hotnesses +hotpress +hotpressed +hotpresses +hotpressing +hotrod +hotrods +hots +hotshot +hotshots +hotspur +hotspurs +hotted +hotter +hottest +hotting +hottish +houdah +houdahs +hound +hounded +hounder +hounders +hounding +hounds hour +hourglass +hourglasses +houri +houris +hourly +hours house +houseboat +houseboater +houseboaters +houseboats +housebound +houseboy +houseboys +housebreak +housebreaker +housebreakers +housebreaking +housebreakings +housebreaks +housebroke +housebroken +housecarl +housecarls +houseclean +housecleaned +housecleaning +housecleanings +housecleans +housecoat +housecoats +housed +housedress +housedresses +housefather +housefathers +houseflies +housefly +housefront +housefronts +houseful +housefuls +houseguest +houseguests +household +householder +householders +households +househusband +househusbands +housekeep +housekeeper +housekeepers +housekeeping +housekeepings +housekeeps +housekept +housel +houseled +houseleek +houseleeks +houseless +houselessness +houselessnesses +houselights +houseling +houselled +houselling +housels +housemaid +housemaids +houseman +housemaster +housemasters +housemate +housemates +housemen +housemother +housemothers +housepainter +housepainters +houseparent +houseparents +houseperson +housepersons +houseplant +houseplants +houser +houseroom +houserooms +housers +houses +housesat +housesit +housesits +housesitting +housetop +housetops +housewares +housewarming +housewarmings housewife +housewifeliness +housewifelinesses +housewifely +housewiferies +housewifery +housewifey +housewives housework +houseworks +housing +housings +hove +hovel +hoveled +hoveling +hovelled +hovelling +hovels +hover +hovercraft +hovercrafts +hovered +hoverer +hoverers +hovering +hovers how +howbeit +howdah +howdahs +howdie +howdied +howdies +howdy +howdying +howe +howes however +howf +howff +howffs +howfs +howitzer +howitzers +howk +howked +howking +howks howl +howled +howler +howlers +howlet +howlets +howling +howlingly +howls +hows +howsoever +hoy +hoya +hoyas +hoyden +hoydened +hoydening +hoydenish +hoydens +hoyle +hoyles +hoys +huarache +huaraches +huaracho +huarachos +hub +hubbies +hubbly +hubbub +hubbubs +hubby +hubcap +hubcaps +hubris +hubrises +hubristic +hubs +huck +huckaback +huckabacks +huckle +huckleberries +huckleberry +huckles +hucks +huckster +huckstered +huckstering +hucksterism +hucksterisms +hucksters +huddle +huddled +huddler +huddlers +huddles +huddling +hue +hued +hueless +hues +huff +huffed +huffier +huffiest +huffily +huffiness +huffinesses +huffing +huffish +huffs +huffy hug huge +hugely +hugeness +hugenesses +hugeous +hugeously +huger +hugest +huggable +hugged +hugger +huggers +hugging +hugs +huh +huic +huipil +huipiles +huipils +huisache +huisaches +hula +hulas +hulk +hulked +hulkier +hulkiest +hulking +hulks +hulky +hull +hullabaloo +hullabaloos +hulled +huller +hullers +hulling +hullo +hulloa +hulloaed +hulloaing +hulloas +hulloed +hulloes +hulloing +hullos +hulls +hum human +humane +humanely +humaneness +humanenesses +humaner +humanest +humanise +humanised +humanises +humanising +humanism +humanisms +humanist +humanistic +humanistically +humanists +humanitarian +humanitarianism +humanitarianisms +humanitarians +humanities +humanity +humanization +humanizations +humanize +humanized +humanizer +humanizers +humanizes +humanizing +humankind +humanlike +humanly +humanness +humannesses +humanoid +humanoids +humans +humate +humates +humble +humbled +humbleness +humblenesses +humbler +humblers +humbles +humblest +humbling +humblingly +humbly +humbug +humbugged +humbuggeries +humbuggery +humbugging +humbugs +humdinger +humdingers +humdrum +humdrums +humectant +humectants +humeral +humerals +humeri +humerus +humic +humid +humidification +humidifications +humidified +humidifier +humidifiers +humidifies +humidify +humidifying +humidistat +humidistats +humidities +humidity +humidly +humidor +humidors +humification +humifications +humified +humiliate +humiliated +humiliates +humiliating +humiliatingly +humiliation +humiliations +humilities +humility +hummable +hummed +hummer +hummers +humming +hummingbird +hummingbirds +hummock +hummocked +hummocking +hummocks +hummocky +hummus +hummuses +humongous humor +humoral +humored +humoresque +humoresques +humorful +humoring +humorist +humoristic +humorists +humorless +humorlessly +humorlessness +humorlessnesses humorous +humorously +humorousness +humorousnesses +humors humour +humoured +humouring +humours +hump +humpback +humpbacked +humpbacks +humped +humph +humphed +humphing +humphs +humpier +humpiest +humping +humpless +humps +humpy +hums +humungous +humus +humuses +humvee +humvees +hun +hunch +hunchback +hunchbacked +hunchbacks +hunched +hunches +hunching hundred +hundredfold +hundreds +hundredth +hundredths +hundredweight +hundredweights +hung hunger +hungered +hungering +hungers +hungover +hungrier +hungriest +hungrily +hungriness +hungrinesses hungry +hunh +hunk +hunker +hunkered +hunkering +hunkers +hunkier +hunkies +hunkiest +hunks +hunky +hunnish +huns hunt +huntable +hunted +huntedly hunter +hunters +hunting +huntings +huntress +huntresses +hunts +huntsman +huntsmen +hup +hurdies +hurdle +hurdled +hurdler +hurdlers +hurdles +hurdling +hurds +hurl +hurled +hurler +hurlers +hurley +hurleys +hurlies +hurling +hurlings +hurls +hurly +hurrah +hurrahed +hurrahing +hurrahs +hurray +hurrayed +hurraying +hurrays hurricane +hurricanes +hurried +hurriedly +hurriedness +hurriednesses +hurrier +hurriers +hurries hurry +hurrying +hurst +hursts hurt +hurter +hurters +hurtful +hurtfully +hurtfulness +hurtfulnesses +hurting +hurtle +hurtled +hurtles +hurtless +hurtling +hurts husband +husbanded +husbander +husbanders +husbanding +husbandly +husbandman +husbandmen +husbandries +husbandry +husbands +hush +hushaby +hushed +hushedly +hushes +hushful +hushing +husk +husked +husker +huskers +huskier +huskies +huskiest +huskily +huskiness +huskinesses +husking +huskings +husklike +husks +husky +hussar +hussars +hussies +hussy +hustings +hustle +hustled +hustler +hustlers +hustles +hustling +huswife +huswifes +huswives +hut +hutch +hutched +hutches +hutching +hutlike +hutment +hutments +huts +hutted +hutting +hutzpa +hutzpah +hutzpahs +hutzpas +huzza +huzzaed +huzzah +huzzahed +huzzahing +huzzahs +huzzaing +huzzas +hwan +hyacinth +hyacinthine +hyacinths +hyaena +hyaenas +hyaenic +hyalin +hyaline +hyalines +hyalins +hyalite +hyalites +hyalogen +hyalogens +hyaloid +hyaloids +hyaloplasm +hyaloplasms +hyaluronidase +hyaluronidases +hybrid +hybridism +hybridisms +hybridities +hybridity +hybridization +hybridizations +hybridize +hybridized +hybridizer +hybridizers +hybridizes +hybridizing +hybridoma +hybridomas +hybrids +hybris +hybrises +hydathode +hydathodes +hydatid +hydatids +hydra +hydracid +hydracids +hydrae +hydragog +hydragogs +hydralazine +hydralazines +hydrangea +hydrangeas +hydrant +hydranth +hydranths +hydrants +hydras +hydrase +hydrases +hydrate +hydrated +hydrates +hydrating +hydration +hydrations +hydrator +hydrators +hydraulic +hydraulically +hydraulics +hydrazide +hydrazides +hydrazine +hydrazines +hydria +hydriae +hydric +hydrid +hydride +hydrides +hydrids +hydro +hydrobiological +hydrobiologies +hydrobiologist +hydrobiologists +hydrobiology +hydrocarbon +hydrocarbons +hydrocele +hydroceles +hydrocephalic +hydrocephalics +hydrocephalies +hydrocephalus +hydrocephaluses +hydrocephaly +hydrochloride +hydrochlorides +hydrochlorothiazide +hydrochlorothiazides +hydrocolloid +hydrocolloidal +hydrocolloids +hydrocortisone +hydrocortisones +hydrocrack +hydrocracked +hydrocracker +hydrocrackers +hydrocracking +hydrocrackings +hydrocracks +hydrodynamic +hydrodynamical +hydrodynamically +hydrodynamicist +hydrodynamicists +hydrodynamics +hydroelectric +hydroelectrically +hydroelectricities +hydroelectricity +hydrofoil +hydrofoils +hydrogel +hydrogels hydrogen -i +hydrogenase +hydrogenases +hydrogenate +hydrogenated +hydrogenates +hydrogenating +hydrogenation +hydrogenations +hydrogenous +hydrogens +hydrographer +hydrographers +hydrographic +hydrographies +hydrography +hydroid +hydroids +hydrokinetic +hydrolase +hydrolases +hydrologic +hydrological +hydrologically +hydrologies +hydrologist +hydrologists +hydrology +hydrolysate +hydrolysates +hydrolyses +hydrolysis +hydrolytic +hydrolytically +hydrolyzable +hydrolyzate +hydrolyzates +hydrolyze +hydrolyzed +hydrolyzes +hydrolyzing +hydromagnetic +hydromancies +hydromancy +hydromechanical +hydromechanics +hydromedusa +hydromedusae +hydromel +hydromels +hydrometallurgical +hydrometallurgies +hydrometallurgist +hydrometallurgists +hydrometallurgy +hydrometeor +hydrometeorological +hydrometeorologies +hydrometeorologist +hydrometeorologists +hydrometeorology +hydrometeors +hydrometer +hydrometers +hydrometric +hydromorphic +hydronic +hydronically +hydronium +hydroniums +hydropathic +hydropathies +hydropathy +hydroperoxide +hydroperoxides +hydrophane +hydrophanes +hydrophilic +hydrophilicities +hydrophilicity +hydrophobia +hydrophobias +hydrophobic +hydrophobicities +hydrophobicity +hydrophone +hydrophones +hydrophyte +hydrophytes +hydrophytic +hydropic +hydroplane +hydroplaned +hydroplanes +hydroplaning +hydroponic +hydroponically +hydroponics +hydropower +hydropowers +hydrops +hydropses +hydropsies +hydropsy +hydroquinone +hydroquinones +hydros +hydrosere +hydroseres +hydroski +hydroskis +hydrosol +hydrosolic +hydrosols +hydrospace +hydrospaces +hydrosphere +hydrospheres +hydrospheric +hydrostatic +hydrostatically +hydrostatics +hydrotherapies +hydrotherapy +hydrothermal +hydrothermally +hydrothoraces +hydrothorax +hydrothoraxes +hydrotropic +hydrotropism +hydrotropisms +hydrous +hydroxide +hydroxides +hydroxy +hydroxyapatite +hydroxyapatites +hydroxyl +hydroxylamine +hydroxylamines +hydroxylapatite +hydroxylapatites +hydroxylase +hydroxylases +hydroxylate +hydroxylated +hydroxylates +hydroxylating +hydroxylation +hydroxylations +hydroxylic +hydroxyls +hydroxyproline +hydroxyprolines +hydroxytryptamine +hydroxytryptamines +hydroxyurea +hydroxyureas +hydroxyzine +hydroxyzines +hydrozoan +hydrozoans +hyena +hyenas +hyenic +hyenine +hyenoid +hyetal +hygeist +hygeists +hygieist +hygieists +hygiene +hygienes +hygienic +hygienically +hygienics +hygienist +hygienists +hygrograph +hygrographs +hygrometer +hygrometers +hygrometric +hygrophilous +hygrophyte +hygrophytes +hygrophytic +hygroscopic +hygroscopicities +hygroscopicity +hying +hyla +hylas +hylozoic +hylozoism +hylozoisms +hylozoist +hylozoistic +hylozoists +hymen +hymenal +hymeneal +hymeneally +hymeneals +hymenia +hymenial +hymenium +hymeniums +hymenoptera +hymenopteran +hymenopterans +hymenopteron +hymenopterons +hymenopterous +hymens +hymn +hymnal +hymnals +hymnaries +hymnary +hymnbook +hymnbooks +hymned +hymning +hymnist +hymnists +hymnless +hymnlike +hymnodies +hymnody +hymnologies +hymnology +hymns +hyoid +hyoidal +hyoidean +hyoids +hyoscine +hyoscines +hyoscyamine +hyoscyamines +hyp +hypabyssal +hypabyssally +hypaethral +hypallage +hypallages +hypanthia +hypanthium +hype +hyped +hyper +hyperacid +hyperacidities +hyperacidity +hyperactive +hyperactives +hyperactivities +hyperactivity +hyperacuities +hyperacuity +hyperacute +hyperaesthesia +hyperaesthesias +hyperaesthetic +hyperaggressive +hyperalert +hyperalimentation +hyperalimentations +hyperarid +hyperarousal +hyperarousals +hyperaware +hyperawareness +hyperawarenesses +hyperbaric +hyperbarically +hyperbola +hyperbolae +hyperbolas +hyperbole +hyperboles +hyperbolic +hyperbolical +hyperbolically +hyperbolist +hyperbolists +hyperbolize +hyperbolized +hyperbolizes +hyperbolizing +hyperboloid +hyperboloidal +hyperboloids +hyperborean +hyperboreans +hypercalcemia +hypercalcemias +hypercalcemic +hypercapnia +hypercapnias +hypercapnic +hypercatabolism +hypercatabolisms +hypercatalectic +hypercatalexes +hypercatalexis +hypercautious +hypercharge +hypercharged +hypercharges +hypercholesterolemia +hypercholesterolemias +hypercholesterolemic +hypercivilized +hypercoagulabilities +hypercoagulability +hypercoagulable +hypercompetitive +hypercomplex +hyperconcentration +hyperconcentrations +hyperconscious +hyperconsciousness +hyperconsciousnesses +hypercorrect +hypercorrection +hypercorrections +hypercorrectly +hypercorrectness +hypercorrectnesses +hypercritic +hypercritical +hypercritically +hypercriticism +hypercriticisms +hypercritics +hypercube +hypercubes +hyperdevelopment +hyperdevelopments +hyperefficient +hyperemia +hyperemias +hyperemic +hyperemotional +hyperemotionalities +hyperemotionality +hyperendemic +hyperenergetic +hyperesthesia +hyperesthesias +hyperesthetic +hypereutectic +hypereutectoid +hyperexcitabilities +hyperexcitability +hyperexcitable +hyperexcited +hyperexcitement +hyperexcitements +hyperexcretion +hyperexcretions +hyperextend +hyperextended +hyperextending +hyperextends +hyperextension +hyperextensions +hyperfastidious +hyperfine +hyperfunction +hyperfunctional +hyperfunctioning +hyperfunctions +hypergamies +hypergamy +hyperglycemia +hyperglycemias +hyperglycemic +hypergol +hypergolic +hypergolically +hypergols +hyperhidroses +hyperhidrosis +hyperimmune +hyperimmunization +hyperimmunizations +hyperimmunize +hyperimmunized +hyperimmunizes +hyperimmunizing +hyperinflated +hyperinflation +hyperinflationary +hyperinflations +hyperinnervation +hyperinnervations +hyperinsulinism +hyperinsulinisms +hyperintellectual +hyperintelligent +hyperintense +hyperinvolution +hyperinvolutions +hyperirritabilities +hyperirritability +hyperirritable +hyperkeratoses +hyperkeratosis +hyperkeratotic +hyperkineses +hyperkinesia +hyperkinesias +hyperkinesis +hyperkinetic +hyperlipemia +hyperlipemias +hyperlipemic +hyperlipidemia +hyperlipidemias +hypermania +hypermanias +hypermanic +hypermarket +hypermarkets +hypermasculine +hypermedia +hypermetabolic +hypermetabolism +hypermetabolisms +hypermeter +hypermeters +hypermetric +hypermetrical +hypermetropia +hypermetropias +hypermetropic +hypermnesia +hypermnesias +hypermnesic +hypermobilities +hypermobility +hypermodern +hypermodernist +hypermodernists +hypermutabilities +hypermutability +hypermutable +hypernationalistic +hyperon +hyperons +hyperope +hyperopes +hyperopia +hyperopias +hyperopic +hyperostoses +hyperostosis +hyperostotic +hyperparasite +hyperparasites +hyperparasitic +hyperparasitism +hyperparasitisms +hyperparathyroidism +hyperparathyroidisms +hyperphagia +hyperphagias +hyperphagic +hyperphysical +hyperpigmentation +hyperpigmentations +hyperpigmented +hyperpituitarism +hyperpituitarisms +hyperpituitary +hyperplane +hyperplanes +hyperplasia +hyperplasias +hyperplastic +hyperploid +hyperploidies +hyperploids +hyperploidy +hyperpnea +hyperpneas +hyperpneic +hyperpolarization +hyperpolarizations +hyperpolarize +hyperpolarized +hyperpolarizes +hyperpolarizing +hyperproducer +hyperproducers +hyperproduction +hyperproductions +hyperpure +hyperpyrexia +hyperpyrexias +hyperrational +hyperrationalities +hyperrationality +hyperreactive +hyperreactivities +hyperreactivity +hyperreactor +hyperreactors +hyperrealism +hyperrealisms +hyperrealist +hyperrealistic +hyperresponsive +hyperromantic +hypersaline +hypersalinities +hypersalinity +hypersalivation +hypersalivations +hypersecretion +hypersecretions +hypersensitive +hypersensitiveness +hypersensitivenesses +hypersensitivities +hypersensitivity +hypersensitization +hypersensitizations +hypersensitize +hypersensitized +hypersensitizes +hypersensitizing +hypersexual +hypersexualities +hypersexuality +hypersomnolence +hypersomnolences +hypersonic +hypersonically +hyperspace +hyperspaces +hyperstatic +hypersthene +hypersthenes +hypersthenic +hyperstimulate +hyperstimulated +hyperstimulates +hyperstimulating +hyperstimulation +hyperstimulations +hypersurface +hypersurfaces +hypersusceptibilities +hypersusceptibility +hypersusceptible +hypertense +hypertension +hypertensions +hypertensive +hypertensives +hypertext +hypertexts +hyperthermia +hyperthermias +hyperthermic +hyperthyroid +hyperthyroidism +hyperthyroidisms +hypertonia +hypertonias +hypertonic +hypertonicities +hypertonicity +hypertrophic +hypertrophied +hypertrophies +hypertrophy +hypertrophying +hypertypical +hyperurbanism +hyperurbanisms +hyperuricemia +hyperuricemias +hypervelocities +hypervelocity +hyperventilate +hyperventilated +hyperventilates +hyperventilating +hyperventilation +hyperventilations +hypervigilance +hypervigilances +hypervigilant +hypervirulent +hyperviscosities +hyperviscosity +hypervitaminoses +hypervitaminosis +hypes +hypha +hyphae +hyphal +hyphemia +hyphemias +hyphen +hyphenate +hyphenated +hyphenates +hyphenating +hyphenation +hyphenations +hyphened +hyphening +hyphenless +hyphens +hyping +hypnagogic +hypnic +hypnogogic +hypnoid +hypnoidal +hypnopompic +hypnoses +hypnosis +hypnotherapies +hypnotherapist +hypnotherapists +hypnotherapy +hypnotic +hypnotically +hypnotics +hypnotism +hypnotisms +hypnotist +hypnotists +hypnotizabilities +hypnotizability +hypnotizable +hypnotize +hypnotized +hypnotizes +hypnotizing +hypo +hypoacid +hypoallergenic +hypoblast +hypoblasts +hypocalcemia +hypocalcemias +hypocalcemic +hypocaust +hypocausts +hypocenter +hypocenters +hypocentral +hypochlorite +hypochlorites +hypochondria +hypochondriac +hypochondriacal +hypochondriacally +hypochondriacs +hypochondrias +hypochondriases +hypochondriasis +hypocorism +hypocorisms +hypocoristic +hypocoristical +hypocoristically +hypocotyl +hypocotyls +hypocrisies +hypocrisy +hypocrite +hypocrites +hypocritical +hypocritically +hypocycloid +hypocycloids +hypoderm +hypodermal +hypodermic +hypodermically +hypodermics +hypodermis +hypodermises +hypoderms +hypodiploid +hypodiploidies +hypodiploidy +hypoed +hypoeutectoid +hypogastric +hypogea +hypogeal +hypogean +hypogene +hypogeous +hypogeum +hypoglossal +hypoglossals +hypoglycemia +hypoglycemias +hypoglycemic +hypoglycemics +hypogynies +hypogynous +hypogyny +hypoing +hypokalemia +hypokalemias +hypokalemic +hypolimnia +hypolimnion +hypolimnions +hypomagnesemia +hypomagnesemias +hypomania +hypomanias +hypomanic +hypomorph +hypomorphic +hypomorphs +hyponea +hyponeas +hyponoia +hyponoias +hypoparathyroidism +hypoparathyroidisms +hypopharynges +hypopharynx +hypopharynxes +hypophyseal +hypophysectomies +hypophysectomize +hypophysectomized +hypophysectomizes +hypophysectomizing +hypophysectomy +hypophyses +hypophysial +hypophysis +hypopituitarism +hypopituitarisms +hypopituitary +hypoplasia +hypoplasias +hypoplastic +hypoploid +hypoploids +hypopnea +hypopneas +hypopyon +hypopyons +hypos +hyposensitization +hyposensitizations +hyposensitize +hyposensitized +hyposensitizes +hyposensitizing +hypospadias +hypospadiases +hypostases +hypostasis +hypostatic +hypostatically +hypostatization +hypostatizations +hypostatize +hypostatized +hypostatizes +hypostatizing +hypostome +hypostomes +hypostyle +hypostyles +hypotactic +hypotaxes +hypotaxis +hypotension +hypotensions +hypotensive +hypotensives +hypotenuse +hypotenuses +hypothalami +hypothalamic +hypothalamus +hypothec +hypothecate +hypothecated +hypothecates +hypothecating +hypothecation +hypothecations +hypothecator +hypothecators +hypothecs +hypothenuse +hypothenuses +hypothermal +hypothermia +hypothermias +hypothermic +hypotheses +hypothesis +hypothesize +hypothesized +hypothesizes +hypothesizing +hypothetical +hypothetically +hypothyroid +hypothyroidism +hypothyroidisms +hypotonia +hypotonias +hypotonic +hypotonicities +hypotonicity +hypoxanthine +hypoxanthines +hypoxemia +hypoxemias +hypoxemic +hypoxia +hypoxias +hypoxic +hyps +hypsometer +hypsometers +hypsometric +hyraces +hyracoid +hyracoids +hyrax +hyraxes +hyson +hysons +hyssop +hyssops +hysterectomies +hysterectomized +hysterectomy +hystereses +hysteresis +hysteretic +hysteria +hysterias +hysteric +hysterical +hysterically +hysterics +hysteroid +hysterotomies +hysterotomy +hyte +iamb +iambi +iambic +iambics +iambs +iambus +iambuses +iatric +iatrical +iatrogenic +iatrogenically +ibex +ibexes +ibices +ibidem +ibis +ibises +ibogaine +ibogaines +ibuprofen +ibuprofens ice -icecream +iceberg +icebergs +iceblink +iceblinks +iceboat +iceboater +iceboaters +iceboating +iceboatings +iceboats +icebound +icebox +iceboxes +icebreaker +icebreakers +icecap +icecaps +iced +icefall +icefalls +icehouse +icehouses +icekhana +icekhanas +iceless +icelike +iceman +icemen +ices +ich +ichneumon +ichneumons +ichnite +ichnites +ichor +ichorous +ichors +ichs +ichthyic +ichthyofauna +ichthyofaunae +ichthyofaunal +ichthyofaunas +ichthyological +ichthyologically +ichthyologies +ichthyologist +ichthyologists +ichthyology +ichthyophagous +ichthyosaur +ichthyosaurian +ichthyosaurians +ichthyosaurs +icicle +icicled +icicles +icier +iciest +icily +iciness +icinesses +icing +icings +ick +icker +ickers +ickier +ickiest +ickily +ickiness +ickinesses +icky +icon +icones +iconic +iconical +iconically +iconicities +iconicity +iconoclasm +iconoclasms +iconoclast +iconoclastic +iconoclastically +iconoclasts +iconographer +iconographers +iconographic +iconographical +iconographically +iconographies +iconography +iconolatries +iconolatry +iconological +iconologies +iconology +iconoscope +iconoscopes +iconostases +iconostasis +icons +icosahedra +icosahedral +icosahedron +icosahedrons +icteric +icterics +icterus +icteruses +ictic +ictus +ictuses +icy +id idea +ideal +idealess +idealise +idealised +idealises +idealising +idealism +idealisms +idealist +idealistic +idealistically +idealists +idealities +ideality +idealization +idealizations +idealize +idealized +idealizer +idealizers +idealizes +idealizing +idealless +ideally +idealogies +idealogue +idealogues +idealogy +ideals +ideas +ideate +ideated +ideates +ideating +ideation +ideational +ideationally +ideations +ideative +idem +idempotent +idempotents +identic +identical +identically +identicalness +identicalnesses +identifiable +identifiably identification +identifications +identified +identifier +identifiers +identifies identify +identifying +identities +identity +ideogram +ideogramic +ideogrammatic +ideogrammic +ideograms +ideograph +ideographic +ideographically +ideographies +ideographs +ideography +ideologic +ideological +ideologically +ideologies +ideologist +ideologists +ideologize +ideologized +ideologizes +ideologizing +ideologue +ideologues +ideology +ideomotor +ides +idioblast +idioblastic +idioblasts +idiocies +idiocy +idiographic +idiolect +idiolectal +idiolects idiom +idiomatic +idiomatically +idiomaticness +idiomaticnesses +idiomorphic +idioms +idiopathic +idiopathically +idiosyncrasies +idiosyncrasy +idiosyncratic +idiosyncratically +idiot +idiotic +idiotical +idiotically +idiotism +idiotisms +idiots +idle +idled +idleness +idlenesses +idler +idlers +idles +idlesse +idlesses +idlest +idling +idly +idocrase +idocrases +idol +idolater +idolaters +idolator +idolators +idolatries +idolatrous +idolatrously +idolatrousness +idolatrousnesses +idolatry +idolise +idolised +idoliser +idolisers +idolises +idolising +idolism +idolisms +idolization +idolizations +idolize +idolized +idolizer +idolizers +idolizes +idolizing +idols +idoneities +idoneity +idoneous +ids +idyl +idylist +idylists +idyll +idyllic +idyllically +idyllist +idyllists +idylls +idyls if +iff +iffier +iffiest +iffiness +iffinesses +iffy +ifs +igloo +igloos +iglu +iglus +ignatia +ignatias +igneous +ignescent +ignified +ignifies +ignify +ignifying +ignimbrite +ignimbrites +ignitabilities +ignitability +ignitable +ignite +ignited +igniter +igniters +ignites +ignitible +igniting +ignition +ignitions +ignitor +ignitors +ignitron +ignitrons +ignobilities +ignobility +ignoble +ignobleness +ignoblenesses +ignobly +ignominies +ignominious +ignominiously +ignominiousness +ignominiousnesses +ignominy +ignorable +ignorami +ignoramus +ignoramuses +ignorance +ignorances +ignorant +ignorantly +ignorantness +ignorantnesses ignore +ignored +ignorer +ignorers +ignores +ignoring +iguana +iguanas +iguanian +iguanians +iguanodon +iguanodons +ihram +ihrams +ikat +ikats +ikebana +ikebanas +ikon +ikons +ilea +ileac +ileal +ileitides +ileitis +ileum +ileus +ileuses +ilex +ilexes +ilia +iliac +iliad +iliads +ilial +ilium +ilk +ilka +ilks ill +illation +illations +illative +illatively +illatives +illaudable +illaudably illegal +illegalities +illegality +illegalization +illegalizations +illegalize +illegalized +illegalizes +illegalizing +illegally +illegals +illegibilities +illegibility +illegible +illegibly +illegitimacies +illegitimacy +illegitimate +illegitimately +iller +illest +illiberal +illiberalism +illiberalisms +illiberalities +illiberality +illiberally +illiberalness +illiberalnesses +illicit +illicitly +illimitabilities +illimitability +illimitable +illimitableness +illimitablenesses +illimitably +illinium +illiniums +illiquid +illiquidities +illiquidity +illite +illiteracies +illiteracy +illiterate +illiterately +illiterateness +illiteratenesses +illiterates +illites +illitic illness +illnesses +illocutionary +illogic +illogical +illogicalities +illogicality +illogically +illogicalness +illogicalnesses +illogics +ills +illume +illumed +illumes +illuminable +illuminance +illuminances +illuminant +illuminants +illuminate +illuminated +illuminates +illuminati +illuminating +illuminatingly +illumination +illuminations +illuminative +illuminator +illuminators +illumine +illumined +illumines +illuming +illumining +illuminism +illuminisms +illuminist +illuminists +illusion +illusional +illusionary +illusionism +illusionisms +illusionist +illusionistic +illusionistically +illusionists +illusions +illusive +illusively +illusiveness +illusivenesses +illusorily +illusoriness +illusorinesses +illusory +illustrate +illustrated +illustrates +illustrating +illustration +illustrational +illustrations +illustrative +illustratively +illustrator +illustrators +illustrious +illustriously +illustriousness +illustriousnesses +illuvia +illuvial +illuviated +illuviation +illuviations +illuvium +illuviums +illy +ilmenite +ilmenites +image +imaged +imager +imageries +imagers +imagery +images +imaginable +imaginableness +imaginablenesses +imaginably +imaginal +imaginaries +imaginarily +imaginariness +imaginarinesses +imaginary +imagination +imaginations +imaginative +imaginatively +imaginativeness +imaginativenesses imagine +imagined +imaginer +imaginers +imagines +imaging +imagings +imagining +imagism +imagisms +imagist +imagistic +imagistically +imagists +imago +imagoes +imagos +imam +imamate +imamates +imams +imaret +imarets +imaum +imaums +imbalance +imbalanced +imbalances +imbalm +imbalmed +imbalmer +imbalmers +imbalming +imbalms +imbark +imbarked +imbarking +imbarks +imbecile +imbeciles +imbecilic +imbecilities +imbecility +imbed +imbedded +imbedding +imbeds +imbibe +imbibed +imbiber +imbibers +imbibes +imbibing +imbibition +imbibitional +imbibitions +imbitter +imbittered +imbittering +imbitters +imblaze +imblazed +imblazes +imblazing +imbodied +imbodies +imbody +imbodying +imbolden +imboldened +imboldening +imboldens +imbosom +imbosomed +imbosoming +imbosoms +imbower +imbowered +imbowering +imbowers +imbricate +imbricated +imbricates +imbricating +imbrication +imbrications +imbroglio +imbroglios +imbrown +imbrowned +imbrowning +imbrowns +imbrue +imbrued +imbrues +imbruing +imbrute +imbruted +imbrutes +imbruting +imbue +imbued +imbues +imbuing +imid +imidazole +imidazoles +imide +imides +imidic +imido +imids +imine +imines +imino +imipramine +imipramines +imitable +imitate +imitated +imitates +imitating +imitation +imitations +imitative +imitatively +imitativeness +imitativenesses +imitator +imitators +immaculacies +immaculacy +immaculate +immaculately +immane +immanence +immanences +immanencies +immanency +immanent +immanentism +immanentisms +immanentist +immanentistic +immanentists +immanently +immaterial +immaterialism +immaterialisms +immaterialist +immaterialists +immaterialities +immateriality +immaterialize +immaterialized +immaterializes +immaterializing +immature +immaturely +immatures +immaturities +immaturity +immeasurable +immeasurableness +immeasurablenesses +immeasurably +immediacies +immediacy +immediate immediately +immediateness +immediatenesses +immedicable +immedicably +immemorial +immemorially +immense +immensely +immenseness +immensenesses +immenser +immensest +immensities +immensity +immensurable +immerge +immerged +immerges +immerging +immerse +immersed +immerses +immersible +immersing +immersion +immersions +immesh +immeshed +immeshes +immeshing +immethodical +immethodically +immies +immigrant +immigrants +immigrate +immigrated +immigrates +immigrating immigration +immigrational +immigrations +imminence +imminences +imminencies +imminency +imminent +imminently +immingle +immingled +immingles +immingling +immiscibilities +immiscibility +immiscible +immitigable +immitigably +immittance +immittances +immix +immixed +immixes +immixing +immixture +immixtures +immobile +immobilism +immobilisms +immobilities +immobility +immobilization +immobilizations +immobilize +immobilized +immobilizer +immobilizers +immobilizes +immobilizing +immoderacies +immoderacy +immoderate +immoderately +immoderateness +immoderatenesses +immoderation +immoderations +immodest +immodesties +immodestly +immodesty +immolate +immolated +immolates +immolating +immolation +immolations +immolator +immolators +immoral +immoralism +immoralisms +immoralist +immoralists +immoralities +immorality +immorally +immortal +immortalise +immortalised +immortalises +immortalising +immortalities +immortality +immortalization +immortalizations +immortalize +immortalized +immortalizer +immortalizers +immortalizes +immortalizing +immortally +immortals +immortelle +immortelles +immotile +immovabilities +immovability +immovable +immovableness +immovablenesses +immovables +immovably +immune +immunes +immunise +immunised +immunises +immunising +immunities +immunity +immunization +immunizations +immunize +immunized +immunizes +immunizing +immunoassay +immunoassayable +immunoassays +immunoblot +immunoblots +immunoblotting +immunoblottings +immunochemical +immunochemically +immunochemist +immunochemistries +immunochemistry +immunochemists +immunocompetence +immunocompetences +immunocompetent +immunocompromised +immunocytochemical +immunocytochemically +immunocytochemistries +immunocytochemistry +immunodeficiencies +immunodeficiency +immunodeficient +immunodiagnoses +immunodiagnosis +immunodiagnostic +immunodiffusion +immunodiffusions +immunoelectrophoreses +immunoelectrophoresis +immunoelectrophoretic +immunoelectrophoretically +immunofluorescence +immunofluorescences +immunofluorescent +immunogen +immunogeneses +immunogenesis +immunogenetic +immunogenetically +immunogeneticist +immunogeneticists +immunogenetics +immunogenic +immunogenicities +immunogenicity +immunogens +immunoglobulin +immunoglobulins +immunohematologic +immunohematological +immunohematologies +immunohematologist +immunohematologists +immunohematology +immunohistochemical +immunohistochemistries +immunohistochemistry +immunologic +immunological +immunologically +immunologies +immunologist +immunologists +immunology +immunomodulator +immunomodulators +immunomodulatory +immunopathologic +immunopathological +immunopathologies +immunopathologist +immunopathologists +immunopathology +immunoprecipitate +immunoprecipitated +immunoprecipitates +immunoprecipitating +immunoprecipitation +immunoprecipitations +immunoreactive +immunoreactivities +immunoreactivity +immunoregulation +immunoregulations +immunoregulatory +immunosorbent +immunosorbents +immunosuppress +immunosuppressant +immunosuppressants +immunosuppressed +immunosuppresses +immunosuppressing +immunosuppression +immunosuppressions +immunosuppressive +immunotherapeutic +immunotherapies +immunotherapy +immure +immured +immurement +immurements +immures +immuring +immutabilities +immutability +immutable +immutableness +immutablenesses +immutably +immy +imp +impact +impacted +impacter +impacters +impacting +impaction +impactions +impactive +impactor +impactors +impacts +impaint +impainted +impainting +impaints +impair +impaired +impairer +impairers +impairing +impairment +impairments +impairs +impala +impalas +impale +impaled +impalement +impalements +impaler +impalers +impales +impaling +impalpabilities +impalpability +impalpable +impalpably +impanel +impaneled +impaneling +impanelled +impanelling +impanels +imparadise +imparadised +imparadises +imparadising +imparities +imparity +impark +imparked +imparking +imparks +impart +impartation +impartations +imparted +imparter +imparters +impartial +impartialities +impartiality +impartially +impartible +impartibly +imparting +impartment +impartments +imparts +impassabilities +impassability +impassable +impassableness +impassablenesses +impassably +impasse +impasses +impassibilities +impassibility +impassible +impassibly +impassion +impassioned +impassioning +impassions +impassive +impassively +impassiveness +impassivenesses +impassivities +impassivity +impaste +impasted +impastes +impasting +impasto +impastoed +impastos +impatience +impatiences +impatiens +impatient +impatiently +impavid +impawn +impawned +impawning +impawns +impeach +impeachable +impeached +impeaches +impeaching +impeachment +impeachments +impearl +impearled +impearling +impearls +impeccabilities +impeccability +impeccable +impeccably +impecuniosities +impecuniosity +impecunious +impecuniously +impecuniousness +impecuniousnesses +imped +impedance +impedances +impede +impeded +impeder +impeders +impedes +impediment +impedimenta +impediments +impeding +impel +impelled +impeller +impellers +impelling +impellor +impellors +impels +impend +impended +impendent +impending +impends +impenetrabilities +impenetrability +impenetrable +impenetrably +impenitence +impenitences +impenitent +impenitently +imperative +imperatively +imperativeness +imperativenesses +imperatives +imperator +imperatorial +imperators +imperceivable +imperceptible +imperceptibly +imperceptive +imperceptiveness +imperceptivenesses +impercipience +impercipiences +impercipient +imperfect +imperfection +imperfections +imperfective +imperfectives +imperfectly +imperfectness +imperfectnesses +imperfects +imperforate +imperia +imperial +imperialism +imperialisms +imperialist +imperialistic +imperialistically +imperialists +imperially +imperials +imperil +imperiled +imperiling +imperilled +imperilling +imperilment +imperilments +imperils +imperious +imperiously +imperiousness +imperiousnesses +imperishabilities +imperishability +imperishable +imperishableness +imperishablenesses +imperishables +imperishably +imperium +imperiums +impermanence +impermanences +impermanencies +impermanency +impermanent +impermanently +impermeabilities +impermeability +impermeable +impermissibilities +impermissibility +impermissible +impermissibly +impersonal +impersonalities +impersonality +impersonalization +impersonalizations +impersonalize +impersonalized +impersonalizes +impersonalizing +impersonally +impersonate +impersonated +impersonates +impersonating +impersonation +impersonations +impersonator +impersonators +impertinence +impertinences +impertinencies +impertinency +impertinent +impertinently +imperturbabilities +imperturbability +imperturbable +imperturbably +impervious +imperviously +imperviousness +imperviousnesses +impetiginous +impetigo +impetigos +impetrate +impetrated +impetrates +impetrating +impetration +impetrations +impetuosities +impetuosity +impetuous +impetuously +impetuousness +impetuousnesses +impetus +impetuses +imphee +imphees +impi +impieties +impiety +imping +impinge +impinged +impingement +impingements +impinger +impingers +impinges +impinging +impings +impious +impiously +impis +impish +impishly +impishness +impishnesses +implacabilities +implacability +implacable +implacably +implant +implantable +implantation +implantations +implanted +implanter +implanters +implanting +implants +implausibilities +implausibility +implausible +implausibly +implead +impleaded +impleading +impleads +impledge +impledged +impledges +impledging +implement +implementation +implementations +implemented +implementer +implementers +implementing +implementor +implementors +implements +implicate +implicated +implicates +implicating +implication +implications +implicative +implicatively +implicativeness +implicativenesses +implicit +implicitly +implicitness +implicitnesses +implied +implies +implode +imploded +implodes +imploding +implore +implored +implorer +implorers +implores +imploring +imploringly +implosion +implosions +implosive +implosives +imply +implying +impolicies +impolicy +impolite +impolitely +impoliteness +impolitenesses +impolitic +impolitical +impolitically +impoliticly +imponderabilities +imponderability +imponderable +imponderables +imponderably +impone +imponed +impones +imponing +imporous import +importable importance +importances +importancies +importancy important +importantly +importation +importations +imported +importer +importers +importing +imports +importunate +importunately +importunateness +importunatenesses +importune +importuned +importunely +importuner +importuners +importunes +importuning +importunities +importunity +impose +imposed +imposer +imposers +imposes +imposing +imposingly +imposition +impositions +impossibilities +impossibility impossible +impossibleness +impossiblenesses +impossibly +impost +imposted +imposter +imposters +imposthume +imposthumes +imposting +impostor +impostors +imposts +impostume +impostumes +imposture +impostures +impotence +impotences +impotencies +impotency +impotent +impotently +impotents +impound +impounded +impounding +impoundment +impoundments +impounds +impoverish +impoverished +impoverisher +impoverishers +impoverishes +impoverishing +impoverishment +impoverishments +impower +impowered +impowering +impowers +impracticabilities +impracticability +impracticable +impracticably +impractical +impracticalities +impracticality +impractically +imprecate +imprecated +imprecates +imprecating +imprecation +imprecations +imprecatory +imprecise +imprecisely +impreciseness +imprecisenesses +imprecision +imprecisions +impregn +impregnabilities +impregnability +impregnable +impregnableness +impregnablenesses +impregnably +impregnant +impregnants +impregnate +impregnated +impregnates +impregnating +impregnation +impregnations +impregnator +impregnators +impregned +impregning +impregns +impresa +impresario +impresarios +impresas +imprese +impreses impress +impressed +impresses +impressibilities +impressibility +impressible +impressing impression +impressionabilities +impressionability +impressionable +impressionism +impressionisms +impressionist +impressionistic +impressionistically +impressionists +impressions +impressive +impressively +impressiveness +impressivenesses +impressment +impressments +impressure +impressures +imprest +imprests +imprimatur +imprimaturs +imprimis +imprint +imprinted +imprinter +imprinters +imprinting +imprintings +imprints +imprison +imprisoned +imprisoning +imprisonment +imprisonments +imprisons +improbabilities +improbability +improbable +improbably +impromptu +impromptus +improper +improperly +improperness +impropernesses +improprieties +impropriety +improv +improvabilities +improvability +improvable improve +improved +improvement +improvements +improver +improvers +improves +improvidence +improvidences +improvident +improvidently +improving +improvisation +improvisational +improvisationally +improvisations +improvisator +improvisatore +improvisatores +improvisatori +improvisatorial +improvisators +improvisatory +improvise +improvised +improviser +improvisers +improvises +improvising +improvisor +improvisors +improvs +imprudence +imprudences +imprudent +imprudently +imps +impudence +impudences +impudent +impudently +impudicities +impudicity +impugn +impugnable +impugned +impugner +impugners +impugning +impugns +impuissance +impuissances +impuissant +impulse +impulsed +impulses +impulsing +impulsion +impulsions +impulsive +impulsively +impulsiveness +impulsivenesses +impulsivities +impulsivity +impunities +impunity +impure +impurely +impureness +impurenesses +impurities +impurity +imputabilities +imputability +imputable +imputation +imputations +imputative +imputatively +impute +imputed +imputer +imputers +imputes +imputing in +inabilities +inability +inaccessibilities +inaccessibility +inaccessible +inaccessibly +inaccuracies +inaccuracy +inaccurate +inaccurately +inaction +inactions +inactivate +inactivated +inactivates +inactivating +inactivation +inactivations +inactive +inactively +inactivities +inactivity +inadequacies +inadequacy +inadequate +inadequately +inadequateness +inadequatenesses +inadmissibilities +inadmissibility +inadmissible +inadmissibly +inadvertence +inadvertences +inadvertencies +inadvertency +inadvertent +inadvertently +inadvisabilities +inadvisability +inadvisable +inalienabilities +inalienability +inalienable +inalienably +inalterabilities +inalterability +inalterable +inalterableness +inalterablenesses +inalterably +inamorata +inamoratas +inane +inanely +inaneness +inanenesses +inaner +inanes +inanest +inanimate +inanimately +inanimateness +inanimatenesses +inanities +inanition +inanitions +inanity +inapparent +inapparently +inappeasable +inappetence +inappetences +inapplicabilities +inapplicability +inapplicable +inapplicably +inapposite +inappositely +inappositeness +inappositenesses +inappreciable +inappreciably +inappreciative +inappreciatively +inappreciativeness +inappreciativenesses +inapproachable +inappropriate +inappropriately +inappropriateness +inappropriatenesses +inapt +inaptitude +inaptitudes +inaptly +inaptness +inaptnesses +inarable +inarch +inarched +inarches +inarching +inarguable +inarguably +inarm +inarmed +inarming +inarms +inarticulacies +inarticulacy +inarticulate +inarticulately +inarticulateness +inarticulatenesses +inarticulates +inartistic +inartistically +inattention +inattentions +inattentive +inattentively +inattentiveness +inattentivenesses +inaudibilities +inaudibility +inaudible +inaudibly +inaugural +inaugurals +inaugurate +inaugurated +inaugurates +inaugurating +inauguration +inaugurations +inaugurator +inaugurators +inauspicious +inauspiciously +inauspiciousness +inauspiciousnesses +inauthentic +inauthenticities +inauthenticity +inbeing +inbeings +inboard +inboards +inborn +inbound +inbounded +inbounding +inbounds +inbreathe +inbreathed +inbreathes +inbreathing +inbred +inbreds +inbreed +inbreeding +inbreedings +inbreeds +inbuilt +inburst +inbursts +inby +inbye +incage +incaged +incages +incaging +incalculabilities +incalculability +incalculable +incalculably +incalescence +incalescences +incalescent +incandesce +incandesced +incandescence +incandescences +incandescent +incandescently +incandescents +incandesces +incandescing +incant +incantation +incantational +incantations +incantatory +incanted +incanting +incants +incapabilities +incapability +incapable +incapableness +incapablenesses +incapably +incapacitate +incapacitated +incapacitates +incapacitating +incapacitation +incapacitations +incapacities +incapacity +incarcerate +incarcerated +incarcerates +incarcerating +incarceration +incarcerations +incardination +incardinations +incarnadine +incarnadined +incarnadines +incarnadining +incarnate +incarnated +incarnates +incarnating +incarnation +incarnations +incase +incased +incases +incasing +incaution +incautions +incautious +incautiously +incautiousness +incautiousnesses +incendiaries +incendiarism +incendiarisms +incendiary +incense +incensed +incenses +incensing +incenter +incenters +incentive +incentives +incept +incepted +incepting +inception +inceptions +inceptive +inceptively +inceptives +inceptor +inceptors +incepts +incertitude +incertitudes +incessancies +incessancy +incessant +incessantly +incest +incests +incestuous +incestuously +incestuousness +incestuousnesses inch +inched +inches +inching +inchmeal +inchoate +inchoately +inchoateness +inchoatenesses +inchoative +inchoatively +inchoatives +inchworm +inchworms +incidence +incidences incident +incidental +incidentally +incidentals +incidents +incinerate +incinerated +incinerates +incinerating +incineration +incinerations +incinerator +incinerators +incipience +incipiences +incipiencies +incipiency +incipient +incipiently +incipit +incipits +incisal +incise +incised +incises +incising +incision +incisions +incisive +incisively +incisiveness +incisivenesses +incisor +incisors +incisory +incisure +incisures +incitant +incitants +incitation +incitations +incite +incited +incitement +incitements +inciter +inciters +incites +inciting +incivil +incivilities +incivility +inclasp +inclasped +inclasping +inclasps +inclemencies +inclemency +inclement +inclemently +inclinable +inclination +inclinational +inclinations +incline +inclined +incliner +incliners +inclines +inclining +inclinings +inclinometer +inclinometers +inclip +inclipped +inclipping +inclips +inclose +inclosed +incloser +inclosers +incloses +inclosing +inclosure +inclosures +includable include +included +includes +includible +including +inclusion +inclusions +inclusive +inclusively +inclusiveness +inclusivenesses +incoercible +incog +incogitant +incognita +incognitas +incognito +incognitos +incognizance +incognizances +incognizant +incogs +incoherence +incoherences +incoherent +incoherently +incombustibilities +incombustibility +incombustible +incombustibles income +incomer +incomers +incomes +incoming +incomings +incommensurabilities +incommensurability +incommensurable +incommensurables +incommensurably +incommensurate +incommode +incommoded +incommodes +incommoding +incommodious +incommodiously +incommodiousness +incommodiousnesses +incommodities +incommodity +incommunicabilities +incommunicability +incommunicable +incommunicably +incommunicado +incommunicative +incommutable +incommutably +incomparabilities +incomparability +incomparable +incomparably +incompatibilities +incompatibility +incompatible +incompatibles +incompatibly +incompetence +incompetences +incompetencies +incompetency +incompetent +incompetently +incompetents +incomplete +incompletely +incompleteness +incompletenesses +incompliant +incomprehensibilities +incomprehensibility +incomprehensible +incomprehensibleness +incomprehensiblenesses +incomprehensibly +incomprehension +incomprehensions +incompressible +incomputable +incomputably +inconceivabilities +inconceivability +inconceivable +inconceivableness +inconceivablenesses +inconceivably +inconcinnities +inconcinnity +inconclusive +inconclusively +inconclusiveness +inconclusivenesses +incondite +inconformities +inconformity +incongruence +incongruences +incongruent +incongruently +incongruities +incongruity +incongruous +incongruously +incongruousness +incongruousnesses +inconnu +inconnus +inconscient +inconsecutive +inconsequence +inconsequences +inconsequent +inconsequential +inconsequentialities +inconsequentiality +inconsequentially +inconsequently +inconsiderable +inconsiderableness +inconsiderablenesses +inconsiderably +inconsiderate +inconsiderately +inconsiderateness +inconsideratenesses +inconsideration +inconsiderations +inconsistence +inconsistences +inconsistencies +inconsistency +inconsistent +inconsistently +inconsolable +inconsolableness +inconsolablenesses +inconsolably +inconsonance +inconsonances +inconsonant +inconspicuous +inconspicuously +inconspicuousness +inconspicuousnesses +inconstancies +inconstancy +inconstant +inconstantly +inconsumable +inconsumably +incontestabilities +incontestability +incontestable +incontestably +incontinence +incontinences +incontinencies +incontinency +incontinent +incontinently +incontrollable +incontrovertible +incontrovertibly +inconvenience +inconvenienced +inconveniences +inconveniencies +inconveniencing +inconveniency +inconvenient +inconveniently +inconvertibilities +inconvertibility +inconvertible +inconvertibly +inconvincible +incony +incoordination +incoordinations +incorporable +incorporate +incorporated +incorporates +incorporating +incorporation +incorporations +incorporative +incorporator +incorporators +incorporeal +incorporeally +incorporeities +incorporeity +incorpse +incorpsed +incorpses +incorpsing +incorrect +incorrectly +incorrectness +incorrectnesses +incorrigibilities +incorrigibility +incorrigible +incorrigibleness +incorrigiblenesses +incorrigibles +incorrigibly +incorrupt +incorrupted +incorruptibilities +incorruptibility +incorruptible +incorruptibles +incorruptibly +incorruption +incorruptions +incorruptly +incorruptness +incorruptnesses +increasable increase +increased +increaser +increasers +increases +increasing +increasingly +increate +incredibilities +incredibility +incredible +incredibleness +incrediblenesses +incredibly +incredulities +incredulity +incredulous +incredulously +increment +incremental +incrementalism +incrementalisms +incrementalist +incrementalists +incrementally +incremented +incrementing +increments +increscent +incriminate +incriminated +incriminates +incriminating +incrimination +incriminations +incriminatory +incross +incrossed +incrosses +incrossing +incrust +incrustation +incrustations +incrusted +incrusting +incrusts +incubate +incubated +incubates +incubating +incubation +incubations +incubative +incubator +incubators +incubatory +incubi +incubus +incubuses +incudal +incudate +incudes +inculcate +inculcated +inculcates +inculcating +inculcation +inculcations +inculcator +inculcators +inculpable +inculpate +inculpated +inculpates +inculpating +inculpation +inculpations +inculpatory +incult +incumbencies +incumbency +incumbent +incumbents +incumber +incumbered +incumbering +incumbers +incunable +incunables +incunabula +incunabulum +incur +incurable +incurables +incurably +incuriosities +incuriosity +incurious +incuriously +incuriousness +incuriousnesses +incurred +incurrence +incurrences +incurrent +incurring +incurs +incursion +incursions +incurvate +incurvated +incurvates +incurvating +incurvation +incurvations +incurvature +incurvatures +incurve +incurved +incurves +incurving +incus +incuse +incused +incuses +incusing +indaba +indabas +indagate +indagated +indagates +indagating +indagation +indagations +indagator +indagators +indamin +indamine +indamines +indamins +indebted +indebtedness +indebtednesses +indecencies +indecency +indecent +indecenter +indecentest +indecently +indecipherable +indecision +indecisions +indecisive +indecisively +indecisiveness +indecisivenesses +indeclinable +indecomposable +indecorous +indecorously +indecorousness +indecorousnesses +indecorum +indecorums indeed +indefatigabilities +indefatigability +indefatigable +indefatigableness +indefatigablenesses +indefatigably +indefeasibilities +indefeasibility +indefeasible +indefeasibly +indefectibilities +indefectibility +indefectible +indefectibly +indefensibilities +indefensibility +indefensible +indefensibly +indefinabilities +indefinability +indefinable +indefinableness +indefinablenesses +indefinables +indefinably +indefinite +indefinitely +indefiniteness +indefinitenesses +indefinites +indehiscence +indehiscences +indehiscent +indelibilities +indelibility +indelible +indelibly +indelicacies +indelicacy +indelicate +indelicately +indelicateness +indelicatenesses +indemnification +indemnifications +indemnified +indemnifier +indemnifiers +indemnifies +indemnify +indemnifying +indemnities +indemnity +indemonstrable +indemonstrably +indene +indenes +indent +indentation +indentations +indented +indenter +indenters +indenting +indention +indentions +indentor +indentors +indents +indenture +indentured +indentures +indenturing independence +independences +independencies +independency independent +independently +independents +indescribable +indescribableness +indescribablenesses +indescribably +indestructibilities +indestructibility +indestructible +indestructibleness +indestructiblenesses +indestructibly +indeterminable +indeterminably +indeterminacies +indeterminacy +indeterminate +indeterminately +indeterminateness +indeterminatenesses +indetermination +indeterminations +indeterminism +indeterminisms +indeterminist +indeterministic +indeterminists +indevout +index +indexation +indexations +indexed +indexer +indexers +indexes +indexical +indexicals +indexing +indexings +indican +indicans +indicant +indicants indicate +indicated +indicates +indicating +indication +indicational +indications +indicative +indicatively +indicatives +indicator +indicators +indicatory +indices +indicia +indicias +indicium +indiciums +indict +indictable +indicted +indictee +indictees +indicter +indicters +indicting +indiction +indictions +indictment +indictments +indictor +indictors +indicts +indie +indies +indifference +indifferences +indifferencies +indifferency +indifferent +indifferentism +indifferentisms +indifferentist +indifferentists +indifferently +indigen +indigence +indigences +indigene +indigenes +indigenization +indigenizations +indigenize +indigenized +indigenizes +indigenizing +indigenous +indigenously +indigenousness +indigenousnesses +indigens +indigent +indigents +indigested +indigestibilities +indigestibility +indigestible +indigestibles +indigestion +indigestions +indign +indignant +indignantly +indignation +indignations +indignities +indignity +indignly +indigo +indigoes +indigoid +indigoids +indigos +indigotin +indigotins +indirect +indirection +indirections +indirectly +indirectness +indirectnesses +indiscernible +indisciplinable +indiscipline +indisciplined +indisciplines +indiscoverable +indiscreet +indiscreetly +indiscreetness +indiscreetnesses +indiscretion +indiscretions +indiscriminate +indiscriminately +indiscriminateness +indiscriminatenesses +indiscriminating +indiscriminatingly +indiscrimination +indiscriminations +indispensabilities +indispensability +indispensable +indispensableness +indispensablenesses +indispensables +indispensably +indispose +indisposed +indisposes +indisposing +indisposition +indispositions +indisputable +indisputableness +indisputablenesses +indisputably +indissociable +indissociably +indissolubilities +indissolubility +indissoluble +indissolubleness +indissolublenesses +indissolubly +indistinct +indistinctive +indistinctly +indistinctness +indistinctnesses +indistinguishabilities +indistinguishability +indistinguishable +indistinguishableness +indistinguishablenesses +indistinguishably +indite +indited +inditer +inditers +indites +inditing +indium +indiums +individual +individualise +individualised +individualises +individualising +individualism +individualisms +individualist +individualistic +individualistically +individualists +individualities +individuality +individualization +individualizations +individualize +individualized +individualizes +individualizing +individually +individuals +individuate +individuated +individuates +individuating +individuation +individuations +indivisibilities +indivisibility +indivisible +indivisibles +indivisibly +indocile +indocilities +indocility +indoctrinate +indoctrinated +indoctrinates +indoctrinating +indoctrination +indoctrinations +indoctrinator +indoctrinators +indol +indole +indolence +indolences +indolent +indolently +indoles +indols +indomethacin +indomethacins +indomitabilities +indomitability +indomitable +indomitableness +indomitablenesses +indomitably +indoor +indoors +indophenol +indophenols +indorse +indorsed +indorsee +indorsees +indorsement +indorsements +indorser +indorsers +indorses +indorsing +indorsor +indorsors +indow +indowed +indowing +indows +indoxyl +indoxyls +indraft +indrafts +indrawn +indri +indris +indubitabilities +indubitability +indubitable +indubitableness +indubitablenesses +indubitably +induce +induced +inducement +inducements +inducer +inducers +induces +inducibilities +inducibility +inducible +inducing +induct +inductance +inductances +inducted +inductee +inductees +inducting +induction +inductions +inductive +inductively +inductor +inductors +inducts +indue +indued +indues +induing +indulge +indulged +indulgence +indulgences +indulgent +indulgently +indulger +indulgers +indulges +indulging +indulin +induline +indulines +indulins +indult +indults +indurate +indurated +indurates +indurating +induration +indurations +indurative +indusia +indusial +indusium +industrial +industrialise +industrialised +industrialises +industrialising +industrialism +industrialisms +industrialist +industrialists +industrialization +industrializations +industrialize +industrialized +industrializes +industrializing +industrially +industrials +industries +industrious +industriously +industriousness +industriousnesses industry +indwell +indweller +indwellers +indwelling +indwells +indwelt +inearth +inearthed +inearthing +inearths +inebriant +inebriants +inebriate +inebriated +inebriates +inebriating +inebriation +inebriations +inebrieties +inebriety +inedible +inedita +inedited +ineducabilities +ineducability +ineducable +ineffabilities +ineffability +ineffable +ineffableness +ineffablenesses +ineffably +ineffaceabilities +ineffaceability +ineffaceable +ineffaceably +ineffective +ineffectively +ineffectiveness +ineffectivenesses +ineffectual +ineffectualities +ineffectuality +ineffectually +ineffectualness +ineffectualnesses +inefficacies +inefficacious +inefficaciously +inefficaciousness +inefficaciousnesses +inefficacy +inefficiencies +inefficiency +inefficient +inefficiently +inefficients +inegalitarian +inelastic +inelasticities +inelasticity +inelegance +inelegances +inelegant +inelegantly +ineligibilities +ineligibility +ineligible +ineligibles +ineloquent +ineloquently +ineluctabilities +ineluctability +ineluctable +ineluctably +ineludible +inenarrable +inept +ineptitude +ineptitudes +ineptly +ineptness +ineptnesses +inequalities +inequality +inequitable +inequitably +inequities +inequity +inequivalve +inequivalved +ineradicabilities +ineradicability +ineradicable +ineradicably +inerrancies +inerrancy +inerrant +inert +inertia +inertiae +inertial +inertially +inertias +inertly +inertness +inertnesses +inerts +inescapable +inescapably +inessential +inessentials +inestimable +inestimably +inevitabilities +inevitability +inevitable +inevitableness +inevitablenesses +inevitably +inexact +inexactitude +inexactitudes +inexactly +inexactness +inexactnesses +inexcusable +inexcusableness +inexcusablenesses +inexcusably +inexhaustibilities +inexhaustibility +inexhaustible +inexhaustibleness +inexhaustiblenesses +inexhaustibly +inexistence +inexistences +inexistent +inexorabilities +inexorability +inexorable +inexorableness +inexorablenesses +inexorably +inexpedience +inexpediences +inexpediencies +inexpediency +inexpedient +inexpediently +inexpensive +inexpensively +inexpensiveness +inexpensivenesses +inexperience +inexperienced +inexperiences +inexpert +inexpertly +inexpertness +inexpertnesses +inexperts +inexpiable +inexpiably +inexplainable +inexplicabilities +inexplicability +inexplicable +inexplicableness +inexplicablenesses +inexplicably +inexplicit +inexpressibilities +inexpressibility +inexpressible +inexpressibleness +inexpressiblenesses +inexpressibly +inexpressive +inexpressively +inexpressiveness +inexpressivenesses +inexpugnable +inexpugnableness +inexpugnablenesses +inexpugnably +inexpungible +inextinguishable +inextinguishably +inextricabilities +inextricability +inextricable +inextricably +infall +infallibilities +infallibility +infallible +infallibly +infalling +infalls +infamies +infamous +infamously +infamy +infancies +infancy +infant +infanta +infantas +infante +infantes +infanticidal +infanticide +infanticides +infantile +infantilism +infantilisms +infantilities +infantility +infantilization +infantilizations +infantilize +infantilized +infantilizes +infantilizing +infantine +infantries +infantry +infantryman +infantrymen +infants +infarct +infarcted +infarction +infarctions +infarcts +infare +infares +infatuate +infatuated +infatuates +infatuating +infatuation +infatuations +infauna +infaunae +infaunal +infaunas +infeasibilities +infeasibility +infeasible +infect +infected +infecter +infecters +infecting +infection +infections +infectious +infectiously +infectiousness +infectiousnesses +infective +infectivities +infectivity +infector +infectors +infects +infecund +infelicities +infelicitous +infelicitously +infelicity +infeoff +infeoffed +infeoffing +infeoffs +infer +inferable +inference +inferences +inferential +inferentially +inferior +inferiorities +inferiority +inferiorly +inferiors +infernal +infernally +inferno +infernos +inferred +inferrer +inferrers +inferrible +inferring +infers +infertile +infertilities +infertility +infest +infestant +infestants +infestation +infestations +infested +infester +infesters +infesting +infests +infibulate +infibulated +infibulates +infibulating +infibulation +infibulations +infidel +infidelities +infidelity +infidels +infield +infielder +infielders +infields +infight +infighter +infighters +infighting +infightings +infights +infiltrate +infiltrated +infiltrates +infiltrating +infiltration +infiltrations +infiltrative +infiltrator +infiltrators +infinite +infinitely +infiniteness +infinitenesses +infinites +infinitesimal +infinitesimally +infinitesimals +infinities +infinitival +infinitive +infinitively +infinitives +infinitude +infinitudes +infinity +infirm +infirmaries +infirmary +infirmed +infirming +infirmities +infirmity +infirmly +infirms +infix +infixation +infixations +infixed +infixes +infixing +infixion +infixions +inflame +inflamed +inflamer +inflamers +inflames +inflaming +inflammabilities +inflammability +inflammable +inflammableness +inflammablenesses +inflammables +inflammably +inflammation +inflammations +inflammatorily +inflammatory +inflatable +inflatables +inflate +inflated +inflater +inflaters +inflates +inflating +inflation +inflationary +inflationism +inflationisms +inflationist +inflationists +inflations +inflator +inflators +inflect +inflectable +inflected +inflecting +inflection +inflectional +inflectionally +inflections +inflective +inflects +inflexed +inflexibilities +inflexibility +inflexible +inflexibleness +inflexiblenesses +inflexibly +inflexion +inflexions +inflict +inflicted +inflicter +inflicters +inflicting +infliction +inflictions +inflictive +inflictor +inflictors +inflicts +inflight +inflorescence +inflorescences +inflow +inflows influence +influenceable +influenced +influences +influencing +influent +influential +influentially +influentials +influents +influenza +influenzal +influenzas +influx +influxes +info +infold +infolded +infolder +infolders +infolding +infolds +infomercial +infomercials inform +informal +informalities +informality +informally +informant +informants +informatics information +informational +informationally +informations +informative +informatively +informativeness +informativenesses +informatorily +informatory +informed +informedly +informer +informers +informing +informs +infos +infotainment +infotainments +infought +infra +infract +infracted +infracting +infraction +infractions +infracts +infrahuman +infrahumans +infrangibilities +infrangibility +infrangible +infrangibly +infrared +infrareds +infrasonic +infraspecific +infrastructure +infrastructures +infrequence +infrequences +infrequencies +infrequency +infrequent +infrequently +infringe +infringed +infringement +infringements +infringer +infringers +infringes +infringing +infrugal +infundibula +infundibular +infundibuliform +infundibulum +infuriate +infuriated +infuriates +infuriating +infuriatingly +infuriation +infuriations +infuse +infused +infuser +infusers +infuses +infusibilities +infusibility +infusible +infusibleness +infusiblenesses +infusing +infusion +infusions +infusive +infusorian +infusorians +ingate +ingates +ingather +ingathered +ingathering +ingatherings +ingathers +ingenious +ingeniously +ingeniousness +ingeniousnesses +ingenue +ingenues +ingenuities +ingenuity +ingenuous +ingenuously +ingenuousness +ingenuousnesses +ingest +ingesta +ingested +ingestible +ingesting +ingestion +ingestions +ingestive +ingests +ingle +inglenook +inglenooks +ingles +inglorious +ingloriously +ingloriousness +ingloriousnesses +ingoing +ingot +ingoted +ingoting +ingots +ingraft +ingrafted +ingrafting +ingrafts +ingrain +ingrained +ingrainedly +ingraining +ingrains +ingrate +ingrates +ingratiate +ingratiated +ingratiates +ingratiating +ingratiatingly +ingratiation +ingratiations +ingratiatory +ingratitude +ingratitudes +ingredient +ingredients +ingress +ingresses +ingression +ingressions +ingressive +ingressiveness +ingressivenesses +ingressives +ingroup +ingroups +ingrowing +ingrown +ingrownness +ingrownnesses +ingrowth +ingrowths +inguinal +ingulf +ingulfed +ingulfing +ingulfs +ingurgitate +ingurgitated +ingurgitates +ingurgitating +ingurgitation +ingurgitations +inhabit +inhabitable +inhabitancies +inhabitancy +inhabitant +inhabitants +inhabitation +inhabitations +inhabited +inhabiter +inhabiters +inhabiting +inhabits +inhalant +inhalants +inhalation +inhalational +inhalations +inhalator +inhalators +inhale +inhaled +inhaler +inhalers +inhales +inhaling +inharmonic +inharmonies +inharmonious +inharmoniously +inharmoniousness +inharmoniousnesses +inharmony +inhaul +inhauler +inhaulers +inhauls +inhere +inhered +inherence +inherences +inherent +inherently +inheres +inhering +inherit +inheritabilities +inheritability +inheritable +inheritableness +inheritablenesses +inheritance +inheritances +inherited +inheriting +inheritor +inheritors +inheritress +inheritresses +inheritrices +inheritrix +inheritrixes +inherits +inhesion +inhesions +inhibin +inhibins +inhibit +inhibited +inhibiting +inhibition +inhibitions +inhibitive +inhibitor +inhibitors +inhibitory +inhibits +inholding +inholdings +inhomogeneities +inhomogeneity +inhomogeneous +inhospitable +inhospitableness +inhospitablenesses +inhospitably +inhospitalities +inhospitality +inhuman +inhumane +inhumanely +inhumanities +inhumanity +inhumanly +inhumanness +inhumannesses +inhumation +inhumations +inhume +inhumed +inhumer +inhumers +inhumes +inhuming +inia +inimical +inimically +inimitable +inimitableness +inimitablenesses +inimitably +inion +iniquities +iniquitous +iniquitously +iniquitousness +iniquitousnesses +iniquity initial +initialed +initialing +initialism +initialisms +initialization +initializations +initialize +initialized +initializes +initializing +initialled +initialling +initially +initialness +initialnesses +initials +initiate +initiated +initiates +initiating +initiation +initiations +initiative +initiatives +initiator +initiators +initiatory +inject +injectable +injectables +injectant +injectants +injected +injecting +injection +injections +injective +injector +injectors +injects +injudicious +injudiciously +injudiciousness +injudiciousnesses +injunction +injunctions +injunctive injure +injured +injurer +injurers +injures +injuries +injuring +injurious +injuriously +injuriousness +injuriousnesses injury +injustice +injustices ink +inkberries +inkberry +inkblot +inkblots +inked +inker +inkers +inkhorn +inkhorns +inkier +inkiest +inkiness +inkinesses +inking +inkjet +inkle +inkles +inkless +inklike +inkling +inklings +inkpot +inkpots +inks +inkstand +inkstands +inkstone +inkstones +inkwell +inkwells +inkwood +inkwoods +inky +inlace +inlaced +inlaces +inlacing +inlaid +inland +inlander +inlanders +inlands +inlay +inlayer +inlayers +inlaying +inlays +inlet +inlets +inletting +inlier +inliers +inly +inmate +inmates +inmesh +inmeshed +inmeshes +inmeshing +inmost inn +innards +innate +innately +innateness +innatenesses +inned +inner +innerly +innermost +innermosts +inners +innersole +innersoles +innerspring +innervate +innervated +innervates +innervating +innervation +innervations +innerve +innerved +innerves +innerving +inning +innings +innkeeper +innkeepers +innless +innocence +innocences +innocencies +innocency innocent +innocenter +innocentest +innocently +innocents +innocuous +innocuously +innocuousness +innocuousnesses +innominate +innovate +innovated +innovates +innovating +innovation +innovational +innovations +innovative +innovatively +innovativeness +innovativenesses +innovator +innovators +innovatory +inns +innuendo +innuendoed +innuendoes +innuendoing +innuendos +innumerable +innumerably +innumeracies +innumeracy +innumerate +innumerates +innumerous +inobservance +inobservances +inobservant +inocula +inoculant +inoculants +inoculate +inoculated +inoculates +inoculating +inoculation +inoculations +inoculative +inoculator +inoculators +inoculum +inoculums +inoffensive +inoffensively +inoffensiveness +inoffensivenesses +inoperable +inoperative +inoperativeness +inoperativenesses +inoperculate +inoperculates +inopportune +inopportunely +inopportuneness +inopportunenesses +inordinate +inordinately +inordinateness +inordinatenesses +inorganic +inorganically +inosculate +inosculated +inosculates +inosculating +inosculation +inosculations +inosite +inosites +inositol +inositols +inotropic +inpatient +inpatients +inphase +inpour +inpoured +inpouring +inpourings +inpours +input +inputs +inputted +inputting +inquest +inquests +inquiet +inquieted +inquieting +inquiets +inquietude +inquietudes +inquiline +inquilines +inquire +inquired +inquirer +inquirers +inquires +inquiries +inquiring +inquiringly +inquiry +inquisition +inquisitional +inquisitions +inquisitive +inquisitively +inquisitiveness +inquisitivenesses +inquisitor +inquisitorial +inquisitorially +inquisitors +inro +inroad +inroads +inrush +inrushes +ins +insalubrious +insalubrities +insalubrity +insane +insanely +insaneness +insanenesses +insaner +insanest +insanitary +insanitation +insanitations +insanities +insanity +insatiabilities +insatiability +insatiable +insatiableness +insatiablenesses +insatiably +insatiate +insatiately +insatiateness +insatiatenesses +inscape +inscapes +inscribe +inscribed +inscriber +inscribers +inscribes +inscribing +inscription +inscriptional +inscriptions +inscriptive +inscriptively +inscroll +inscrolled +inscrolling +inscrolls +inscrutabilities +inscrutability +inscrutable +inscrutableness +inscrutablenesses +inscrutably +insculp +insculped +insculping +insculps +inseam +inseams insect +insectan +insectaries +insectary +insecticidal +insecticidally +insecticide +insecticides +insectile +insectivore +insectivores +insectivorous +insects +insecure +insecurely +insecureness +insecurenesses +insecurities +insecurity +inselberg +inselberge +inselbergs +inseminate +inseminated +inseminates +inseminating +insemination +inseminations +inseminator +inseminators +insensate +insensately +insensibilities +insensibility +insensible +insensibleness +insensiblenesses +insensibly +insensitive +insensitively +insensitiveness +insensitivenesses +insensitivities +insensitivity +insentience +insentiences +insentient +inseparabilities +inseparability +inseparable +inseparableness +inseparablenesses +inseparables +inseparably insert +inserted +inserter +inserters +inserting +insertion +insertional +insertions +inserts +inset +insets +insetted +insetter +insetters +insetting +insheath +insheathed +insheathing +insheaths +inshore +inshrine +inshrined +inshrines +inshrining inside +insider +insiders +insides +insidious +insidiously +insidiousness +insidiousnesses +insight +insightful +insightfully +insights +insigne +insignia +insignias +insignificance +insignificances +insignificancies +insignificancy +insignificant +insignificantly +insincere +insincerely +insincerities +insincerity +insinuate +insinuated +insinuates +insinuating +insinuatingly +insinuation +insinuations +insinuative +insinuator +insinuators +insipid +insipidities +insipidity +insipidly insist +insisted +insistence +insistences +insistencies +insistency +insistent +insistently +insister +insisters +insisting +insists +insnare +insnared +insnarer +insnarers +insnares +insnaring +insobrieties +insobriety +insociabilities +insociability +insociable +insociably +insofar +insolate +insolated +insolates +insolating +insolation +insolations +insole +insolence +insolences +insolent +insolently +insolents +insoles +insolubilities +insolubility +insolubilization +insolubilizations +insolubilize +insolubilized +insolubilizes +insolubilizing +insoluble +insolubleness +insolublenesses +insolubles +insolubly +insolvable +insolvably +insolvencies +insolvency +insolvent +insolvents +insomnia +insomniac +insomniacs +insomnias +insomuch +insouciance +insouciances +insouciant +insouciantly +insoul +insouled +insouling +insouls +inspan +inspanned +inspanning +inspans inspect +inspected +inspecting +inspection +inspections +inspective +inspector +inspectorate +inspectorates +inspectors +inspectorship +inspectorships +inspects +insphere +insphered +inspheres +insphering +inspiration +inspirational +inspirationally +inspirations +inspirator +inspirators +inspiratory inspire +inspired +inspirer +inspirers +inspires +inspiring +inspiringly +inspirit +inspirited +inspiriting +inspiritingly +inspirits +inspissate +inspissated +inspissates +inspissating +inspissation +inspissations +inspissator +inspissators +instabilities +instability +instable +instal +install +installation +installations +installed +installer +installers +installing +installment +installments +installs +instalment +instalments +instals +instance +instanced +instances +instancies +instancing +instancy instant +instantaneities +instantaneity +instantaneous +instantaneously +instantaneousness +instantaneousnesses +instanter +instantiate +instantiated +instantiates +instantiating +instantiation +instantiations +instantly +instantness +instantnesses +instants +instar +instarred +instarring +instars +instate +instated +instates +instating +instauration +instaurations instead +instep +insteps +instigate +instigated +instigates +instigating +instigation +instigations +instigative +instigator +instigators +instil +instill +instillation +instillations +instilled +instiller +instillers +instilling +instillment +instillments +instills +instils +instinct +instinctive +instinctively +instincts +instinctual +instinctually institute +instituted +instituter +instituters +institutes +instituting institution +institutional +institutionalise +institutionalised +institutionalises +institutionalising +institutionalism +institutionalisms +institutionalist +institutionalists +institutionalization +institutionalizations +institutionalize +institutionalized +institutionalizes +institutionalizing +institutionally +institutions +institutor +institutors +instroke +instrokes instruct +instructed +instructing instruction +instructional +instructions +instructive +instructively +instructiveness +instructivenesses +instructor +instructors +instructorship +instructorships +instructress +instructresses +instructs instrument +instrumental +instrumentalism +instrumentalisms +instrumentalist +instrumentalists +instrumentalities +instrumentality +instrumentally +instrumentals +instrumentation +instrumentations +instrumented +instrumenting +instruments +insubordinate +insubordinately +insubordinates +insubordination +insubordinations +insubstantial +insubstantialities +insubstantiality +insufferable +insufferableness +insufferablenesses +insufferably +insufficiencies +insufficiency +insufficient +insufficiently +insufflate +insufflated +insufflates +insufflating +insufflation +insufflations +insufflator +insufflators +insulant +insulants +insular +insularism +insularisms +insularities +insularity +insularly +insulars +insulate +insulated +insulates +insulating +insulation +insulations +insulator +insulators +insulin +insulins +insult +insulted +insulter +insulters +insulting +insultingly +insults +insuperable +insuperably +insupportable +insupportably +insuppressible +insurabilities +insurability +insurable insurance +insurances +insurant +insurants insure +insured +insureds +insurer +insurers +insures +insurgence +insurgences +insurgencies +insurgency +insurgent +insurgently +insurgents +insuring +insurmountable +insurmountably +insurrection +insurrectional +insurrectionaries +insurrectionary +insurrectionist +insurrectionists +insurrections +insusceptibilities +insusceptibility +insusceptible +insusceptibly +inswathe +inswathed +inswathes +inswathing +inswept +intact +intactness +intactnesses +intagli +intaglio +intaglioed +intaglioing +intaglios +intake +intakes +intangibilities +intangibility +intangible +intangibleness +intangiblenesses +intangibles +intangibly +intarsia +intarsias +integer +integers +integrabilities +integrability +integrable +integral +integralities +integrality +integrally +integrals +integrand +integrands +integrate +integrated +integrates +integrating +integration +integrationist +integrationists +integrations +integrative +integrator +integrators +integrities +integrity +integument +integumentary +integuments +intellect +intellection +intellections +intellective +intellectively +intellects +intellectual +intellectualism +intellectualisms +intellectualist +intellectualistic +intellectualists +intellectualities +intellectuality +intellectualization +intellectualizations +intellectualize +intellectualized +intellectualizer +intellectualizers +intellectualizes +intellectualizing +intellectually +intellectualness +intellectualnesses +intellectuals intelligence +intelligencer +intelligencers +intelligences +intelligent +intelligential +intelligently +intelligentsia +intelligentsias +intelligibilities +intelligibility +intelligible +intelligibleness +intelligiblenesses +intelligibly +intemperance +intemperances +intemperate +intemperately +intemperateness +intemperatenesses intend +intendance +intendances +intendant +intendants +intended +intendedly +intendeds +intender +intenders +intending +intendment +intendments +intends +intenerate +intenerated +intenerates +intenerating +inteneration +intenerations +intense +intensely +intenseness +intensenesses +intenser +intensest +intensification +intensifications +intensified +intensifier +intensifiers +intensifies +intensify +intensifying +intension +intensional +intensionalities +intensionality +intensionally +intensions +intensities +intensity +intensive +intensively +intensiveness +intensivenesses +intensives +intent intention +intentional +intentionalities +intentionality +intentionally +intentions +intently +intentness +intentnesses +intents +inter +interabang +interabangs +interact +interactant +interactants +interacted +interacting +interaction +interactional +interactions +interactive +interactively +interacts +interage +interagency +interallelic +interallied +interanimation +interanimations +interannual +interassociation +interassociations +interatomic +interavailabilities +interavailability +interbank +interbasin +interbed +interbedded +interbedding +interbeds +interbehavior +interbehavioral +interbehaviors +interborough +interboroughs +interbranch +interbred +interbreed +interbreeding +interbreeds +intercalary +intercalate +intercalated +intercalates +intercalating +intercalation +intercalations +intercalibration +intercalibrations +intercampus +intercaste +intercede +interceded +interceder +interceders +intercedes +interceding +intercell +intercellular +intercensal +intercept +intercepted +intercepter +intercepters +intercepting +interception +interceptions +interceptor +interceptors +intercepts +intercession +intercessional +intercessions +intercessor +intercessors +intercessory +interchain +interchained +interchaining +interchains +interchange +interchangeabilities +interchangeability +interchangeable +interchangeableness +interchangeablenesses +interchangeably +interchanged +interchanger +interchangers +interchanges +interchanging +interchannel +interchromosomal +interchurch +intercity +interclan +interclass +interclub +intercluster +intercoastal +intercollegiate +intercolonial +intercolumniation +intercolumniations +intercom +intercommunal +intercommunicate +intercommunicated +intercommunicates +intercommunicating +intercommunication +intercommunications +intercommunion +intercommunions +intercommunities +intercommunity +intercompany +intercompare +intercompared +intercompares +intercomparing +intercomparison +intercomparisons +intercomprehensibilities +intercomprehensibility +intercoms +interconnect +interconnected +interconnectedness +interconnectednesses +interconnecting +interconnection +interconnections +interconnects +intercontinental +interconversion +interconversions +interconvert +interconverted +interconvertibilities +interconvertibility +interconvertible +interconverting +interconverts +intercooler +intercoolers +intercorporate +intercorrelate +intercorrelated +intercorrelates +intercorrelating +intercorrelation +intercorrelations +intercortical +intercostal +intercostals +intercountry +intercounty +intercouple +intercourse +intercourses +intercrater +intercrop +intercropped +intercropping +intercrops +intercross +intercrossed +intercrosses +intercrossing +intercrystalline +intercultural +interculturally +interculture +intercultures +intercurrent +intercut +intercuts +intercutting +interdealer +interdealers +interdenominational +interdental +interdentally +interdepartmental +interdepartmentally +interdepend +interdepended +interdependence +interdependences +interdependencies +interdependency +interdependent +interdependently +interdepending +interdepends +interdialectal +interdict +interdicted +interdicting +interdiction +interdictions +interdictive +interdictor +interdictors +interdictory +interdicts +interdiffuse +interdiffused +interdiffuses +interdiffusing +interdiffusion +interdiffusions +interdigitate +interdigitated +interdigitates +interdigitating +interdigitation +interdigitations +interdisciplinary +interdistrict +interdivisional +interdominion +interelectrode +interelectrodes +interelectron +interelectronic +interepidemic interest +interested +interestedly interesting +interestingly +interestingness +interestingnesses +interests +interethnic +interface +interfaced +interfaces +interfacial +interfacing +interfacings +interfaculties +interfaculty +interfaith +interfamilial +interfamily +interfere +interfered +interference +interferences +interferential +interferer +interferers +interferes +interfering +interferogram +interferograms +interferometer +interferometers +interferometric +interferometrically +interferometries +interferometry +interferon +interferons +interfertile +interfertilities +interfertility +interfiber +interfile +interfiled +interfiles +interfiling +interfirm +interflow +interfluve +interfluves +interfluvial +interfold +interfolded +interfolding +interfolds +interfraternity +interfuse +interfused +interfuses +interfusing +interfusion +interfusions +intergalactic +intergang +intergeneration +intergenerational +intergenerations +intergeneric +interglacial +interglacials +intergovernmental +intergradation +intergradational +intergradations +intergrade +intergraded +intergrades +intergrading +intergraft +intergrafted +intergrafting +intergrafts +intergranular +intergroup +intergrowth +intergrowths +interhemispheric +interim +interims +interindividual +interindustry +interinfluence +interinfluenced +interinfluences +interinfluencing +interinstitutional +interinvolve +interinvolved +interinvolves +interinvolving +interionic +interior +interiorise +interiorised +interiorises +interiorising +interiorities +interiority +interiorization +interiorizations +interiorize +interiorized +interiorizes +interiorizing +interiorly +interiors +interisland +interject +interjected +interjecting +interjection +interjectional +interjectionally +interjections +interjector +interjectors +interjectory +interjects +interjurisdictional +interknit +interknits +interknitted +interknitting +interlace +interlaced +interlacement +interlacements +interlaces +interlacing +interlacustrine +interlaid +interlaminar +interlap +interlapped +interlapping +interlaps +interlard +interlarded +interlarding +interlards +interlay +interlayer +interlayered +interlayering +interlayers +interlaying +interlays +interleave +interleaved +interleaves +interleaving +interlend +interlending +interlends +interlent +interleukin +interleukins +interlibrary +interline +interlinear +interlinearly +interlinears +interlineation +interlineations +interlined +interliner +interliners +interlines +interlining +interlinings +interlink +interlinked +interlinking +interlinks +interlobular +interlocal +interlock +interlocked +interlocking +interlocks +interlocutor +interlocutors +interlocutory +interlope +interloped +interloper +interlopers +interlopes +interloping +interlude +interludes +interlunar +interlunary +intermale +intermarginal +intermarriage +intermarriages +intermarried +intermarries +intermarry +intermarrying +intermeddle +intermeddled +intermeddler +intermeddlers +intermeddles +intermeddling +intermediacies +intermediacy +intermediaries +intermediary +intermediate +intermediated +intermediately +intermediateness +intermediatenesses +intermediates +intermediating +intermediation +intermediations +intermedin +intermedins +intermembrane +intermenstrual +interment +interments +intermesh +intermeshed +intermeshes +intermeshing +intermetallic +intermetallics +intermezzi +intermezzo +intermezzos +interminable +interminableness +interminablenesses +interminably +intermingle +intermingled +intermingles +intermingling +interministerial +intermission +intermissionless +intermissions +intermit +intermitotic +intermits +intermitted +intermittence +intermittences +intermittencies +intermittency +intermittent +intermittently +intermitter +intermitters +intermitting +intermix +intermixed +intermixes +intermixing +intermixture +intermixtures +intermodal +intermodulation +intermodulations +intermolecular +intermolecularly +intermont +intermontane +intermountain +intermural +intern +internal +internalise +internalised +internalises +internalising +internalities +internality +internalization +internalizations +internalize +internalized +internalizes +internalizing +internally +internals international -internet +internationalise +internationalised +internationalises +internationalising +internationalism +internationalisms +internationalist +internationalists +internationalities +internationality +internationalization +internationalizations +internationalize +internationalized +internationalizes +internationalizing +internationally +internationals +interne +internecine +interned +internee +internees +internes +interneuron +interneuronal +interneurons +interning +internist +internists +internment +internments +internodal +internode +internodes +interns +internship +internships +internuclear +internucleon +internucleonic +internucleotide +internuncial +internuncio +internuncios +interobserver +interobservers +interocean +interoceanic +interoceptive +interoceptor +interoceptors +interoffice +interoperabilities +interoperability +interoperable +interoperative +interoperatives +interorbital +interorgan +interorganizational +interpandemic +interparish +interparochial +interparoxysmal +interparticle +interparty +interpellate +interpellated +interpellates +interpellating +interpellation +interpellations +interpellator +interpellators +interpenetrate +interpenetrated +interpenetrates +interpenetrating +interpenetration +interpenetrations +interperceptual +interpermeate +interpermeated +interpermeates +interpermeating +interpersonal +interpersonally +interphalangeal +interphase +interphases +interplanetary +interplant +interplanted +interplanting +interplants +interplay +interplayed +interplaying +interplays +interplead +interpleaded +interpleader +interpleaders +interpleading +interpleads +interpled +interpluvial +interpoint +interpoints +interpolate +interpolated +interpolates +interpolating +interpolation +interpolations +interpolative +interpolator +interpolators +interpopulation +interpopulational +interpose +interposed +interposer +interposers +interposes +interposing +interposition +interpositions +interpret +interpretabilities +interpretability +interpretable +interpretation +interpretational +interpretations +interpretative +interpretatively +interpreted +interpreter +interpreters +interpreting +interpretive +interpretively +interprets +interprofessional +interprovincial +interproximal +interpsychic +interpupillary +interracial +interracially +interred +interreges +interregional +interregna +interregnum +interregnums +interrelate +interrelated +interrelatedly +interrelatedness +interrelatednesses +interrelates +interrelating +interrelation +interrelations +interrelationship +interrelationships +interreligious +interrenal +interrex +interring +interrobang +interrobangs +interrogate +interrogated +interrogatee +interrogatees +interrogates +interrogating +interrogation +interrogational +interrogations +interrogative +interrogatively +interrogatives +interrogator +interrogatories +interrogators +interrogatory +interrogee +interrogees +interrow interrupt +interrupted +interrupter +interrupters +interruptible +interrupting +interruption +interruptions +interruptive +interruptor +interruptors +interrupts +inters +interscholastic +interschool +interschools +intersect +intersected +intersecting +intersection +intersectional +intersections +intersects +intersegment +intersegmental +intersegments +intersensory +interservice +intersession +intersessions +intersex +intersexes +intersexual +intersexualities +intersexuality +intersexually +intersocietal +intersociety +interspace +interspaced +interspaces +interspacing +interspecies +interspecific +intersperse +interspersed +intersperses +interspersing +interspersion +interspersions +interstadial +interstadials +interstage +interstate +interstates +interstation +interstellar +intersterile +intersterilities +intersterility +interstice +interstices +interstimulation +interstimulations +interstimuli +interstimulus +interstitial +interstitially +interstrain +interstrains +interstrand +interstrands +interstratification +interstratifications +interstratified +interstratifies +interstratify +interstratifying +intersubjective +intersubjectively +intersubjectivities +intersubjectivity +intersubstitutabilities +intersubstitutability +intersubstitutable +intersystem +interterm +interterminal +interterritorial +intertestamental +intertidal +intertidally +intertie +interties +intertill +intertillage +intertillages +intertilled +intertilling +intertills +intertranslatable +intertrial +intertribal +intertroop +intertropical +intertwine +intertwined +intertwinement +intertwinements +intertwines +intertwining +intertwist +intertwisted +intertwisting +intertwists +interunion +interunions +interunit +interuniversity +interurban +interurbans interval +intervale +intervales +intervalley +intervalleys +intervallic +intervalometer +intervalometers +intervals +intervene +intervened +intervener +interveners +intervenes +intervening +intervenor +intervenors +intervention +interventionism +interventionisms +interventionist +interventionists +interventions +interventricular +intervertebral interview +interviewed +interviewee +interviewees +interviewer +interviewers +interviewing +interviews +intervillage +intervisibilities +intervisibility +intervisible +intervisitation +intervisitations +intervocalic +intervocalically +interwar +interweave +interweaved +interweaves +interweaving +interwork +interworked +interworking +interworkings +interworks +interwove +interwoven +interwrought +interzonal +interzone +intestacies +intestacy +intestate +intestates +intestinal +intestinally +intestine +intestines +inthral +inthrall +inthralled +inthralling +inthralls +inthrals +inthrone +inthroned +inthrones +inthroning +inti +intima +intimacies +intimacy +intimae +intimal +intimas +intimate +intimated +intimately +intimateness +intimatenesses +intimater +intimaters +intimates +intimating +intimation +intimations +intime +intimidate +intimidated +intimidates +intimidating +intimidatingly +intimidation +intimidations +intimidator +intimidators +intimidatory +intimist +intimists +intinction +intinctions +intine +intines +intis +intitle +intitled +intitles +intitling +intitule +intituled +intitules +intituling into +intolerabilities +intolerability +intolerable +intolerableness +intolerablenesses +intolerably +intolerance +intolerances +intolerant +intolerantly +intolerantness +intolerantnesses +intomb +intombed +intombing +intombs +intonate +intonated +intonates +intonating +intonation +intonational +intonations +intone +intoned +intoner +intoners +intones +intoning +intort +intorted +intorting +intorts +intown +intoxicant +intoxicants +intoxicate +intoxicated +intoxicatedly +intoxicates +intoxicating +intoxication +intoxications +intracardiac +intracardial +intracardially +intracellular +intracellularly +intracerebral +intracerebrally +intracompany +intracranial +intracranially +intractabilities +intractability +intractable +intractably +intracutaneous +intracutaneously +intraday +intradermal +intradermally +intrados +intradoses +intragalactic +intragenic +intramolecular +intramolecularly +intramural +intramurally +intramuscular +intramuscularly +intranasal +intranasally +intransigeance +intransigeances +intransigeant +intransigeantly +intransigeants +intransigence +intransigences +intransigent +intransigently +intransigents +intransitive +intransitively +intransitiveness +intransitivenesses +intransitivities +intransitivity +intrant +intrants +intraocular +intraocularly +intraperitoneal +intraperitoneally +intrapersonal +intraplate +intrapopulation +intrapreneur +intrapreneurial +intrapreneurs +intrapsychic +intrapsychically +intraspecies +intraspecific +intrastate +intrathecal +intrathecally +intrathoracic +intrathoracically +intrauterine +intravascular +intravascularly +intravenous +intravenouses +intravenously +intraventricular +intraventricularly +intravital +intravitally +intravitam +intrazonal +intreat +intreated +intreating +intreats +intrench +intrenched +intrenches +intrenching +intrepid +intrepidities +intrepidity +intrepidly +intrepidness +intrepidnesses +intricacies +intricacy +intricate +intricately +intricateness +intricatenesses +intrigant +intrigants +intriguant +intriguants +intrigue +intrigued +intriguer +intriguers +intrigues +intriguing +intriguingly +intrinsic +intrinsical +intrinsically +intro introduce +introduced +introducer +introducers +introduces +introducing introduction +introductions +introductorily +introductory +introfied +introfies +introfy +introfying +introgressant +introgressants +introgression +introgressions +introgressive +introit +introits +introject +introjected +introjecting +introjection +introjections +introjects +intromission +intromissions +intromit +intromits +intromitted +intromittent +intromitter +intromitters +intromitting +intron +introns +introrse +intros +introspect +introspected +introspecting +introspection +introspectional +introspectionism +introspectionisms +introspectionist +introspectionistic +introspectionists +introspections +introspective +introspectively +introspectiveness +introspectivenesses +introspects +introversion +introversions +introversive +introversively +introvert +introverted +introverting +introverts +intrude +intruded +intruder +intruders +intrudes +intruding +intrusion +intrusions +intrusive +intrusively +intrusiveness +intrusivenesses +intrusives +intrust +intrusted +intrusting +intrusts +intubate +intubated +intubates +intubating +intubation +intubations +intuit +intuitable +intuited +intuiting +intuition +intuitional +intuitionism +intuitionisms +intuitionist +intuitionists +intuitions +intuitive +intuitively +intuitiveness +intuitivenesses +intuits +intumescence +intumescences +intumescent +inturn +inturned +inturns +intussuscept +intussuscepted +intussuscepting +intussusception +intussusceptions +intussusceptive +intussuscepts +intwine +intwined +intwines +intwining +intwist +intwisted +intwisting +intwists +inulase +inulases +inulin +inulins +inunction +inunctions +inundant +inundate +inundated +inundates +inundating +inundation +inundations +inundator +inundators +inundatory +inurbane +inure +inured +inurement +inurements +inures +inuring +inurn +inurned +inurning +inurns +inutile +inutilities +inutility +invade +invaded +invader +invaders +invades +invading +invaginate +invaginated +invaginates +invaginating +invagination +invaginations +invalid +invalidate +invalidated +invalidates +invalidating +invalidation +invalidations +invalidator +invalidators +invalided +invaliding +invalidism +invalidisms +invalidities +invalidity +invalidly +invalids +invaluable +invaluableness +invaluablenesses +invaluably +invar +invariabilities +invariability +invariable +invariables +invariably +invariance +invariances +invariant +invariants +invars +invasion +invasions +invasive +invasively +invasiveness +invasivenesses +invected +invective +invectively +invectiveness +invectivenesses +invectives +inveigh +inveighed +inveigher +inveighers +inveighing +inveighs +inveigle +inveigled +inveiglement +inveiglements +inveigler +inveiglers +inveigles +inveigling invent +invented +inventer +inventers +inventing invention +inventions +inventive +inventively +inventiveness +inventivenesses +inventor +inventorial +inventorially +inventoried +inventories +inventors +inventory +inventorying +inventress +inventresses +invents +inverities +inverity +inverness +invernesses +inverse +inversely +inverses +inversion +inversions +inversive +invert +invertase +invertases +invertebrate +invertebrates +inverted +inverter +inverters +invertible +inverting +invertor +invertors +inverts +invest +investable +invested +investigate +investigated +investigates +investigating +investigation +investigational +investigations +investigative +investigator +investigators +investigatory +investing +investiture +investitures +investment +investments +investor +investors +invests +inveteracies +inveteracy +inveterate +inveterately +inviabilities +inviability +inviable +inviably +invidious +invidiously +invidiousness +invidiousnesses +invigilate +invigilated +invigilates +invigilating +invigilation +invigilations +invigilator +invigilators +invigorate +invigorated +invigorates +invigorating +invigoratingly +invigoration +invigorations +invigorator +invigorators +invincibilities +invincibility +invincible +invincibleness +invinciblenesses +invincibly +inviolabilities +inviolability +inviolable +inviolableness +inviolablenesses +inviolably +inviolacies +inviolacy +inviolate +inviolately +inviolateness +inviolatenesses +invirile +inviscid +invisibilities +invisibility +invisible +invisibleness +invisiblenesses +invisibles +invisibly +invital invitation +invitational +invitationals +invitations +invitatories +invitatory invite +invited +invitee +invitees +inviter +inviters +invites +inviting +invitingly +invocate +invocated +invocates +invocating +invocation +invocational +invocations +invocatory +invoice +invoiced +invoices +invoicing +invoke +invoked +invoker +invokers +invokes +invoking +involucra +involucral +involucrate +involucre +involucres +involucrum +involuntarily +involuntariness +involuntarinesses +involuntary +involute +involuted +involutes +involuting +involution +involutional +involutions +involve +involved +involvedly +involvement +involvements +involver +involvers +involves +involving +invulnerabilities +invulnerability +invulnerable +invulnerableness +invulnerablenesses +invulnerably +inwall +inwalled +inwalling +inwalls +inward +inwardly +inwardness +inwardnesses +inwards +inweave +inweaved +inweaves +inweaving +inwind +inwinding +inwinds +inwound +inwove +inwoven +inwrap +inwrapped +inwrapping +inwraps +iodate +iodated +iodates +iodating +iodation +iodations +iodic +iodid +iodide +iodides +iodids +iodin +iodinate +iodinated +iodinates +iodinating +iodination +iodinations +iodine +iodines +iodins +iodise +iodised +iodises +iodising +iodism +iodisms +iodize +iodized +iodizer +iodizers +iodizes +iodizing +iodoform +iodoforms +iodophor +iodophors +iodopsin +iodopsins +iodous +iolite +iolites +ion +ionic +ionicities +ionicity +ionics +ionise +ionised +ionises +ionising +ionium +ioniums +ionizable +ionization +ionizations +ionize +ionized +ionizer +ionizers +ionizes +ionizing +ionogen +ionogens +ionomer +ionomers +ionone +ionones +ionophore +ionophores +ionosphere +ionospheres +ionospheric +ionospherically +ions +iontophoreses +iontophoresis +iontophoretic +iontophoretically +iota +iotacism +iotacisms +iotas +ipecac +ipecacs +ipecacuanha +ipecacuanhas +ipomoea +ipomoeas +iproniazid +iproniazids +ipsilateral +ipsilaterally +iracund +irade +irades +irascibilities +irascibility +irascible +irascibleness +irasciblenesses +irascibly +irate +irately +irateness +iratenesses +irater +iratest +ire +ired +ireful +irefully +ireless +irenic +irenical +irenically +irenics +ires +irid +irides +iridescence +iridescences +iridescent +iridescently +iridic +iridium +iridiums +iridologies +iridologist +iridologists +iridology +iridosmine +iridosmines +irids +iring +iris +irised +irises +irising +iritic +iritis +iritises +irk +irked +irking +irks +irksome +irksomely +irksomeness +irksomenesses +iroko +irokos iron +ironbark +ironbarks +ironbound +ironclad +ironclads +irone +ironed +ironer +ironers +irones +ironfisted +ironhanded +ironhearted +ironic +ironical +ironically +ironicalness +ironicalnesses +ironies +ironing +ironings +ironist +ironists +ironize +ironized +ironizes +ironizing +ironlike +ironmaster +ironmasters +ironmonger +ironmongeries +ironmongers +ironmongery +ironness +ironnesses +irons +ironside +ironsides +ironstone +ironstones +ironware +ironwares +ironweed +ironweeds +ironwood +ironwoods +ironwork +ironworker +ironworkers +ironworks +irony +irradiance +irradiances +irradiate +irradiated +irradiates +irradiating +irradiation +irradiations +irradiative +irradiator +irradiators +irradicable +irradicably +irrational +irrationalism +irrationalisms +irrationalist +irrationalistic +irrationalists +irrationalities +irrationality +irrationally +irrationals +irreal +irrealities +irreality +irreclaimable +irreclaimably +irreconcilabilities +irreconcilability +irreconcilable +irreconcilableness +irreconcilablenesses +irreconcilables +irreconcilably +irrecoverable +irrecoverableness +irrecoverablenesses +irrecoverably +irrecusable +irrecusably +irredeemable +irredeemably +irredenta +irredentas +irredentism +irredentisms +irredentist +irredentists +irreducibilities +irreducibility +irreducible +irreducibly +irreflexive +irreformabilities +irreformability +irreformable +irrefragabilities +irrefragability +irrefragable +irrefragably +irrefutabilities +irrefutability +irrefutable +irrefutably +irregardless +irregular +irregularities +irregularity +irregularly +irregulars +irrelative +irrelatively +irrelevance +irrelevances +irrelevancies +irrelevancy +irrelevant +irrelevantly +irreligion +irreligionist +irreligionists +irreligions +irreligious +irreligiously +irremeable +irremediable +irremediableness +irremediablenesses +irremediably +irremovabilities +irremovability +irremovable +irremovably +irreparable +irreparableness +irreparablenesses +irreparably +irrepealabilities +irrepealability +irrepealable +irreplaceabilities +irreplaceability +irreplaceable +irreplaceableness +irreplaceablenesses +irreplaceably +irrepressibilities +irrepressibility +irrepressible +irrepressibly +irreproachabilities +irreproachability +irreproachable +irreproachableness +irreproachablenesses +irreproachably +irreproducibilities +irreproducibility +irreproducible +irresistibilities +irresistibility +irresistible +irresistibleness +irresistiblenesses +irresistibly +irresoluble +irresolute +irresolutely +irresoluteness +irresolutenesses +irresolution +irresolutions +irresolvable +irrespective +irresponsibilities +irresponsibility +irresponsible +irresponsibleness +irresponsiblenesses +irresponsibles +irresponsibly +irresponsive +irresponsiveness +irresponsivenesses +irretrievabilities +irretrievability +irretrievable +irretrievably +irreverence +irreverences +irreverent +irreverently +irreversibilities +irreversibility +irreversible +irreversibly +irrevocabilities +irrevocability +irrevocable +irrevocableness +irrevocablenesses +irrevocably +irridenta +irridentas +irrigate +irrigated +irrigates +irrigating irrigation +irrigations +irrigator +irrigators +irritabilities +irritability +irritable +irritableness +irritablenesses +irritably +irritant +irritants +irritate +irritated +irritates +irritating +irritatingly +irritation +irritations +irritative +irrotational +irrupt +irrupted +irrupting +irruption +irruptions +irruptive +irruptively +irrupts is +isagoge +isagoges +isagogic +isagogics +isallobar +isallobaric +isallobars +isarithm +isarithms +isatin +isatine +isatines +isatinic +isatins +isba +isbas +ischaemia +ischaemias +ischemia +ischemias +ischemic +ischia +ischial +ischium +isentropic +isentropically +isinglass +isinglasses island +islanded +islander +islanders +islanding +islands +isle +isled +isleless +isles +islet +islets +isling +ism +isms +isoagglutinin +isoagglutinins +isoalloxazine +isoalloxazines +isoantibodies +isoantibody +isoantigen +isoantigenic +isoantigens +isobar +isobare +isobares +isobaric +isobars +isobath +isobaths +isobutane +isobutanes +isobutylene +isobutylenes +isocaloric +isocarboxazid +isocarboxazids +isocheim +isocheims +isochime +isochimes +isochor +isochore +isochores +isochors +isochromosome +isochromosomes +isochron +isochronal +isochronally +isochrone +isochrones +isochronism +isochronisms +isochronous +isochronously +isochrons +isocline +isoclines +isocracies +isocracy +isocyanate +isocyanates +isocyclic +isodiametric +isodose +isoelectric +isoelectronic +isoelectronically +isoenzymatic +isoenzyme +isoenzymes +isoenzymic +isogamete +isogametes +isogametic +isogamies +isogamous +isogamy +isogeneic +isogenic +isogenies +isogeny +isogloss +isoglossal +isoglosses +isoglossic +isogon +isogonal +isogonals +isogone +isogones +isogonic +isogonics +isogonies +isogons +isogony +isograft +isografted +isografting +isografts +isogram +isograms +isograph +isographs +isogriv +isogrivs +isohel +isohels +isohyet +isohyetal +isohyets +isolable +isolatable +isolate +isolated +isolates +isolating +isolation +isolationism +isolationisms +isolationist +isolationists +isolations +isolator +isolators +isolead +isoleads +isoleucine +isoleucines +isoline +isolines +isolog +isologs +isologue +isologues +isomer +isomerase +isomerases +isomeric +isomerism +isomerisms +isomerization +isomerizations +isomerize +isomerized +isomerizes +isomerizing +isomers +isometric +isometrically +isometrics +isometries +isometry +isomorph +isomorphic +isomorphically +isomorphism +isomorphisms +isomorphous +isomorphs +isoniazid +isoniazids +isonomic +isonomies +isonomy +isooctane +isooctanes +isopach +isopachs +isophotal +isophote +isophotes +isopiestic +isopleth +isoplethic +isopleths +isopod +isopodan +isopodans +isopods +isoprenaline +isoprenalines +isoprene +isoprenes +isoprenoid +isopropyl +isopropyls +isoproterenol +isoproterenols +isopycnic +isosceles +isosmotic +isosmotically +isospin +isospins +isospories +isospory +isostasies +isostasy +isostatic +isostatically +isotach +isotachs +isotactic +isothere +isotheres +isotherm +isothermal +isothermally +isotherms +isotone +isotones +isotonic +isotonically +isotonicities +isotonicity +isotope +isotopes +isotopic +isotopically +isotopies +isotopy +isotropic +isotropies +isotropy +isotype +isotypes +isotypic +isozyme +isozymes +isozymic +issei +isseis +issuable +issuably +issuance +issuances +issuant +issue +issued +issueless +issuer +issuers +issues +issuing +isthmi +isthmian +isthmians +isthmic +isthmoid +isthmus +isthmuses +istle +istles it +italianate +italianated +italianates +italianating +italianise +italianised +italianises +italianising +italianize +italianized +italianizes +italianizing +italic +italicise +italicised +italicises +italicising +italicization +italicizations +italicize +italicized +italicizes +italicizing +italics +itch +itched +itches +itchier +itchiest +itchily +itchiness +itchinesses +itching +itchings +itchy +item +itemed +iteming +itemise +itemised +itemises +itemising +itemization +itemizations +itemize +itemized +itemizer +itemizers +itemizes +itemizing +items +iterance +iterances +iterant +iterate +iterated +iterates +iterating +iteration +iterations +iterative +iteratively +iterum +ither +ithyphallic +itinerancies +itinerancy +itinerant +itinerantly +itinerants +itineraries +itinerary +itinerate +itinerated +itinerates +itinerating +itineration +itinerations its itself +ivermectin +ivermectins +ivied +ivies +ivories +ivory +ivorybill +ivorybills +ivy +ivylike +iwis +ixia +ixias +ixodid +ixodids +ixora +ixoras +ixtle +ixtles +izar +izars +izzard +izzards +jab +jabbed +jabber +jabbered +jabberer +jabberers +jabbering +jabbers +jabberwockies +jabberwocky +jabbing +jabiru +jabirus +jaborandi +jaborandis +jabot +jaboticaba +jaboticabas +jabots +jabs +jacal +jacales +jacals +jacamar +jacamars +jacana +jacanas +jacaranda +jacarandas +jacinth +jacinthe +jacinthes +jacinths +jack +jackal +jackals +jackanapes +jackanapeses +jackaroo +jackaroos +jackass +jackasseries +jackassery +jackasses +jackboot +jackbooted +jackboots +jackdaw +jackdaws +jacked +jacker +jackeroo +jackeroos +jackers jacket +jacketed +jacketing +jacketless +jackets +jackfish +jackfishes +jackfruit +jackfruits +jackhammer +jackhammered +jackhammering +jackhammers +jackies +jacking +jackknife +jackknifed +jackknifes +jackknifing +jackknives +jackleg +jacklegs +jacklight +jacklights +jackpot +jackpots +jackrabbit +jackrabbits +jackroll +jackrolled +jackrolling +jackrolls +jacks +jackscrew +jackscrews +jacksmelt +jacksmelts +jackstay +jackstays +jackstraw +jackstraws +jacky +jacobin +jacobins +jacobus +jacobuses +jaconet +jaconets +jacquard +jacquards +jacquerie +jacqueries +jactitation +jactitations +jaculate +jaculated +jaculates +jaculating +jade +jaded +jadedly +jadedness +jadednesses +jadeite +jadeites +jades +jading +jadish +jadishly +jaditic +jaeger +jaegers +jag +jager +jagers +jagg +jaggaries +jaggary +jagged +jaggeder +jaggedest +jaggedly +jaggedness +jaggednesses +jagger +jaggeries +jaggers +jaggery +jaggheries +jagghery +jaggier +jaggiest +jagging +jaggs +jaggy +jagless +jagra +jagras +jags +jaguar +jaguarondi +jaguarondis +jaguars +jaguarundi +jaguarundis +jail +jailbait +jailbird +jailbirds +jailbreak +jailbreaks +jailed +jailer +jailers +jailhouse +jailhouses +jailing +jailor +jailors +jails +jake +jakes +jalap +jalapeno +jalapenos +jalapic +jalapin +jalapins +jalaps +jalop +jalopies +jaloppies +jaloppy +jalops +jalopy +jalousie +jalousies jam +jamb +jambalaya +jambalayas +jambe +jambeau +jambeaux +jambed +jambes +jambing +jamboree +jamborees +jambs +jammed +jammer +jammers +jammier +jammies +jammiest +jamming +jammy +jams +jane +janes +jangle +jangled +jangler +janglers +jangles +janglier +jangliest +jangling +jangly +janiform +janisaries +janisary +janissaries +janissary +janitor +janitorial +janitors +janizaries +janizary +janty +japan +japanize +japanized +japanizes +japanizing +japanned +japanner +japanners +japanning +japans +jape +japed +japer +japeries +japers +japery +japes +japing +japingly +japonaiserie +japonaiseries +japonica +japonicas jar +jardiniere +jardinieres +jarful +jarfuls +jargon +jargoned +jargonel +jargonels +jargoning +jargonish +jargonistic +jargonize +jargonized +jargonizes +jargonizing +jargons +jargoon +jargoons +jarhead +jarheads +jarina +jarinas +jarl +jarldom +jarldoms +jarls +jarosite +jarosites +jarovize +jarovized +jarovizes +jarovizing +jarrah +jarrahs +jarred +jarring +jarringly +jars +jarsful +jarvey +jarveys +jasmin +jasmine +jasmines +jasmins +jasper +jaspers +jasperware +jasperwares +jaspery +jassid +jassids +jato +jatos +jauk +jauked +jauking +jauks +jaunce +jaunced +jaunces +jauncing +jaundice +jaundiced +jaundices +jaundicing +jaunt +jaunted +jauntier +jauntiest +jauntily +jauntiness +jauntinesses +jaunting +jaunts +jaunty +jaup +jauped +jauping +jaups +java +javas +javelin +javelina +javelinas +javelined +javelining +javelins jaw +jawan +jawans +jawbone +jawboned +jawboner +jawboners +jawbones +jawboning +jawbonings +jawbreaker +jawbreakers +jawed +jawing +jawlike +jawline +jawlines +jaws +jay +jaybird +jaybirds +jaygee +jaygees +jayhawker +jayhawkers +jays +jayvee +jayvees +jaywalk +jaywalked +jaywalker +jaywalkers +jaywalking +jaywalks jazz +jazzed +jazzer +jazzers +jazzes +jazzier +jazziest +jazzily +jazziness +jazzinesses +jazzing +jazzlike +jazzman +jazzmen +jazzy +jealous +jealousies +jealously +jealousness +jealousnesses +jealousy +jean jeans +jebel +jebels +jee +jeed +jeeing jeep +jeeped +jeepers +jeeping +jeepney +jeepneys +jeeps +jeer +jeered +jeerer +jeerers +jeering +jeeringly +jeers +jees +jeez +jefe +jefes +jehad +jehads +jehu +jehus +jejuna +jejunal +jejune +jejunely +jejuneness +jejunenesses +jejunities +jejunity +jejunum +jell +jellaba +jellabas +jelled +jellied +jellies +jellified +jellifies +jellify +jellifying +jelling +jells +jelly +jellybean +jellybeans +jellyfish +jellyfishes +jellying +jellylike +jelutong +jelutongs +jemadar +jemadars +jemidar +jemidars +jemmied +jemmies +jemmy +jemmying +jennet +jennets +jennies +jenny +jeon +jeopard +jeoparded +jeopardies +jeoparding +jeopardise +jeopardised +jeopardises +jeopardising +jeopardize +jeopardized +jeopardizes +jeopardizing +jeopards +jeopardy +jerboa +jerboas +jereed +jereeds +jeremiad +jeremiads +jerid +jerids +jerk +jerked +jerker +jerkers +jerkier +jerkies +jerkiest +jerkily +jerkin +jerkiness +jerkinesses +jerking +jerkins +jerks +jerkwater +jerky +jeroboam +jeroboams +jerreed +jerreeds +jerrican +jerricans +jerrid +jerrids +jerries +jerry +jerrycan +jerrycans +jersey +jerseyed +jerseys +jess +jessamine +jessamines +jessant +jesse +jessed +jesses +jessing +jest +jested +jester +jesters +jestful +jesting +jestings +jests +jesuit +jesuitic +jesuitical +jesuitically +jesuitism +jesuitisms +jesuitries +jesuitry +jesuits jet +jetbead +jetbeads +jete +jetes +jetlike +jetliner +jetliners +jeton +jetons +jetport +jetports +jets +jetsam +jetsams +jetsom +jetsoms +jetted +jettied +jettier +jetties +jettiest +jetting +jettison +jettisonable +jettisoned +jettisoning +jettisons +jetton +jettons +jetty +jettying +jeu +jeux +jew +jewed +jewel +jeweled +jeweler +jewelers +jeweling +jewelled +jeweller +jewelleries +jewellers jewellery +jewellike +jewelling +jewelries jewelry +jewels +jewelweed +jewelweeds +jewfish +jewfishes +jewing +jews +jezail +jezails +jezebel +jezebels +jiao +jib +jibb +jibbed +jibber +jibbers +jibbing +jibboom +jibbooms +jibbs +jibe +jibed +jiber +jibers +jibes +jibing +jibingly +jibs +jicama +jicamas +jiff +jiffies +jiffs +jiffy +jig +jigaboo +jigaboos +jigged +jigger +jiggered +jiggering +jiggers +jigging +jiggle +jiggled +jiggles +jigglier +jiggliest +jiggling +jiggly +jigs +jigsaw +jigsawed +jigsawing +jigsawn +jigsaws +jihad +jihads +jill +jillion +jillions +jills +jilt +jilted +jilter +jilters +jilting +jilts +jiminy +jimjams +jimmied +jimmies +jimminy +jimmy +jimmying +jimp +jimper +jimpest +jimply +jimpy +jimsonweed +jimsonweeds +jin +jingal +jingall +jingalls +jingals +jingko +jingkoes +jingle +jingled +jingler +jinglers +jingles +jinglier +jingliest +jingling +jingly +jingo +jingoes +jingoish +jingoism +jingoisms +jingoist +jingoistic +jingoistically +jingoists +jink +jinked +jinker +jinkers +jinking +jinks +jinn +jinnee +jinni +jinns +jinricksha +jinrickshas +jinrikisha +jinrikishas +jins +jinx +jinxed +jinxes +jinxing +jipijapa +jipijapas +jism +jisms +jitney +jitneys +jitter +jitterbug +jitterbugged +jitterbugging +jitterbugs +jittered +jitterier +jitteriest +jitteriness +jitterinesses +jittering +jitters +jittery +jiujitsu +jiujitsus +jiujutsu +jiujutsus +jive +jiveass +jived +jiver +jivers +jives +jivey +jivier +jiviest +jiving +jnana +jnanas +jo +joannes job +jobbed +jobber +jobberies +jobbers +jobbery +jobbing +jobholder +jobholders +jobless +joblessness +joblessnesses +jobname +jobnames +jobs +jock +jockette +jockettes +jockey +jockeyed +jockeying +jockeys +jocko +jockos +jocks +jockstrap +jockstraps +jocose +jocosely +jocoseness +jocosenesses +jocosities +jocosity +jocular +jocularities +jocularity +jocularly +jocund +jocundities +jocundity +jocundly +jodhpur +jodhpurs +joe +joes +joey +joeys jog +jogged +jogger +joggers +jogging +joggings +joggle +joggled +joggler +jogglers +joggles +joggling +jogs +johannes +john +johnboat +johnboats +johnnies +johnny +johnnycake +johnnycakes +johns +johnsongrass +johnsongrasses join +joinable +joinder +joinders +joined +joiner +joineries +joiners +joinery +joining +joinings +joins +joint +jointed +jointedly +jointedness +jointednesses +jointer +jointers +jointing +jointly +jointress +jointresses +joints +jointure +jointured +jointures +jointuring +jointworm +jointworms +joist +joisted +joisting +joists +jojoba +jojobas joke +joked +joker +jokers +jokes +jokester +jokesters +jokey +jokier +jokiest +jokily +jokiness +jokinesses +joking +jokingly +joky +jole +joles +jollied +jollier +jollies +jolliest +jollification +jollifications +jollified +jollifies +jollify +jollifying +jollily +jollities +jollity +jolly +jollying +jolt +jolted +jolter +jolters +joltier +joltiest +joltily +jolting +jolts +jolty +jones +joneses +jongleur +jongleurs +jonquil +jonquils +joram +jorams +jordan +jordans +jorum +jorums +joseph +josephs +josh +joshed +josher +joshers +joshes +joshing +joss +josses +jostle +jostled +jostler +jostlers +jostles +jostling +jot +jota +jotas +jots +jotted +jotter +jotters +jotting +jottings +jotty +joual +jouals +jouk +jouked +jouking +jouks +joule +joules +jounce +jounced +jounces +jouncier +jounciest +jouncing +jouncy +journal +journalese +journaleses +journalism +journalisms journalist +journalistic +journalistically +journalists +journalize +journalized +journalizer +journalizers +journalizes +journalizing +journals journey +journeyed +journeyer +journeyers +journeying +journeyman +journeymen +journeys +journeywork +journeyworks +joust +jousted +jouster +jousters +jousting +jousts +jovial +jovialities +joviality +jovially +jovialties +jovialty +jow +jowar +jowars +jowed +jowing +jowl +jowled +jowlier +jowliest +jowls +jowly +jows joy +joyance +joyances +joyed +joyful +joyfuller +joyfullest +joyfully +joyfulness +joyfulnesses +joying +joyless +joylessly +joylessness +joylessnesses +joyous +joyously +joyousness +joyousnesses +joypop +joypopped +joypopper +joypoppers +joypopping +joypops +joyridden +joyride +joyrider +joyriders +joyrides +joyriding +joyridings +joyrode +joys +joystick +joysticks +juba +jubas +jubbah +jubbahs +jube +jubes +jubhah +jubhahs +jubilance +jubilances +jubilant +jubilantly +jubilarian +jubilarians +jubilate +jubilated +jubilates +jubilating +jubilation +jubilations +jubile +jubilee +jubilees +jubiles +judas +judases +judder +juddered +juddering +judders judge +judged judgement +judgements +judger +judgers +judges +judgeship +judgeships +judging +judgmatic +judgmatical +judgmatically judgment +judgmental +judgmentally +judgments +judicatories +judicatory +judicature +judicatures +judicial +judicially +judiciaries +judiciary +judicious +judiciously +judiciousness +judiciousnesses +judo +judoist +judoists +judoka +judokas +judos +jug +juga +jugal +jugate +jugful +jugfuls +jugged +juggernaut +juggernauts +jugging +juggle +juggled +juggler +juggleries +jugglers +jugglery +juggles +juggling +jugglings +jughead +jugheads +jugs +jugsful +jugula +jugular +jugulars +jugulate +jugulated +jugulates +jugulating +jugulum +jugum +jugums juice +juiced +juicehead +juiceheads +juiceless +juicer +juicers +juices +juicier +juiciest +juicily +juiciness +juicinesses +juicing +juicy +jujitsu +jujitsus +juju +jujube +jujubes +jujuism +jujuisms +jujuist +jujuists +jujus +jujutsu +jujutsus +juke +jukebox +jukeboxes +juked +jukes +juking +julep +juleps +julienne +julienned +juliennes +julienning +jumbal +jumbals +jumble +jumbled +jumbler +jumblers +jumbles +jumbling +jumbo +jumbos +jumbuck +jumbucks jump +jumped +jumper +jumpers +jumpier +jumpiest +jumpily +jumpiness +jumpinesses +jumping +jumpoff +jumpoffs +jumps +jumpsuit +jumpsuits +jumpy +jun +junco +juncoes +juncos +junction +junctional +junctions +junctural +juncture +junctures jungle +jungled +junglelike +jungles +junglier +jungliest +jungly junior +juniorate +juniorates +juniors +juniper +junipers +junk +junked +junker +junkers +junket +junketed +junketeer +junketeers +junketer +junketers +junketing +junkets +junkie +junkier +junkies +junkiest +junking +junkman +junkmen +junks +junky +junkyard +junkyards +junta +juntas +junto +juntos +jupe +jupes +jupon +jupons +jura +jural +jurally +jurant +jurants +jurat +juratory +jurats +jurel +jurels +juridic +juridical +juridically +juried +juries +jurisconsult +jurisconsults +jurisdiction +jurisdictional +jurisdictionally +jurisdictions +jurisprudence +jurisprudences +jurisprudent +jurisprudential +jurisprudentially +jurisprudents +jurist +juristic +juristically +jurists +juror +jurors +jury +jurying +juryman +jurymen +jus +jussive +jussives just +justed +juster +justers +justest justice +justices +justiciabilities +justiciability +justiciable +justiciar +justiciars +justifiabilities +justifiability +justifiable +justifiably +justification +justifications +justificative +justificatory +justified +justifier +justifiers +justifies +justify +justifying +justing +justle +justled +justles +justling +justly +justness +justnesses +justs +jut +jute +jutes +juts +jutted +juttied +jutties +jutting +jutty +juttying +juvenal +juvenals +juvenescence +juvenescences +juvenescent +juvenile +juveniles +juvenilia +juvenilities +juvenility +juxtapose +juxtaposed +juxtaposes +juxtaposing +juxtaposition +juxtapositional +juxtapositions +ka +kaas +kab +kabab +kababs +kabaka +kabakas +kabala +kabalas +kabar +kabars +kabaya +kabayas +kabbala +kabbalah +kabbalahs +kabbalas +kabeljou +kabeljous +kabiki +kabikis +kabob +kabobs +kabs +kabuki +kabukis +kachina +kachinas +kaddish +kaddishim +kadi +kadis +kae +kaes +kaf +kaffeeklatsch +kaffeeklatsches +kaffir +kaffirs +kaffiyeh +kaffiyehs +kafir +kafirs +kafs +kaftan +kaftans +kagu +kagus +kahuna +kahunas +kaiak +kaiaks +kaif +kaifs +kail +kails +kailyard +kailyards +kain +kainit +kainite +kainites +kainits +kains +kaiser +kaiserdom +kaiserdoms +kaiserin +kaiserins +kaiserism +kaiserisms +kaisers +kajeput +kajeputs +kaka +kakapo +kakapos +kakas +kakemono +kakemonos +kaki +kakiemon +kakiemons +kakis +kalam +kalams +kalanchoe +kalanchoes +kale +kaleidoscope +kaleidoscopes +kaleidoscopic +kaleidoscopically +kalends +kales +kalewife +kalewives +kaleyard +kaleyards +kalian +kalians +kalif +kalifate +kalifates +kalifs +kalimba +kalimbas +kaliph +kaliphs +kalium +kaliums +kallidin +kallidins +kallikrein +kallikreins +kalmia +kalmias +kalong +kalongs +kalpa +kalpak +kalpaks +kalpas +kalyptra +kalyptras +kamaaina +kamaainas +kamacite +kamacites +kamala +kamalas +kame +kames +kami +kamik +kamikaze +kamikazes +kamiks +kampong +kampongs +kamseen +kamseens +kamsin +kamsins +kana +kanamycin +kanamycins +kanas +kanban +kanbans +kane +kanes kangaroo +kangaroos +kanji +kanjis +kantar +kantars +kantele +kanteles +kaoliang +kaoliangs +kaolin +kaoline +kaolines +kaolinic +kaolinite +kaolinites +kaolinitic +kaolins +kaon +kaons +kapa +kapas +kapellmeister +kapellmeisters +kaph +kaphs +kapok +kapoks +kappa +kappas +kaput +kaputt +karabiner +karabiners +karakul +karakuls +karaoke +karaokes +karat +karate +karateist +karateists +karates +karats +karma +karmas +karmic +karn +karns +karoo +karoos +kaross +karosses +karroo +karroos +karst +karstic +karsts +kart +karting +kartings +karts +karyogamies +karyogamy +karyokineses +karyokinesis +karyokinetic +karyologic +karyological +karyologies +karyology +karyolymph +karyolymphs +karyosome +karyosomes +karyotin +karyotins +karyotype +karyotyped +karyotypes +karyotypic +karyotypically +karyotyping +kas +kasbah +kasbahs +kasha +kashas +kasher +kashered +kashering +kashers +kashmir +kashmirs +kashrut +kashruth +kashruths +kashruts +kat +kata +katabatic +katakana +katakanas +katas +katchina +katchinas +katcina +katcinas +katharses +katharsis +kathodal +kathode +kathodes +kathodic +kation +kations +kats +katydid +katydids +katzenjammer +katzenjammers +kauri +kauries +kauris +kaury +kava +kavakava +kavakavas +kavas +kavass +kavasses +kay +kayak +kayaked +kayaker +kayakers +kayaking +kayakings +kayaks +kayles +kayo +kayoed +kayoes +kayoing +kayos +kays +kazachki +kazachok +kazatski +kazatskies +kazatsky +kazoo +kazoos +kbar +kbars +kea +keas +kebab +kebabs +kebar +kebars +kebbie +kebbies +kebbock +kebbocks +kebbuck +kebbucks +keblah +keblahs +kebob +kebobs +keck +kecked +kecking +keckle +keckled +keckles +keckling +kecks +keddah +keddahs +kedge +kedged +kedgeree +kedgerees +kedges +kedging +keef +keefs +keek +keeked +keeking +keeks +keel +keelage +keelages +keelboat +keelboats +keeled +keelhale +keelhaled +keelhales +keelhaling +keelhaul +keelhauled +keelhauling +keelhauls +keeling +keelless +keels +keelson +keelsons +keen +keened +keener +keeners +keenest +keening +keenly +keenness +keennesses +keens keep +keepable +keeper +keepers +keeping +keepings +keeps +keepsake +keepsakes +keeshond +keeshonden +keeshonds +keester +keesters +keet +keets +keeve +keeves +kef +keffiyeh +keffiyehs +kefir +kefirs +kefs +keg +kegeler +kegelers +kegler +keglers +kegling +keglings +kegs +keir +keirs +keister +keisters +keitloa +keitloas +kelep +keleps +kelim +kelims +kellies +kelly +keloid +keloidal +keloids +kelp +kelped +kelpie +kelpies +kelping +kelps +kelpy +kelson +kelsons +kelter +kelters +kelvin +kelvins +kemp +kemps +kempt +ken +kenaf +kenafs +kench +kenches +kendo +kendos +kenned +kennel +kenneled +kenneling +kennelled +kennelling +kennels +kenning +kennings +keno +kenos +kenosis +kenosises +kenotic +kenotron +kenotrons +kens +kenspeckle +kent +kentledge +kentledges +kep +kephalin +kephalins +kepi +kepis +kepped +keppen +kepping +keps +kept +keramic +keramics +keratin +keratinization +keratinizations +keratinize +keratinized +keratinizes +keratinizing +keratinophilic +keratinous +keratins +keratitides +keratitis +keratoconjunctivites +keratoconjunctivitides +keratoconjunctivitis +keratoconjunctivitises +keratoid +keratoma +keratomas +keratomata +keratoplasties +keratoplasty +keratose +keratoses +keratosis +keratotic +keratotomies +keratotomy +kerb +kerbed +kerbing +kerbs +kerchief +kerchiefed +kerchiefs +kerchieves +kerchoo +kerf +kerfed +kerfing +kerfs +kerfuffle +kerfuffles +kermes +kermess +kermesse +kermesses +kermis +kermises +kern +kerne +kerned +kernel +kerneled +kerneling +kernelled +kernelling +kernels +kernes +kerning +kernite +kernites +kerns +kerogen +kerogens +kerosene +kerosenes +kerosine +kerosines +kerplunk +kerplunked +kerplunking +kerplunks +kerria +kerrias +kerries +kerry +kersey +kerseymere +kerseymeres +kerseys +kerygma +kerygmata +kerygmatic +kestrel +kestrels +ketch +ketches +ketchup +ketchups +ketene +ketenes +keto +ketogeneses +ketogenesis +ketogenic +ketol +ketols +ketone +ketones +ketonic +ketose +ketoses +ketosis +ketosteroid +ketosteroids +ketotic kettle +kettledrum +kettledrums +kettles +kevel +kevels +kevil +kevils +kex +kexes key keyboard +keyboarded +keyboarder +keyboarders +keyboarding +keyboardist +keyboardists +keyboards +keybutton +keybuttons +keycard +keycards +keyed +keyhole +keyholes +keying +keyless +keynote +keynoted +keynoter +keynoters +keynotes +keynoting +keypad +keypads +keypunch +keypunched +keypuncher +keypunchers +keypunches +keypunching +keys +keyset +keysets +keyster +keysters +keystone +keystones +keystroke +keystroked +keystrokes +keystroking +keyway +keyways +keyword +keywords +khaddar +khaddars +khadi +khadis +khaf +khafs +khaki +khakis +khalif +khalifa +khalifas +khalifs +khamseen +khamseens +khamsin +khamsins +khan +khanate +khanates +khans +khaph +khaphs +khat +khats +khazen +khazenim +khazens +kheda +khedah +khedahs +khedas +khedival +khedive +khedives +khedivial +khet +kheth +kheths +khets +khi +khirkah +khirkahs +khis +khoum +khoums +kiang +kiangs +kiaugh +kiaughs +kibbe +kibbeh +kibbehs +kibbes +kibbi +kibbis +kibbitz +kibbitzed +kibbitzer +kibbitzers +kibbitzes +kibbitzing +kibble +kibbled +kibbles +kibbling +kibbutz +kibbutzim +kibbutznik +kibbutzniks +kibe +kibei +kibeis +kibes +kibitz +kibitzed +kibitzer +kibitzers +kibitzes +kibitzing +kibla +kiblah +kiblahs +kiblas +kibosh +kiboshed +kiboshes +kiboshing kick +kickable +kickback +kickbacks +kickball +kickballs +kickboard +kickboards +kickboxer +kickboxers +kickboxing +kickboxings +kicked +kicker +kickers +kickier +kickiest +kicking +kickoff +kickoffs +kicks +kickshaw +kickshaws +kickstand +kickstands +kickup +kickups +kicky kid +kidded +kidder +kidders +kiddie +kiddies +kidding +kiddingly +kiddish +kiddo +kiddoes +kiddos +kiddush +kiddushes +kiddy +kidlike +kidnap +kidnaped +kidnapee +kidnapees +kidnaper +kidnapers +kidnaping +kidnapped +kidnappee +kidnappees +kidnapper +kidnappers +kidnapping +kidnaps +kidney +kidneys +kids +kidskin +kidskins +kidvid +kidvids +kief +kiefs +kielbasa +kielbasas +kielbasi +kielbasy +kier +kiers +kieselguhr +kieselguhrs +kieserite +kieserites +kiester +kiesters +kif +kifs +kike +kikes +kilderkin +kilderkins +kilim +kilims kill +killdee +killdeer +killdeers +killdees +killed +killer +killers +killick +killicks +killie +killies +killifish +killifishes +killing +killingly +killings +killjoy +killjoys +killock +killocks +kills +kiln +kilned +kilning +kilns kilo +kilobar +kilobars +kilobase +kilobases +kilobaud +kilobauds +kilobit +kilobits +kilobyte +kilobytes +kilocalorie +kilocalories +kilocycle +kilocycles +kilogauss +kilogausses +kilogram +kilograms +kilohertz +kilojoule +kilojoules +kiloliter +kiloliters kilometer +kilometers +kilomole +kilomoles +kiloparsec +kiloparsecs +kilopascal +kilopascals +kilorad +kilorads +kilos +kiloton +kilotons +kilovolt +kilovolts +kilowatt +kilowatts +kilt +kilted +kilter +kilters +kiltie +kilties +kilting +kiltings +kilts +kilty +kimberlite +kimberlites +kimchee +kimchees +kimchi +kimchis +kimono +kimonoed +kimonos +kin +kina +kinas +kinase +kinases kind +kinder kindergarten +kindergartener +kindergarteners +kindergartens +kindergartner +kindergartners +kindest +kindhearted +kindheartedly +kindheartedness +kindheartednesses +kindle +kindled +kindler +kindlers +kindles +kindless +kindlessly +kindlier +kindliest +kindliness +kindlinesses +kindling +kindlings +kindly kindness +kindnesses +kindred +kindreds +kinds +kine +kinema +kinemas +kinematic +kinematical +kinematically +kinematics +kines +kinescope +kinescoped +kinescopes +kinescoping +kineses +kinesic +kinesics +kinesiologies +kinesiology +kinesis +kinestheses +kinesthesia +kinesthesias +kinesthesis +kinesthetic +kinesthetically +kinetic +kinetically +kineticist +kineticists +kinetics +kinetin +kinetins +kinetochore +kinetochores +kinetoplast +kinetoplasts +kinetoscope +kinetoscopes +kinetosome +kinetosomes +kinfolk +kinfolks king +kingbird +kingbirds +kingbolt +kingbolts +kingcraft +kingcrafts +kingcup +kingcups kingdom +kingdoms +kinged +kingfish +kingfisher +kingfishers +kingfishes +kinghood +kinghoods +kinging +kingless +kinglet +kinglets +kinglier +kingliest +kinglike +kingliness +kinglinesses +kingly +kingmaker +kingmakers +kingpin +kingpins +kingpost +kingposts +kings +kingship +kingships +kingside +kingsides +kingwood +kingwoods +kinin +kinins +kink +kinkajou +kinkajous +kinked +kinkier +kinkiest +kinkily +kinkiness +kinkinesses +kinking +kinks +kinky +kinnikinnick +kinnikinnicks +kino +kinos +kins +kinsfolk +kinship +kinships +kinsman +kinsmen +kinswoman +kinswomen +kiosk +kiosks +kip +kipped +kippen +kipper +kippered +kipperer +kipperers +kippering +kippers +kipping +kips +kipskin +kipskins +kir +kirigami +kirigamis +kirk +kirkman +kirkmen +kirks +kirmess +kirmesses +kirn +kirned +kirning +kirns +kirs +kirsch +kirsches +kirtle +kirtled +kirtles +kishka +kishkas +kishke +kishkes +kismat +kismats +kismet +kismetic +kismets kiss +kissable +kissably +kissed +kisser +kissers +kisses +kissing +kissy +kist +kistful +kistfuls +kists +kit kitchen +kitchenette +kitchenettes +kitchens +kitchenware +kitchenwares kite +kited +kitelike +kiter +kiters +kites +kith +kithara +kitharas +kithe +kithed +kithes +kithing +kiths +kiting +kitling +kitlings +kits +kitsch +kitsches +kitschy +kitted +kittel +kitten +kittened +kittening +kittenish +kittenishly +kittenishness +kittenishnesses +kittens +kitties +kitting +kittiwake +kittiwakes +kittle +kittled +kittler +kittles +kittlest +kittling +kitty +kiva +kivas +kiwi +kiwifruit +kiwifruits +kiwis +klatch +klatches +klatsch +klatsches +klavern +klaverns +klaxon +klaxons +kleagle +kleagles +klebsiella +klebsiellas +klepht +klephtic +klephts +kleptomania +kleptomaniac +kleptomaniacs +kleptomanias +klezmer +klezmorim +klister +klisters +klong +klongs +kloof +kloofs +kludge +kludges +kluge +kluges +klutz +klutzes +klutzier +klutziest +klutziness +klutzinesses +klutzy +klystron +klystrons +knack +knacked +knacker +knackered +knackeries +knackers +knackery +knacking +knacks +knackwurst +knackwursts +knap +knapped +knapper +knappers +knapping +knaps +knapsack +knapsacked +knapsacks +knapweed +knapweeds +knar +knarred +knarry +knars +knaur +knaurs +knave +knaveries +knavery +knaves +knavish +knavishly +knawel +knawels +knead +kneadable +kneaded +kneader +kneaders +kneading +kneads knee +kneecap +kneecapped +kneecapping +kneecappings +kneecaps +kneed +kneehole +kneeholes +kneeing +kneel +kneeled +kneeler +kneelers +kneeling +kneels +kneepad +kneepads +kneepan +kneepans +knees +kneesock +kneesocks +knell +knelled +knelling +knells +knelt +knesset +knessets +knew +knickerbocker +knickerbockers +knickers +knickknack +knickknacks knife +knifed +knifelike +knifepoint +knifepoints +knifer +knifers +knifes +knifing +knight +knighted +knighthood +knighthoods +knighting +knightliness +knightlinesses +knightly +knights +knish +knishes +knit +knits +knitted +knitter +knitters +knitting +knittings +knitwear +knives +knob +knobbed +knobbier +knobbiest +knobblier +knobbliest +knobbly +knobby +knobkerrie +knobkerries +knoblike +knobs knock +knockabout +knockabouts +knockdown +knockdowns +knocked +knocker +knockers +knocking +knockoff +knockoffs +knockout +knockouts +knocks +knockwurst +knockwursts +knoll +knolled +knoller +knollers +knolling +knolls +knolly +knop +knopped +knops +knosp +knosps +knot +knotgrass +knotgrasses +knothole +knotholes +knotless +knotlike +knots +knotted +knotter +knotters +knottier +knottiest +knottily +knottiness +knottinesses +knotting +knottings +knotty +knotweed +knotweeds +knout +knouted +knouting +knouts know +knowable +knower +knowers +knowing +knowinger +knowingest +knowingly +knowingness +knowingnesses +knowings knowledge +knowledgeabilities +knowledgeability +knowledgeable +knowledgeableness +knowledgeablenesses +knowledgeably +knowledges +known +knowns +knows +knubbier +knubbiest +knubby +knuckle +knuckleball +knuckleballer +knuckleballers +knuckleballs +knucklebone +knucklebones +knuckled +knucklehead +knuckleheaded +knuckleheads +knuckler +knucklers +knuckles +knucklier +knuckliest +knuckling +knuckly +knur +knurl +knurled +knurlier +knurliest +knurling +knurls +knurly +knurs +koa +koala +koalas +koan +koans +koas +kob +kobo +kobold +kobolds +kobs +koel +koels +kohl +kohlrabi +kohlrabies +kohls +koi +koine +koines +kokanee +kokanees +kola +kolacky +kolas +kolbasi +kolbasis +kolbassi +kolbassis +kolhoz +kolhozes +kolhozy +kolinski +kolinskies +kolinsky +kolkhos +kolkhoses +kolkhosy +kolkhoz +kolkhozes +kolkhoznik +kolkhozniki +kolkhozniks +kolkhozy +kolkoz +kolkozes +kolkozy +kolo +kolos +komatik +komatiks +komondor +komondorock +komondorok +komondors +konk +konked +konking +konks +koodoo +koodoos +kook +kookaburra +kookaburras +kookie +kookier +kookiest +kookiness +kookinesses +kooks +kooky +kop +kopeck +kopecks +kopek +kopeks +koph +kophs +kopje +kopjes +koppa +koppas +koppie +koppies +kops +kor +korai +korat +korats +kore +kors +korun +koruna +korunas +koruny +kos +kosher +koshered +koshering +koshers +koss +koto +kotos +kotow +kotowed +kotower +kotowers +kotowing +kotows +koumis +koumises +koumiss +koumisses +koumys +koumyses +koumyss +koumysses +kouprey +koupreys +kouroi +kouros +kousso +koussos +kowtow +kowtowed +kowtower +kowtowers +kowtowing +kowtows +kraal +kraaled +kraaling +kraals +kraft +krafts +krait +kraits +kraken +krakens +krater +kraters +kraut +krauts +kreep +kreeps +kremlin +kremlinologies +kremlinologist +kremlinologists +kremlinology +kremlins +kreplach +kreutzer +kreutzers +kreuzer +kreuzers +krill +krills +krimmer +krimmers +kris +krises +krona +krone +kronen +kroner +kronor +kronur +kroon +krooni +kroons +krubi +krubis +krubut +krubuts +kruller +krullers +krumhorn +krumhorns +krummholz +krummhorn +krummhorns +kryolite +kryolites +kryolith +kryoliths +krypton +kryptons +kuchen +kudo +kudos +kudu +kudus +kudzu +kudzus +kue +kues +kugel +kugels +kukri +kukris +kulak +kulaki +kulaks +kultur +kulturs +kumiss +kumisses +kummel +kummels +kumquat +kumquats +kumys +kumyses +kundalini +kundalinis +kunzite +kunzites +kurbash +kurbashed +kurbashes +kurbashing +kurgan +kurgans +kurrajong +kurrajongs +kurta +kurtas +kurtosis +kurtosises +kuru +kurus +kusso +kussos +kuvasz +kuvaszok +kvas +kvases +kvass +kvasses +kvetch +kvetched +kvetches +kvetchier +kvetchiest +kvetching +kvetchy +kwacha +kwanza +kwanzas +kwashiorkor +kwashiorkors +kyack +kyacks +kyak +kyaks +kyanise +kyanised +kyanises +kyanising +kyanite +kyanites +kyanize +kyanized +kyanizes +kyanizing +kyar +kyars +kyat +kyats +kybosh +kyboshed +kyboshes +kyboshing +kylikes +kylix +kymogram +kymograms +kymograph +kymographic +kymographies +kymographs +kymography +kyphoses +kyphosis +kyphotic +kyrie +kyries +kyte +kytes +kythe +kythed +kythes +kything +la +laager +laagered +laagering +laagers +laari lab +labanotation +labanotations +labara +labarum +labarums +labdanum +labdanums +label +labelable +labeled +labeler +labelers +labeling +labella +labelled +labeller +labellers +labelling +labellum +labels +labia +labial +labialization +labializations +labialize +labialized +labializes +labializing +labially +labials +labiate +labiated +labiates +labile +labilities +lability +labiodental +labiodentals +labiovelar +labiovelars +labium labor +laboratories laboratory +labored +laborer +laborers +laboring +laborious +laboriously +laboriousness +laboriousnesses +laborite +laborites +labors +laborsaving labour +laboured +labourer +labourers +labouring +labours +labra +labrador +labradorite +labradorites +labradors +labret +labrets +labroid +labroids +labrum +labrums +labrusca +labs +laburnum +laburnums +labyrinth +labyrinthian +labyrinthine +labyrinthodont +labyrinthodonts +labyrinths +lac +laccolith +laccolithic +laccoliths +lace +laced +laceless +lacelike +lacer +lacerate +lacerated +lacerates +lacerating +laceration +lacerations +lacerative +lacers +lacertid +lacertids +laces +lacewing +lacewings +lacewood +lacewoods +lacework +laceworks +lacey +laches +lachrymal +lachrymator +lachrymators +lachrymose +lachrymosely +lachrymosities +lachrymosity +lacier +laciest +lacily +laciness +lacinesses +lacing +lacings +laciniate +laciniation +laciniations lack +lackadaisical +lackadaisically +lackaday +lacked +lacker +lackered +lackering +lackers +lackey +lackeyed +lackeying +lackeys +lacking +lackluster +lacklusters +lacks +laconic +laconically +laconism +laconisms +lacquer +lacquered +lacquerer +lacquerers +lacquering +lacquers +lacquerware +lacquerwares +lacquerwork +lacquerworks +lacquey +lacqueyed +lacqueying +lacqueys +lacrimal +lacrimals +lacrimation +lacrimations +lacrimator +lacrimators +lacrosse +lacrosses +lacs +lactalbumin +lactalbumins +lactam +lactams +lactary +lactase +lactases +lactate +lactated +lactates +lactating +lactation +lactational +lactations +lacteal +lacteals +lactean +lacteous +lactic +lactiferous +lactobacilli +lactobacillus +lactogenic +lactoglobulin +lactoglobulins +lactone +lactones +lactonic +lactose +lactoses +lacuna +lacunae +lacunal +lacunar +lacunaria +lacunars +lacunary +lacunas +lacunate +lacune +lacunes +lacunose +lacustrine +lacy +lad +ladanum +ladanums +ladder +laddered +laddering +ladderlike +ladders +laddie +laddies +lade +laded +laden +ladened +ladening +ladens +lader +laders +lades +ladies +lading +ladings +ladino +ladinos +ladle +ladled +ladleful +ladlefuls +ladler +ladlers +ladles +ladling +ladron +ladrone +ladrones +ladrons +lads lady +ladybird +ladybirds +ladybug +ladybugs +ladyfinger +ladyfingers +ladyfish +ladyfishes +ladyhood +ladyhoods +ladyish +ladykin +ladykins +ladylike +ladylove +ladyloves +ladypalm +ladypalms +ladyship +ladyships +laetrile +laetriles +laevo +lag +lagan +lagans +lagend +lagends +lager +lagered +lagering +lagers +laggard +laggardly +laggardness +laggardnesses +laggards +lagged +lagger +laggers +lagging +laggings +lagnappe +lagnappes +lagniappe +lagniappes +lagomorph +lagomorphs +lagoon +lagoonal +lagoons +lags +laguna +lagunas +lagune +lagunes +lahar +lahars +laic +laical +laically +laich +laichs +laicise +laicised +laicises +laicising +laicism +laicisms +laicization +laicizations +laicize +laicized +laicizes +laicizing +laics +laid +laigh +laighs +lain +lair +laird +lairdly +lairds +laired +lairing +lairs +laitance +laitances +laith +laithly +laities +laity lake +laked +lakefront +lakefronts +lakelike +lakeport +lakeports +laker +lakers +lakes +lakeshore +lakeshores +lakeside +lakesides +lakh +lakhs +lakier +lakiest +laking +lakings +laky +lall +lallan +lalland +lallands +lallans +lalled +lalling +lalls +lallygag +lallygagged +lallygagging +lallygags +lam +lama +lamas +lamaseries +lamasery lamb +lambast +lambaste +lambasted +lambastes +lambasting +lambasts +lambda +lambdas +lambdoid +lambed +lambencies +lambency +lambent +lambently +lamber +lambers +lambert +lamberts +lambie +lambier +lambies +lambiest +lambing +lambkill +lambkills +lambkin +lambkins +lamblike +lambrequin +lambrequins +lambs +lambskin +lambskins +lamby lame +lamebrain +lamebrained +lamebrains +lamed +lamedh +lamedhs +lameds +lamella +lamellae +lamellar +lamellas +lamellate +lamellately +lamellibranch +lamellibranchs +lamellicorn +lamellicorns +lamelliform +lamely +lameness +lamenesses +lament +lamentable +lamentableness +lamentablenesses +lamentably +lamentation +lamentations +lamented +lamentedly +lamenter +lamenters +lamenting +laments +lamer +lames +lamest +lamia +lamiae +lamias +lamina +laminae +laminal +laminar +laminaria +laminarian +laminarians +laminarias +laminarin +laminarins +laminary +laminas +laminate +laminated +laminates +laminating +lamination +laminations +laminator +laminators +laming +laminitis +laminitises +laminose +laminous +lamister +lamisters +lammed +lammergeier +lammergeiers +lammergeyer +lammergeyers +lamming lamp +lampad +lampads +lampas +lampases +lampblack +lampblacks +lamped +lampers +lamperses +lamping +lampion +lampions +lamplight +lamplighter +lamplighters +lamplights +lampoon +lampooned +lampooner +lampooneries +lampooners +lampoonery +lampooning +lampoons +lamppost +lampposts +lamprey +lampreys +lamps +lampshell +lampshells +lampyrid +lampyrids +lams +lamster +lamsters +lanai +lanais +lanate +lanated +lance +lanced +lancelet +lancelets +lanceolate +lancer +lancers +lances +lancet +lanceted +lancets +lancewood +lancewoods +lanciers +lancinating +lancing land +landau +landaulet +landaulets +landaus +landed +lander +landers +landfall +landfalls +landfill +landfills +landform +landforms +landgrab +landgrabs +landholder +landholders +landholding +landholdings +landing +landings +landladies +landlady +landler +landlers +landless +landlessness +landlessnesses +landline +landlines +landlocked +landlord +landlordism +landlordisms +landlords +landlubber +landlubberliness +landlubberlinesses +landlubberly +landlubbers +landlubbing +landman +landmark +landmarks +landmass +landmasses +landmen +landowner +landowners +landownership +landownerships +landowning +landownings +lands +landscape +landscaped +landscaper +landscapers +landscapes +landscaping +landscapist +landscapists +landside +landsides +landskip +landskips +landsleit +landslid +landslide +landslides +landsliding +landslip +landslips +landsman +landsmen +landward +lane +lanely +lanes +laneway +laneways +lang +langbeinite +langbeinites +langlauf +langlaufer +langlaufers +langlaufs +langley +langleys +langostino +langostinos +langouste +langoustes +langoustine +langoustines +langrage +langrages +langrel +langrels +langshan +langshans +langsyne +langsynes language +languages +langue +langues +languet +languets +languid +languidly +languidness +languidnesses +languish +languished +languisher +languishers +languishes +languishing +languishingly +languishment +languishments +languor +languorous +languorously +languors +langur +langurs +laniard +laniards +laniaries +laniary +lanital +lanitals +lank +lanker +lankest +lankier +lankiest +lankily +lankiness +lankinesses +lankly +lankness +lanknesses +lanky +lanner +lanneret +lannerets +lanners +lanolin +lanoline +lanolines +lanolins +lanose +lanosities +lanosity +lantana +lantanas lantern +lanterns +lanthanide +lanthanides +lanthanum +lanthanums +lanthorn +lanthorns +lanuginous +lanugo +lanugos +lanyard +lanyards lap +laparoscope +laparoscopes +laparoscopic +laparoscopies +laparoscopist +laparoscopists +laparoscopy +laparotomies +laparotomy +lapboard +lapboards +lapdog +lapdogs +lapel +lapeled +lapelled +lapels +lapful +lapfuls +lapidarian +lapidaries +lapidary +lapidate +lapidated +lapidates +lapidating +lapides +lapidified +lapidifies +lapidify +lapidifying +lapidist +lapidists +lapilli +lapillus +lapin +lapins +lapis +lapises +lapped +lapper +lappered +lappering +lappers +lappet +lappeted +lappets +lapping +laps +lapsable +lapse +lapsed +lapser +lapsers +lapses +lapsible +lapsing +lapstrake +lapsus +laptop +laptops +lapwing +lapwings +lar +larboard +larboards +larcener +larceners +larcenies +larcenist +larcenists +larcenous +larcenously +larceny +larch +larches +lard +larded +larder +larders +lardier +lardiest +larding +lardlike +lardon +lardons +lardoon +lardoons +lards +lardy +laree +larees +lares +largando large +largehearted +largeheartedness +largeheartednesses +largely +largemouth +largemouths +largeness +largenesses +larger +larges +largess +largesse +largesses +largest +larghetto +larghettos +largish +largo +largos +lari +lariat +lariated +lariating +lariats +larine +laris +lark +larked +larker +larkers +larkier +larkiest +larkiness +larkinesses +larking +larkish +larks +larksome +larkspur +larkspurs +larky +larrigan +larrigans +larrikin +larrikins +larrup +larruped +larruper +larrupers +larruping +larrups +lars +larum +larums +larva +larvae +larval +larvas +larvicidal +larvicide +larvicides +laryngal +laryngals +laryngeal +laryngeals +laryngectomee +laryngectomees +laryngectomies +laryngectomized +laryngectomy +larynges +laryngites +laryngitic +laryngitides +laryngitis +laryngitises +laryngologies +laryngology +laryngoscope +laryngoscopes +laryngoscopies +laryngoscopy +larynx +larynxes +las +lasagna +lasagnas +lasagne +lasagnes +lascar +lascars +lascivious +lasciviously +lasciviousness +lasciviousnesses +lase +lased +laser +lasers +lases +lash +lashed +lasher +lashers +lashes +lashing +lashings +lashins +lashkar +lashkars +lasing +lass +lasses +lassie +lassies +lassitude +lassitudes +lasso +lassoed +lassoer +lassoers +lassoes +lassoing +lassos last +lasted +laster +lasters +lasting +lastingly +lastingness +lastingnesses +lastings +lastly +lasts +lat +latakia +latakias +latch +latched +latches +latchet +latchets +latching +latchkey +latchkeys +latchstring +latchstrings late +latecomer +latecomers +lated +lateen +lateener +lateeners +lateens +lately +laten +latencies +latency +latened +lateness +latenesses +latening +latens +latensification +latensifications +latent +latently +latents +later +laterad +lateral +lateraled +lateraling +lateralization +lateralizations +lateralize +lateralized +lateralizes +lateralizing +laterally +laterals +laterite +laterites +lateritic +laterization +laterizations +laterize +laterized +laterizes +laterizing +latest +latests +latewood +latewoods +latex +latexes +lath +lathe +lathed +lather +lathered +latherer +latherers +lathering +lathers +lathery +lathes +lathi +lathier +lathiest +lathing +lathings +lathis +laths +lathwork +lathworks +lathy +lathyrism +lathyrisms +lathyritic +lati +latices +laticifer +laticifers +latifundia +latifundio +latifundios +latifundium +latigo +latigoes +latigos +latinities +latinity +latinization +latinizations +latinize +latinized +latinizes +latinizing +latino +latinos +latish +latitude +latitudes +latitudinal +latitudinally +latitudinarian +latitudinarianism +latitudinarianisms +latitudinarians +latke +latkes +latosol +latosolic +latosols +latria +latrias +latrine +latrines +lats +latte +latten +lattens latter +latterly +lattes +lattice +latticed +lattices +latticework +latticeworks +latticing +lattin +lattins +lauan +lauans +laud +laudable +laudableness +laudablenesses +laudably +laudanum +laudanums +laudation +laudations +laudative +laudator +laudators +laudatory +lauded +lauder +lauders +lauding +lauds laugh +laughable +laughableness +laughablenesses +laughably +laughed +laugher +laughers +laughing +laughingly +laughings +laughingstock +laughingstocks +laughs laughter +laughters +launce +launces +launch +launched +launcher +launchers +launches +launching +launchpad +launchpads +launder +laundered +launderer +launderers +launderette +launderettes +laundering +launders +laundress +laundresses +laundrette +laundrettes +laundries laundry +laundryman +laundrymen +laura +laurae +lauras +laureate +laureated +laureates +laureateship +laureateships +laureating +laureation +laureations +laurel +laureled +laureling +laurelled +laurelling +laurels +lauwine +lauwines +lav +lava +lavabo +lavaboes +lavabos +lavage +lavages +lavalava +lavalavas +lavalier +lavaliere +lavalieres +lavaliers +lavalike +lavalliere +lavallieres +lavas +lavation +lavations +lavatories +lavatory +lave +laved +laveer +laveered +laveering +laveers +lavender +lavendered +lavendering +lavenders +laver +laverock +laverocks +lavers +laves +laving +lavish +lavished +lavisher +lavishers +lavishes +lavishest +lavishing +lavishly +lavishness +lavishnesses +lavrock +lavrocks +lavs law +lawbook +lawbooks +lawbreaker +lawbreakers +lawbreaking +lawbreakings +lawed +lawful +lawfully +lawfulness +lawfulnesses +lawgiver +lawgivers +lawine +lawines +lawing +lawings +lawless +lawlessly +lawlessness +lawlessnesses +lawlike +lawmaker +lawmakers +lawmaking +lawmakings +lawman +lawmen +lawn +lawnmower +lawnmowers +lawns +lawny +lawrencium +lawrenciums +laws +lawsuit +lawsuits lawyer +lawyered +lawyering +lawyerings +lawyerlike +lawyerly +lawyers +lax +laxation +laxations +laxative +laxatives +laxer +laxest +laxities +laxity +laxly +laxness +laxnesses lay +layabout +layabouts +layaway +layaways +layed +layer +layerage +layerages +layered +layering +layerings +layers +layette +layettes +laying +layman +laymen +layoff +layoffs +layout +layouts +layover +layovers +laypeople +layperson +laypersons +lays +layup +layups +laywoman +laywomen +lazar +lazaret +lazarets +lazarette +lazarettes +lazaretto +lazarettos +lazars +laze +lazed +lazes +lazied +lazier +lazies +laziest +lazily +laziness +lazinesses +lazing +lazuli +lazulis +lazulite +lazulites +lazurite +lazurites lazy +lazybones +lazying +lazyish +lea +leach +leachabilities +leachability +leachable +leachate +leachates +leached +leacher +leachers +leaches +leachier +leachiest +leaching +leachy lead +leaded +leaden +leadenly +leadenness +leadennesses leader +leaderless +leaders +leadership +leaderships +leadier +leadiest +leading +leadings +leadless +leadman +leadmen +leadoff +leadoffs +leadplant +leadplants +leads +leadscrew +leadscrews +leadsman +leadsmen +leadwork +leadworks +leadwort +leadworts +leady leaf +leafage +leafages +leafed +leafhopper +leafhoppers +leafier +leafiest +leafing +leafless +leaflet +leafleted +leafleteer +leafleteers +leafleting +leaflets +leafletted +leafletting +leaflike +leafs +leafstalk +leafstalks +leafworm +leafworms +leafy league +leagued +leaguer +leaguered +leaguering +leaguers +leagues +leaguing leak +leakage +leakages +leaked +leaker +leakers +leakier +leakiest +leakily +leakiness +leakinesses +leaking +leakless +leakproof +leaks +leaky +leal +leally +lealties +lealty +lean +leaned +leaner +leaners +leanest +leaning +leanings +leanly +leanness +leannesses +leans +leant +leap +leaped +leaper +leapers +leapfrog +leapfrogged +leapfrogging +leapfrogs +leaping +leaps +leapt +lear +learier +leariest learn +learnable +learned +learnedly +learnedness +learnednesses +learner +learners +learning +learnings +learns +learnt +lears +leary +leas +leasable +lease +leaseback +leasebacks +leased +leasehold +leaseholder +leaseholders +leaseholds +leaser +leasers +leases +leash +leashed +leashes +leashing +leasing +leasings least +leasts +leastways +leastwise leather +leatherback +leatherbacks +leathered +leatherette +leatherettes +leathering +leatherleaf +leatherleaves +leatherlike +leathern +leatherneck +leathernecks +leathers +leatherwood +leatherwoods +leathery leave +leaved +leaven +leavened +leavening +leavenings +leavens +leaver +leavers +leaves +leavier +leaviest +leaving +leavings +leavy +leben +lebens +lebensraum +lebensraums +lech +lechayim +lechayims +leched +lecher +lechered +lecheries +lechering +lecherous +lecherously +lecherousness +lecherousnesses +lechers +lechery +leches +leching +lechwe +lechwes +lecithin +lecithinase +lecithinases +lecithins +lectern +lecterns +lectin +lectins +lection +lectionaries +lectionary +lections +lector +lectors +lectotype +lectotypes lecture +lectured +lecturer +lecturers +lectures +lectureship +lectureships +lecturing +lecythi +lecythis +lecythus +led +lederhosen +ledge +ledger +ledgers +ledges +ledgier +ledgiest +ledgy +lee +leeboard +leeboards +leech +leeched +leeches +leeching +leechlike +leek +leeks +leer +leered +leerier +leeriest +leerily +leering +leeringly +leers +leery +lees +leet +leets +leeward +leewards +leeway +leeways left +lefter +leftest +lefties +leftish +leftism +leftisms +leftist +leftists +leftover +leftovers +lefts +leftward +leftwing +lefty leg +legacies +legacy legal +legalese +legaleses +legalise +legalised +legalises +legalising +legalism +legalisms +legalist +legalistic +legalistically +legalists +legalities +legality +legalization +legalizations +legalize +legalized +legalizer +legalizers +legalizes +legalizing +legally +legals +legate +legated +legatee +legatees +legates +legateship +legateships +legatine +legating +legation +legations +legato +legator +legators +legatos +legend +legendarily +legendary +legendries +legendry +legends +leger +legerdemain +legerdemains +legerities +legerity +legers +leges +legged +leggier +leggiero +leggiest +leggin +legginess +legginesses +legging +leggings +leggins +leggy +leghorn +leghorns +legibilities +legibility +legible +legibly +legion +legionaries +legionary +legionnaire +legionnaires +legions +legislate +legislated +legislates +legislating +legislation +legislations +legislative +legislatively +legislatives +legislator +legislatorial +legislators +legislatorship +legislatorships +legislature +legislatures +legist +legists +legit +legitimacies +legitimacy +legitimate +legitimated +legitimately +legitimates +legitimating +legitimation +legitimations +legitimatize +legitimatized +legitimatizes +legitimatizing +legitimator +legitimators +legitimise +legitimised +legitimises +legitimising +legitimism +legitimisms +legitimist +legitimists +legitimization +legitimizations +legitimize +legitimized +legitimizer +legitimizers +legitimizes +legitimizing +legits +legless +leglike +legman +legmen +legong +legongs +legroom +legrooms +legs +legume +legumes +legumin +leguminous +legumins +legwork +legworks +lehayim +lehayims +lehr +lehrs +lehua +lehuas +lei +leis +leishmania +leishmanial +leishmanias +leishmaniases +leishmaniasis +leister +leistered +leistering +leisters +leisure +leisured +leisureliness +leisurelinesses +leisurely +leisures +leitmotif +leitmotifs +leitmotiv +leitmotivs +lek +leke +leks +leku +lekvar +lekvars +lekythi +lekythoi +lekythos +lekythus +leman +lemans +lemma +lemmas +lemmata +lemming +lemminglike +lemmings +lemniscal +lemniscate +lemniscates +lemnisci +lemniscus lemon lemonade +lemonades +lemongrass +lemongrasses +lemonish +lemons +lemony +lempira +lempiras +lemur +lemures +lemurine +lemuroid +lemuroids +lemurs lend +lendable +lender +lenders +lending +lends +lenes length +lengthen +lengthened +lengthener +lengtheners +lengthening +lengthens +lengthier +lengthiest +lengthily +lengthiness +lengthinesses +lengths +lengthways +lengthwise +lengthy +lenience +leniences +leniencies +leniency +lenient +leniently +lenis +lenities +lenition +lenitions +lenitive +lenitively +lenitives +lenity +leno +lenos +lens +lense +lensed +lenses +lensing +lensless +lensman +lensmen +lent +lentamente +lentando +lenten +lentic +lenticel +lenticels +lenticular +lenticule +lenticules +lentigines +lentigo +lentil +lentils +lentisk +lentisks +lentissimo +lentivirus +lentiviruses +lento +lentoid +lentos +leone +leones +leonine +leopard +leopardess +leopardesses +leopards +leotard +leotarded +leotards +leper +lepers +lepidolite +lepidolites +lepidoptera +lepidopteran +lepidopterans +lepidopterist +lepidopterists +lepidopterological +lepidopterologies +lepidopterologist +lepidopterologists +lepidopterology +lepidopterous +lepidote +lepidotes +leporid +leporidae +leporids +leporine +leprechaun +leprechaunish +leprechauns +lepromatous +leprosaria +leprosarium +leprosariums +leprose +leprosies +leprosy +leprotic +leprous +leprously +lept +lepta +leptocephali +leptocephalus +lepton +leptonic +leptons +leptosome +leptosomes +leptospiral +leptospire +leptospires +leptospiroses +leptospirosis +leptotene +leptotenes +lesbian +lesbianism +lesbianisms +lesbians +lesion +lesioned +lesions +lespedeza +lespedezas +less +lessee +lessees +lessen +lessened +lessening +lessens +lesser lesson +lessoned +lessoning +lessons +lessor +lessors +lest let +letch +letched +letches +letching +letdown +letdowns +lethal +lethalities +lethality +lethally +lethals +lethargic +lethargically +lethargies +lethargy +lethe +lethean +lethes +lets +letted letter +letterboxed +letterboxing +letterboxings +lettered +letterer +letterers +letterform +letterforms +letterhead +letterheads +lettering +letterings +letterman +lettermen +letterpress +letterpresses +letters +letterspace +letterspaces +letterspacing +letterspacings +letting +lettuce +lettuces +letup +letups +leu +leucemia +leucemias +leucemic +leucin +leucine +leucines +leucins +leucite +leucites +leucitic +leucocidin +leucocidins +leucoma +leucomas +leucoplast +leucoplasts +leud +leudes +leuds +leukaemia +leukaemias +leukaemogeneses +leukaemogenesis +leukemia +leukemias +leukemic +leukemics +leukemogeneses +leukemogenesis +leukemogenic +leukemoid +leukocyte +leukocytes +leukocytic +leukocytoses +leukocytosis +leukocytosises +leukodystrophies +leukodystrophy +leukoma +leukomas +leukon +leukons +leukopenia +leukopenias +leukopenic +leukoplakia +leukoplakias +leukoplakic +leukopoieses +leukopoiesis +leukopoietic +leukorrhea +leukorrheal +leukorrheas +leukoses +leukosis +leukotic +leukotomies +leukotomy +leukotriene +leukotrienes +lev +leva +levant +levanted +levanter +levanters +levanting +levants +levator +levatores +levators +levee +leveed +leveeing +levees level +leveled +leveler +levelers +levelheaded +levelheadedness +levelheadednesses +leveling +levelled +leveller +levellers +levelling +levelly +levelness +levelnesses +levels +lever +leverage +leveraged +leverages +leveraging +levered +leveret +leverets +levering +levers +leviable +leviathan +leviathans +levied +levier +leviers +levies +levigate +levigated +levigates +levigating +levigation +levigations +levin +levins +levirate +levirates +leviratic +levitate +levitated +levitates +levitating +levitation +levitational +levitations +levities +levity +levo +levodopa +levodopas +levogyre +levorotary +levorotatory +levulin +levulins +levulose +levuloses +levy +levying +lewd +lewder +lewdest +lewdly +lewdness +lewdnesses +lewis +lewises +lewisite +lewisites +lewisson +lewissons +lex +lexeme +lexemes +lexemic +lexes +lexica +lexical +lexicalisation +lexicalisations +lexicalities +lexicality +lexicalization +lexicalizations +lexicalize +lexicalized +lexicalizes +lexicalizing +lexically +lexicographer +lexicographers +lexicographic +lexicographical +lexicographically +lexicographies +lexicography +lexicologies +lexicologist +lexicologists +lexicology +lexicon +lexicons +lexis +ley +leys +lez +lezzes +lezzie +lezzies +lezzy +li +liabilities +liability +liable +liaise +liaised +liaises +liaising +liaison +liaisons +liana +lianas +liane +lianes +liang +liangs +lianoid +liar +liard +liards +liars +lib +libation +libationary +libations +libber +libbers +libecchio +libecchios +libeccio +libeccios +libel +libelant +libelants +libeled +libelee +libelees +libeler +libelers +libeling +libelist +libelists +libellant +libellants +libelled +libellee +libellees +libeller +libellers +libelling +libellous +libelous +libels +liber +liberal +liberalise +liberalised +liberalises +liberalising +liberalism +liberalisms +liberalist +liberalistic +liberalists +liberalities +liberality +liberalization +liberalizations +liberalize +liberalized +liberalizer +liberalizers +liberalizes +liberalizing +liberally +liberalness +liberalnesses +liberals +liberate +liberated +liberates +liberating liberation +liberationist +liberationists +liberations +liberator +liberators +libers +libertarian +libertarianism +libertarianisms +libertarians +liberties +libertinage +libertinages +libertine +libertines +libertinism +libertinisms liberty +libidinal +libidinally +libidinous +libidinously +libidinousness +libidinousnesses +libido +libidos +liblab +liblabs +libra +librae librarian +librarians +librarianship +librarianships +libraries library +libras +librate +librated +librates +librating +libration +librational +librations +libratory +libretti +librettist +librettists +libretto +librettos +libri +libriform +libs +lice +licence +licenced +licencee +licencees +licencer +licencers +licences +licencing +licensable license +licensed +licensee +licensees +licenser +licensers +licenses +licensing +licensor +licensors +licensure +licensures +licente +licentiate +licentiates +licentious +licentiously +licentiousness +licentiousnesses +lich +lichee +lichees +lichen +lichened +lichenin +lichening +lichenins +lichenological +lichenologies +lichenologist +lichenologists +lichenology +lichenous +lichens +liches +lichi +lichis +licht +lichted +lichting +lichtly +lichts +licit +licitly +lick +licked +licker +lickerish +lickerishly +lickerishness +lickerishnesses +lickers +licking +lickings +licks +lickspit +lickspits +lickspittle +lickspittles +licorice +licorices +lictor +lictors lid +lidar +lidars +lidded +lidding +lidless +lido +lidocaine +lidocaines +lidos +lids lie +liebfraumilch +liebfraumilchs +lied +lieder +lief +liefer +liefest +liefly +liege +liegeman +liegemen +lieges +lien +lienable +lienal +liens +lienteries +lientery +lier +lierne +liernes +liers +lies +lieu +lieus +lieutenancies +lieutenancy +lieutenant +lieutenants +lieve +liever +lievest life +lifeblood +lifebloods +lifeboat +lifeboats +lifeful +lifeguard +lifeguarded +lifeguarding +lifeguards +lifeless +lifelessly +lifelessness +lifelessnesses +lifelike +lifelikeness +lifelikenesses +lifeline +lifelines +lifelong +lifemanship +lifemanships +lifer +lifers +lifesaver +lifesavers +lifesaving +lifesavings +lifestyle +lifestyles +lifetime +lifetimes +lifeway +lifeways +lifework +lifeworks lift +liftable +lifted +lifter +lifters +liftgate +liftgates +lifting +liftman +liftmen +liftoff +liftoffs +lifts +ligament +ligamentous +ligaments +ligan +ligand +ligands +ligans +ligase +ligases +ligate +ligated +ligates +ligating +ligation +ligations +ligative +ligature +ligatured +ligatures +ligaturing +liger +ligers light +lightbulb +lightbulbs +lighted +lighten +lightened +lightener +lighteners +lightening +lightens +lighter +lighterage +lighterages +lightered +lightering +lighters +lightest +lightface +lightfaced +lightfaces +lightfast +lightfastness +lightfastnesses +lightful +lightheaded +lighthearted +lightheartedly +lightheartedness +lightheartednesses +lighthouse +lighthouses +lighting +lightings +lightish +lightless +lightly +lightness +lightnesses lightning +lightninged +lightnings +lightplane +lightplanes +lightproof +lights +lightship +lightships +lightsome +lightsomely +lightsomeness +lightsomenesses +lighttight +lightweight +lightweights +lightwood +lightwoods +ligneous +lignification +lignifications +lignified +lignifies +lignify +lignifying +lignin +lignins +lignite +lignites +lignitic +lignocellulose +lignocelluloses +lignocellulosic +lignosulfonate +lignosulfonates +ligroin +ligroine +ligroines +ligroins +ligula +ligulae +ligular +ligulas +ligulate +ligule +ligules +liguloid +ligure +ligures +likabilities +likability +likable +likableness +likablenesses like +likeable +liked +likelier +likeliest +likelihood +likelihoods likely +liken +likened +likeness +likenesses +likening +likens +liker +likers +likes +likest +likewise +liking +likings +likuta +lilac +lilacs +lilangeni +lilied +lilies +lilliput +lilliputian +lilliputians +lilliputs +lilt +lilted +lilting +liltingly +liltingness +liltingnesses +lilts +lily +lilylike +lima +limacine +limacon +limacons +liman +limans +limas +limb +limba +limbas +limbate +limbeck +limbecks +limbed +limber +limbered +limberer +limberest +limbering +limberly +limberness +limbernesses +limbers +limbi +limbic +limbier +limbiest +limbing +limbless +limbo +limbos +limbs +limbus +limbuses +limby +lime +limeade +limeades +limed +limekiln +limekilns +limeless +limelight +limelighted +limelighting +limelights +limen +limens +limerick +limericks +limes +limestone +limestones +limewater +limewaters +limey +limeys +limier +limiest +limina +liminal +liminess +liminesses +liming limit +limitable +limitary +limitation +limitational +limitations +limitative +limited +limitedly +limitedness +limitednesses +limiteds +limiter +limiters +limites +limiting +limitingly +limitless +limitlessly +limitlessness +limitlessnesses +limitrophe +limits +limmer +limmers +limn +limned +limner +limners +limnetic +limnic +limning +limnologic +limnological +limnologies +limnologist +limnologists +limnology +limns +limo +limonene +limonenes +limonite +limonites +limonitic +limos +limousine +limousines +limp +limpa +limpas +limped +limper +limpers +limpest +limpet +limpets +limpid +limpidities +limpidity +limpidly +limpidness +limpidnesses +limping +limpkin +limpkins +limply +limpness +limpnesses +limps +limpsey +limpsier +limpsiest +limpsy +limuli +limuloid +limuloids +limulus +limy +lin +linable +linac +linacs +linage +linages +linalol +linalols +linalool +linalools +linchpin +linchpins +lincomycin +lincomycins +lindane +lindanes +linden +lindens +lindies +lindy line +lineable +lineage +lineages +lineal +linealities +lineality +lineally +lineament +lineamental +lineaments +linear +linearise +linearised +linearises +linearising +linearities +linearity +linearization +linearizations +linearize +linearized +linearizes +linearizing +linearly +lineate +lineated +lineation +lineations +linebacker +linebackers +linebacking +linebackings +linebred +linebreeding +linebreedings +linecaster +linecasters +linecasting +linecastings +linecut +linecuts +lined +lineless +linelike +lineman +linemen +linen +linens +lineny +liner +linerboard +linerboards +linerless +liners +lines +linesman +linesmen +lineup +lineups +liney +ling +linga +lingam +lingams +lingas +lingcod +lingcods +linger +lingered +lingerer +lingerers +lingerie +lingeries +lingering +lingeringly +lingers +lingier +lingiest +lingo +lingoes +lingonberries +lingonberry +lings +lingua +linguae +lingual +lingually +linguals +linguine +linguines +linguini +linguinis +linguist +linguistic +linguistical +linguistically +linguistician +linguisticians +linguistics +linguists +lingy +linier +liniest +liniment +liniments +linin +lining +linings +linins link +linkable +linkage +linkages +linkboy +linkboys +linked +linker +linkers +linking +linkman +linkmen +links +linksman +linksmen +linkup +linkups +linkwork +linkworks +linky +linn +linnet +linnets +linns +lino +linocut +linocuts +linoleate +linoleates +linoleum +linoleums +linos +lins +linsang +linsangs +linseed +linseeds +linsey +linseys +linstock +linstocks +lint +lintel +lintels +linter +linters +lintier +lintiest +lintless +lintol +lintols +lints +lintwhite +lintwhites +linty +linum +linums +linuron +linurons +liny lion +lioness +lionesses +lionfish +lionfishes +lionhearted +lionise +lionised +lioniser +lionisers +lionises +lionising +lionization +lionizations +lionize +lionized +lionizer +lionizers +lionizes +lionizing +lionlike +lions lip +lipase +lipases +lipid +lipide +lipides +lipidic +lipids +lipin +lipins +lipless +liplike +lipocyte +lipocytes +lipogeneses +lipogenesis +lipoid +lipoidal +lipoids +lipolyses +lipolysis +lipolytic +lipoma +lipomas +lipomata +lipomatous +lipophilic +lipopolysaccharide +lipopolysaccharides +lipoprotein +lipoproteins +liposomal +liposome +liposomes +liposuction +liposuctions +lipotropic +lipotropin +lipotropins +lipped +lippen +lippened +lippening +lippens +lipper +lippered +lippering +lippers +lippier +lippiest +lipping +lippings +lippy +lipreading +lipreadings +lips +lipstick +lipsticked +lipsticks +liquate +liquated +liquates +liquating +liquation +liquations +liquefaction +liquefactions +liquefied +liquefier +liquefiers +liquefies +liquefy +liquefying +liquescent +liqueur +liqueurs liquid +liquidambar +liquidambars +liquidate +liquidated +liquidates +liquidating +liquidation +liquidations +liquidator +liquidators +liquidities +liquidity +liquidize +liquidized +liquidizes +liquidizing +liquidly +liquidness +liquidnesses +liquids +liquified +liquifies +liquify +liquifying +liquor +liquored +liquorice +liquorices +liquoring +liquors +lira +liras +lire +liri +liripipe +liripipes +lirot +liroth +lis +lisente +lisle +lisles +lisp +lisped +lisper +lispers +lisping +lisps +lissom +lissome +lissomely +lissomeness +lissomenesses +lissomly list +listable +listed +listee +listees +listel +listels listen +listenable +listened +listener +listeners +listenership +listenerships +listening +listens +lister +listerioses +listeriosis +listers +listing +listings +listless +listlessly +listlessness +listlessnesses +lists +lit +litai +litanies +litany +litas +litchi +litchis +lite liter +literacies +literacy +literal +literalism +literalisms +literalist +literalistic +literalists +literalities +literality +literalization +literalizations +literalize +literalized +literalizes +literalizing +literally +literalness +literalnesses +literals +literarily +literariness +literarinesses literary +literate +literately +literateness +literatenesses +literates +literati +literatim +literation +literations +literator +literators literature +literatures +literatus +liters +litharge +litharges +lithe +lithely +lithemia +lithemias +lithemic +litheness +lithenesses +lither +lithesome +lithest +lithia +lithias +lithiases +lithiasis +lithic +lithification +lithifications +lithified +lithifies +lithify +lithifying +lithium +lithiums +litho +lithoed +lithograph +lithographed +lithographer +lithographers +lithographic +lithographically +lithographies +lithographing +lithographs +lithography +lithoid +lithoing +lithologic +lithological +lithologically +lithologies +lithology +lithophane +lithophanes +lithophyte +lithophytes +lithopone +lithopones +lithos +lithosol +lithosols +lithosphere +lithospheres +lithospheric +lithotomies +lithotomy +lithotripsies +lithotripsy +lithotripter +lithotripters +lithotriptor +lithotriptors +litigable +litigant +litigants +litigate +litigated +litigates +litigating +litigation +litigations +litigator +litigators +litigious +litigiously +litigiousness +litigiousnesses +litmus +litmuses +litoral +litotes +litotic litre +litres +lits +litten +litter +litterateur +litterateurs +litterbag +litterbags +litterbug +litterbugs +littered +litterer +litterers +littering +littermate +littermates +litters +littery little +littleneck +littlenecks +littleness +littlenesses +littler +littles +littlest +littlish +littoral +littorals +litu +liturgic +liturgical +liturgically +liturgics +liturgies +liturgiologies +liturgiologist +liturgiologists +liturgiology +liturgist +liturgists +liturgy +livabilities +livability +livable +livableness +livablenesses live +liveabilities +liveability +liveable +lived +livelier +liveliest +livelihood +livelihoods +livelily +liveliness +livelinesses +livelong lively +liven +livened +livener +liveners +liveness +livenesses +livening +livens +liver +liveried +liveries +liverish +liverishness +liverishnesses +livers +liverwort +liverworts +liverwurst +liverwursts +livery +liveryman +liverymen +lives +livest +livestock +livestocks +livetrap +livetrapped +livetrapping +livetraps +livid +lividities +lividity +lividly +lividness +lividnesses +livier +liviers +living +livingly +livingness +livingnesses +livings +livre +livres +livyer +livyers +lixivia +lixivial +lixiviate +lixiviated +lixiviates +lixiviating +lixiviation +lixiviations +lixivium +lixiviums +lizard +lizards +llama +llamas +llano +llanos +lo +loach +loaches load +loaded +loader +loaders +loading +loadings +loadmaster +loadmasters +loads +loadstar +loadstars +loadstone +loadstones loaf +loafed +loafer +loafers +loafing +loafs +loam +loamed +loamier +loamiest +loaming +loamless +loams +loamy +loan +loanable +loaned +loaner +loaners +loaning +loanings +loans +loanword +loanwords +loath +loathe +loathed +loather +loathers +loathes +loathful +loathing +loathings +loathly +loathness +loathnesses +loathsome +loathsomely +loathsomeness +loathsomenesses +loaves +lob +lobar +lobate +lobated +lobately +lobation +lobations +lobbed +lobber +lobbers +lobbied +lobbies +lobbing +lobby +lobbyer +lobbyers +lobbygow +lobbygows +lobbying +lobbyism +lobbyisms +lobbyist +lobbyists +lobe +lobectomies +lobectomy +lobed +lobefin +lobefins +lobelia +lobelias +lobeline +lobelines +lobes +loblollies +loblolly +lobo +lobos +lobotomies +lobotomise +lobotomised +lobotomises +lobotomising +lobotomize +lobotomized +lobotomizes +lobotomizing +lobotomy +lobs +lobscouse +lobscouses +lobster +lobstered +lobstering +lobsterings +lobsterlike +lobsterman +lobstermen +lobsters +lobstick +lobsticks +lobular +lobulate +lobulated +lobulation +lobulations +lobule +lobules +lobulose +lobworm +lobworms +loca local +locale +locales +localise +localised +localises +localising +localism +localisms +localist +localists +localite +localites +localities +locality +localizabilities +localizability +localizable +localization +localizations +localize +localized +localizes +localizing +locally +locals +locatable +locate +located +locater +locaters +locates +locating +location +locational +locationally +locations +locative +locatives +locator +locators +loch +lochan +lochans +lochia +lochial +lochs +loci lock +lockable +lockage +lockages +lockbox +lockboxes +lockdown +lockdowns +locked +locker +lockers +locket +lockets +locking +lockjaw +lockjaws +lockkeeper +lockkeepers +locknut +locknuts +lockout +lockouts +lockram +lockrams +locks +locksmith +locksmithing +locksmithings +locksmiths +lockstep +locksteps +lockstitch +lockstitched +lockstitches +lockstitching +lockup +lockups +loco +locoed +locoes +locofoco +locofocos +locoing +locoism +locoisms +locomote +locomoted +locomotes +locomoting +locomotion +locomotions +locomotive +locomotives +locomotor +locomotory +locos +locoweed +locoweeds +locular +loculate +locule +loculed +locules +loculi +loculicidal +loculus +locum +locums +locus +locust +locusta +locustae +locustal +locusts +locution +locutions +locutories +locutory +lode +loden +lodens +lodes +lodestar +lodestars +lodestone +lodestones +lodge +lodged +lodgement +lodgements +lodger +lodgers +lodges +lodging +lodgings +lodgment +lodgments +lodicule +lodicules +loess +loessal +loesses +loessial +loft +lofted +lofter +lofters +loftier +loftiest +loftily +loftiness +loftinesses +lofting +loftless +loftlike +lofts +lofty +log +logan +loganberries +loganberry +logania +logans +logaoedic +logaoedics +logarithm +logarithmic +logarithmically +logarithms +logbook +logbooks +loge +loges +loggats +logged +logger +loggerhead +loggerheads +loggers +loggets +loggia +loggias +loggie +loggier +loggiest +logging +loggings +loggy +logia +logic +logical +logicalities +logicality +logically +logicalness +logicalnesses +logician +logicians +logicise +logicised +logicises +logicising +logicize +logicized +logicizes +logicizing +logics +logier +logiest +logily +loginess +loginesses +logion +logions +logistic +logistical +logistically +logistician +logisticians +logistics +logjam +logjams +lognormal +lognormalities +lognormality +lognormally +logo +logogram +logogrammatic +logograms +logograph +logographic +logographically +logographs +logogriph +logogriphs +logoi +logomach +logomachies +logomachs +logomachy +logorrhea +logorrheas +logorrheic +logos +logotype +logotypes +logotypies +logotypy +logroll +logrolled +logroller +logrollers +logrolling +logrollings +logrolls +logs +logway +logways +logwood +logwoods +logy +loin +loincloth +loincloths +loins +loiter +loitered +loiterer +loiterers +loitering +loiters +loll +lollapalooza +lollapaloozas +lolled +loller +lollers +lollies +lolling +lollipop +lollipops +lollop +lolloped +lolloping +lollops +lolls +lolly +lollygag +lollygagged +lollygagging +lollygags +lollypop +lollypops +lomein +lomeins +loment +lomenta +loments +lomentum +lomentums +lone +lonelier +loneliest +lonelily +loneliness +lonelinesses lonely +loneness +lonenesses +loner +loners +lonesome +lonesomely +lonesomeness +lonesomenesses +lonesomes long +longan +longanimities +longanimity +longans +longboat +longboats +longbow +longbowman +longbowmen +longbows +longe +longed +longeing +longer +longeron +longerons +longers +longes +longest +longevities +longevity +longevous +longhair +longhaired +longhairs +longhand +longhands +longhead +longheaded +longheadedness +longheadednesses +longheads +longhorn +longhorns +longhouse +longhouses +longicorn +longicorns +longies +longing +longingly +longings +longish +longitude +longitudes +longitudinal +longitudinally +longleaf +longleaves +longline +longlines +longly +longness +longnesses +longs +longship +longships +longshoreman +longshoremen +longshoring +longshorings +longsighted +longsightedness +longsightednesses +longsome +longsomely +longsomeness +longsomenesses +longspur +longspurs +longtime +longueur +longueurs +longways +longwise +loo +loobies +looby +looed +looey +looeys +loof +loofa +loofah +loofahs +loofas +loofs +looie +looies +looing look +lookalike +lookalikes +lookdown +lookdowns +looked +looker +lookers +looking +lookout +lookouts +looks +lookup +lookups +loom +loomed +looming +looms +loon +looney +looneys +loonier +loonies +looniest +looniness +looninesses +loons +loony +loop +looped +looper +loopers +loophole +loopholed +loopholes +loopholing +loopier +loopiest +looping +loops +loopy +loos loose +loosed +loosely +loosen +loosened +loosener +looseners +looseness +loosenesses +loosening +loosens +looser +looses +loosest +loosestrife +loosestrifes +loosing +loot +looted +looter +looters +looting +loots +lop +lope +loped +loper +lopers +lopes +lophophore +lophophores +loping +lopped +lopper +loppered +loppering +loppers +loppier +loppiest +lopping +loppy +lops +lopsided +lopsidedly +lopsidedness +lopsidednesses +lopstick +lopsticks +loquacious +loquaciously +loquaciousness +loquaciousnesses +loquacities +loquacity +loquat +loquats +loral +loran +lorans +lord +lorded +lording +lordings +lordless +lordlier +lordliest +lordlike +lordliness +lordlinesses +lordling +lordlings +lordly +lordoma +lordomas +lordoses +lordosis +lordotic +lords +lordship +lordships +lore +loreal +lores +lorgnette +lorgnettes +lorgnon +lorgnons +lorica +loricae +loricate +loricates +lories +lorikeet +lorikeets +lorimer +lorimers +loriner +loriners +loris +lorises +lorn +lornness +lornnesses +lorries lorry +lory +losable +losableness +losablenesses lose +losel +losels +loser +losers +loses +losing +losingly +losings loss +losses +lossy +lost +lostness +lostnesses lot +lota +lotah +lotahs +lotas +loth +lothario +lotharios +lothsome +loti +lotic +lotion +lotions +lotos +lotoses +lots +lotte +lotted +lotteries +lottery +lottes +lotting +lotto +lottos +lotus +lotuses +lotusland +lotuslands +louche loud +louden +loudened +loudening +loudens +louder +loudest +loudish +loudlier +loudliest +loudly +loudmouth +loudmouthed +loudmouths +loudness +loudnesses +loudspeaker +loudspeakers +lough +loughs +louie +louies +louis lounge +lounged +lounger +loungers +lounges +loungewear +lounging +loungy +loup +loupe +louped +loupen +loupes +louping +loups +lour +loured +louring +lours +loury +louse +loused +louses +lousewort +louseworts +lousier +lousiest +lousily +lousiness +lousinesses +lousing +lousy +lout +louted +louting +loutish +loutishly +loutishness +loutishnesses +louts +louver +louvered +louvers +louvre +louvred +louvres +lovabilities +lovability +lovable +lovableness +lovablenesses +lovably +lovage +lovages +lovastatin +lovastatins +lovat +lovats love +loveable +loveably +lovebird +lovebirds +lovebug +lovebugs +loved +loveless +lovelessly +lovelessness +lovelessnesses +lovelier +lovelies +loveliest +lovelily +loveliness +lovelinesses +lovelock +lovelocks +lovelorn +lovelornness +lovelornnesses lovely +lovemaking +lovemakings +lover +loverly +lovers +loves +lovesick +lovesickness +lovesicknesses +lovesome +lovevine +lovevines +loving +lovingly +lovingness +lovingnesses low +lowball +lowballed +lowballing +lowballs +lowborn +lowboy +lowboys +lowbred +lowbrow +lowbrows +lowdown +lowdowns +lowe +lowed +lower +lowercase +lowercased +lowercases +lowercasing +lowerclassman +lowerclassmen +lowered +lowering +lowermost +lowers +lowery +lowes +lowest +lowing +lowings +lowish +lowland +lowlander +lowlanders +lowlands +lowlier +lowliest +lowlife +lowlifer +lowlifers +lowlifes +lowlight +lowlights +lowlihead +lowliheads +lowliness +lowlinesses +lowlives +lowly +lown +lowness +lownesses +lowrider +lowriders +lows +lowse +lox +loxed +loxes +loxing +loxodrome +loxodromes +loyal +loyaler +loyalest +loyalism +loyalisms +loyalist +loyalists +loyally +loyalties +loyalty +lozenge +lozenges +luau +luaus +lubber +lubberliness +lubberlinesses +lubberly +lubbers +lube +lubes +lubric +lubrical +lubricant +lubricants +lubricate +lubricated +lubricates +lubricating +lubrication +lubrications +lubricative +lubricator +lubricators +lubricious +lubriciously +lubricities +lubricity +lubricous +lucarne +lucarnes +luce +lucence +lucences +lucencies +lucency +lucent +lucently +lucern +lucerne +lucernes +lucerns +luces +lucid +lucidities +lucidity +lucidly +lucidness +lucidnesses +lucifer +luciferase +luciferases +luciferin +luciferins +luciferous +lucifers luck +lucked +luckie +luckier +luckies +luckiest +luckily +luckiness +luckinesses +lucking +luckless +lucks lucky +lucrative +lucratively +lucrativeness +lucrativenesses +lucre +lucres +lucubration +lucubrations +luculent +luculently +lude +ludes +ludic +ludicrous +ludicrously +ludicrousness +ludicrousnesses +lues +luetic +luetics +luff +luffa +luffas +luffed +luffing +luffs +luftmensch +luftmenschen +lug +luge +luged +lugeing +luger +lugers +luges luggage +luggages +lugged +lugger +luggers +luggie +luggies +lugging +lugs +lugsail +lugsails +lugubrious +lugubriously +lugubriousness +lugubriousnesses +lugworm +lugworms +lukewarm +lukewarmly +lukewarmness +lukewarmnesses +lull +lullabied +lullabies +lullaby +lullabying +lulled +lulling +lulls +lulu +lulus +lum +lumbago +lumbagos +lumbar +lumbars +lumber +lumbered +lumberer +lumberers +lumbering +lumberjack +lumberjacks +lumberman +lumbermen +lumbers +lumberyard +lumberyards +lumbosacral +lumen +lumenal +lumens +lumina +luminaire +luminaires +luminal +luminance +luminances +luminaria +luminarias +luminaries +luminary +luminesce +luminesced +luminescence +luminescences +luminescent +luminesces +luminescing +luminiferous +luminism +luminisms +luminist +luminists +luminosities +luminosity +luminous +luminously +luminousness +luminousnesses +lummox +lummoxes +lump +lumpectomies +lumpectomy +lumped +lumpen +lumpenproletariat +lumpenproletariats +lumpens +lumper +lumpers +lumpfish +lumpfishes +lumpier +lumpiest +lumpily +lumpiness +lumpinesses +lumping +lumpish +lumpishly +lumpishness +lumpishnesses +lumps +lumpy +lums +luna +lunacies +lunacy +lunar +lunarian +lunarians +lunars +lunas +lunate +lunated +lunately +lunatic +lunatics +lunation +lunations lunch +lunched +luncheon +luncheonette +luncheonettes +luncheons +luncher +lunchers +lunches +lunching +lunchmeat +lunchmeats +lunchroom +lunchrooms +lunchtime +lunchtimes +lune +lunes +lunet +lunets +lunette +lunettes lung +lungan +lungans +lunge +lunged +lungee +lungees +lunger +lungers +lunges +lungfish +lungfishes +lungful +lungfuls +lungi +lunging +lungis +lungs +lungworm +lungworms +lungwort +lungworts +lungyi +lungyis +lunier +lunies +luniest +lunisolar +lunk +lunker +lunkers +lunkhead +lunkheaded +lunkheads +lunks +lunt +lunted +lunting +lunts +lunula +lunulae +lunular +lunulate +lunule +lunules +luny +lupanar +lupanars +lupin +lupine +lupines +lupins +lupous +lupulin +lupulins +lupus +lupuses +lurch +lurched +lurcher +lurchers +lurches +lurching +lurdan +lurdane +lurdanes +lurdans +lure +lured +lurer +lurers +lures +lurid +luridly +luridness +luridnesses +luring +lurk +lurked +lurker +lurkers +lurking +lurks +luscious +lusciously +lusciousness +lusciousnesses +lush +lushed +lusher +lushes +lushest +lushing +lushly +lushness +lushnesses +lust +lusted +luster +lustered +lustering +lusterless +lusters +lusterware +lusterwares +lustful +lustfully +lustfulness +lustfulnesses +lustier +lustiest +lustihood +lustihoods +lustily +lustiness +lustinesses +lusting +lustra +lustral +lustrate +lustrated +lustrates +lustrating +lustration +lustrations +lustre +lustred +lustres +lustring +lustrings +lustrous +lustrously +lustrousness +lustrousnesses +lustrum +lustrums +lusts +lusty +lusus +lususes +lutanist +lutanists +lute +lutea +luteal +lutecium +luteciums +luted +lutefisk +lutefisks +lutein +luteinization +luteinizations +luteinize +luteinized +luteinizes +luteinizing +luteins +lutenist +lutenists +luteolin +luteolins +luteotrophic +luteotrophin +luteotrophins +luteotropic +luteotropin +luteotropins +luteous +lutes +lutestring +lutestrings +lutetium +lutetiums +luteum +luthern +lutherns +luthier +luthiers +luting +lutings +lutist +lutists +lutz +lutzes +luv +luvs +lux +luxate +luxated +luxates +luxating +luxation +luxations +luxe +luxes +luxuriance +luxuriances +luxuriant +luxuriantly +luxuriate +luxuriated +luxuriates +luxuriating +luxuries +luxurious +luxuriously +luxuriousness +luxuriousnesses +luxury +lwei +lweis +lyard +lyart +lyase +lyases +lycanthrope +lycanthropes +lycanthropic +lycanthropies +lycanthropy +lycea +lycee +lycees +lyceum +lyceums +lychee +lychees +lychnis +lychnises +lycopene +lycopenes +lycopod +lycopodium +lycopodiums +lycopods +lyddite +lyddites +lye +lyes +lying +lyingly +lyings +lymph +lymphadenitis +lymphadenitises +lymphadenopathies +lymphadenopathy +lymphangiogram +lymphangiograms +lymphangiographic +lymphangiographies +lymphangiography +lymphatic +lymphatically +lymphatics +lymphoblast +lymphoblastic +lymphoblasts +lymphocyte +lymphocytes +lymphocytic +lymphocytoses +lymphocytosis +lymphocytosises +lymphogram +lymphograms +lymphogranuloma +lymphogranulomas +lymphogranulomata +lymphogranulomatoses +lymphogranulomatosis +lymphographic +lymphographies +lymphography +lymphoid +lymphokine +lymphokines +lymphoma +lymphomas +lymphomata +lymphomatoses +lymphomatosis +lymphomatous +lymphosarcoma +lymphosarcomas +lymphosarcomata +lymphs +lyncean +lynch +lynched +lyncher +lynchers +lynches +lynching +lynchings +lynchpin +lynchpins +lynx +lynxes +lyonnaise +lyophile +lyophiled +lyophilic +lyophilise +lyophilised +lyophilises +lyophilising +lyophilization +lyophilizations +lyophilize +lyophilized +lyophilizer +lyophilizers +lyophilizes +lyophilizing +lyophobic +lyrate +lyrated +lyrately +lyre +lyrebird +lyrebirds +lyres +lyric +lyrical +lyrically +lyricalness +lyricalnesses +lyricise +lyricised +lyricises +lyricising +lyricism +lyricisms +lyricist +lyricists +lyricize +lyricized +lyricizes +lyricizing +lyrics +lyriform +lyrism +lyrisms +lyrist +lyrists +lysate +lysates +lyse +lysed +lyses +lysimeter +lysimeters +lysimetric +lysin +lysine +lysines +lysing +lysins +lysis +lysogen +lysogenic +lysogenicities +lysogenicity +lysogenies +lysogenise +lysogenised +lysogenises +lysogenising +lysogenization +lysogenizations +lysogenize +lysogenized +lysogenizes +lysogenizing +lysogens +lysogeny +lysolecithin +lysolecithins +lysosomal +lysosome +lysosomes +lysozyme +lysozymes +lyssa +lyssas +lytic +lytically +lytta +lyttae +lyttas +ma +maar +maars +mabe +mabes +mac +macaber +macabre +macaco +macacos +macadam +macadamia +macadamias +macadamize +macadamized +macadamizes +macadamizing +macadams +macaque +macaques +macaroni +macaronic +macaronics +macaronies +macaronis +macaroon +macaroons +macaw +macaws +maccabaw +maccabaws +maccaboy +maccaboys +macchia +macchie +maccoboy +maccoboys +mace +maced +macedoine +macedoines +macer +macerate +macerated +macerates +macerating +maceration +macerations +macerator +macerators +macers +maces +mach +mache +maches +machete +machetes +machicolated +machicolation +machicolations +machinabilities +machinability +machinable +machinate +machinated +machinates +machinating +machination +machinations +machinator +machinators machine +machineabilities +machineability +machineable +machined +machinelike +machineries +machinery +machines +machining +machinist +machinists +machismo +machismos +macho +machos +machree +machrees +machs +machzor +machzorim +machzors +macing +macintosh +macintoshes +mack +mackerel +mackerels +mackinaw +mackinaws +mackintosh +mackintoshes +mackle +mackled +mackles +mackling +macks +macle +macled +macles +macon +macons +macrame +macrames +macro +macroaggregate +macroaggregated +macroaggregates +macrobiotic +macrocosm +macrocosmic +macrocosmically +macrocosms +macrocyclic +macrocyte +macrocytes +macrocytic +macrocytoses +macrocytosis +macroeconomic +macroeconomics +macroevolution +macroevolutionary +macroevolutions +macrofossil +macrofossils +macrogamete +macrogametes +macroglobulin +macroglobulinemia +macroglobulinemias +macroglobulinemic +macroglobulins +macroinstruction +macroinstructions +macrolepidoptera +macromere +macromeres +macromolecular +macromolecule +macromolecules +macron +macrons +macronuclear +macronuclei +macronucleus +macronucleuses +macronutrient +macronutrients +macrophage +macrophages +macrophagic +macrophotograph +macrophotographies +macrophotographs +macrophotography +macrophyte +macrophytes +macrophytic +macropterous +macros +macroscale +macroscales +macroscopic +macroscopically +macrostructural +macrostructure +macrostructures +macrural +macruran +macrurans +macs +macula +maculae +macular +maculas +maculate +maculated +maculates +maculating +maculation +maculations +macule +maculed +macules +maculing +macumba +macumbas mad madam madame +madames +madams +madcap +madcaps +madded +madden +maddened +maddening +maddeningly +maddens +madder +madders +maddest +madding +maddish +made +madeira +madeiras +madeleine +madeleines +mademoiselle +mademoiselles +madhouse +madhouses +madly +madman +madmen +madness +madnesses +madonna +madonnas +madras +madrases +madre +madrepore +madrepores +madreporian +madreporians +madreporic +madreporite +madreporites +madres +madrigal +madrigalian +madrigalist +madrigalists +madrigals +madrilene +madrilenes +madrona +madronas +madrone +madrones +madrono +madronos +mads +maduro +maduros +madwoman +madwomen +madwort +madworts +madzoon +madzoons +mae +maelstrom +maelstroms +maenad +maenades +maenadic +maenads +maes +maestoso +maestosos +maestri +maestro +maestros +maffia +maffias +maffick +mafficked +mafficking +mafficks +mafia +mafias +mafic +mafiosi +mafioso +maftir +maftirs +mag magazine +magazines +magazinist +magazinists +magdalen +magdalene +magdalenes +magdalens +mage +magenta +magentas +mages +maggot +maggots +maggoty +magi +magian +magians magic +magical +magically +magician +magicians +magicked +magicking +magics +magilp +magilps +magister +magisterial +magisterially +magisterium +magisteriums +magisters +magistracies +magistracy +magistral +magistrally +magistrate +magistrates +magistratical +magistratically +magistrature +magistratures +maglev +maglevs +magma +magmas +magmata +magmatic +magnanimities +magnanimity +magnanimous +magnanimously +magnanimousness +magnanimousnesses +magnate +magnates +magnesia +magnesian +magnesias +magnesic +magnesite +magnesites +magnesium +magnesiums +magnet +magnetic +magnetically +magnetics +magnetise +magnetised +magnetises +magnetising +magnetism +magnetisms +magnetite +magnetites +magnetizable +magnetization +magnetizations +magnetize +magnetized +magnetizer +magnetizers +magnetizes +magnetizing +magneto +magnetoelectric +magnetofluiddynamics +magnetograph +magnetographs +magnetohydrodynamic +magnetohydrodynamics +magnetometer +magnetometers +magnetometric +magnetometries +magnetometry +magneton +magnetons +magnetopause +magnetopauses +magnetoresistance +magnetoresistances +magnetos +magnetosphere +magnetospheres +magnetospheric +magnetostatic +magnetostriction +magnetostrictions +magnetostrictive +magnetostrictively +magnetron +magnetrons +magnets +magnific +magnifical +magnifically +magnificat +magnification +magnifications +magnificats +magnificence +magnificences +magnificent +magnificently +magnifico +magnificoes +magnificos +magnified +magnifier +magnifiers +magnifies +magnify +magnifying +magniloquence +magniloquences +magniloquent +magniloquently +magnitude +magnitudes +magnolia +magnolias +magnum +magnums +magot +magots +magpie +magpies +mags +maguey +magueys +magus +maharaja +maharajah +maharajahs +maharajas +maharanee +maharanees +maharani +maharanis +maharishi +maharishis +mahatma +mahatmas +mahimahi +mahjong +mahjongg +mahjonggs +mahjongs +mahlstick +mahlsticks +mahoe +mahoes +mahoganies +mahogany +mahonia +mahonias +mahout +mahouts +mahuang +mahuangs +mahzor +mahzorim +mahzors maid +maiden +maidenhair +maidenhairs +maidenhead +maidenheads +maidenhood +maidenhoods +maidenliness +maidenlinesses +maidenly +maidens +maidhood +maidhoods +maidish +maids +maidservant +maidservants +maieutic +maigre +maihem +maihems mail +mailabilities +mailability +mailable +mailbag +mailbags mailbox +mailboxes +maile +mailed +mailer +mailers +mailes +mailing +mailings +maill +mailless +maillot +maillots +maills +mailman +mailmen +mails +maim +maimed +maimer +maimers +maiming +maims main +mainframe +mainframes mainland +mainlander +mainlanders +mainlands +mainline +mainlined +mainlines +mainlining +mainly +mainmast +mainmasts +mains +mainsail +mainsails +mainsheet +mainsheets +mainspring +mainsprings +mainstay +mainstays +mainstream +mainstreamed +mainstreaming +mainstreams +maintain +maintainabilities +maintainability +maintainable +maintained +maintainer +maintainers +maintaining +maintains +maintenance +maintenances +maintop +maintops +maiolica +maiolicas +mair +mairs +maisonette +maisonettes +maist +maists +maize +maizes +majagua +majaguas +majestic +majestically +majesties +majesty +majolica +majolicas major +majordomo +majordomos +majored +majorette +majorettes +majoring +majoritarian +majoritarianism +majoritarianisms +majoritarians +majorities majority +majorly +majors +majuscular +majuscule +majuscules +makable +makar +makars make +makeable +makebate +makebates +makefast +makefasts +makeover +makeovers +maker +makereadies +makeready +makers +makes +makeshift +makeshifts +makeup +makeups +makeweight +makeweights +makimono +makimonos +making +makings +mako +makos +makuta +malabsorption +malabsorptions +malacca +malaccas +malachite +malachites +malacological +malacologies +malacologist +malacologists +malacology +malacostracan +malacostracans +maladaptation +maladaptations +maladapted +maladaptive +maladies +maladjusted +maladjustive +maladjustment +maladjustments +maladminister +maladministered +maladministering +maladministers +maladministration +maladministrations +maladroit +maladroitly +maladroitness +maladroitnesses +malady +malaguena +malaguenas +malaise +malaises +malamute +malamutes +malanga +malangas +malapert +malapertly +malapertness +malapertnesses +malaperts +malapportioned +malapportionment +malapportionments +malaprop +malapropian +malapropism +malapropisms +malapropist +malapropists +malapropos +malaprops +malar +malaria +malarial +malarian +malarias +malariologies +malariologist +malariologists +malariology +malarious +malarkey +malarkeys +malarkies +malarky +malaroma +malaromas +malars +malate +malates +malathion +malathions +malcontent +malcontented +malcontentedly +malcontentedness +malcontentednesses +malcontents +maldistribution +maldistributions male +maleate +maleates +maledict +maledicted +maledicting +malediction +maledictions +maledictory +maledicts +malefaction +malefactions +malefactor +malefactors +malefic +maleficence +maleficences +maleficent +malemiut +malemiuts +malemute +malemutes +maleness +malenesses +males +malevolence +malevolences +malevolent +malevolently +malfeasance +malfeasances +malfed +malformation +malformations +malformed +malfunction +malfunctioned +malfunctioning +malfunctions +malgre +malic +malice +malices +malicious +maliciously +maliciousness +maliciousnesses +malign +malignance +malignances +malignancies +malignancy +malignant +malignantly +maligned +maligner +maligners +maligning +malignities +malignity +malignly +maligns +malihini +malihinis +maline +malines +malinger +malingered +malingerer +malingerers +malingering +malingers +malison +malisons +malkin +malkins +mall +mallard +mallards +malleabilities +malleability +malleable +malled +mallee +mallees +mallei +malleoli +malleolus +mallet +mallets +malleus +malling +mallow +mallows +malls +malm +malmier +malmiest +malms +malmsey +malmseys +malmy +malnourished +malnutrition +malnutritions +malocclusion +malocclusions +malodor +malodorous +malodorously +malodorousness +malodorousnesses +malodors +malolactic +maloti +malposed +malposition +malpositions +malpractice +malpractices +malpractitioner +malpractitioners +malt +maltase +maltases +malted +malteds +maltha +malthas +maltier +maltiest +malting +maltol +maltols +maltose +maltoses +maltreat +maltreated +maltreater +maltreaters +maltreating +maltreatment +maltreatments +maltreats +malts +maltster +maltsters +malty +malvasia +malvasias +malversation +malversations +mama +mamaliga +mamaligas +mamas +mamba +mambas +mambo +mamboed +mamboes +mamboing +mambos +mameluke +mamelukes +mamey +mameyes +mameys +mamie +mamies +mamluk +mamluks +mamma +mammae +mammal +mammalian +mammalians +mammalogies +mammalogist +mammalogists +mammalogy +mammals +mammary +mammas +mammate +mammati +mammatus +mammee +mammees +mammer +mammered +mammering +mammers +mammet +mammets +mammey +mammeys +mammie +mammies +mammilla +mammillae +mammillary +mammillated +mammitides +mammitis +mammock +mammocked +mammocking +mammocks +mammogram +mammograms +mammographic +mammographies +mammography +mammon +mammonism +mammonisms +mammonist +mammonists +mammons +mammoth +mammoths +mammy man +mana +manacle +manacled +manacles +manacling manage +manageabilities +manageability +manageable +manageableness +manageablenesses +manageably +managed +management +managemental +managements manager +manageress +manageresses +managerial +managerially +managers +managership +managerships +manages +managing +manakin +manakins +manana +mananas +manas +manatee +manatees +manatoid +manche +manches +manchet +manchets +manchineel +manchineels +manciple +manciples +mandala +mandalas +mandalic +mandamus +mandamused +mandamuses +mandamusing +mandarin +mandarinate +mandarinates +mandarinic +mandarinism +mandarinisms +mandarins +mandataries +mandatary +mandate +mandated +mandates +mandating +mandator +mandatories +mandatorily +mandators +mandatory +mandible +mandibles +mandibular +mandibulate +mandioca +mandiocas +mandola +mandolas +mandolin +mandoline +mandolines +mandolinist +mandolinists +mandolins +mandragora +mandragoras +mandrake +mandrakes +mandrel +mandrels +mandril +mandrill +mandrills +mandrils +mane +maned +manege +maneges +maneless +manes +maneuver +maneuverabilities +maneuverability +maneuverable +maneuvered +maneuverer +maneuverers +maneuvering +maneuvers +manful +manfully +manfulness +manfulnesses +mangabey +mangabeys +mangabies +mangaby +manganate +manganates +manganese +manganeses +manganesian +manganic +manganite +manganites +manganous +mange +mangel +mangels +manger +mangers +manges +mangey +mangier +mangiest +mangily +manginess +manginesses +mangle +mangled +mangler +manglers +mangles +mangling +mango +mangoes +mangold +mangolds +mangonel +mangonels +mangos +mangosteen +mangosteens +mangrove +mangroves +mangy +manhandle +manhandled +manhandles +manhandling +manhattan +manhattans +manhole +manholes +manhood +manhoods +manhunt +manhunts +mania +maniac +maniacal +maniacally +maniacs +manias +manic +manically +manicotti +manics +manicure +manicured +manicures +manicuring +manicurist +manicurists +manifest +manifestant +manifestants +manifestation +manifestations +manifested +manifester +manifesters +manifesting +manifestly +manifesto +manifestoed +manifestoes +manifestoing +manifestos +manifests +manifold +manifolded +manifolding +manifoldly +manifoldness +manifoldnesses +manifolds +manihot +manihots +manikin +manikins +manila +manilas +manilla +manillas +manille +manilles +manioc +manioca +maniocas +maniocs +maniple +maniples +manipulabilities +manipulability +manipulable +manipular +manipulatable +manipulate +manipulated +manipulates +manipulating +manipulation +manipulations +manipulative +manipulatively +manipulativeness +manipulativenesses +manipulator +manipulators +manipulatory +manito +manitos +manitou +manitous +manitu +manitus mankind +manless +manlier +manliest +manlike +manlily +manliness +manlinesses +manly +manmade +manna +mannan +mannans +mannas +manned +mannequin +mannequins manner +mannered +mannerism +mannerisms +mannerist +manneristic +mannerists +mannerless +mannerliness +mannerlinesses +mannerly +manners +mannikin +mannikins +manning +mannish +mannishly +mannishness +mannishnesses +mannite +mannites +mannitic +mannitol +mannitols +mannose +mannoses +mano +manoeuvre +manoeuvred +manoeuvres +manoeuvring +manometer +manometers +manometric +manometrically +manometries +manometry +manor +manorial +manorialism +manorialisms +manors +manos +manpack +manpower +manpowers +manque +manrope +manropes +mans +mansard +mansarded +mansards +manse +manservant +manses +mansion +mansions +manslaughter +manslaughters +manslayer +manslayers +mansuetude +mansuetudes +manta +mantas +manteau +manteaus +manteaux +mantel +mantelet +mantelets +mantelpiece +mantelpieces +mantels +mantelshelf +mantelshelves +mantes +mantic +manticore +manticores +mantid +mantids +mantilla +mantillas +mantis +mantises +mantissa +mantissas +mantle +mantled +mantles +mantlet +mantlets +mantling +mantlings +mantra +mantrap +mantraps +mantras +mantric +mantua +mantuas +manual +manually +manuals +manuary +manubria +manubrium +manubriums +manufactories +manufactory +manufacture +manufactured +manufacturer +manufacturers +manufactures +manufacturing +manufacturings +manumission +manumissions +manumit +manumits +manumitted +manumitting +manure +manured +manurer +manurers +manures +manurial +manuring +manus +manuscript +manuscripts +manward +manwards +manwise many +manyfold +manzanita +manzanitas map maple +maples +maplike +mapmaker +mapmakers +mapmaking +mapmakings +mappable +mapped +mapper +mappers +mapping +mappings +maps +maquette +maquettes +maqui +maquiladora +maquiladoras +maquillage +maquillages +maquis +mar +marabou +marabous +marabout +marabouts +maraca +maracas +maranta +marantas +marasca +marascas +maraschino +maraschinos +marasmic +marasmus +marasmuses marathon +marathoner +marathoners +marathoning +marathonings +marathons +maraud +marauded +marauder +marauders +marauding +marauds +maravedi +maravedis marble +marbled +marbleise +marbleised +marbleises +marbleising +marbleize +marbleized +marbleizes +marbleizing +marbler +marblers +marbles +marblier +marbliest +marbling +marblings +marbly +marc +marcasite +marcasites +marcato +marcel +marcelled +marcelling +marcels march +marched +marchen +marcher +marchers +marches +marchesa +marchese +marchesi +marching +marchioness +marchionesses +marchlike +marchpane +marchpanes +marcs +mare +maremma +maremme +marengo +mares +margaric +margarin +margarine +margarines +margarins +margarita +margaritas +margarite +margarites +margay +margays +marge +margent +margented +margenting +margents +marges +margin +marginal +marginalia +marginalities +marginality +marginalization +marginalizations +marginalize +marginalized +marginalizes +marginalizing +marginally +marginate +marginated +marginates +marginating +margination +marginations +margined +margining +margins +margravate +margravates +margrave +margraves +margravial +margraviate +margraviates +margravine +margravines +marguerite +marguerites +maria +mariachi +mariachis +mariculture +maricultures +mariculturist +mariculturists +marigold +marigolds +marihuana +marihuanas +marijuana +marijuanas +marimba +marimbas +marimbist +marimbists +marina +marinade +marinaded +marinades +marinading +marinara +marinaras +marinas +marinate +marinated +marinates +marinating +marination +marinations +marine +mariner +mariners +marines +marionette +marionettes +mariposa +mariposas +marish +marishes +marital +maritally +maritime +marjoram +marjorams mark +markdown +markdowns +marked +markedly +markedness +markednesses +marker +markers market +marketabilities +marketability +marketable +marketed +marketeer +marketeers +marketer +marketers +marketing +marketings +marketplace +marketplaces +markets +markhoor +markhoors +markhor +markhors +marking +markings +markka +markkaa +markkas +marks +marksman +marksmanship +marksmanships +marksmen +markswoman +markswomen +markup +markups +marl +marled +marlier +marliest +marlin +marline +marlines +marlinespike +marlinespikes +marling +marlings +marlins +marlinspike +marlinspikes +marlite +marlites +marlitic +marls +marlstone +marlstones +marly +marmalade +marmalades +marmite +marmites +marmoreal +marmoreally +marmorean +marmoset +marmosets +marmot +marmots +marocain +marocains +maroon +marooned +marooning +maroons +marplot +marplots +marque +marquee +marquees +marques +marquess +marquessate +marquessates +marquesses +marqueterie +marqueteries +marquetries +marquetry +marquis +marquisate +marquisates +marquise +marquises +marquisette +marquisettes +marram +marrams +marrano +marranos +marred +marrer +marrers marriage +marriageabilities +marriageability +marriageable +marriages +married +marrieds +marrier +marriers +marries +marring +marron +marrons +marrow +marrowbone +marrowbones +marrowed +marrowfat +marrowfats +marrowing +marrows +marrowy marry +marrying +mars +marsala +marsalas +marse +marses +marsh +marshal +marshalcies +marshalcy +marshaled +marshaling +marshall +marshalled +marshalling +marshalls +marshals +marshalship +marshalships +marshes +marshier +marshiest +marshiness +marshinesses +marshland +marshlands +marshmallow +marshmallows +marshmallowy +marshy +marsupia +marsupial +marsupials +marsupium +mart +martagon +martagons +marted +martello +martellos +marten +martens +martensite +martensites +martensitic +martensitically +martial +martially +martian +martians +martin +martinet +martinets +marting +martingale +martingales +martini +martinis +martins +martlet +martlets +marts +martyr +martyrdom +martyrdoms +martyred +martyries +martyring +martyrization +martyrizations +martyrize +martyrized +martyrizes +martyrizing +martyrly +martyrologies +martyrologist +martyrologists +martyrology +martyrs +martyry +marvel +marveled +marveling +marvelled +marvelling +marvellous +marvelous +marvelously +marvelousness +marvelousnesses +marvels +marvy +maryjane +maryjanes +marzipan +marzipans +mas +mascara +mascaraed +mascaraing +mascaras +mascarpone +mascarpones +mascon +mascons +mascot +mascots +masculine +masculinely +masculines +masculinise +masculinised +masculinises +masculinising +masculinities +masculinity +masculinization +masculinizations +masculinize +masculinized +masculinizes +masculinizing +maser +masers +mash +mashed +masher +mashers +mashes +mashie +mashies +mashing +mashy +masjid +masjids mask +maskable +masked +maskeg +maskegs +masker +maskers +masking +maskings +masklike +masks +masochism +masochisms +masochist +masochistic +masochistically +masochists +mason +masoned +masonic +masoning +masonries +masonry +masons +masque +masquer +masquerade +masqueraded +masquerader +masqueraders +masquerades +masquerading +masquers +masques mass +massa +massacre +massacred +massacrer +massacrers +massacres +massacring +massage +massaged +massager +massagers +massages +massaging +massas +massasauga +massasaugas +masscult +masscults +masse +massed +massedly +masses +masseter +masseteric +masseters +masseur +masseurs +masseuse +masseuses +massicot +massicots +massier +massiest +massif +massifs +massing +massive +massively +massiveness +massivenesses +massless +massy +mast +mastaba +mastabah +mastabahs +mastabas +mastectomies +mastectomy +masted master +mastered +masterful +masterfully +masterfulness +masterfulnesses +masteries +mastering +masterliness +masterlinesses +masterly +mastermind +masterminded +masterminding +masterminds +masterpiece +masterpieces +masters +mastership +masterships +mastersinger +mastersingers +masterstroke +masterstrokes +masterwork +masterworks +mastery +masthead +mastheaded +mastheading +mastheads +mastic +masticate +masticated +masticates +masticating +mastication +mastications +masticator +masticatories +masticators +masticatory +mastiche +mastiches +mastics +mastiff +mastiffs +mastigophoran +mastigophorans +masting +mastitic +mastitides +mastitis +mastix +mastixes +mastless +mastlike +mastodon +mastodonic +mastodons +mastodont +mastodonts +mastoid +mastoidectomies +mastoidectomy +mastoidites +mastoiditides +mastoiditis +mastoiditises +mastoids +masts +masturbate +masturbated +masturbates +masturbating +masturbation +masturbations +masturbator +masturbators +masturbatory +masurium +masuriums mat +matador +matadors +matambala match +matchable +matchboard +matchboards +matchbook +matchbooks +matchbox +matchboxes +matched +matcher +matchers +matches +matching +matchless +matchlessly +matchlock +matchlocks +matchmaker +matchmakers +matchmaking +matchmakings +matchstick +matchsticks +matchup +matchups +matchwood +matchwoods +mate +mated +mateless +matelot +matelote +matelotes +matelots +mater +materfamilias +materfamiliases material +materialise +materialised +materialises +materialising +materialism +materialisms +materialist +materialistic +materialistically +materialists +materialities +materiality +materialization +materializations +materialize +materialized +materializer +materializers +materializes +materializing +materially +materialness +materialnesses +materials +materiel +materiels +maternal +maternalism +maternalisms +maternally +maternities +maternity +maters +mates +mateship +mateships +matey +mateyness +mateynesses +mateys math +mathematic +mathematical +mathematically +mathematician +mathematicians mathematics +mathematization +mathematizations +mathematize +mathematized +mathematizes +mathematizing maths +matilda +matildas +matin +matinal +matinee +matinees +matiness +matinesses +mating +matings +matins +matless +matrass +matrasses +matres +matriarch +matriarchal +matriarchate +matriarchates +matriarchies +matriarchs +matriarchy +matrices +matricidal +matricide +matricides +matriculant +matriculants +matriculate +matriculated +matriculates +matriculating +matriculation +matriculations +matrilineal +matrilineally +matrimonial +matrimonially +matrimonies +matrimony +matrix +matrixes +matron +matronal +matronly +matrons +matronymic +matronymics +mats +matsah +matsahs +matt +matte +matted +mattedly matter +mattered +mattering +matters +mattery +mattes +mattin +matting +mattings +mattins +mattock +mattocks +mattoid +mattoids +mattrass +mattrasses +mattress +mattresses +matts +maturate +maturated +maturates +maturating +maturation +maturational +maturations mature +matured +maturely +maturer +matures +maturest +maturing +maturities +maturity +matutinal +matutinally +matza +matzah +matzahs +matzas +matzo +matzoh +matzohs +matzoon +matzoons +matzos +matzot +matzoth +maud +maudlin +mauds +mauger +maugre +maul +mauled +mauler +maulers +mauling +mauls +maulstick +maulsticks +maumet +maumetries +maumetry +maumets +maun +maund +maunder +maundered +maunderer +maunderers +maundering +maunders +maundies +maunds +maundy +mausolea +mausoleum +mausoleums +maut +mauts +mauve +mauves +maven +mavens +maverick +mavericks +mavie +mavies +mavin +mavins +mavis +mavises +mavourneen +mavourneens +maw +mawed +mawing +mawkish +mawkishly +mawkishness +mawkishnesses +mawn +maws +max +maxes +maxi +maxicoat +maxicoats +maxilla +maxillae +maxillaries +maxillary +maxillas +maxilliped +maxillipeds +maxillofacial +maxim +maxima +maximal +maximalist +maximalists +maximally +maximals +maximin +maximins +maximise +maximised +maximises +maximising +maximite +maximites +maximization +maximizations +maximize +maximized +maximizer +maximizers +maximizes +maximizing +maxims maximum +maximums +maxis +maxixe +maxixes +maxwell +maxwells may +maya +mayan +mayapple +mayapples +mayas maybe +maybes +maybush +maybushes +mayday +maydays +mayed +mayest +mayflies +mayflower +mayflowers +mayfly +mayhap +mayhem +mayhems +maying +mayings +mayo +mayonnaise +mayonnaises +mayor +mayoral +mayoralties +mayoralty +mayoress +mayoresses +mayors +mayos +maypole +maypoles +maypop +maypops +mays +mayst +mayvin +mayvins +mayweed +mayweeds +mazaedia +mazaedium +mazard +mazards +maze +mazed +mazedly +mazelike +mazer +mazers +mazes +mazier +maziest +mazily +maziness +mazinesses +mazing +mazourka +mazourkas +mazuma +mazumas +mazurka +mazurkas +mazy +mazzard +mazzards +mbira +mbiras me +mead +meadow +meadowland +meadowlands +meadowlark +meadowlarks +meadows +meadowsweet +meadowsweets +meadowy +meads +meager +meagerly +meagerness +meagernesses +meagre +meagrely meal +mealie +mealier +mealies +mealiest +mealless +meals +mealtime +mealtimes +mealworm +mealworms +mealy +mealybug +mealybugs +mealymouthed mean +meander +meandered +meandering +meanders +meandrous +meaner +meaners +meanest +meanie +meanies meaning +meaningful +meaningfully +meaningfulness +meaningfulnesses +meaningless +meaninglessly +meaninglessness +meaninglessnesses +meaningly +meanings +meanly +meanness +meannesses means +meant +meantime +meantimes meanwhile +meanwhiles +meany +measle +measled +measles +measlier +measliest +measly +measurabilities +measurability +measurable +measurably measure +measured +measuredly +measureless +measurement +measurements +measurer +measurers +measures +measuring meat +meatal +meatball +meatballs +meated +meathead +meatheads +meatier +meatiest +meatily +meatiness +meatinesses +meatless +meatloaf +meatloaves +meatman +meatmen +meatpacking +meatpackings +meats +meatus +meatuses +meaty +mecamylamine +mecamylamines +mecca +meccas +mechanic +mechanical +mechanically +mechanicals +mechanician +mechanicians +mechanics +mechanism +mechanisms +mechanist +mechanistic +mechanistically +mechanists +mechanizable +mechanization +mechanizations +mechanize +mechanized +mechanizer +mechanizers +mechanizes +mechanizing +mechanochemical +mechanochemistries +mechanochemistry +mechanoreception +mechanoreceptions +mechanoreceptive +mechanoreceptor +mechanoreceptors +meclizine +meclizines +meconium +meconiums +med +medaillon +medaillons +medaka +medakas medal +medaled +medaling +medalist +medalists +medalled +medallic +medalling +medallion +medallions +medallist +medallists +medals +meddle +meddled +meddler +meddlers +meddles +meddlesome +meddlesomeness +meddlesomenesses +meddling +medevac +medevacked +medevacking +medevacs +medflies +medfly media +mediacies +mediacy +mediad +mediae +mediaeval +mediaevals +mediagenic +medial +medially +medials +median +medianly +medians +mediant +mediants +medias +mediastina +mediastinal +mediastinum +mediate +mediated +mediately +mediates +mediating +mediation +mediational +mediations +mediative +mediator +mediators +mediatory +mediatrices +mediatrix +mediatrixes +medic +medicable +medicaid +medicaids medical +medically +medicals +medicament +medicamentous +medicaments +medicare +medicares +medicate +medicated +medicates +medicating +medication +medications +medicinable +medicinal +medicinally +medicinals medicine +medicined +medicines +medicining +medick +medicks +medico +medicolegal +medicos +medics +medieval +medievalism +medievalisms +medievalist +medievalists +medievally +medievals +medii +medina +medinas +mediocre +mediocrities +mediocrity +meditate +meditated +meditates +meditating +meditation +meditations +meditative +meditatively +meditativeness +meditativenesses +meditator +meditators +mediterranean medium +mediumistic +mediums +mediumship +mediumships +medius +medlar +medlars +medley +medleys +medulla +medullae +medullar +medullary +medullas +medullated +medulloblastoma +medulloblastomas +medulloblastomata +medusa +medusae +medusal +medusan +medusans +medusas +medusoid +medusoids +meed +meeds +meek +meeker +meekest +meekly +meekness +meeknesses +meerkat +meerkats +meerschaum +meerschaums meet +meeter +meeters meeting +meetinghouse +meetinghouses +meetings +meetly +meetness +meetnesses +meets +megabar +megabars +megabit +megabits +megabuck +megabucks +megabyte +megabytes +megacities +megacity +megacorporation +megacorporations +megacycle +megacycles +megadeal +megadeals +megadeath +megadeaths +megadose +megadoses +megadyne +megadynes +megafauna +megafaunae +megafaunal +megafaunas +megagamete +megagametes +megagametophyte +megagametophytes +megahertz +megahit +megahits +megakaryocyte +megakaryocytes +megakaryocytic +megalith +megalithic +megaliths +megaloblast +megaloblastic +megaloblasts +megalomania +megalomaniac +megalomaniacal +megalomaniacally +megalomaniacs +megalomanias +megalomanic +megalopolis +megalopolises +megalopolitan +megalopolitans +megalops +megalopses +megaparsec +megaparsecs +megaphone +megaphoned +megaphones +megaphonic +megaphoning +megapod +megapode +megapodes +megapods +megaproject +megaprojects +megascopic +megascopically +megasporangia +megasporangium +megaspore +megaspores +megasporic +megasporogeneses +megasporogenesis +megasporophyll +megasporophylls +megass +megasse +megasses +megastar +megastars +megaton +megatonnage +megatonnages +megatons +megavitamin +megavitamins +megavolt +megavolts +megawatt +megawatts +megillah +megillahs +megilp +megilph +megilphs +megilps +megohm +megohms +megrim +megrims +meikle +meinie +meinies +meiny +meioses +meiosis +meiotic +meiotically +mel +melamdim +melamed +melamine +melamines +melancholia +melancholiac +melancholiacs +melancholias +melancholic +melancholics +melancholies +melancholy +melange +melanges +melanian +melanic +melanics +melanin +melanins +melanism +melanisms +melanist +melanistic +melanists +melanite +melanites +melanitic +melanization +melanizations +melanize +melanized +melanizes +melanizing +melanoblast +melanoblasts +melanocyte +melanocytes +melanogeneses +melanogenesis +melanoid +melanoids +melanoma +melanomas +melanomata +melanophore +melanophores +melanosome +melanosomes +melanotic +melanous +melatonin +melatonins +meld +melded +melder +melders +melding +melds +melee +melees +melic +melilite +melilites +melilot +melilots +melinite +melinites +meliorate +meliorated +meliorates +meliorating +melioration +meliorations +meliorative +meliorator +meliorators +meliorism +meliorisms +meliorist +melioristic +meliorists +melisma +melismas +melismata +melismatic +mell +melled +mellific +mellifluent +mellifluently +mellifluous +mellifluously +mellifluousness +mellifluousnesses +melling +mellophone +mellophones +mellotron +mellotrons +mellow +mellowed +mellower +mellowest +mellowing +mellowly +mellowness +mellownesses +mellows +mells +melodeon +melodeons +melodia +melodias +melodic +melodica +melodically +melodicas +melodies +melodious +melodiously +melodiousness +melodiousnesses +melodise +melodised +melodises +melodising +melodist +melodists +melodize +melodized +melodizer +melodizers +melodizes +melodizing +melodrama +melodramas +melodramatic +melodramatically +melodramatics +melodramatise +melodramatised +melodramatises +melodramatising +melodramatist +melodramatists +melodramatization +melodramatizations +melodramatize +melodramatized +melodramatizes +melodramatizing +melody +meloid +meloids melon +melons +melphalan +melphalans +mels +melt +meltabilities +meltability +meltable +meltage +meltages +meltdown +meltdowns +melted +melter +melters +melting +meltingly +melton +meltons +melts +meltwater +meltwaters +mem member +membered +members +membership +memberships +membrane +membraned +membranes +membranous +membranously +memento +mementoes +mementos +memo +memoir +memoirist +memoirists +memoirs +memorabilia +memorabilities +memorability +memorable +memorableness +memorablenesses +memorably +memoranda +memorandum +memorandums memorial +memorialise +memorialised +memorialises +memorialising +memorialist +memorialists +memorialize +memorialized +memorializes +memorializing +memorially +memorials +memories +memorise +memorised +memorises +memorising +memoriter +memorizable +memorization +memorizations +memorize +memorized +memorizer +memorizers +memorizes +memorizing memory +memos +mems +memsahib +memsahibs +men +menace +menaced +menacer +menacers +menaces +menacing +menacingly +menad +menadione +menadiones +menads +menage +menagerie +menageries +menages +menarche +menarcheal +menarches +menazon +menazons mend +mendable +mendacious +mendaciously +mendaciousness +mendaciousnesses +mendacities +mendacity +mended +mendelevium +mendeleviums +mender +menders +mendicancies +mendicancy +mendicant +mendicants +mendicities +mendicity +mendigo +mendigos +mending +mendings +mends +menfolk +menfolks +menhaden +menhadens +menhir +menhirs +menial +menially +menials +meningeal +meninges +meningioma +meningiomas +meningiomata +meningitic +meningitides +meningitis +meningococcal +meningococci +meningococcic +meningococcus +meningoencephalitic +meningoencephalitides +meningoencephalitis +meninx +meniscal +menisci +meniscus +meniscuses +meno +menologies +menology +menopausal +menopause +menopauses +menorah +menorahs +menorrhagia +menorrhagias +mensa +mensae +mensal +mensas +mensch +menschen +mensches +mense +mensed +menseful +menseless +menservants +menses +mensing +menstrua +menstrual +menstruate +menstruated +menstruates +menstruating +menstruation +menstruations +menstruum +menstruums +mensurabilities +mensurability +mensurable +mensural +mensuration +mensurations +menswear +menta mental +mentalism +mentalisms +mentalist +mentalistic +mentalists +mentalities +mentality +mentally +mentation +mentations +menthene +menthenes +menthol +mentholated +menthols mention +mentionable +mentioned +mentioner +mentioners +mentioning +mentions +mentor +mentored +mentoring +mentors +mentorship +mentorships +mentum menu +menus +meou +meoued +meouing +meous +meow +meowed +meowing +meows +meperidine +meperidines +mephitic +mephitis +mephitises +meprobamate +meprobamates +merbromin +merbromins +mercantile +mercantilism +mercantilisms +mercantilist +mercantilistic +mercantilists +mercaptan +mercaptans +mercapto +mercaptopurine +mercaptopurines +mercenaries +mercenarily +mercenariness +mercenarinesses +mercenary +mercer +merceries +mercerise +mercerised +mercerises +mercerising +mercerization +mercerizations +mercerize +mercerized +mercerizes +mercerizing +mercers +mercery +merchandise +merchandised +merchandiser +merchandisers +merchandises +merchandising +merchandisings +merchandize +merchandized +merchandizes +merchandizing +merchandizings merchant +merchantabilities +merchantability +merchantable +merchanted +merchanting +merchantman +merchantmen +merchants +mercies merciful +mercifully +mercifulness +mercifulnesses +merciless +mercilessly +mercilessness +mercilessnesses +mercurate +mercurated +mercurates +mercurating +mercuration +mercurations +mercurial +mercurially +mercurialness +mercurialnesses +mercurials +mercuric +mercuries +mercurous +mercury mercy +merde +merdes +mere merely +merengue +merengues +merer +meres +merest +meretricious +meretriciously +meretriciousness +meretriciousnesses +merganser +mergansers +merge +merged +mergence +mergences +merger +mergers +merges +merging +meridian +meridians +meridional +meridionally +meridionals +meringue +meringues +merino +merinos +merises +merisis +meristem +meristematic +meristematically +meristems +meristic +meristically +merit +merited +meriting +meritocracies +meritocracy +meritocrat +meritocratic +meritocrats +meritorious +meritoriously +meritoriousness +meritoriousnesses +merits +merk +merks +merl +merle +merles +merlin +merlins +merlon +merlons +merlot +merlots +merls +mermaid +mermaids +merman +mermen +meroblastic +meroblastically +merocrine +meromorphic +meromyosin +meromyosins +meropia +meropias +meropic +merozoite +merozoites +merrier +merriest +merrily +merriment +merriments +merriness +merrinesses merry +merrymaker +merrymakers +merrymaking +merrymakings +merrythought +merrythoughts +mesa +mesalliance +mesalliances +mesally +mesarch +mesas +mescal +mescaline +mescalines +mescals +mesdames +mesdemoiselles +meseemed +meseemeth +meseems +mesembryanthemum +mesembryanthemums +mesencephala +mesencephalic +mesencephalon +mesenchymal +mesenchyme +mesenchymes +mesentera +mesenteric +mesenteries +mesenteron +mesentery +mesh +meshed +meshes +meshier +meshiest +meshing +meshuga +meshugah +meshugga +meshuggah +meshugge +meshuggener +meshuggeners +meshwork +meshworks +meshy +mesial +mesially +mesian +mesic +mesmeric +mesmerically +mesmerise +mesmerised +mesmerises +mesmerising +mesmerism +mesmerisms +mesmerist +mesmerists +mesmerize +mesmerized +mesmerizer +mesmerizers +mesmerizes +mesmerizing +mesnalties +mesnalty +mesne +mesnes +mesocarp +mesocarps +mesocyclone +mesocyclones +mesoderm +mesodermal +mesoderms +mesoglea +mesogleas +mesogloea +mesogloeas +mesomere +mesomeres +mesomorph +mesomorphic +mesomorphies +mesomorphs +mesomorphy +meson +mesonephric +mesonephroi +mesonephros +mesonic +mesons +mesopause +mesopauses +mesopelagic +mesophyl +mesophyll +mesophyllic +mesophyllous +mesophylls +mesophyls +mesophyte +mesophytes +mesophytic +mesoscale +mesosome +mesosomes +mesosphere +mesospheres +mesospheric +mesothelia +mesothelial +mesothelioma +mesotheliomas +mesotheliomata +mesothelium +mesothoraces +mesothoracic +mesothorax +mesothoraxes +mesotron +mesotrons +mesotrophic +mesquit +mesquite +mesquites +mesquits mess message +messaged +messages +messaging +messaline +messalines +messan +messans +messed +messeigneurs +messenger +messengers +messes +messiah +messiahs +messiahship +messiahships +messianic +messianism +messianisms +messier +messiest +messieurs +messily +messiness +messinesses +messing +messman +messmate +messmates +messmen +messuage +messuages messy +mestee +mestees +mesteso +mestesoes +mestesos +mestino +mestinoes +mestinos +mestiza +mestizas +mestizo +mestizoes +mestizos +mestranol +mestranols +met +meta +metabolic +metabolically +metabolism +metabolisms +metabolite +metabolites +metabolizable +metabolize +metabolized +metabolizes +metabolizing +metacarpal +metacarpals +metacarpi +metacarpus +metacenter +metacenters +metacentric +metacentrics +metacercaria +metacercariae +metacercarial +metachromatic +metaethical +metaethics +metafiction +metafictional +metafictionist +metafictionists +metafictions +metagalactic +metagalaxies +metagalaxy +metage +metageneses +metagenesis +metagenetic +metages metal +metalanguage +metalanguages +metaled +metaling +metalinguistic +metalinguistics +metalise +metalised +metalises +metalising +metalist +metalists +metalize +metalized +metalizes +metalizing +metalled +metallic +metallically +metallics +metalliferous +metalling +metallization +metallizations +metallize +metallized +metallizes +metallizing +metallographer +metallographers +metallographic +metallographically +metallographies +metallography +metalloid +metalloidal +metalloids +metallophone +metallophones +metallurgical +metallurgically +metallurgies +metallurgist +metallurgists +metallurgy +metalmark +metalmarks +metals +metalsmith +metalsmiths +metalware +metalwares +metalwork +metalworker +metalworkers +metalworking +metalworkings +metalworks +metamathematical +metamathematics +metamer +metamere +metameres +metameric +metamerically +metamerism +metamerisms +metamers +metamorphic +metamorphically +metamorphism +metamorphisms +metamorphose +metamorphosed +metamorphoses +metamorphosing +metamorphosis +metanalyses +metanalysis +metanephric +metanephroi +metanephros +metaphase +metaphases +metaphor +metaphoric +metaphorical +metaphorically +metaphors +metaphosphate +metaphosphates +metaphrase +metaphrases +metaphysic +metaphysical +metaphysically +metaphysician +metaphysicians +metaphysics +metaplasia +metaplasias +metaplastic +metapsychological +metapsychologies +metapsychology +metasequoia +metasequoias +metasomatic +metasomatism +metasomatisms +metastabilities +metastability +metastable +metastably +metastases +metastasis +metastasize +metastasized +metastasizes +metastasizing +metastatic +metastatically +metatarsal +metatarsals +metatarsi +metatarsus +metate +metates +metatheses +metathesis +metathetic +metathetical +metathetically +metathoraces +metathoracic +metathorax +metathoraxes +metaxylem +metaxylems +metazoa +metazoal +metazoan +metazoans +metazoic +metazoon +mete +meted +metempsychoses +metempsychosis +metencephala +metencephalic +metencephalon +meteor +meteoric +meteorically +meteorite +meteorites +meteoritic +meteoritical +meteoriticist +meteoriticists +meteoritics +meteoroid +meteoroidal +meteoroids +meteorologic +meteorological +meteorologically +meteorologies +meteorologist +meteorologists +meteorology +meteors +metepa +metepas meter +meterage +meterages +metered +metering +meters +meterstick +metersticks +metes +metestrus +metestruses +meth +methacrylate +methacrylates +methadon +methadone +methadones +methadons +methamphetamine +methamphetamines +methanation +methanations +methane +methanes +methanol +methanols +methaqualone +methaqualones +methedrine +methedrines +metheglin +metheglins +methemoglobin +methemoglobinemia +methemoglobinemias +methemoglobins +methenamine +methenamines +methicillin +methicillins +methinks +methionine +methionines method +methodic +methodical +methodically +methodicalness +methodicalnesses +methodise +methodised +methodises +methodising +methodism +methodisms +methodist +methodistic +methodists +methodize +methodized +methodizes +methodizing +methodological +methodologically +methodologies +methodologist +methodologists +methodology +methods +methotrexate +methotrexates +methought +methoxy +methoxychlor +methoxychlors +methoxyflurane +methoxyfluranes +methoxyl +meths +methyl +methylal +methylals +methylamine +methylamines +methylase +methylases +methylate +methylated +methylates +methylating +methylation +methylations +methylator +methylators +methylcellulose +methylcelluloses +methylcholanthrene +methylcholanthrenes +methyldopa +methyldopas +methylene +methylenes +methylic +methylmercuries +methylmercury +methylnaphthalene +methylnaphthalenes +methylphenidate +methylphenidates +methylprednisolone +methylprednisolones +methyls +methylxanthine +methylxanthines +methysergide +methysergides +meticais +metical +meticals +meticulosities +meticulosity +meticulous +meticulously +meticulousness +meticulousnesses +metier +metiers +meting +metis +metisse +metisses +metonym +metonymic +metonymical +metonymies +metonyms +metonymy +metopae +metope +metopes +metopic +metopon +metopons metre +metred +metres +metric +metrical +metrically +metrication +metrications +metricize +metricized +metricizes +metricizing +metrics +metrified +metrifies +metrify +metrifying +metring +metrist +metrists +metritis +metritises +metro +metrological +metrologies +metrologist +metrologists +metrology +metronidazole +metronidazoles +metronome +metronomes +metronomic +metronomical +metronomically +metropolis +metropolises +metropolitan +metropolitans +metrorrhagia +metrorrhagias +metros +mettle +mettled +mettles +mettlesome +metump +metumps +meuniere +mew +mewed +mewing +mewl +mewled +mewler +mewlers +mewling +mewls +mews +mezcal +mezcals +meze +mezereon +mezereons +mezereum +mezereums +mezes +mezquit +mezquite +mezquites +mezquits +mezuza +mezuzah +mezuzahs +mezuzas +mezuzot +mezuzoth +mezzanine +mezzanines +mezzo +mezzos +mezzotint +mezzotints +mho +mhos +mi +miaou +miaoued +miaouing +miaous +miaow +miaowed +miaowing +miaows +miasm +miasma +miasmal +miasmas +miasmata +miasmatic +miasmic +miasmically +miasms +miaul +miauled +miauling +miauls +mib +mibs +mica +micaceous +micas +micawber +micawbers +mice +micell +micella +micellae +micellar +micelle +micelles +micells +miche +miched +miches +miching +mick +mickey +mickeys +mickle +mickler +mickles +micklest +micks +micra +micrified +micrifies +micrify +micrifying +micro +microampere +microamperes +microanalyses +microanalysis +microanalyst +microanalysts +microanalytic +microanalytical +microanatomical +microanatomies +microanatomy +microbalance +microbalances +microbar +microbarograph +microbarographs +microbars +microbe +microbeam +microbeams +microbes +microbial +microbic +microbiologic +microbiological +microbiologically +microbiologies +microbiologist +microbiologists +microbiology +microbrew +microbrewer +microbreweries +microbrewers +microbrewery +microbrewing +microbrewings +microbrews +microburst +microbursts +microbus +microbuses +microbusses +microcalorimeter +microcalorimeters +microcalorimetric +microcalorimetries +microcalorimetry +microcapsule +microcapsules +microcassette +microcassettes +microcephalic +microcephalics +microcephalies +microcephaly +microchip +microchips +microcircuit +microcircuitries +microcircuitry +microcircuits +microcirculation +microcirculations +microcirculatory +microclimate +microclimates +microclimatic +microcline +microclines +micrococcal +micrococci +micrococcus +microcode +microcodes +microcomputer +microcomputers +microcopies +microcopy +microcosm +microcosmic +microcosmically +microcosmos +microcosmoses +microcosms +microcrystal +microcrystalline +microcrystallinities +microcrystallinity +microcrystals +microcultural +microculture +microcultures +microcurie +microcuries +microcyte +microcytes +microcytic +microdensitometer +microdensitometers +microdensitometric +microdensitometries +microdensitometry +microdissection +microdissections +microdot +microdots +microearthquake +microearthquakes +microeconomic +microeconomics +microelectrode +microelectrodes +microelectronic +microelectronically +microelectronics +microelectrophoreses +microelectrophoresis +microelectrophoretic +microelectrophoretically +microelement +microelements +microencapsulate +microencapsulated +microencapsulates +microencapsulating +microencapsulation +microencapsulations +microenvironment +microenvironmental +microenvironments +microevolution +microevolutionary +microevolutions +microfarad +microfarads +microfauna +microfaunae +microfaunal +microfaunas +microfibril +microfibrillar +microfibrils +microfiche +microfiches +microfilament +microfilaments +microfilaria +microfilariae +microfilarial +microfilm +microfilmable +microfilmed +microfilmer +microfilmers +microfilming +microfilms +microflora +microflorae +microfloral +microfloras +microform +microforms +microfossil +microfossils +microfungi +microfungus +microfunguses +microgamete +microgametes +microgametocyte +microgametocytes +microgram +micrograms +micrograph +micrographed +micrographic +micrographically +micrographics +micrographing +micrographs +microgravities +microgravity +microgroove +microgrooves +microhabitat +microhabitats +microhm +microhms +microimage +microimages +microinch +microinches +microinject +microinjected +microinjecting +microinjection +microinjections +microinjects +microinstruction +microinstructions +microlepidoptera +microlepidopterous +microliter +microliters +microlith +microlithic +microliths +microluces +microlux +microluxes +micromanage +micromanaged +micromanagement +micromanagements +micromanager +micromanagers +micromanages +micromanaging +micromanipulation +micromanipulations +micromanipulator +micromanipulators +micromere +micromeres +micrometeorite +micrometeorites +micrometeoritic +micrometeoroid +micrometeoroids +micrometeorological +micrometeorologies +micrometeorologist +micrometeorologists +micrometeorology +micrometer +micrometers +micromethod +micromethods +micromho +micromhos +micromini +microminiature +microminiaturization +microminiaturizations +microminiaturized +microminis +micromolar +micromole +micromoles +micromorphological +micromorphologies +micromorphology +micron +micronize +micronized +micronizes +micronizing +microns +micronuclei +micronucleus +micronucleuses +micronutrient +micronutrients +microorganism +microorganisms +micropaleontologic +micropaleontological +micropaleontologies +micropaleontologist +micropaleontologists +micropaleontology +microparticle +microparticles +microphage +microphages +microphone +microphones +microphonic +microphonics +microphotograph +microphotographer +microphotographers +microphotographic +microphotographies +microphotographs +microphotography +microphotometer +microphotometers +microphotometric +microphotometrically +microphotometries +microphotometry +microphyll +microphyllous +microphylls +microphysical +microphysically +microphysics +micropipet +micropipets +micropipette +micropipettes +microplankton +microplanktons +micropore +micropores +microporosities +microporosity +microporous +microprism +microprisms +microprobe +microprobes +microprocessor +microprocessors +microprogram +microprogramming +microprogrammings +microprograms +microprojection +microprojections +microprojector +microprojectors +micropublisher +micropublishers +micropublishing +micropublishings +micropulsation +micropulsations +micropuncture +micropunctures +micropylar +micropyle +micropyles +microquake +microquakes +microradiograph +microradiographic +microradiographies +microradiographs +microradiography +microreader +microreaders +microreproduction +microreproductions +micros +microscale +microscales microscope +microscopes +microscopic +microscopical +microscopically +microscopies +microscopist +microscopists +microscopy +microsecond +microseconds +microseism +microseismic +microseismicities +microseismicity +microseisms +microsomal +microsome +microsomes +microspectrophotometer +microspectrophotometers +microspectrophotometric +microspectrophotometries +microspectrophotometry +microsphere +microspheres +microspherical +microsporangia +microsporangiate +microsporangium +microspore +microspores +microsporocyte +microsporocytes +microsporogeneses +microsporogenesis +microsporophyll +microsporophylls +microsporous +microstate +microstates +microstructural +microstructure +microstructures +microsurgeries +microsurgery +microsurgical +microswitch +microswitches +microtechnic +microtechnics +microtechnique +microtechniques +microtome +microtomes +microtonal +microtonalities +microtonality +microtonally +microtone +microtones +microtubular +microtubule +microtubules +microvascular +microvasculature +microvasculatures +microvillar +microvilli +microvillous +microvillus +microvolt +microvolts +microwatt +microwatts +microwavable microwave +microwaveable +microwaved +microwaves +microwaving +microworld +microworlds +micrurgies +micrurgy +micturate +micturated +micturates +micturating +micturition +micturitions +mid +midair +midairs +midbrain +midbrains +midcourse +midcult +midcults +midday +middays +midden +middens +middies middle +middlebrow +middlebrows +middled +middleman +middlemen +middler +middlers +middles +middleweight +middleweights +middling +middlingly +middlings +middorsal +middy +midfield +midfielder +midfielders +midfields +midge +midges +midget +midgets +midgut +midguts +midi +midiron +midirons +midis +midland +midlands +midlatitude +midlatitudes +midleg +midlegs +midlife +midline +midlines +midlives +midmonth +midmonths +midmost +midmosts midnight +midnightly +midnights +midnoon +midnoons +midpoint +midpoints +midrange +midranges +midrash +midrashic +midrashim +midrashoth +midrib +midribs +midriff +midriffs +mids +midsagittal +midsection +midsections +midship +midshipman +midshipmen +midships +midsize +midsized +midsole +midsoles +midspace +midspaces +midst +midstories +midstory +midstream +midstreams +midsts +midsummer +midsummers +midterm +midterms +midtown +midtowns +midwatch +midwatches +midway +midways +midweek +midweekly +midweeks +midwestern +midwife +midwifed +midwiferies +midwifery +midwifes +midwifing +midwinter +midwinters +midwived +midwives +midwiving +midyear +midyears +mien +miens +miff +miffed +miffier +miffiest +miffing +miffs +miffy +mig +migg +miggle +miggles +miggs might +mightier +mightiest +mightily +mightiness +mightinesses +mights +mighty +mignon +mignonette +mignonettes +mignonne +mignons +migraine +migraines +migrainous +migrant +migrants +migrate +migrated +migrates +migrating +migration +migrational +migrations +migrator +migrators +migratory +migs +mihrab +mihrabs +mijnheer +mijnheers +mikado +mikados +mike +miked +mikes +miking +mikra +mikron +mikrons +mikvah +mikvahs +mikveh +mikvehs +mikvoth +mil +miladi +miladies +miladis +milady +milage +milages +milch +milchig mild +milden +mildened +mildening +mildens +milder +mildest +mildew +mildewed +mildewing +mildews +mildewy +mildly +mildness +mildnesses mile +mileage +mileages +milepost +mileposts +miler +milers +miles +milesimo +milesimos +milestone +milestones +milfoil +milfoils +milia +miliaria +miliarial +miliarias +miliary +milieu +milieus +milieux +militance +militances +militancies +militancy +militant +militantly +militantness +militantnesses +militants +militaria +militaries +militarily +militarise +militarised +militarises +militarising +militarism +militarisms +militarist +militaristic +militaristically +militarists +militarization +militarizations +militarize +militarized +militarizes +militarizing +military +militate +militated +militates +militating +militia +militiaman +militiamen +militias +milium milk +milked +milker +milkers +milkfish +milkfishes +milkier +milkiest +milkily +milkiness +milkinesses +milking +milkmaid +milkmaids +milkman +milkmen +milks +milkshed +milksheds +milksop +milksops +milkweed +milkweeds +milkwood +milkwoods +milkwort +milkworts +milky +mill +millable +millage +millages +millcake +millcakes +milldam +milldams +mille +milled +millefiori +millefioris +millefleur +millefleurs +millenarian +millenarianism +millenarianisms +millenarians +millenaries +millenary +millennia +millennial +millennialism +millennialisms +millennialist +millennialists +millennium +millenniums +milleped +millepeds +miller +millerite +millerites +millers +milles +millesimal +millesimally +millesimals +millet +millets +milliampere +milliamperes +milliard +milliards +milliare +milliares +milliaries +milliary +millibar +millibars +millicurie +millicuries +millidegree +millidegrees +millieme +milliemes +millier +milliers +milligal +milligals +milligram +milligrams +millihenries +millihenry +millihenrys +millilambert +millilamberts +milliliter +milliliters +milliluces +millilux +milliluxes +millime +millimes millimeter -millimetre +millimeters +millimho +millimhos +millimicron +millimicrons +millimolar +millimole +millimoles +milline +milliner +millineries +milliners +millinery +millines +milling +millings +milliohm +milliohms +million millionaire +millionaires +millionairess +millionairesses +millionfold +millions +millionth +millionths +milliosmol +milliosmols +milliped +millipede +millipedes +millipeds +milliradian +milliradians +millirem +millirems +milliroentgen +milliroentgens +millisecond +milliseconds +millivolt +millivolts +milliwatt +milliwatts +millpond +millponds +millrace +millraces +millrun +millruns +mills +millstone +millstones +millstream +millstreams +millwork +millworks +millwright +millwrights +milneb +milnebs +milo +milord +milords +milos +milpa +milpas +milquetoast +milquetoasts +milreis +mils +milt +milted +milter +milters +miltier +miltiest +milting +milts +milty +mim +mimbar +mimbars +mime +mimed +mimeo +mimeoed +mimeograph +mimeographed +mimeographing +mimeographs +mimeoing +mimeos +mimer +mimers +mimes +mimesis +mimesises +mimetic +mimetically +mimetite +mimetites +mimic +mimical +mimicked +mimicker +mimickers +mimicking +mimicries +mimicry +mimics +miming +mimosa +mimosas +mina +minable +minacities +minacity +minae +minaret +minarets +minas +minatory +minaudiere +minaudieres +mince +minced +mincemeat +mincemeats +mincer +mincers +minces +mincier +minciest +mincing +mincingly +mincy mind +mindblower +mindblowers +minded +mindedness +mindednesses +minder +minders +mindful +mindfully +mindfulness +mindfulnesses +minding +mindless +mindlessly +mindlessness +mindlessnesses +minds +mindset +mindsets mine +mineable +mined +minefield +minefields +minelayer +minelayers +miner mineral +mineralise +mineralised +mineralises +mineralising +mineralizable +mineralization +mineralizations +mineralize +mineralized +mineralizer +mineralizers +mineralizes +mineralizing +mineralocorticoid +mineralocorticoids +mineralogic +mineralogical +mineralogically +mineralogies +mineralogist +mineralogists +mineralogy +minerals +miners +mines +minestrone +minestrones +minesweeper +minesweepers +minesweeping +minesweepings +mingier +mingiest +mingle +mingled +mingler +minglers +mingles +mingling +mingy +mini +miniature +miniatures +miniaturist +miniaturistic +miniaturists +miniaturization +miniaturizations +miniaturize +miniaturized +miniaturizes +miniaturizing +minibike +minibiker +minibikers +minibikes minibus +minibuses +minibusses +minicab +minicabs +minicamp +minicamps +minicar +minicars +minicomputer +minicomputers +minicourse +minicourses +minified +minifies +minify +minifying +minikin +minikins +minilab +minilabs +minim +minima +minimal +minimalism +minimalisms +minimalist +minimalists +minimally +minimals +minimax +minimaxes +minimill +minimills +minimise +minimised +minimises +minimising +minimization +minimizations +minimize +minimized +minimizer +minimizers +minimizes +minimizing +minims minimum +minimums +mining +minings +minion +minions +minipark +miniparks +minis +minischool +minischools +miniscule +miniscules +miniseries +minish +minished +minishes +minishing +miniski +miniskirt +miniskirted +miniskirts +miniskis +ministate +ministates minister +ministered +ministerial +ministerially +ministering +ministers +ministrant +ministrants +ministration +ministrations +ministries ministry +minium +miniums +minivan +minivans +miniver +minivers +mink +minke +minkes +minks +minnesinger +minnesingers +minnies +minnow +minnows +minny +minor +minorca +minorcas +minored +minoring +minorities minority +minors +minoxidil +minoxidils +minster +minsters +minstrel +minstrels +minstrelsies +minstrelsy +mint +mintage +mintages +minted +minter +minters +mintier +mintiest +minting +mints +minty +minuend +minuends +minuet +minuets minus +minuscule +minuscules +minuses minute +minuted +minutely +minuteman +minutemen +minuteness +minutenesses +minuter +minutes +minutest +minutia +minutiae +minutial +minuting +minx +minxes +minxish +minyan +minyanim +minyans +mioses +miosis +miotic +miotics +miquelet +miquelets +mir +miracidia +miracidial +miracidium +miracle +miracles +miraculous +miraculously +miraculousness +miraculousnesses +mirador +miradors +mirage +mirages +mire +mired +mires +mirex +mirexes +miri +mirier +miriest +miriness +mirinesses +miring +mirk +mirker +mirkest +mirkier +mirkiest +mirkily +mirks +mirky +mirliton +mirlitons mirror +mirrored +mirroring +mirrorlike +mirrors +mirs +mirth +mirthful +mirthfully +mirthfulness +mirthfulnesses +mirthless +mirthlessly +mirths +miry +mirza +mirzas +mis +misact +misacted +misacting +misacts +misadapt +misadapted +misadapting +misadapts +misadd +misadded +misadding +misaddress +misaddressed +misaddresses +misaddressing +misadds +misadjust +misadjusted +misadjusting +misadjusts +misadministration +misadministrations +misadventure +misadventures +misadvise +misadvised +misadvises +misadvising +misagent +misagents +misaim +misaimed +misaiming +misaims +misalign +misaligned +misaligning +misalignment +misalignments +misaligns +misalliance +misalliances +misallied +misallies +misallocate +misallocated +misallocates +misallocating +misallocation +misallocations +misally +misallying +misalter +misaltered +misaltering +misalters +misanalyses +misanalysis +misandries +misandry +misanthrope +misanthropes +misanthropic +misanthropically +misanthropies +misanthropy +misapplication +misapplications +misapplied +misapplies +misapply +misapplying +misappraisal +misappraisals +misapprehend +misapprehended +misapprehending +misapprehends +misapprehension +misapprehensions +misappropriate +misappropriated +misappropriates +misappropriating +misappropriation +misappropriations +misarticulate +misarticulated +misarticulates +misarticulating +misassay +misassayed +misassaying +misassays +misassemble +misassembled +misassembles +misassembling +misassumption +misassumptions +misate +misatone +misatoned +misatones +misatoning +misattribute +misattributed +misattributes +misattributing +misattribution +misattributions +misaver +misaverred +misaverring +misavers +misaward +misawarded +misawarding +misawards +misbalance +misbalanced +misbalances +misbalancing +misbecame +misbecome +misbecomes +misbecoming +misbegan +misbegin +misbeginning +misbegins +misbegot +misbegotten +misbegun +misbehave +misbehaved +misbehaver +misbehavers +misbehaves +misbehaving +misbehavior +misbehaviors +misbelief +misbeliefs +misbelieve +misbelieved +misbeliever +misbelievers +misbelieves +misbelieving +misbias +misbiased +misbiases +misbiasing +misbiassed +misbiasses +misbiassing +misbill +misbilled +misbilling +misbills +misbind +misbinding +misbinds +misbound +misbrand +misbranded +misbranding +misbrands +misbuild +misbuilding +misbuilds +misbuilt +misbutton +misbuttoned +misbuttoning +misbuttons +miscalculate +miscalculated +miscalculates +miscalculating +miscalculation +miscalculations +miscall +miscalled +miscalling +miscalls +miscaption +miscaptioned +miscaptioning +miscaptions +miscarriage +miscarriages +miscarried +miscarries +miscarry +miscarrying +miscast +miscasting +miscasts +miscatalog +miscataloged +miscataloging +miscatalogs +miscegenation +miscegenational +miscegenations +miscellanea +miscellaneous +miscellaneously +miscellaneousness +miscellaneousnesses +miscellanies +miscellanist +miscellanists +miscellany +mischance +mischances +mischannel +mischanneled +mischanneling +mischannelled +mischannelling +mischannels +mischaracterization +mischaracterizations +mischaracterize +mischaracterized +mischaracterizes +mischaracterizing +mischarge +mischarged +mischarges +mischarging +mischief +mischiefs +mischievous +mischievously +mischievousness +mischievousnesses +mischoice +mischoices +miscibilities +miscibility +miscible +miscitation +miscitations +miscite +miscited +miscites +misciting +misclaim +misclaimed +misclaiming +misclaims +misclass +misclassed +misclasses +misclassification +misclassifications +misclassified +misclassifies +misclassify +misclassifying +misclassing +miscode +miscoded +miscodes +miscoding +miscoin +miscoined +miscoining +miscoins +miscolor +miscolored +miscoloring +miscolors +miscommunication +miscommunications +miscomprehension +miscomprehensions +miscomputation +miscomputations +miscompute +miscomputed +miscomputes +miscomputing +misconceive +misconceived +misconceiver +misconceivers +misconceives +misconceiving +misconception +misconceptions +misconduct +misconducted +misconducting +misconducts +misconnect +misconnected +misconnecting +misconnection +misconnections +misconnects +misconstruction +misconstructions +misconstrue +misconstrued +misconstrues +misconstruing +miscook +miscooked +miscooking +miscooks +miscopied +miscopies +miscopy +miscopying +miscorrelation +miscorrelations +miscount +miscounted +miscounting +miscounts +miscreant +miscreants +miscreate +miscreated +miscreates +miscreating +miscreation +miscreations +miscue +miscued +miscues +miscuing +miscut +miscuts +miscutting +misdate +misdated +misdates +misdating +misdeal +misdealing +misdeals +misdealt +misdeed +misdeeds +misdeem +misdeemed +misdeeming +misdeems +misdefine +misdefined +misdefines +misdefining +misdemeanant +misdemeanants +misdemeanor +misdemeanors +misdescribe +misdescribed +misdescribes +misdescribing +misdescription +misdescriptions +misdevelop +misdeveloped +misdeveloping +misdevelops +misdiagnose +misdiagnosed +misdiagnoses +misdiagnosing +misdiagnosis +misdial +misdialed +misdialing +misdialled +misdialling +misdials +misdid +misdirect +misdirected +misdirecting +misdirection +misdirections +misdirects +misdistribution +misdistributions +misdivision +misdivisions +misdo +misdoer +misdoers +misdoes +misdoing +misdoings +misdone +misdoubt +misdoubted +misdoubting +misdoubts +misdraw +misdrawing +misdrawn +misdraws +misdrew +misdrive +misdriven +misdrives +misdriving +misdrove +mise +misease +miseases +miseat +miseaten +miseating +miseats +misedit +misedited +misediting +misedits +miseducate +miseducated +miseducates +miseducating +miseducation +miseducations +misemphases +misemphasis +misemphasize +misemphasized +misemphasizes +misemphasizing +misemploy +misemployed +misemploying +misemployment +misemployments +misemploys +misenrol +misenroll +misenrolled +misenrolling +misenrolls +misenrols +misenter +misentered +misentering +misenters +misentries +misentry +miser +miserable +miserableness +miserablenesses +miserables +miserably +miserere +misereres +misericord +misericorde +misericordes +misericords +miseries +miserliness +miserlinesses +miserly +misers +misery +mises +misesteem +misesteemed +misesteeming +misesteems +misestimate +misestimated +misestimates +misestimating +misestimation +misestimations +misevaluate +misevaluated +misevaluates +misevaluating +misevaluation +misevaluations +misevent +misevents +misfaith +misfaiths +misfeasance +misfeasances +misfeasor +misfeasors +misfield +misfielded +misfielding +misfields +misfile +misfiled +misfiles +misfiling +misfire +misfired +misfires +misfiring +misfit +misfits +misfitted +misfitting +misfocus +misfocused +misfocuses +misfocusing +misfocussed +misfocusses +misfocussing +misform +misformed +misforming +misforms +misfortune +misfortunes +misframe +misframed +misframes +misframing +misfunction +misfunctioned +misfunctioning +misfunctions +misgauge +misgauged +misgauges +misgauging +misgave +misgive +misgiven +misgives +misgiving +misgivings +misgovern +misgoverned +misgoverning +misgovernment +misgovernments +misgoverns +misgrade +misgraded +misgrades +misgrading +misgraft +misgrafted +misgrafting +misgrafts +misgrew +misgrow +misgrowing +misgrown +misgrows +misguess +misguessed +misguesses +misguessing +misguidance +misguidances +misguide +misguided +misguidedly +misguidedness +misguidednesses +misguider +misguiders +misguides +misguiding +mishandle +mishandled +mishandles +mishandling +mishanter +mishanters +mishap +mishaps +mishear +misheard +mishearing +mishears +mishit +mishits +mishitting +mishmash +mishmashes +mishmosh +mishmoshes +misidentification +misidentifications +misidentified +misidentifies +misidentify +misidentifying +misimpression +misimpressions +misinfer +misinferred +misinferring +misinfers +misinform +misinformation +misinformations +misinformed +misinforming +misinforms +misinter +misinterpret +misinterpretation +misinterpretations +misinterpreted +misinterpreting +misinterprets +misinterred +misinterring +misinters +misjoin +misjoinder +misjoinders +misjoined +misjoining +misjoins +misjudge +misjudged +misjudges +misjudging +misjudgment +misjudgments +miskal +miskals +miskeep +miskeeping +miskeeps +miskept +miskick +miskicked +miskicking +miskicks +misknew +misknow +misknowing +misknowledge +misknowledges +misknown +misknows +mislabel +mislabeled +mislabeling +mislabelled +mislabelling +mislabels +mislabor +mislabored +mislaboring +mislabors +mislaid +mislain +mislay +mislayer +mislayers +mislaying +mislays +mislead +misleader +misleaders +misleading +misleadingly +misleads +misleared +mislearn +mislearned +mislearning +mislearns +mislearnt +misled +mislie +mislies +mislight +mislighted +mislighting +mislights +mislike +misliked +misliker +mislikers +mislikes +misliking +mislit +mislive +mislived +mislives +misliving +mislocate +mislocated +mislocates +mislocating +mislocation +mislocations +mislodge +mislodged +mislodges +mislodging +mislying +mismade +mismake +mismakes +mismaking +mismanage +mismanaged +mismanagement +mismanagements +mismanages +mismanaging +mismark +mismarked +mismarking +mismarks +mismarriage +mismarriages +mismatch +mismatched +mismatches +mismatching +mismate +mismated +mismates +mismating +mismeasurement +mismeasurements +mismeet +mismeeting +mismeets +mismet +mismove +mismoved +mismoves +mismoving +misname +misnamed +misnames +misnaming +misnomer +misnomered +misnomers +miso +misogamies +misogamist +misogamists +misogamy +misogynic +misogynies +misogynist +misogynistic +misogynists +misogyny +misologies +misology +misoneism +misoneisms +misorder +misordered +misordering +misorders +misorient +misorientation +misorientations +misoriented +misorienting +misorients +misos +mispackage +mispackaged +mispackages +mispackaging +mispage +mispaged +mispages +mispaging +mispaint +mispainted +mispainting +mispaints +misparse +misparsed +misparses +misparsing +mispart +misparted +misparting +misparts +mispatch +mispatched +mispatches +mispatching +mispen +mispenned +mispenning +mispens +misperceive +misperceived +misperceives +misperceiving +misperception +misperceptions +misplace +misplaced +misplacement +misplacements +misplaces +misplacing +misplan +misplanned +misplanning +misplans +misplant +misplanted +misplanting +misplants +misplay +misplayed +misplaying +misplays +misplead +mispleaded +mispleading +mispleads +mispled +mispoint +mispointed +mispointing +mispoints +mispoise +mispoised +mispoises +mispoising +misposition +mispositioned +mispositioning +mispositions +misprice +mispriced +misprices +mispricing +misprint +misprinted +misprinting +misprints +misprision +misprisions +misprize +misprized +misprizes +misprizing +misprogram +misprogramed +misprograming +misprogrammed +misprogramming +misprograms +mispronounce +mispronounced +mispronounces +mispronouncing +mispronunciation +mispronunciations +misquotation +misquotations +misquote +misquoted +misquotes +misquoting +misraise +misraised +misraises +misraising +misrate +misrated +misrates +misrating +misread +misreading +misreads +misreckon +misreckoned +misreckoning +misreckons +misrecollection +misrecollections +misrecord +misrecorded +misrecording +misrecords +misrefer +misreference +misreferences +misreferred +misreferring +misrefers +misregister +misregistered +misregistering +misregisters +misregistration +misregistrations +misrelate +misrelated +misrelates +misrelating +misrelied +misrelies +misrely +misrelying +misremember +misremembered +misremembering +misremembers +misrender +misrendered +misrendering +misrenders +misreport +misreported +misreporting +misreports +misrepresent +misrepresentation +misrepresentations +misrepresentative +misrepresented +misrepresenting +misrepresents +misroute +misrouted +misroutes +misrouting +misrule +misruled +misrules +misruling miss +missable +missaid +missal +missals +missay +missaying +missays +misseat +misseated +misseating +misseats +missed +missel +missels +missend +missending +missends +missense +missenses +missent +misses +misset +missets +missetting +misshape +misshaped +misshapen +misshapenly +misshapes +misshaping +misshod +missies missile +missileer +missileers +missileman +missilemen +missileries +missilery +missiles +missilries +missilry +missing +missiologies +missiology +mission +missionaries +missionary +missioned +missioner +missioners +missioning +missionization +missionizations +missionize +missionized +missionizer +missionizers +missionizes +missionizing +missions +missis +missises +missive +missives +missort +missorted +missorting +missorts +missound +missounded +missounding +missounds +missout +missouts +misspace +misspaced +misspaces +misspacing +misspeak +misspeaking +misspeaks +misspell +misspelled +misspelling +misspellings +misspells +misspelt +misspend +misspending +misspends +misspent +misspoke +misspoken +misstart +misstarted +misstarting +misstarts +misstate +misstated +misstatement +misstatements +misstates +misstating +missteer +missteered +missteering +missteers +misstep +missteps +misstop +misstopped +misstopping +misstops +misstricken +misstrike +misstrikes +misstriking +misstruck +misstyle +misstyled +misstyles +misstyling +missuit +missuited +missuiting +missuits +missus +missuses +missy mist +mistakable mistake mistaken +mistakenly +mistaker +mistakers +mistakes +mistaking +mistaught +mistbow +mistbows +misteach +misteaches +misteaching +misted +mistend +mistended +mistending +mistends +mister +misterm +mistermed +misterming +misterms +misters +misteuk +misthink +misthinking +misthinks +misthought +misthrew +misthrow +misthrowing +misthrown +misthrows +mistier +mistiest +mistily +mistime +mistimed +mistimes +mistiming +mistiness +mistinesses +misting +mistitle +mistitled +mistitles +mistitling +mistletoe +mistletoes +mistook +mistouch +mistouched +mistouches +mistouching +mistrace +mistraced +mistraces +mistracing +mistrain +mistrained +mistraining +mistrains +mistral +mistrals +mistranscribe +mistranscribed +mistranscribes +mistranscribing +mistranscription +mistranscriptions +mistranslate +mistranslated +mistranslates +mistranslating +mistranslation +mistranslations +mistreat +mistreated +mistreating +mistreatment +mistreatments +mistreats +mistress +mistresses +mistrial +mistrials +mistrust +mistrusted +mistrustful +mistrustfully +mistrustfulness +mistrustfulnesses +mistrusting +mistrusts +mistruth +mistruths +mistryst +mistrysted +mistrysting +mistrysts +mists +mistune +mistuned +mistunes +mistuning +mistutor +mistutored +mistutoring +mistutors +misty +mistype +mistyped +mistypes +mistyping misunderstand +misunderstanding +misunderstandings +misunderstands +misunderstood +misunion +misunions +misusage +misusages +misuse +misused +misuser +misusers +misuses +misusing +misutilization +misutilizations +misvalue +misvalued +misvalues +misvaluing +misvocalization +misvocalizations +misword +misworded +miswording +miswords +miswrit +miswrite +miswrites +miswriting +miswritten +miswrote +misyoke +misyoked +misyokes +misyoking +mite +miter +mitered +miterer +miterers +mitering +miters +miterwort +miterworts +mites +mither +mithers +mithridate +mithridates +miticidal +miticide +miticides +mitier +mitiest +mitigate +mitigated +mitigates +mitigating +mitigation +mitigations +mitigative +mitigator +mitigators +mitigatory +mitis +mitises +mitochondria +mitochondrial +mitochondrion +mitogen +mitogenic +mitogenicities +mitogenicity +mitogens +mitomycin +mitomycins +mitoses +mitosis +mitotic +mitotically +mitral +mitre +mitred +mitres +mitrewort +mitreworts +mitring +mitsvah +mitsvahs +mitsvoth +mitt +mitten +mittens +mittimus +mittimuses +mitts +mity +mitzvah +mitzvahs +mitzvoth mix +mixable +mixed +mixer +mixers +mixes +mixible +mixing +mixologies +mixologist +mixologists +mixology +mixt mixture +mixtures +mixup +mixups +mizen +mizens +mizzen +mizzenmast +mizzenmasts +mizzens +mizzle +mizzled +mizzles +mizzling +mizzly +mm +mnemonic +mnemonically +mnemonics +mo +moa +moan +moaned +moaner +moaners +moanful +moaning +moans +moas +moat +moated +moating +moatlike +moats +mob +mobbed +mobber +mobbers +mobbing +mobbish +mobcap +mobcaps mobile +mobiles +mobilise +mobilised +mobilises +mobilising +mobilities +mobility +mobilization +mobilizations +mobilize +mobilized +mobilizes +mobilizing +mobled +mobocracies +mobocracy +mobocrat +mobocratic +mobocrats +mobs +mobster +mobsters +moc +moccasin +moccasins +mocha +mochas +mochila +mochilas +mock +mockable +mocked +mocker +mockeries +mockers +mockery +mocking +mockingbird +mockingbirds +mockingly +mocks +mockup +mockups +mocs +mod +modal +modalities +modality +modally +mode model +modeled +modeler +modelers +modeling +modelings +modelist +modelists +modelled +modeller +modellers +modelling +models modem +modems +moderate +moderated +moderately +moderateness +moderatenesses +moderates +moderating +moderation +moderations +moderato +moderator +moderators +moderatorship +moderatorships +moderatos modern +moderne +moderner +modernest +modernisation +modernisations +modernise +modernised +modernises +modernising +modernism +modernisms +modernist +modernistic +modernists +modernities +modernity +modernization +modernizations +modernize +modernized +modernizer +modernizers +modernizes +modernizing +modernly +modernness +modernnesses +moderns +modes modest +modester +modestest +modesties +modestly +modesty +modi +modica +modicum +modicums +modifiabilities +modifiability +modifiable +modification +modifications +modified +modifier +modifiers +modifies +modify +modifying +modillion +modillions +modioli +modiolus +modish +modishly +modishness +modishnesses +modiste +modistes +mods +modulabilities +modulability +modular +modularities +modularity +modularized +modularly +modulate +modulated +modulates +modulating +modulation +modulations +modulator +modulators +modulatory +module +modules +moduli +modulo +modulus +modus +mofette +mofettes +moffette +moffettes +mog +mogged +moggie +moggies +mogging +moggy +mogs +mogul +moguls +mohair +mohairs +mohalim +mohel +mohelim +mohels +mohur +mohurs +moidore +moidores +moieties +moiety +moil +moiled +moiler +moilers +moiling +moilingly +moils +moira +moirai +moire +moires +moist +moisten +moistened +moistener +moisteners +moistening +moistens +moister +moistest +moistful +moistly +moistness +moistnesses +moisture +moistures +moisturise +moisturised +moisturises +moisturising +moisturize +moisturized +moisturizer +moisturizers +moisturizes +moisturizing +mojarra +mojarras +mojo +mojoes +mojos +moke +mokes +mol +mola +molal +molalities +molality +molar +molarities +molarity +molars +molas +molasses +molasseses +mold +moldable +moldboard +moldboards +molded +molder +moldered +moldering +molders +moldier +moldiest +moldiness +moldinesses +molding +moldings +molds +moldwarp +moldwarps +moldy +mole +molecular +molecularly +molecule +molecules +molehill +molehills +moles +moleskin +moleskins +molest +molestation +molestations +molested +molester +molesters +molesting +molests +molies +moline +moll +mollah +mollahs +mollie +mollies +mollification +mollifications +mollified +mollifies +mollify +mollifying +molls +mollusc +molluscan +molluscicidal +molluscicide +molluscicides +molluscs +mollusk +molluskan +mollusks +molly +mollycoddle +mollycoddled +mollycoddler +mollycoddlers +mollycoddles +mollycoddling +moloch +molochs +mols +molt +molted +molten +moltenly +molter +molters +molting +molto +molts +moly +molybdate +molybdates +molybdenite +molybdenites +molybdenum +molybdenums +molybdic mom +mome moment +momenta +momentarily +momentariness +momentarinesses +momentary +momently +momento +momentoes +momentos +momentous +momentously +momentousness +momentousnesses +moments +momentum +momentums +momes +momi +momism +momisms +momma +mommas +mommies mommy +moms +momser +momsers +momus +momuses +momzer +momzers +mon +monachal +monachism +monachisms +monacid +monacids +monad +monadal +monadelphous +monades +monadic +monadism +monadisms +monadnock +monadnocks +monads +monandries +monandry +monarch +monarchal +monarchial +monarchic +monarchical +monarchically +monarchies +monarchism +monarchisms +monarchist +monarchists +monarchs +monarchy +monarda +monardas +monas +monasteries +monastery +monastic +monastically +monasticism +monasticisms +monastics +monatomic +monaural +monaurally +monaxial +monaxon +monaxons +monazite +monazites +monde +mondes +mondo +mondos +monecian +monecious +monellin +monellins +moneran +monerans +monestrous +monetarily +monetarism +monetarisms +monetarist +monetarists +monetary +monetise +monetised +monetises +monetising +monetization +monetizations +monetize +monetized +monetizes +monetizing money +moneybag +moneybags +moneyed +moneyer +moneyers +moneygrubbing +moneygrubbings +moneylender +moneylenders +moneymaker +moneymakers +moneymaking +moneymakings +moneyman +moneymen +moneys +moneywort +moneyworts +mongeese +monger +mongered +mongering +mongers +mongo +mongoe +mongoes +mongol +mongolism +mongolisms +mongoloid +mongoloids +mongols +mongoose +mongooses +mongos +mongrel +mongrelization +mongrelizations +mongrelize +mongrelized +mongrelizes +mongrelizing +mongrels +mongst +monicker +monickers +monie +monied +monies +moniker +monikers +moniliases +moniliasis +moniliform +monish +monished +monishes +monishing +monism +monisms +monist +monistic +monists +monition +monitions +monitive monitor +monitored +monitorial +monitories +monitoring +monitors +monitorship +monitorships +monitory +monk +monkeries +monkery monkey +monkeyed +monkeying +monkeypod +monkeypods +monkeys +monkeyshine +monkeyshines +monkfish +monkfishes +monkhood +monkhoods +monkish +monks +monkshood +monkshoods +mono +monoacid +monoacidic +monoacids +monoamine +monoaminergic +monoamines +monobasic +monocarboxylic +monocarp +monocarpic +monocarps +monochasia +monochasial +monochasium +monochord +monochords +monochromat +monochromatic +monochromatically +monochromaticities +monochromaticity +monochromatism +monochromatisms +monochromator +monochromators +monochromats +monochrome +monochromes +monochromic +monochromist +monochromists +monocle +monocled +monocles +monocline +monoclines +monoclinic +monoclonal +monoclonals +monocoque +monocoques +monocot +monocots +monocotyledon +monocotyledonous +monocotyledons +monocracies +monocracy +monocrat +monocratic +monocrats +monocrystal +monocrystalline +monocrystals +monocular +monocularly +monoculars +monocultural +monoculture +monocultures +monocyclic +monocyte +monocytes +monocytic +monodic +monodical +monodically +monodies +monodisperse +monodist +monodists +monodrama +monodramas +monodramatic +monody +monoecies +monoecious +monoecism +monoecisms +monoecy +monoester +monoesters +monofil +monofilament +monofilaments +monofils +monofuel +monofuels +monogamic +monogamies +monogamist +monogamists +monogamous +monogamously +monogamy +monogastric +monogenean +monogeneans +monogeneses +monogenesis +monogenetic +monogenic +monogenically +monogenies +monogeny +monogerm +monoglot +monoglots +monoglyceride +monoglycerides +monogram +monogramed +monograming +monogrammatic +monogrammed +monogrammer +monogrammers +monogramming +monograms +monograph +monographed +monographic +monographing +monographs +monogynies +monogynous +monogyny +monohull +monohulls +monohybrid +monohybrids +monohydric +monohydroxy +monolayer +monolayers +monolingual +monolinguals +monolith +monolithic +monolithically +monoliths +monolog +monologies +monologist +monologists +monologs +monologue +monologues +monologuist +monologuists +monology +monomania +monomaniac +monomaniacal +monomaniacally +monomaniacs +monomanias +monomer +monomeric +monomers +monometallic +monometallism +monometallisms +monometallist +monometallists +monometer +monometers +monomial +monomials +monomolecular +monomolecularly +monomorphemic +monomorphic +monomorphism +monomorphisms +mononuclear +mononuclears +mononucleate +mononucleated +mononucleoses +mononucleosis +mononucleosises +mononucleotide +mononucleotides +monophagies +monophagous +monophagy +monophonic +monophonically +monophonies +monophony +monophthong +monophthongal +monophthongs +monophyletic +monophylies +monophyly +monoplane +monoplanes +monoploid +monoploids +monopode +monopodes +monopodial +monopodially +monopodies +monopody +monopole +monopoles +monopolies +monopolise +monopolised +monopolises +monopolising +monopolist +monopolistic +monopolistically +monopolists +monopolization +monopolizations +monopolize +monopolized +monopolizer +monopolizers +monopolizes +monopolizing +monopoly +monopropellant +monopropellants +monopsonies +monopsonistic +monopsony +monorail +monorails +monorchid +monorchidism +monorchidisms +monorchids +monorhyme +monorhymed +monorhymes +monos +monosaccharide +monosaccharides +monosome +monosomes +monosomic +monosomics +monosomies +monosomy +monospecific +monospecificities +monospecificity +monostele +monosteles +monostelic +monostelies +monostely +monosyllabic +monosyllabically +monosyllabicities +monosyllabicity +monosyllable +monosyllables +monosynaptic +monosynaptically +monoterpene +monoterpenes +monotheism +monotheisms +monotheist +monotheistic +monotheistical +monotheistically +monotheists +monotint +monotints +monotone +monotones +monotonic +monotonically +monotonicities +monotonicity +monotonies +monotonous +monotonously +monotonousness +monotonousnesses +monotony +monotreme +monotremes +monotype +monotypes +monotypic +monounsaturate +monounsaturated +monounsaturates +monovalent +monovular +monoxide +monoxides +monozygotic +mons +monseigneur +monsieur +monsignor +monsignori +monsignorial +monsignors +monsoon +monsoonal +monsoons +monster +monstera +monsteras +monsters +monstrance +monstrances +monstrosities +monstrosity +monstrous +monstrously +monstrousness +monstrousnesses +montadale +montadales +montage +montaged +montages +montaging +montagnard +montagnards +montane +montanes +monte +monteith +monteiths +montero +monteros +montes month +monthlies +monthlong +monthly +months +montmorillonite +montmorillonites +montmorillonitic monument +monumental +monumentalities +monumentality +monumentalize +monumentalized +monumentalizes +monumentalizing +monumentally +monuments +monuron +monurons +mony +monzonite +monzonites +moo +mooch +mooched +moocher +moochers +mooches +mooching +mood +moodier +moodiest +moodily +moodiness +moodinesses +moods +moody +mooed +mooing +mool +moola +moolah +moolahs +moolas +mooley +mooleys +mools moon +moonbeam +moonbeams +moonbow +moonbows +mooncalf +mooncalves +moondust +moondusts +mooned +mooneye +mooneyes +moonfaced +moonfish +moonfishes +moonflower +moonflowers +moonier +mooniest +moonily +mooning +moonish +moonishly +moonless +moonlet +moonlets +moonlight +moonlighted +moonlighter +moonlighters +moonlighting +moonlights +moonlike +moonlit +moonport +moonports +moonquake +moonquakes +moonrise +moonrises +moons +moonsail +moonsails +moonscape +moonscapes +moonseed +moonseeds +moonset +moonsets +moonshine +moonshiner +moonshiners +moonshines +moonshot +moonshots +moonstone +moonstones +moonstruck +moonwalk +moonwalks +moonward +moonwort +moonworts +moony +moor +moorage +moorages +moorcock +moorcocks +moored +moorfowl +moorfowls +moorhen +moorhens +moorier +mooriest +mooring +moorings +moorish +moorland +moorlands +moors +moorwort +moorworts +moory +moos +moose +moot +mooted +mooter +mooters +mooting +moots mop +mopboard +mopboards +mope +moped +mopeds +moper +moperies +mopers +mopery +mopes +mopey +mopier +mopiest +moping +mopingly +mopish +mopishly +mopoke +mopokes +mopped +mopper +moppers +moppet +moppets +mopping +mops +mopy +moquette +moquettes +mor +mora +morae +morainal +moraine +moraines +morainic moral +morale +morales +moralise +moralised +moralises +moralising +moralism +moralisms +moralist +moralistic +moralistically +moralists +moralities +morality +moralization +moralizations +moralize +moralized +moralizer +moralizers +moralizes +moralizing +morally +morals +moras +morass +morasses +morassy +moratoria +moratorium +moratoriums +moratory +moray +morays +morbid +morbidities +morbidity +morbidly +morbidness +morbidnesses +morbific +morbilli +morceau +morceaux +mordancies +mordancy +mordant +mordanted +mordanting +mordantly +mordants +mordent +mordents more +moreen +moreens +morel +morelle +morelles +morello +morellos +morels +moreover +mores +moresque +moresques +morgan +morganatic +morganatically +morganite +morganites +morgans +morgen +morgens +morgue +morgues +moribund +moribundities +moribundity +morion +morions +morn morning -moslem +mornings +morns +morocco +moroccos +moron +moronic +moronically +moronism +moronisms +moronities +moronity +morons +morose +morosely +moroseness +morosenesses +morosities +morosity +morph +morphactin +morphactins +morphallaxes +morphallaxis +morpheme +morphemes +morphemic +morphemically +morphemics +morphia +morphias +morphic +morphin +morphine +morphines +morphinism +morphinisms +morphins +morpho +morphogen +morphogeneses +morphogenesis +morphogenetic +morphogenetically +morphogenic +morphogens +morphologic +morphological +morphologically +morphologies +morphologist +morphologists +morphology +morphometric +morphometrically +morphometries +morphometry +morphophonemics +morphos +morphs +morrion +morrions +morris +morrises +morro +morros +morrow +morrows +mors +morse +morsel +morseled +morseling +morselled +morselling +morsels +mort +mortadella +mortadellas +mortal +mortalities +mortality +mortally +mortals +mortar +mortarboard +mortarboards +mortared +mortaring +mortarless +mortars +mortary +mortgage +mortgaged +mortgagee +mortgagees +mortgager +mortgagers +mortgages +mortgaging +mortgagor +mortgagors +mortice +morticed +mortices +mortician +morticians +morticing +mortification +mortifications +mortified +mortifies +mortify +mortifying +mortise +mortised +mortiser +mortisers +mortises +mortising +mortmain +mortmains +morts +mortuaries +mortuary +morula +morulae +morular +morulas +morulation +morulations +mos +mosaic +mosaically +mosaicism +mosaicisms +mosaicist +mosaicists +mosaicked +mosaicking +mosaiclike +mosaics +mosasaur +mosasaurs +moschate +mosey +moseyed +moseying +moseys +moshav +moshavim +mosk +mosks +mosque +mosques mosquito +mosquitoes +mosquitoey +mosquitos +moss +mossback +mossbacked +mossbacks +mossed +mosser +mossers +mosses +mossier +mossiest +mossing +mosslike +mosso +mossy +most +moste +mostest +mostests +mostly +mosts +mot +mote +motel +motels +motes +motet +motets +motey +moth +mothball +mothballed +mothballing +mothballs mother +motherboard +motherboards +mothered +motherfucker +motherfuckers +motherfucking +motherhood +motherhoods +motherhouse +motherhouses +mothering motherland +motherlands +motherless +motherlessness +motherlessnesses +motherliness +motherlinesses +motherly +mothers +mothery +mothier +mothiest +mothlike +mothproof +mothproofed +mothproofer +mothproofers +mothproofing +mothproofs +moths +mothy +motif +motific +motifs +motile +motiles +motilities +motility +motion +motional +motioned +motioner +motioners +motioning +motionless +motionlessly +motionlessness +motionlessnesses +motions +motivate +motivated +motivates +motivating motivation +motivational +motivationally +motivations +motivative +motivator +motivators +motive +motived +motiveless +motivelessly +motives +motivic +motiving +motivities +motivity +motley +motleyer +motleyest +motleys +motlier +motliest +motmot +motmots +motocross +motocrosses +motoneuron +motoneuronal +motoneurons motor +motorbike +motorbiked +motorbikes +motorbiking +motorboat +motorboater +motorboaters +motorboating +motorboatings +motorboats +motorbus +motorbuses +motorbusses +motorcade +motorcaded +motorcades +motorcading +motorcar +motorcars motorcycle +motorcycled +motorcycles +motorcycling +motorcyclist +motorcyclists +motordom +motordoms +motored +motoric +motorically +motoring +motorings +motorise +motorised +motorises +motorising +motorist +motorists +motorization +motorizations +motorize +motorized +motorizes +motorizing +motorless +motorman +motormen +motormouth +motormouths +motors +motortruck +motortrucks +motorway +motorways +mots +mott +motte +mottes +mottle +mottled +mottler +mottlers +mottles +mottling motto +mottoes +mottos +motts +mouch +mouched +mouches +mouching +mouchoir +mouchoirs +moue +moues +moufflon +moufflons +mouflon +mouflons +mouille +moujik +moujiks +moulage +moulages +mould +moulded +moulder +mouldered +mouldering +moulders +mouldier +mouldiest +moulding +mouldings +moulds +mouldy +moulin +moulins +moult +moulted +moulter +moulters +moulting +moults +mound +mounded +mounding +mounds +mount +mountable mountain +mountaineer +mountaineering +mountaineerings +mountaineers mountainous +mountainously +mountainousness +mountainousnesses +mountains +mountainside +mountainsides +mountaintop +mountaintops +mountainy +mountebank +mountebanked +mountebankeries +mountebankery +mountebanking +mountebanks +mounted +mounter +mounters +mounting +mountings +mounts mourn +mourned +mourner +mourners +mournful +mournfuller +mournfullest +mournfully +mournfulness +mournfulnesses +mourning +mourningly +mournings +mourns mouse +moused +mouser +mousers +mouses +mousetrap +mousetrapped +mousetrapping +mousetraps +mousey +mousier +mousiest +mousily +mousiness +mousinesses +mousing +mousings +moussaka +moussakas +mousse +moussed +mousseline +mousselines +mousses +moussing moustache +moustaches +moustachio +moustachios +mousy mouth +mouthbreeder +mouthbreeders +mouthed +mouther +mouthers +mouthful +mouthfuls +mouthier +mouthiest +mouthily +mouthing +mouthlike +mouthpart +mouthparts +mouthpiece +mouthpieces +mouths +mouthwash +mouthwashes +mouthwatering +mouthwateringly +mouthy +mouton +moutons +movabilities +movability +movable +movableness +movablenesses +movables +movably move +moveable +moveables +moveably +moved +moveless +movelessly +movelessness +movelessnesses movement +movements +mover +movers +moves movie -mr -mrs -ms +moviedom +moviedoms +moviegoer +moviegoers +moviegoing +moviegoings +moviemaker +moviemakers +moviemaking +moviemakings +movieola +movieolas +movies +moving +movingly +moviola +moviolas +mow +mowed +mower +mowers +mowing +mowings +mown +mows +moxa +moxas +moxie +moxies +mozetta +mozettas +mozette +mozo +mozos +mozzarella +mozzarellas +mozzetta +mozzettas +mozzette +mridanga +mridangam +mridangams +mridangas +mu much +muchacho +muchachos +muches +muchly +muchness +muchnesses +mucid +mucidities +mucidity +mucilage +mucilages +mucilaginous +mucilaginously +mucin +mucinoid +mucinous +mucins +muck +muckamuck +muckamucks +mucked +mucker +muckers +muckier +muckiest +muckily +mucking +muckle +muckles +muckluck +mucklucks +muckrake +muckraked +muckraker +muckrakers +muckrakes +muckraking +mucks +muckworm +muckworms +mucky +mucluc +muclucs +mucocutaneous +mucoid +mucoidal +mucoids +mucolytic +mucopeptide +mucopeptides +mucopolysaccharide +mucopolysaccharides +mucoprotein +mucoproteins +mucor +mucors +mucosa +mucosae +mucosal +mucosas +mucose +mucosities +mucosity +mucous +mucro +mucronate +mucrones +mucus +mucuses mud +mudcap +mudcapped +mudcapping +mudcaps +mudcat +mudcats +mudded +mudder +mudders +muddied +muddier +muddies +muddiest +muddily +muddiness +muddinesses +mudding +muddle +muddled +muddleheaded +muddleheadedly +muddleheadedness +muddleheadednesses +muddler +muddlers +muddles +muddling +muddly muddy +muddying +mudfish +mudfishes +mudflat +mudflats +mudflow +mudflows +mudguard +mudguards +mudhole +mudholes +mudlark +mudlarks +mudpack +mudpacks +mudpuppies +mudpuppy +mudra +mudras +mudrock +mudrocks +mudroom +mudrooms +muds +mudsill +mudsills +mudskipper +mudskippers +mudslide +mudslides +mudslinger +mudslingers +mudslinging +mudslingings +mudstone +mudstones +mueddin +mueddins +muenster +muensters +muesli +mueslis +muezzin +muezzins +muff +muffed +muffin +muffing +muffins +muffle +muffled +muffler +mufflered +mufflers +muffles +muffling +muffs +mufti +muftis +mug +mugful +mugfuls +mugg +muggar +muggars +mugged +muggee +muggees +mugger +muggers +muggier +muggiest +muggily +mugginess +mugginesses +mugging +muggings +muggins +muggs +muggur +muggurs +muggy +mugs +mugwort +mugworts +mugwump +mugwumps +muhlies +muhly +mujahedeen +mujahedin +mujahideen +mujik +mujiks +mukluk +mukluks +muktuk +muktuks +mulatto +mulattoes +mulattos +mulberries +mulberry +mulch +mulched +mulches +mulching +mulct +mulcted +mulcting +mulcts +mule +muled +mules +muleta +muletas +muleteer +muleteers +muley +muleys +muliebrities +muliebrity +muling +mulish +mulishly +mulishness +mulishnesses +mull +mulla +mullah +mullahism +mullahisms +mullahs +mullas +mulled +mullein +mulleins +mullen +mullens +muller +mullers +mullet +mullets +mulley +mulleys +mulligan +mulligans +mulligatawnies +mulligatawny +mulling +mullion +mullioned +mullioning +mullions +mullite +mullites +mullock +mullocks +mullocky +mulls +multiage +multiagency +multiarmed +multiatom +multiauthor +multiaxial +multiband +multibank +multibarrel +multibarreled +multibillion +multibillionaire +multibillionaires +multibillions +multibladed +multibranched +multibuilding +multicampus +multicar +multicarbon +multicausal +multicell +multicelled +multicellular +multicellularities +multicellularity +multicenter +multichain +multichambered +multichannel +multichannels +multicharacter +multicity +multiclient +multicoated +multicolor +multicolored +multicolors +multicolumn +multicomponent +multiconductor +multicopy +multicounty +multicourse +multicourses +multicultural +multiculturalism +multiculturalisms +multicurie +multicurrency +multidialectal +multidimensional +multidimensionalities +multidimensionality +multidirectional +multidisciplinary +multidiscipline +multidisciplines +multidivisional +multidomain +multidrug +multielectrode +multielement +multiemployer +multiengine +multiengines +multienzyme +multiethnic +multifaceted +multifactor +multifactorial +multifactorially +multifamily +multifarious +multifariousness +multifariousnesses +multifid +multifilament +multifilaments +multiflash +multifocal +multifold +multiform +multiformities +multiformity +multifrequency +multifunction +multifunctional +multigenerational +multigenic +multigerm +multigrade +multigrain +multigrains +multigrid +multigroup +multihandicapped +multiheaded +multihospital +multihued +multihull +multihulls +multijet +multilane +multilateral +multilateralism +multilateralisms +multilateralist +multilateralists +multilaterally +multilayer +multilayered +multilevel +multileveled +multiline +multilingual +multilingualism +multilingualisms +multilingually +multilobed +multimanned +multimedia +multimedias +multimegaton +multimegatons +multimegawatt +multimegawatts +multimember +multimetallic +multimillennial +multimillion +multimillionaire +multimillionaires +multimillions +multimodal +multimode +multimolecular +multination +multinational +multinationals +multinomial +multinomials +multinuclear +multinucleate +multinucleated +multiorgasmic +multipage +multipaned +multiparameter +multiparous +multipart +multiparticle +multipartite +multiparty +multipath +multiped +multipeds +multiphase +multiphasic +multiphoton +multipicture +multipiece +multipion +multipiston +multiplant +multiplayer +multiple +multiples +multiplet +multiplets +multiplex +multiplexed +multiplexer +multiplexers +multiplexes +multiplexing +multiplexor +multiplexors +multiplicand +multiplicands +multiplication +multiplications +multiplicative +multiplicatively +multiplicities +multiplicity +multiplied +multiplier +multipliers +multiplies multiply +multiplying +multipolar +multipolarities +multipolarity +multipole +multipotential +multipower +multiproblem +multiprocessing +multiprocessings +multiprocessor +multiprocessors +multiproduct +multiprogramming +multiprogrammings +multipronged +multipurpose +multiracial +multiracialism +multiracialisms +multirange +multiregional +multireligious +multiroom +multiscreen +multisense +multisensory +multiservice +multisided +multisite +multisize +multiskilled +multisource +multispecies +multispectral +multispeed +multisport +multistage +multistate +multistemmed +multistep +multistoried +multistory +multistranded +multisyllabic +multisystem +multitalented +multitasking +multitaskings +multiterminal +multitiered +multiton +multitone +multitowered +multitrack +multitracked +multitracking +multitracks +multitrillion +multitrillions +multitude +multitudes +multitudinous +multitudinously +multitudinousness +multitudinousnesses +multiunion +multiunit +multiuse +multiuser +multivalence +multivalences +multivalent +multivalents +multivariable +multivariate +multiversities +multiversity +multivitamin +multivitamins +multivoltine +multivolume +multiwall +multiwarhead +multiwavelength +multiyear +multure +multures mum +mumble +mumbled +mumbler +mumblers +mumbles +mumbling +mumbly +mumm +mummed +mummer +mummeries +mummers +mummery +mummichog +mummichogs +mummied +mummies +mummification +mummifications +mummified +mummifies +mummify +mummifying +mumming +mumms mummy +mummying +mump +mumped +mumper +mumpers +mumping +mumps +mums +mumu +mumus +mun +munch +munched +muncher +munchers +munches +munchies +munching +munchkin +munchkins +mundane +mundanely +mundaneness +mundanenesses +mundanities +mundanity +mundungo +mundungos +mundungus +mundunguses +mungo +mungoose +mungooses +mungos +muni +municipal +municipalities +municipality +municipalization +municipalizations +municipalize +municipalized +municipalizes +municipalizing +municipally +municipals +munificence +munificences +munificent +munificently +muniment +muniments +munis +munition +munitioned +munitioning +munitions +munnion +munnions +muns +munster +munsters +muntin +munting +muntings +muntins +muntjac +muntjacs +muntjak +muntjaks +muon +muonic +muonium +muoniums +muons +mura +muraenid +muraenids +mural +muralist +muralists +murals +muras murder +murdered +murderee +murderees +murderer +murderers +murderess +murderesses +murdering +murderous +murderously +murderousness +murderousnesses +murders +mure +mured +murein +mureins +mures +murex +murexes +muriate +muriated +muriates +muricate +murices +murid +murids +murine +murines +muring +murk +murker +murkest +murkier +murkiest +murkily +murkiness +murkinesses +murkly +murks +murky +murmur +murmured +murmurer +murmurers +murmuring +murmurous +murmurously +murmurs +murphies +murphy +murr +murra +murrain +murrains +murras +murre +murrelet +murrelets +murres +murrey +murreys +murrha +murrhas +murrhine +murries +murrine +murrs +murry +murther +murthered +murthering +murthers +mus +musca +muscadel +muscadels +muscadet +muscadets +muscadine +muscadines +muscae +muscarine +muscarines +muscarinic +muscat +muscatel +muscatels +muscats +muscid +muscids +muscle +musclebound +muscled +muscles +muscling +muscly +muscovite +muscovites +muscular +muscularities +muscularity +muscularly +musculature +musculatures +musculoskeletal +muse +mused +museful +museological +museologies +museologist +museologists +museology +muser +musers +muses +musette +musettes museum +museums +mush +mushed +musher +mushers +mushes +mushier +mushiest +mushily +mushiness +mushinesses +mushing mushroom +mushroomed +mushrooming +mushrooms +mushy music musical +musicale +musicales +musicalise +musicalised +musicalises +musicalising +musicalities +musicality +musicalization +musicalizations +musicalize +musicalized +musicalizes +musicalizing +musically +musicals musician +musicianly +musicians +musicianship +musicianships +musicological +musicologies +musicologist +musicologists +musicology +musics +musing +musingly +musings +musjid +musjids +musk +muskeg +muskegs +muskellunge +musket +musketeer +musketeers +musketries +musketry +muskets +muskie +muskier +muskies +muskiest +muskily +muskiness +muskinesses +muskit +muskits +muskmelon +muskmelons +muskrat +muskrats +musks +musky +muslin +muslins +muspike +muspikes +musquash +musquashes +muss +mussed +mussel +mussels +musses +mussier +mussiest +mussily +mussiness +mussinesses +mussing +mussy must +mustache +mustached +mustaches +mustachio +mustachioed +mustachios +mustang +mustangs mustard +mustards +mustardy +musted +mustee +mustees +muster +mustered +mustering +musters +musth +musths +mustier +mustiest +mustily +mustiness +mustinesses +musting +musts +musty +mut +mutabilities +mutability +mutable +mutably +mutagen +mutageneses +mutagenesis +mutagenic +mutagenically +mutagenicities +mutagenicity +mutagens +mutant +mutants +mutase +mutases +mutate +mutated +mutates +mutating +mutation +mutational +mutationally +mutations +mutative +mutch +mutches +mutchkin +mutchkins +mute +muted +mutedly +mutely +muteness +mutenesses +muter +mutes +mutest +muticous +mutilate +mutilated +mutilates +mutilating +mutilation +mutilations +mutilator +mutilators +mutine +mutined +mutineer +mutineered +mutineering +mutineers +mutines +muting +mutinied +mutinies +mutining +mutinous +mutinously +mutinousness +mutinousnesses +mutiny +mutinying +mutism +mutisms +muton +mutons +muts +mutt +mutter +muttered +mutterer +mutterers +muttering +mutters mutton +muttonchops +muttonfish +muttonfishes +muttons +muttony +mutts +mutual +mutualism +mutualisms +mutualist +mutualistic +mutualists +mutualities +mutuality +mutualization +mutualizations +mutualize +mutualized +mutualizes +mutualizing +mutually +mutuel +mutuels +mutular +mutule +mutules +muumuu +muumuus +muzhik +muzhiks +muzjik +muzjiks +muzzier +muzziest +muzzily +muzziness +muzzinesses +muzzle +muzzled +muzzler +muzzlers +muzzles +muzzling +muzzy my +myalgia +myalgias +myalgic +myases +myasis +myasthenia +myasthenias +myasthenic +myasthenics +mycele +myceles +mycelia +mycelial +mycelian +mycelium +myceloid +mycetoma +mycetomas +mycetomata +mycetomatous +mycetophagous +mycetozoan +mycetozoans +mycobacteria +mycobacterial +mycobacterium +mycoflora +mycoflorae +mycofloras +mycological +mycologically +mycologies +mycologist +mycologists +mycology +mycophagies +mycophagist +mycophagists +mycophagous +mycophagy +mycophile +mycophiles +mycoplasma +mycoplasmal +mycoplasmas +mycoplasmata +mycorrhiza +mycorrhizae +mycorrhizal +mycorrhizas +mycoses +mycosis +mycotic +mycotoxin +mycotoxins +mydriases +mydriasis +mydriatic +mydriatics +myelencephala +myelencephalic +myelencephalon +myelin +myelinated +myeline +myelines +myelinic +myelins +myelitides +myelitis +myeloblast +myeloblastic +myeloblasts +myelocyte +myelocytes +myelocytic +myelofibroses +myelofibrosis +myelofibrotic +myelogenous +myeloid +myeloma +myelomas +myelomata +myelomatous +myelopathic +myelopathies +myelopathy +myeloproliferative +myiases +myiasis +mylonite +mylonites +myna +mynah +mynahs +mynas +mynheer +mynheers +myoblast +myoblasts +myocardia +myocardial +myocarditis +myocarditises +myocardium +myoclonic +myoclonus +myoclonuses +myoelectric +myoelectrical +myofibril +myofibrillar +myofibrils +myofilament +myofilaments +myogenic +myoglobin +myoglobins +myograph +myographs +myoid +myoinositol +myoinositols +myologic +myologies +myology +myoma +myomas +myomata +myomatous +myoneural +myopathic +myopathies +myopathy +myope +myopes +myopia +myopias +myopic +myopically +myopies +myopy +myoscope +myoscopes +myoses +myosin +myosins +myosis +myositis +myositises +myosote +myosotes +myosotis +myosotises +myotic +myotics +myotome +myotomes +myotonia +myotonias +myotonic +myriad +myriads +myriapod +myriapods +myrica +myricas +myriopod +myriopods +myrmecological +myrmecologies +myrmecologist +myrmecologists +myrmecology +myrmecophile +myrmecophiles +myrmecophilous +myrmidon +myrmidons +myrobalan +myrobalans +myrrh +myrrhic +myrrhs +myrtle +myrtles myself +mysid +mysids +mysost +mysosts +mystagog +mystagogies +mystagogs +mystagogue +mystagogues +mystagogy +mysteries +mysterious +mysteriously +mysteriousness +mysteriousnesses +mystery +mystic +mystical +mystically +mysticism +mysticisms +mysticly +mystics +mystification +mystifications +mystified +mystifier +mystifiers +mystifies +mystify +mystifying +mystifyingly +mystique +mystiques +myth +mythic +mythical +mythically +mythicize +mythicized +mythicizer +mythicizers +mythicizes +mythicizing +mythier +mythiest +mythmaker +mythmakers +mythmaking +mythmakings +mythographer +mythographers +mythographies +mythography +mythoi +mythologer +mythologers +mythologic +mythological +mythologically +mythologies +mythologist +mythologists +mythologize +mythologized +mythologizer +mythologizers +mythologizes +mythologizing +mythology +mythomania +mythomaniac +mythomaniacs +mythomanias +mythopoeia +mythopoeias +mythopoeic +mythopoetic +mythopoetical +mythos +myths +mythy +myxedema +myxedemas +myxedematous +myxocyte +myxocytes +myxoid +myxoma +myxomas +myxomata +myxomatoses +myxomatosis +myxomatosises +myxomatous +myxomycete +myxomycetes +myxoviral +myxovirus +myxoviruses +na +naan +naans +nab +nabbed +nabber +nabbers +nabbing +nabe +nabes +nabis +nabob +naboberies +nabobery +nabobess +nabobesses +nabobish +nabobism +nabobisms +nabobs +nabs +nacelle +nacelles +nachas +naches +nacho +nachos +nacre +nacred +nacreous +nacres +nada +nadas +nadir +nadiral +nadirs +nae +naething +naethings +naevi +naevoid +naevus +nag +nagana +naganas +nagged +nagger +naggers +naggier +naggiest +nagging +naggingly +naggy +nags +nah +naiad +naiades +naiads +naif +naifs nail +nailbrush +nailbrushes +nailed +nailer +nailers +nailfold +nailfolds +nailhead +nailheads +nailing +nails +nailset +nailsets +nainsook +nainsooks +naira +naive +naively +naiveness +naivenesses +naiver +naives +naivest +naivete +naivetes +naiveties +naivety +naked +nakeder +nakedest +nakedly +nakedness +nakednesses +naled +naleds +nalorphine +nalorphines +naloxone +naloxones +naltrexone +naltrexones +nam +namable name +nameable +named +nameless +namelessly +namelessness +namelessnesses +namely +nameplate +nameplates +namer +namers +names +namesake +namesakes +nametag +nametags +naming +nan +nana +nanas +nance +nances +nancies +nancy +nandin +nandina +nandinas +nandins +nanism +nanisms +nankeen +nankeens +nankin +nankins +nannie +nannies +nannoplankton +nannoplanktons +nanny +nanogram +nanograms +nanometer +nanometers +nanosecond +nanoseconds +nanotechnologies +nanotechnology +nanotesla +nanoteslas +nanowatt +nanowatts +nans +naoi +naos +nap +napalm +napalmed +napalming +napalms +nape +naperies +napery +napes +naphtha +naphthalene +naphthalenes +naphthas +naphthene +naphthenes +naphthenic +naphthol +naphthols +naphthyl +naphthylamine +naphthylamines +naphthyls +naphtol +naphtols +napiform +napkin +napkins +napless +napoleon +napoleons +nappe +napped +napper +nappers +nappes +nappie +nappier +nappies +nappiest +napping +nappy +naprapathies +naprapathy +naps +narc +narcein +narceine +narceines +narceins +narcism +narcisms +narcissi +narcissism +narcissisms +narcissist +narcissistic +narcissists +narcissus +narcissuses +narcist +narcists +narco +narcolepsies +narcolepsy +narcoleptic +narcoleptics +narcos +narcose +narcoses +narcosis +narcotic +narcotically +narcotics +narcotize +narcotized +narcotizes +narcotizing +narcs +nard +nardine +nards +nares +narghile +narghiles +nargile +nargileh +nargilehs +nargiles +narial +naric +narine +naris +nark +narked +narking +narks +narky +narrate +narrated +narrater +narraters +narrates +narrating +narration +narrational +narrations +narrative +narratively +narratives +narratological +narratologies +narratologist +narratologists +narratology +narrator +narrators narrow +narrowband +narrowcasting +narrowcastings +narrowed +narrower +narrowest +narrowing +narrowly +narrowness +narrownesses +narrows +narthex +narthexes +narwal +narwals +narwhal +narwhale +narwhales +narwhals +nary +nasal +nasalise +nasalised +nasalises +nasalising +nasalities +nasality +nasalization +nasalizations +nasalize +nasalized +nasalizes +nasalizing +nasally +nasals +nascence +nascences +nascencies +nascency +nascent +nasial +nasion +nasions +nasogastric +nasopharyngeal +nasopharynges +nasopharynx +nasopharynxes +nastic +nastier +nasties +nastiest +nastily +nastiness +nastinesses +nasturtium +nasturtiums +nasty +natal +natalities +natality +natant +natantly +natation +natations +natatoria +natatorial +natatorium +natatoriums +natatory +natch +nates +natheless +nathless nation national +nationalise +nationalised +nationalises +nationalising +nationalism +nationalisms +nationalist +nationalistic +nationalistically +nationalists +nationalities nationality +nationalization +nationalizations +nationalize +nationalized +nationalizer +nationalizers +nationalizes +nationalizing +nationally +nationals +nationhood +nationhoods +nations nationwide native +natively +nativeness +nativenesses +natives +nativism +nativisms +nativist +nativistic +nativists +nativities +nativity +natrium +natriums +natriureses +natriuresis +natriuretic +natriuretics +natrolite +natrolites +natron +natrons +natter +nattered +nattering +natters +nattier +nattiest +nattily +nattiness +nattinesses +natty natural +naturalise +naturalised +naturalises +naturalising +naturalism +naturalisms +naturalist +naturalistic +naturalistically +naturalists +naturalization +naturalizations +naturalize +naturalized +naturalizes +naturalizing +naturally +naturalness +naturalnesses +naturals nature +natured +natures +naturism +naturisms +naturist +naturists +naturopath +naturopathic +naturopathies +naturopaths +naturopathy +naught +naughtier +naughtiest +naughtily +naughtiness +naughtinesses +naughts +naughty +naumachia +naumachiae +naumachias +naumachies +naumachy +nauplial +nauplii +nauplius +nausea +nauseant +nauseants +nauseas +nauseate +nauseated +nauseates +nauseating +nauseatingly +nauseous +nauseously +nauseousness +nauseousnesses +nautch +nautches +nautical +nautically +nautili +nautiloid +nautiloids +nautilus +nautiluses +navaid +navaids +naval +navally +navar +navars +nave +navel +navels +naves +navette +navettes +navicert +navicerts +navicular +naviculars +navies +navigabilities +navigability +navigable +navigably +navigate +navigated +navigates +navigating +navigation +navigational +navigationally +navigations +navigator +navigators +navvies +navvy navy +naw +nawab +nawabs +nay +nays +naysayer +naysayers +nazi +nazification +nazifications +nazified +nazifies +nazify +nazifying +nazis +ne +neap +neaps near nearby +neared +nearer +nearest +nearing +nearlier +nearliest nearly +nearness +nearnesses +nears +nearshore +nearside +nearsides +nearsighted +nearsightedly +nearsightedness +nearsightednesses neat +neaten +neatened +neatening +neatens +neater +neatest +neath +neatherd +neatherds +neatly +neatness +neatnesses +neats +neb +nebbish +nebbishes +nebbishy +nebenkern +nebenkerns +nebs +nebula +nebulae +nebular +nebulas +nebule +nebulise +nebulised +nebulises +nebulising +nebulization +nebulizations +nebulize +nebulized +nebulizer +nebulizers +nebulizes +nebulizing +nebulose +nebulosities +nebulosity +nebulous +nebulously +nebulousness +nebulousnesses +nebuly +necessaries +necessarily necessary +necessitarian +necessitarianism +necessitarianisms +necessitarians +necessitate +necessitated +necessitates +necessitating +necessitation +necessitations +necessities +necessitous +necessitously +necessitousness +necessitousnesses +necessity neck +neckband +neckbands +necked +necker +neckerchief +neckerchiefs +neckerchieves +neckers +necking +neckings necklace +necklaces +neckless +necklike +neckline +necklines +necks +necktie +neckties +neckwear +necrological +necrologies +necrologist +necrologists +necrology +necromancer +necromancers +necromancies +necromancy +necromantic +necromantically +necrophagous +necrophilia +necrophiliac +necrophiliacs +necrophilias +necrophilic +necrophilism +necrophilisms +necropoleis +necropoles +necropoli +necropolis +necropolises +necropsied +necropsies +necropsy +necropsying +necrose +necrosed +necroses +necrosing +necrosis +necrotic +necrotizing +nectar +nectaries +nectarine +nectarines +nectarous +nectars +nectary +nee need +needed +needer +needers +needful +needfully +needfulness +needfulnesses +needfuls +needier +neediest +needily +neediness +needinesses +needing needle +needled +needlefish +needlefishes +needlelike +needlepoint +needlepoints +needler +needlers +needles +needless +needlessly +needlessness +needlessnesses +needlewoman +needlewomen +needlework +needleworker +needleworkers +needleworks +needling +needlings +needs +needy +neem +neems +neep +neeps +nefarious +nefariously +negate +negated +negater +negaters +negates +negating +negation +negational +negations +negative +negatived +negatively +negativeness +negativenesses +negatives +negativing +negativism +negativisms +negativist +negativistic +negativists +negativities +negativity +negaton +negatons +negator +negators +negatron +negatrons +neglect +neglected +neglecter +neglecters +neglectful +neglectfully +neglectfulness +neglectfulnesses +neglecting +neglects +neglige +negligee +negligees +negligence +negligences +negligent +negligently +negliges +negligibilities +negligibility +negligible +negligibly +negotiabilities +negotiability +negotiable +negotiant +negotiants negotiate +negotiated +negotiates +negotiating +negotiation +negotiations +negotiator +negotiators +negotiatory +negritude +negritudes +negroid +negroids +negroni +negronis +negrophobe +negrophobes +negrophobia +negrophobias +negus +neguses +neif +neifs +neigh neighbor +neighbored neighborhood +neighborhoods +neighboring +neighborliness +neighborlinesses +neighborly +neighbors neighbour -neighbourhood +neighboured +neighbouring +neighbours +neighed +neighing +neighs +neist neither +nekton +nektonic +nektons +nellie +nellies +nelly +nelson +nelsons +nelumbo +nelumbos +nema +nemas +nematic +nematicidal +nematicide +nematicides +nematocidal +nematocide +nematocides +nematocyst +nematocysts +nematode +nematodes +nematological +nematologies +nematologist +nematologists +nematology +nemertean +nemerteans +nemertine +nemertines +nemeses +nemesis +nemophila +nemophilas +nene +neoclassic +neoclassical +neoclassicism +neoclassicisms +neoclassicist +neoclassicists +neocolonial +neocolonialism +neocolonialisms +neocolonialist +neocolonialists +neoconservatism +neoconservatisms +neoconservative +neoconservatives +neocortex +neocortexes +neocortical +neocortices +neodymium +neodymiums +neoliberal +neoliberalism +neoliberalisms +neoliberals +neolith +neolithic +neoliths +neologic +neologies +neologism +neologisms +neologistic +neology +neomorph +neomorphs +neomycin +neomycins +neon +neonatal +neonatally +neonate +neonates +neonatologies +neonatologist +neonatologists +neonatology +neoned +neons +neoorthodox +neoorthodoxies +neoorthodoxy +neophilia +neophiliac +neophiliacs +neophilias +neophyte +neophytes +neoplasia +neoplasias +neoplasm +neoplasms +neoplastic +neoplasticism +neoplasticisms +neoplasticist +neoplasticists +neoprene +neoprenes +neorealism +neorealisms +neorealist +neorealistic +neorealists +neostigmine +neostigmines +neotenic +neotenies +neoteny +neoteric +neoterics +neotropics +neotype +neotypes +nepenthe +nepenthean +nepenthes +nepheline +nephelines +nephelinic +nephelinite +nephelinites +nephelinitic +nephelite +nephelites +nephelometer +nephelometers +nephelometric +nephelometrically +nephelometries +nephelometry nephew +nephews +nephoscope +nephoscopes +nephrectomies +nephrectomize +nephrectomized +nephrectomizes +nephrectomizing +nephrectomy +nephric +nephridia +nephridial +nephridium +nephrism +nephrisms +nephrite +nephrites +nephritic +nephritides +nephritis +nephrologies +nephrologist +nephrologists +nephrology +nephron +nephrons +nephropathic +nephropathies +nephropathy +nephroses +nephrosis +nephrostome +nephrostomes +nephrotic +nephrotics +nephrotoxic +nephrotoxicities +nephrotoxicity +nepotic +nepotism +nepotisms +nepotist +nepotistic +nepotists +neptunium +neptuniums +nerd +nerdier +nerdiest +nerdish +nerds +nerdy +nereid +nereides +nereids +nereis +neritic +nerol +neroli +nerolis +nerols +nerts +nertz +nervate +nervation +nervations +nerve +nerved +nerveless +nervelessly +nervelessness +nervelessnesses +nerves +nervier +nerviest +nervily +nervine +nervines +nerviness +nervinesses +nerving +nervings +nervosities +nervosity nervous +nervously +nervousness +nervousnesses +nervule +nervules +nervure +nervures +nervy +nescience +nesciences +nescient +nescients +ness +nesses nest +nestable +nested +nester +nesters +nesting +nestle +nestled +nestler +nestlers +nestles +nestlike +nestling +nestlings +nestor +nestors +nests net +nether +nethermost +netherworld +netherworlds +netless +netlike +netminder +netminders +netop +netops +nets +netsuke +netsukes +nett +nettable +netted +netter +netters +nettier +nettiest +netting +nettings +nettle +nettled +nettler +nettlers +nettles +nettlesome +nettlier +nettliest +nettling +nettly +netts +netty network +networked +networking +networkings +networks +neuk +neuks +neum +neumatic +neume +neumes +neumic +neums +neural +neuralgia +neuralgias +neuralgic +neurally +neuraminidase +neuraminidases +neurasthenia +neurasthenias +neurasthenic +neurasthenically +neurasthenics +neuraxon +neuraxons +neurilemma +neurilemmal +neurilemmas +neurine +neurines +neuritic +neuritics +neuritides +neuritis +neuritises +neuroactive +neuroanatomic +neuroanatomical +neuroanatomies +neuroanatomist +neuroanatomists +neuroanatomy +neurobiological +neurobiologies +neurobiologist +neurobiologists +neurobiology +neuroblastoma +neuroblastomas +neuroblastomata +neurochemical +neurochemicals +neurochemist +neurochemistries +neurochemistry +neurochemists +neurodegenerative +neuroendocrine +neuroendocrinological +neuroendocrinologies +neuroendocrinologist +neuroendocrinologists +neuroendocrinology +neurofibril +neurofibrillary +neurofibrils +neurofibroma +neurofibromas +neurofibromata +neurofibromatoses +neurofibromatosis +neurofibromatosises +neurogenic +neurogenically +neuroglia +neuroglial +neuroglias +neurohormonal +neurohormone +neurohormones +neurohumor +neurohumoral +neurohumors +neurohypophyseal +neurohypophyses +neurohypophysial +neurohypophysis +neuroid +neuroleptic +neuroleptics +neurologic +neurological +neurologically +neurologies +neurologist +neurologists +neurology +neuroma +neuromas +neuromata +neuromuscular +neuron +neuronal +neurone +neurones +neuronic +neurons +neuropathic +neuropathically +neuropathies +neuropathologic +neuropathological +neuropathologies +neuropathologist +neuropathologists +neuropathology +neuropathy +neuropeptide +neuropeptides +neuropharmacologic +neuropharmacological +neuropharmacologies +neuropharmacologist +neuropharmacologists +neuropharmacology +neurophysiologic +neurophysiological +neurophysiologically +neurophysiologies +neurophysiologist +neurophysiologists +neurophysiology +neuropsychiatric +neuropsychiatrically +neuropsychiatries +neuropsychiatrist +neuropsychiatrists +neuropsychiatry +neuropsychological +neuropsychologies +neuropsychologist +neuropsychologists +neuropsychology +neuropteran +neuropterans +neuropterous +neuroradiological +neuroradiologies +neuroradiologist +neuroradiologists +neuroradiology +neurosal +neuroscience +neurosciences +neuroscientific +neuroscientist +neuroscientists +neurosecretion +neurosecretions +neurosecretory +neurosensory +neuroses +neurosis +neurospora +neurosporas +neurosurgeon +neurosurgeons +neurosurgeries +neurosurgery +neurosurgical +neurotic +neurotically +neuroticism +neuroticisms +neurotics +neurotoxic +neurotoxicities +neurotoxicity +neurotoxin +neurotoxins +neurotransmission +neurotransmissions +neurotransmitter +neurotransmitters +neurotropic +neurula +neurulae +neurulas +neurulation +neurulations +neuston +neustons +neuter +neutered +neutering +neuters +neutral +neutralise +neutralised +neutralises +neutralising +neutralism +neutralisms +neutralist +neutralistic +neutralists +neutralities +neutrality +neutralization +neutralizations +neutralize +neutralized +neutralizer +neutralizers +neutralizes +neutralizing +neutrally +neutralness +neutralnesses +neutrals +neutrino +neutrinoless +neutrinos +neutron +neutronic +neutrons +neutrophil +neutrophilic +neutrophils +neve never +nevermore +nevertheless +neves +nevi +nevoid +nevus new +newborn +newborns +newcomer +newcomers +newel +newels +newer +newest +newfangled +newfangledness +newfanglednesses +newfound +newie +newies +newish +newly +newlywed +newlyweds +newmarket +newmarkets +newmown +newness +newnesses news +newsagent +newsagents +newsboy +newsboys +newsbreak +newsbreaks +newscast +newscaster +newscasters +newscasts +newsdealer +newsdealers +newshawk +newshawks +newshound +newshounds +newsie +newsier +newsies +newsiest +newsiness +newsinesses +newsless +newsletter +newsletters +newsmagazine +newsmagazines +newsman +newsmen +newsmonger +newsmongers newspaper +newspapered +newspapering +newspaperman +newspapermen +newspapers +newspaperwoman +newspaperwomen +newspeak +newspeaks +newspeople +newsperson +newspersons +newsprint +newsprints +newsreader +newsreaders +newsreel +newsreels +newsroom +newsrooms +newsstand +newsstands +newsweeklies +newsweekly +newswoman +newswomen +newsworthiness +newsworthinesses +newsworthy +newswriting +newswritings +newsy +newt +newton +newtons +newts next +nextdoor +nexus +nexuses +ngultrum +ngultrums +ngwee +niacin +niacinamide +niacinamides +niacins +nialamide +nialamides +nib +nibbed +nibbing +nibble +nibbled +nibbler +nibblers +nibbles +nibbling +niblick +niblicks +niblike +nibs +nicad +nicads +niccolite +niccolites nice +nicely +niceness +nicenesses +nicer +nicest +niceties +nicety +niche +niched +niches +niching +nick +nicked +nickel +nickeled +nickelic +nickeliferous +nickeling +nickelled +nickelling +nickelodeon +nickelodeons +nickels +nicker +nickered +nickering +nickers +nicking +nickle +nickled +nickles +nickling +nicknack +nicknacks +nickname +nicknamed +nicknamer +nicknamers +nicknames +nicknaming +nicks +nicol +nicols +nicotiana +nicotianas +nicotin +nicotinamide +nicotinamides +nicotine +nicotines +nicotinic +nicotins +nictate +nictated +nictates +nictating +nictitate +nictitated +nictitates +nictitating +nidal +nide +nided +nidering +niderings +nides +nidget +nidgets +nidi +nidicolous +nidification +nidifications +nidified +nidifies +nidifugous +nidify +nidifying +niding +nidus +niduses niece +nieces +nielli +niellist +niellists +niello +nielloed +nielloing +niellos +nieve +nieves +nifedipine +nifedipines +niffer +niffered +niffering +niffers +niftier +nifties +niftiest +niftily +nifty +niggard +niggarded +niggarding +niggardliness +niggardlinesses +niggardly +niggards +nigger +niggers +niggle +niggled +niggler +nigglers +niggles +niggling +nigglingly +nigglings +nigh +nighed +nigher +nighest +nighing +nighness +nighnesses +nighs +night +nightcap +nightcaps +nightclothes +nightclub +nightclubbed +nightclubber +nightclubbers +nightclubbing +nightclubs +nightdress +nightdresses +nightfall +nightfalls +nightglow +nightglows +nightgown +nightgowns +nighthawk +nighthawks +nightie +nighties +nightingale +nightingales +nightjar +nightjars +nightless +nightlife +nightlifes +nightlong +nightly +nightmare +nightmares +nightmarish +nightmarishly +nights +nightscope +nightscopes +nightshade +nightshades +nightshirt +nightshirts +nightside +nightsides +nightspot +nightspots +nightstand +nightstands +nightstick +nightsticks +nighttime +nighttimes +nightwalker +nightwalkers +nighty +nigrified +nigrifies +nigrify +nigrifying +nigrosin +nigrosins +nihil +nihilism +nihilisms +nihilist +nihilistic +nihilists +nihilities +nihility +nihils +nil +nilgai +nilgais +nilgau +nilgaus +nilghai +nilghais +nilghau +nilghaus +nill +nilled +nilling +nills +nilpotent +nils +nim +nimbi +nimble +nimbleness +nimblenesses +nimbler +nimblest +nimbly +nimbostrati +nimbostratus +nimbus +nimbused +nimbuses +nimieties +nimiety +nimious +nimmed +nimming +nimrod +nimrods +nims +nincompoop +nincompooperies +nincompoopery +nincompoops +nine +ninebark +ninebarks +ninefold +ninepin +ninepins +nines +nineteen +nineteens +nineteenth +nineteenths +nineties +ninetieth +ninetieths +ninety +ninhydrin +ninhydrins +ninja +ninjas +ninnies +ninny +ninnyhammer +ninnyhammers +ninnyish +ninon +ninons +ninth +ninthly +ninths +niobate +niobates +niobic +niobium +niobiums +niobous +nip +nipa +nipas +nipped +nipper +nippers +nippier +nippiest +nippily +nippiness +nippinesses +nipping +nippingly +nipple +nippled +nipples +nippy +nips +nirvana +nirvanas +nirvanic +nisei +niseis +nisi +nisus +nit +nitchie +nitchies +nite +niter +niterie +niteries +niters +nitery +nites +nitid +nitinol +nitinols +niton +nitons +nitpick +nitpicked +nitpicker +nitpickers +nitpickier +nitpickiest +nitpicking +nitpicks +nitpicky +nitrate +nitrated +nitrates +nitrating +nitration +nitrations +nitrator +nitrators +nitre +nitres +nitric +nitrid +nitride +nitrided +nitrides +nitriding +nitrids +nitrification +nitrifications +nitrified +nitrifier +nitrifiers +nitrifies +nitrify +nitrifying +nitril +nitrile +nitriles +nitrils +nitrite +nitrites +nitro +nitrobenzene +nitrobenzenes +nitrocellulose +nitrocelluloses +nitrofuran +nitrofurans +nitrogen +nitrogenase +nitrogenases +nitrogenous +nitrogens +nitroglycerin +nitroglycerine +nitroglycerines +nitroglycerins +nitrolic +nitromethane +nitromethanes +nitroparaffin +nitroparaffins +nitros +nitrosamine +nitrosamines +nitroso +nitrosyl +nitrosyls +nitrous +nits +nittier +nittiest +nitty +nitwit +nitwits +nival +niveous +nix +nixe +nixed +nixes +nixie +nixies +nixing +nixy +nizam +nizamate +nizamates +nizams no +nob +nobbier +nobbiest +nobbily +nobble +nobbled +nobbler +nobblers +nobbles +nobbling +nobby +nobelium +nobeliums +nobilities +nobility noble +nobleman +noblemen +nobleness +noblenesses +nobler +nobles +noblesse +noblesses +noblest +noblewoman +noblewomen +nobly +nobodies nobody +nobs +nocent +nociceptive +nock +nocked +nocking +nocks +noctambulist +noctambulists +noctuid +noctuids +noctule +noctules +noctuoid +nocturn +nocturnal +nocturnally +nocturne +nocturnes +nocturns +nocuous +nocuously nod +nodal +nodalities +nodality +nodally +nodded +nodder +nodders +noddies +nodding +noddle +noddled +noddles +noddling +noddy +node +nodes +nodi +nodical +nodose +nodosities +nodosity +nodous +nods +nodular +nodulation +nodulations +nodule +nodules +nodulose +nodulous +nodus +noel +noels +noes +noesis +noesises +noetic +nog +nogg +nogged +noggin +nogging +noggings +noggins +noggs +nogs +noh +nohow +noil +noils +noily +noir +noirish +noirs noise +noised +noiseless +noiselessly +noisemaker +noisemakers +noisemaking +noisemakings +noises +noisette +noisettes +noisier +noisiest +noisily +noisiness +noisinesses +noising +noisome +noisomely +noisomeness +noisomenesses noisy +nolo +nolos +nom +noma +nomad +nomadic +nomadism +nomadisms +nomads +nomarch +nomarchies +nomarchs +nomarchy +nomas +nombles +nombril +nombrils +nome +nomen +nomenclator +nomenclatorial +nomenclators +nomenclatural +nomenclature +nomenclatures +nomes +nomina +nominal +nominalism +nominalisms +nominalist +nominalistic +nominalists +nominally +nominals +nominate +nominated +nominates +nominating +nomination +nominations +nominative +nominatives +nominator +nominators +nominee +nominees +nomism +nomisms +nomistic +nomogram +nomograms +nomograph +nomographic +nomographies +nomographs +nomography +nomoi +nomological +nomologies +nomology +nomos +nomothetic +noms +nona +nonabrasive +nonabsorbable +nonabsorbent +nonabsorbents +nonabsorptive +nonabstract +nonacademic +nonacademics +nonacceptance +nonacceptances +nonaccountable +nonaccredited +nonaccrual +nonachievement +nonachievements +nonacid +nonacidic +nonacids +nonacquisitive +nonacting +nonaction +nonactions +nonactivated +nonactor +nonactors +nonadaptive +nonaddict +nonaddictive +nonaddicts +nonadditive +nonadditivities +nonadditivity +nonadhesive +nonadiabatic +nonadjacent +nonadmirer +nonadmirers +nonadmission +nonadmissions +nonadult +nonadults +nonaesthetic +nonaffiliated +nonaffluent +nonage +nonagenarian +nonagenarians +nonages +nonaggression +nonaggressions +nonaggressive +nonagon +nonagons +nonagricultural +nonalcoholic +nonalcoholics +nonaligned +nonalignment +nonalignments +nonallelic +nonallergenic +nonallergic +nonalphabetic +nonaluminum +nonambiguous +nonanalytic +nonanatomic +nonanimal +nonanswer +nonanswers +nonantagonistic +nonanthropological +nonanthropologist +nonanthropologists +nonantibiotic +nonantibiotics +nonantigenic +nonappearance +nonappearances +nonaquatic +nonaqueous +nonarable +nonarbitrariness +nonarbitrarinesses +nonarbitrary +nonarchitect +nonarchitects +nonarchitecture +nonarchitectures +nonargument +nonarguments +nonaristocratic +nonaromatic +nonart +nonartist +nonartistic +nonartists +nonarts +nonas +nonascetic +nonascetics +nonaspirin +nonaspirins +nonassertive +nonassociated +nonastronomical +nonathlete +nonathletes +nonathletic +nonatomic +nonattached +nonattachment +nonattachments +nonattendance +nonattendances +nonattender +nonattenders +nonauditory +nonauthor +nonauthoritarian +nonauthors +nonautomated +nonautomatic +nonautomotive +nonautonomous +nonavailabilities +nonavailability +nonbacterial +nonbank +nonbanking +nonbanks +nonbarbiturate +nonbarbiturates +nonbasic +nonbearing +nonbehavioral +nonbeing +nonbeings +nonbelief +nonbeliefs +nonbeliever +nonbelievers +nonbelligerencies +nonbelligerency +nonbelligerent +nonbelligerents +nonbetting +nonbibliographic +nonbinary +nonbinding +nonbiodegradable +nonbiodegradables +nonbiographical +nonbiological +nonbiologically +nonbiologist +nonbiologists +nonbiting +nonblack +nonblacks +nonbodies +nonbody +nonbonded +nonbonding +nonbook +nonbooks +nonbotanist +nonbotanists +nonbrand +nonbreakable +nonbreathing +nonbreeder +nonbreeders +nonbreeding +nonbreedings +nonbroadcast +nonbroadcasts +nonbuilding +nonbuildings +nonburnable +nonbusiness +nonbuying +noncabinet +noncabinets +noncaking +noncallable +noncaloric +noncampus +noncancelable +noncancerous +noncandidacies +noncandidacy +noncandidate +noncandidates +noncannibalistic +noncapital +noncapitalist +noncapitalists +noncapitals +noncarcinogen +noncarcinogenic +noncarcinogens +noncardiac +noncareer +noncarrier +noncarriers +noncash +noncasual +noncausal +nonce +noncelebration +noncelebrations +noncelebrities +noncelebrity +noncellular +noncellulosic +noncentral +noncertificated +noncertified +nonces +nonchalance +nonchalances +nonchalant +nonchalantly +noncharacter +noncharacters +noncharismatic +nonchauvinist +nonchauvinists +nonchemical +nonchemicals +nonchromosomal +nonchronological +nonchurch +nonchurchgoer +nonchurchgoers +noncircular +noncirculating +noncitizen +noncitizens +nonclandestine +nonclass +nonclasses +nonclassical +nonclassified +nonclassroom +nonclassrooms +nonclerical +nonclericals +noncling +nonclinical +nonclogging +noncoercive +noncognitive +noncoherent +noncoincidence +noncoincidences +noncoital +noncoking +noncola +noncollector +noncollectors +noncollege +noncolleges +noncollegiate +noncollinear +noncolor +noncolored +noncolorfast +noncolors +noncom +noncombat +noncombatant +noncombatants +noncombative +noncombustible +noncombustibles +noncommercial +noncommercials +noncommitment +noncommitments +noncommittal +noncommittally +noncommitted +noncommunicating +noncommunication +noncommunications +noncommunicative +noncommunist +noncommunists +noncommunities +noncommunity +noncommutative +noncommutativities +noncommutativity +noncomparabilities +noncomparability +noncomparable +noncompatible +noncompetition +noncompetitive +noncompetitor +noncompetitors +noncomplementary +noncomplex +noncompliance +noncompliances +noncompliant +noncomplicated +noncomplying +noncomplyings +noncomposer +noncomposers +noncompound +noncompounds +noncomprehension +noncomprehensions +noncompressible +noncomputer +noncomputerized +noncoms +nonconceptual +nonconcern +nonconcerns +nonconclusion +nonconclusions +nonconcur +nonconcurred +nonconcurrence +nonconcurrences +nonconcurrent +nonconcurring +nonconcurs +noncondensable +nonconditioned +nonconducting +nonconduction +nonconductions +nonconductive +nonconductor +nonconductors +nonconference +nonconferences +nonconfidence +nonconfidences +nonconfidential +nonconflicting +nonconform +nonconformance +nonconformances +nonconformed +nonconformer +nonconformers +nonconforming +nonconformism +nonconformisms +nonconformist +nonconformists +nonconformities +nonconformity +nonconforms +nonconfrontation +nonconfrontational +nonconfrontations +noncongruent +nonconjugated +nonconnection +nonconnections +nonconscious +nonconsecutive +nonconsensual +nonconservation +nonconservations +nonconservative +nonconservatives +nonconsolidated +nonconstant +nonconstants +nonconstitutional +nonconstruction +nonconstructions +nonconstructive +nonconsumer +nonconsumers +nonconsuming +nonconsumption +nonconsumptions +nonconsumptive +noncontact +noncontacts +noncontagious +noncontemporaries +noncontemporary +noncontiguous +noncontingent +noncontinuous +noncontract +noncontractual +noncontradiction +noncontradictions +noncontradictory +noncontributory +noncontrollable +noncontrolled +noncontrolling +noncontroversial +nonconventional +nonconvertible +noncooperation +noncooperationist +noncooperationists +noncooperations +noncooperative +noncooperator +noncooperators +noncoplanar +noncorporate +noncorrelation +noncorrelations +noncorrodible +noncorroding +noncorrodings +noncorrosive +noncountries +noncountry +noncounty +noncoverage +noncoverages +noncreative +noncreativities +noncreativity +noncredentialed +noncredit +noncrime +noncrimes +noncriminal +noncriminals +noncrises +noncrisis +noncritical +noncrossover +noncrushable +noncrystalline +nonculinary +noncultivated +noncultivation +noncultivations +noncultural +noncumulative +noncurrent +noncustodial +noncustomer +noncustomers +noncyclic +noncyclical +nondairy +nondance +nondancer +nondancers +nondances +nondeceptive +nondecision +nondecisions +nondecreasing +nondeductibilities +nondeductibility +nondeductible +nondeductive +nondefense +nondeferrable +nondeforming +nondegenerate +nondegenerates +nondegradable +nondegradables +nondegree +nondelegate +nondelegates +nondeliberate +nondelinquent +nondeliveries +nondelivery +nondemanding +nondemocratic +nondenominational +nondenominationalism +nondenominationalisms +nondepartmental +nondependent +nondependents +nondepletable +nondepleting +nondeposition +nondepositions +nondepressed +nonderivative +nonderivatives +nondescript +nondescriptive +nondescripts +nondesert +nondestructive +nondestructively +nondestructiveness +nondestructivenesses +nondetachable +nondeterministic +nondevelopment +nondevelopments +nondeviant +nondeviants +nondiabetic +nondiabetics +nondialyzable +nondiapausing +nondidactic +nondiffusible +nondimensional +nondiplomatic +nondirected +nondirectional +nondirective +nondisabled +nondisableds +nondisclosure +nondisclosures +nondiscount +nondiscretionary +nondiscrimination +nondiscriminations +nondiscriminatory +nondiscursive +nondisjunction +nondisjunctional +nondisjunctions +nondispersive +nondisruptive +nondistinctive +nondiversified +nondividing +nondoctor +nondoctors +nondoctrinaire +nondocumentaries +nondocumentary +nondogmatic +nondollar +nondomestic +nondomestics +nondominant +nondominants +nondormant +nondramatic +nondrinker +nondrinkers +nondrinking +nondriver +nondrivers +nondrug +nondurable +nondurables none +nonearning +nonearnings +nonecclesiastical +noneconomic +noneconomist +noneconomists +nonedible +noneditorial +noneducation +noneducational +noneducations +noneffective +noneffectives +nonego +nonegos +nonelastic +nonelect +nonelected +nonelection +nonelections +nonelective +nonelectives +nonelectric +nonelectrical +nonelectrics +nonelectrolyte +nonelectrolytes +nonelectronic +nonelectronics +nonelementary +nonelite +nonemergencies +nonemergency +nonemotional +nonemphatic +nonempirical +nonemployee +nonemployees +nonemployment +nonemployments +nonempty +nonencapsulated +nonending +nonenergy +nonenforceabilities +nonenforceability +nonenforcement +nonenforcements +nonengagement +nonengagements +nonengineering +nonengineerings +nonentertainment +nonentertainments +nonentities +nonentity +nonentries +nonentry +nonenzymatic +nonenzymic +nonequal +nonequals +nonequilibria +nonequilibrium +nonequilibriums +nonequivalence +nonequivalences +nonequivalent +nonequivalents +nonerotic +nones +nonessential +nonessentials +nonestablished +nonestablishment +nonestablishments +nonesterified +nonesuch +nonesuches +nonet +nonetheless +nonethical +nonethnic +nonets +nonevaluative +nonevent +nonevents +nonevidence +nonevidences +nonexclusive +nonexecutive +nonexecutives +nonexempt +nonexistence +nonexistences +nonexistent +nonexistential +nonexotic +nonexpendable +nonexperimental +nonexpert +nonexperts +nonexplanatory +nonexploitation +nonexploitations +nonexploitative +nonexploitive +nonexplosive +nonexplosives +nonexposed +nonextant +nonfact +nonfactor +nonfactors +nonfacts +nonfactual +nonfaculty +nonfading +nonfamilial +nonfamilies +nonfamily +nonfan +nonfans +nonfarm +nonfarmer +nonfarmers +nonfat +nonfatal +nonfattening +nonfatty +nonfeasance +nonfeasances +nonfederal +nonfederated +nonfeminist +nonfeminists +nonferrous +nonfiction +nonfictional +nonfictions +nonfigurative +nonfilamentous +nonfilterable +nonfinal +nonfinancial +nonfinite +nonfissionable +nonflammability +nonflammable +nonflowering +nonfluencies +nonfluency +nonfluid +nonfluids +nonfluorescent +nonflying +nonfocal +nonfood +nonforfeitable +nonforfeiture +nonforfeitures +nonformal +nonfossil +nonfraternization +nonfraternizations +nonfreezing +nonfrivolous +nonfrozen +nonfuel +nonfulfillment +nonfulfillments +nonfunctional +nonfunctioning +nongame +nongaseous +nongay +nongays +nongenetic +nongenital +nongeometrical +nonghetto +nonglamorous +nonglare +nongolfer +nongolfers +nongonococcal +nongovernment +nongovernmental +nongovernments +nongraded +nongraduate +nongraduates +nongrammatical +nongranular +nongravitational +nongreasy +nongreen +nongregarious +nongrowing +nongrowth +nonguest +nonguests +nonguilt +nonguilts +nonhalogenated +nonhandicapped +nonhappening +nonhappenings +nonhardy +nonharmonic +nonhazardous +nonheme +nonhemolytic +nonhereditary +nonhero +nonheroes +nonhierarchical +nonhistone +nonhistorical +nonhome +nonhomogeneous +nonhomologous +nonhomosexual +nonhomosexuals +nonhormonal +nonhospital +nonhospitalized +nonhospitals +nonhostile +nonhousing +nonhousings +nonhuman +nonhunter +nonhunters +nonhunting +nonhygroscopic +nonhysterical +nonideal +nonidentical +nonidentities +nonidentity +nonideological +nonillion +nonillions +nonimage +nonimitative +nonimmigrant +nonimmigrants +nonimmune +nonimpact +nonimplication +nonimplications +nonimportation +nonimportations +noninclusion +noninclusions +nonincreasing +nonincumbent +nonincumbents +nonindependence +nonindependences +nonindigenous +nonindividual +noninductive +nonindustrial +nonindustrialized +nonindustry +noninfected +noninfectious +noninfective +noninfested +noninflammable +noninflammatory +noninflationary +noninflectional +noninfluence +noninfluences +noninformation +noninformations +noninitial +noninitiate +noninitiates +noninjury +noninsect +noninsecticidal +noninsects +noninstallment +noninstitutional +noninstitutionalized +noninstructional +noninstrumental +noninsurance +noninsurances +noninsured +nonintegral +nonintegrated +nonintellectual +nonintellectuals +noninteracting +noninteractive +noninterchangeable +nonintercourse +nonintercourses +noninterest +noninterests +noninterference +noninterferences +nonintersecting +nonintervention +noninterventionist +noninterventionists +noninterventions +nonintimidating +nonintoxicant +nonintoxicating +nonintrusive +nonintuitive +noninvasive +noninvolved +noninvolvement +noninvolvements +nonionic +nonionizing +noniron +nonirradiated +nonirrigated +nonirritant +nonirritating +nonissue +nonissues +nonjoinder +nonjoinders +nonjoiner +nonjoiners +nonjudgmental +nonjudicial +nonjuring +nonjuror +nonjurors +nonjury +nonjusticiable +nonkosher +nonlabor +nonlandowner +nonlandowners +nonlanguage +nonlanguages +nonlawyer +nonlawyers +nonleaded +nonleafy +nonleague +nonlegal +nonlegume +nonlegumes +nonleguminous +nonlethal +nonlexical +nonlibrarian +nonlibrarians +nonlibraries +nonlibrary +nonlife +nonlineal +nonlinear +nonlinearities +nonlinearity +nonlinguistic +nonliquid +nonliquids +nonliteral +nonliterary +nonliterate +nonliterates +nonlives +nonliving +nonlocal +nonlocals +nonlogical +nonluminous +nonmagnetic +nonmainstream +nonmajor +nonmajors +nonmalignant +nonmalleable +nonman +nonmanagement +nonmanagements +nonmanagerial +nonmanual +nonmanufacturing +nonmanufacturings +nonmarital +nonmarket +nonmaterial +nonmaterialistic +nonmathematical +nonmathematician +nonmathematicians +nonmatriculated +nonmeaningful +nonmeasurable +nonmeat +nonmechanical +nonmechanistic +nonmedical +nonmeeting +nonmeetings +nonmember +nonmembers +nonmembership +nonmemberships +nonmen +nonmental +nonmercurial +nonmetal +nonmetallic +nonmetals +nonmetameric +nonmetaphorical +nonmetric +nonmetrical +nonmetro +nonmetropolitan +nonmetropolitans +nonmicrobial +nonmigrant +nonmigrants +nonmigratory +nonmilitant +nonmilitants +nonmilitary +nonmimetic +nonminority +nonmobile +nonmodal +nonmolecular +nonmonetarist +nonmonetarists +nonmonetary +nonmoney +nonmonogamous +nonmoral +nonmotile +nonmotilities +nonmotility +nonmotorized +nonmoving +nonmunicipal +nonmusic +nonmusical +nonmusician +nonmusicians +nonmusics +nonmutant +nonmutants +nonmyelinated +nonmystical +nonnarrative +nonnarratives +nonnational +nonnationals +nonnative +nonnatives +nonnatural +nonnaval +nonnecessities +nonnecessity +nonnegative +nonnegligent +nonnegotiable +nonnetwork +nonnews +nonnitrogenous +nonnormative +nonnovel +nonnovels +nonnuclear +nonnucleated +nonnumerical +nonnumericals +nonnutritious +nonnutritive +nonobese +nonobjective +nonobjectivism +nonobjectivisms +nonobjectivist +nonobjectivists +nonobjectivities +nonobjectivity +nonobscene +nonobservance +nonobservances +nonobservant +nonobvious +nonoccupational +nonoccurrence +nonoccurrences +nonofficial +nonohmic +nonoily +nonoperatic +nonoperating +nonoperational +nonoperative +nonoptimal +nonorganic +nonorgasmic +nonorthodox +nonoverlapping +nonoverlappings +nonowner +nonowners +nonoxidizing +nonpagan +nonpagans +nonpaid +nonpapal +nonpar +nonparallel +nonparallels +nonparametric +nonparasitic +nonpareil +nonpareils +nonparticipant +nonparticipants +nonparticipating +nonparticipation +nonparticipations +nonparticipatory +nonpartisan +nonpartisans +nonpartisanship +nonpartisanships +nonparty +nonpasserine +nonpassive +nonpast +nonpasts +nonpathogenic +nonpaying +nonpayment +nonpayments +nonpeak +nonperformance +nonperformances +nonperformer +nonperformers +nonperforming +nonperishable +nonperishables +nonpermissive +nonpersistent +nonperson +nonpersonal +nonpersons +nonpetroleum +nonpetroleums +nonphilosopher +nonphilosophers +nonphilosophical +nonphonemic +nonphonetic +nonphosphate +nonphosphates +nonphotographic +nonphysical +nonphysician +nonphysicians +nonplanar +nonplastic +nonplastics +nonplay +nonplaying +nonplays +nonplus +nonplused +nonpluses +nonplusing +nonplussed +nonplusses +nonplussing +nonpoetic +nonpoint +nonpoisonous +nonpolar +nonpolarizable +nonpolice +nonpolitical +nonpolitically +nonpolitician +nonpoliticians +nonpolluting +nonpoor +nonporous +nonpossession +nonpossessions +nonpractical +nonpracticing +nonpregnant +nonprescription +nonprint +nonproblem +nonproblems +nonproducing +nonproductive +nonproductiveness +nonproductivenesses +nonprofessional +nonprofessionally +nonprofessionals +nonprofessorial +nonprofit +nonprofits +nonprogram +nonprogrammer +nonprogrammers +nonprograms +nonprogressive +nonprogressives +nonproliferation +nonproliferations +nonproprietaries +nonproprietary +nonpros +nonprossed +nonprosses +nonprossing +nonprotein +nonpsychiatric +nonpsychiatrist +nonpsychiatrists +nonpsychological +nonpsychotic +nonpublic +nonpunitive +nonpurposive +nonquantifiable +nonquantitative +nonquota +nonracial +nonracially +nonradioactive +nonrailroad +nonrandom +nonrandomness +nonrandomnesses +nonrated +nonrational +nonreactive +nonreactor +nonreactors +nonreader +nonreaders +nonreading +nonrealistic +nonreappointment +nonreappointments +nonreceipt +nonreceipts +nonreciprocal +nonreciprocals +nonrecognition +nonrecognitions +nonrecombinant +nonrecombinants +nonrecourse +nonrecurrent +nonrecurring +nonrecyclable +nonrecyclables +nonreducing +nonredundant +nonrefillable +nonreflecting +nonrefundable +nonregulated +nonregulation +nonregulations +nonrelative +nonrelatives +nonrelativistic +nonrelativistically +nonrelevant +nonreligious +nonrenewable +nonrenewal +nonrenewals +nonrepayable +nonrepresentational +nonrepresentationalism +nonrepresentationalisms +nonrepresentative +nonrepresentatives +nonreproducible +nonreproductive +nonresidence +nonresidences +nonresidencies +nonresidency +nonresident +nonresidential +nonresidents +nonresistance +nonresistances +nonresistant +nonresistants +nonresonant +nonrespondent +nonrespondents +nonresponder +nonresponders +nonresponse +nonresponses +nonresponsive +nonrestricted +nonrestrictive +nonretractile +nonretroactive +nonreturnable +nonreturnables +nonreusable +nonreusables +nonreversible +nonrevolutionaries +nonrevolutionary +nonrigid +nonrioter +nonrioters +nonrioting +nonrival +nonrivals +nonrotating +nonroutine +nonroutines +nonroyal +nonrubber +nonruling +nonruminant +nonruminants +nonrural +nonsalable +nonsaline +nonsaponifiable +nonscheduled +nonschizophrenic +nonschool +nonscience +nonsciences +nonscientific +nonscientist +nonscientists +nonseasonal +nonsecretor +nonsecretories +nonsecretors +nonsecretory +nonsectarian +nonsecure +nonsedimentable +nonsegregated +nonsegregation +nonsegregations +nonselected +nonselective +nonself +nonselves +nonsensational +nonsense +nonsenses +nonsensical +nonsensically +nonsensicalness +nonsensicalnesses +nonsensitive +nonsensuous +nonsentence +nonsentences +nonseptate +nonsequential +nonserious +nonsexist +nonsexual +nonshrink +nonshrinkable +nonsigner +nonsigners +nonsignificant +nonsignificantly +nonsimultaneous +nonsinkable +nonskater +nonskaters +nonsked +nonskeds +nonskeletal +nonskid +nonskier +nonskiers +nonslip +nonsmoker +nonsmokers +nonsmoking +nonsocial +nonsocialist +nonsocialists +nonsolar +nonsolid +nonsolids +nonsolution +nonsolutions +nonspatial +nonspeaker +nonspeakers +nonspeaking +nonspecialist +nonspecialists +nonspecific +nonspecifically +nonspectacular +nonspeculative +nonspeech +nonspherical +nonsporting +nonstandard +nonstarter +nonstarters +nonstationaries +nonstationary +nonstatistical +nonsteady +nonsteroid +nonsteroidal +nonsteroids +nonstick +nonstop +nonstories +nonstory +nonstrategic +nonstructural +nonstructured +nonstudent +nonstudents +nonstyle +nonstyles +nonsubject +nonsubjective +nonsubjects +nonsubsidized +nonsuccess +nonsuccesses +nonsuch +nonsuches +nonsugar +nonsugars +nonsuit +nonsuited +nonsuiting +nonsuits +nonsuperimposable +nonsupervisory +nonsupport +nonsupports +nonsurgical +nonswimmer +nonswimmers +nonsyllabic +nonsymbolic +nonsymmetric +nonsymmetrical +nonsynchronous +nonsystem +nonsystematic +nonsystemic +nonsystems +nontarget +nontariff +nontax +nontaxable +nontaxables +nontaxes +nonteaching +nontechnical +nontemporal +nontemporals +nontenured +nonterminal +nonterminating +nontheatrical +nontheist +nontheistic +nontheists +nontheological +nontheoretical +nontherapeutic +nonthermal +nonthinking +nonthinkings +nonthreatening +nontidal +nontitle +nontobacco +nontobaccos +nontonal +nontotalitarian +nontoxic +nontraditional +nontransferable +nontreatment +nontreatments +nontrivial +nontropical +nontrump +nontruth +nontruths +nonturbulent +nontypical +nonunanimous +nonuniform +nonuniformities +nonuniformity +nonunion +nonunionized +nonunions +nonunique +nonuniqueness +nonuniquenesses +nonuniversal +nonuniversals +nonuniversities +nonuniversity +nonuple +nonuples +nonurban +nonurgent +nonuse +nonuser +nonusers +nonuses +nonusing +nonutilitarian +nonutilitarians +nonutilities +nonutility +nonutopian +nonvalid +nonvalidities +nonvalidity +nonvanishing +nonvascular +nonvector +nonvectors +nonvegetarian +nonvegetarians +nonvenomous +nonverbal +nonverbally +nonveteran +nonveterans +nonviable +nonviewer +nonviewers +nonvintage +nonviolence +nonviolences +nonviolent +nonviolently +nonviral +nonvirgin +nonvirgins +nonviscous +nonvisual +nonvocal +nonvocational +nonvolatile +nonvolcanic +nonvoluntary +nonvoter +nonvoters +nonvoting +nonwar +nonwars +nonwhite +nonwhites +nonwinning +nonwoody +nonword +nonwords +nonwork +nonworker +nonworkers +nonworking +nonwoven +nonwovens +nonwriter +nonwriters +nonyellowing +nonyl +nonyls +nonzero +noo +noodge +noodged +noodges +noodging noodle +noodled +noodles +noodling +nook +nookies +nooklike +nooks +nooky noon +noonday +noondays +nooning +noonings +noons +noontide +noontides +noontime +noontimes +noose +noosed +nooser +noosers +nooses +noosing +noosphere +noospheres +nopal +nopals +nope nor +noradrenalin +noradrenaline +noradrenalines +noradrenalins +noradrenergic +nordic +norepinephrine +norepinephrines +norethindrone +norethindrones +nori +noria +norias +noris +norite +norites +noritic +norland +norlands +norm normal +normalcies +normalcy +normalise +normalised +normalises +normalising +normalities +normality +normalizable +normalization +normalizations +normalize +normalized +normalizer +normalizers +normalizes +normalizing +normally +normals +normande +normative +normatively +normativeness +normativenesses +normed +normless +normotensive +normotensives +normothermia +normothermias +normothermic +norms north +northbound northeast +northeaster +northeasterly +northeastern +northeasternmost +northeasters +northeasts +northeastward +northeastwards +norther +northerlies +northerly northern +northerner +northerners +northernmost +northerns +northers +northing +northings +northland +northlands +norths +northward +northwards northwest +northwester +northwesterly +northwestern +northwesternmost +northwesters +northwests +northwestward +northwestwards +nortriptyline +nortriptylines +nos nose +nosebag +nosebags +noseband +nosebands +nosebleed +nosebleeds +nosed +nosedive +nosedives +nosegay +nosegays +noseguard +noseguards +noseless +noselike +nosepiece +nosepieces +noses +nosewheel +nosewheels +nosey +nosh +noshed +nosher +noshers +noshes +noshing +nosier +nosiest +nosily +nosiness +nosinesses +nosing +nosings +nosocomial +nosologic +nosological +nosologically +nosologies +nosology +nostalgia +nostalgias +nostalgic +nostalgically +nostalgics +nostalgist +nostalgists +nostoc +nostocs +nostril +nostrils +nostrum +nostrums +nosy not +nota +notabilities +notability +notable +notableness +notablenesses +notables +notably +notal +notarial +notarially +notaries +notarization +notarizations +notarize +notarized +notarizes +notarizing +notary +notate +notated +notates +notating +notation +notational +notations +notch +notchback +notchbacks +notched +notcher +notchers +notches +notching note notebook +notebooks +notecase +notecases +noted +notedly +notedness +notednesses +noteless +notepad +notepads +notepaper +notepapers +noter +noters +notes +noteworthily +noteworthiness +noteworthinesses +noteworthy +nother nothing +nothingness +nothingnesses +nothings notice +noticeable +noticeably +noticed +noticer +noticers +notices +noticing +notifiable +notification +notifications +notified +notifier +notifiers +notifies +notify +notifying +noting +notion +notional +notionalities +notionality +notionally +notions +notochord +notochordal +notochords +notorieties +notoriety +notorious +notoriously +notornis +notturni +notturno +notum +notwithstanding +nougat +nougats +nought +noughts +noumena +noumenal +noumenon +noun +nounal +nounally +nounless +nouns +nourish +nourished +nourisher +nourishers +nourishes +nourishing +nourishment +nourishments +nous +nouses +nouveau +nouvelle +nova +novaculite +novaculites +novae +novalike +novas +novation +novations novel +novelette +novelettes +novelettish +novelise +novelised +novelises +novelising novelist +novelistic +novelistically +novelists +novelization +novelizations +novelize +novelized +novelizes +novelizing +novella +novellas +novelle +novelly +novels +novelties +novelty +novemdecillion +novemdecillions +novena +novenae +novenas +novercal +novice +novices +novitiate +novitiates +novobiocin +novobiocins +novocaine +novocaines now nowadays +noway +noways nowhere +nowheres +nowhither +nowise +nowness +nownesses +nows +nowt +nowts +noxious +noxiously +noxiousness +noxiousnesses +noyade +noyades +nozzle +nozzles +nth +nu +nuance +nuanced +nuances +nub +nubbier +nubbiest +nubbin +nubbins +nubble +nubbles +nubblier +nubbliest +nubbly +nubby +nubia +nubias +nubile +nubilities +nubility +nubilose +nubilous +nubs +nucellar +nucelli +nucellus +nucha +nuchae +nuchal +nuchals +nucleal nuclear +nuclease +nucleases +nucleate +nucleated +nucleates +nucleating +nucleation +nucleations +nucleator +nucleators +nuclei +nuclein +nucleins +nucleocapsid +nucleocapsids +nucleoid +nucleoids +nucleolar +nucleole +nucleoles +nucleoli +nucleolus +nucleon +nucleonic +nucleonics +nucleons +nucleophile +nucleophiles +nucleophilic +nucleophilically +nucleophilicities +nucleophilicity +nucleoplasm +nucleoplasmic +nucleoplasms +nucleoprotein +nucleoproteins +nucleoside +nucleosides +nucleosomal +nucleosome +nucleosomes +nucleosyntheses +nucleosynthesis +nucleosynthetic +nucleotidase +nucleotidases +nucleotide +nucleotides +nucleus +nucleuses +nuclide +nuclides +nuclidic +nude +nudely +nudeness +nudenesses +nuder +nudes +nudest +nudge +nudged +nudger +nudgers +nudges +nudging +nudibranch +nudibranchs +nudicaul +nudie +nudies +nudism +nudisms +nudist +nudists +nudities +nudity +nudnick +nudnicks +nudnik +nudniks +nudzh +nudzhed +nudzhes +nudzhing +nugatory +nugget +nuggets +nuggety +nuisance +nuisances +nuke +nuked +nukes +nuking +null +nullah +nullahs +nulled +nullification +nullificationist +nullificationists +nullifications +nullified +nullifier +nullifiers +nullifies +nullify +nullifying +nulling +nulliparous +nullities +nullity +nulls numb +numbat +numbats +numbed number +numberable +numbered +numberer +numberers +numbering +numberless +numbers +numbest +numbfish +numbfishes +numbing +numbingly +numbles +numbly +numbness +numbnesses +numbs +numbskull +numbskulls +numen +numerable +numeracies +numeracy +numeral +numerally +numerals +numerary +numerate +numerated +numerates +numerating +numeration +numerations +numerator +numerators +numeric +numerical +numerically +numerics +numerological +numerologies +numerologist +numerologists +numerology +numerous +numerously +numerousness +numerousnesses +numina +numinous +numinouses +numinousness +numinousnesses +numismatic +numismatically +numismatics +numismatist +numismatists +nummary +nummular +numskull +numskulls +nun +nunatak +nunataks +nunchaku +nunchakus +nunciature +nunciatures +nuncio +nuncios +nuncle +nuncles +nuncupative +nunlike +nunneries +nunnery +nunnish +nuns +nuptial +nuptialities +nuptiality +nuptials +nurd +nurds +nurl +nurled +nurling +nurls nurse +nursed +nursemaid +nursemaids +nurser +nurseries +nursers nursery +nurseryman +nurserymen +nurses +nursing +nursings +nursling +nurslings +nurtural +nurturance +nurturances +nurturant +nurture +nurtured +nurturer +nurturers +nurtures +nurturing +nus nut +nutant +nutate +nutated +nutates +nutating +nutation +nutational +nutations +nutbrown +nutcase +nutcases +nutcracker +nutcrackers +nutgall +nutgalls +nutgrass +nutgrasses +nuthatch +nuthatches +nuthouse +nuthouses +nutlet +nutlets +nutlike +nutmeat +nutmeats +nutmeg +nutmegs +nutpick +nutpicks +nutria +nutrias +nutrient +nutrients +nutriment +nutriments nutrition +nutritional +nutritionally +nutritionist +nutritionists +nutritions +nutritious +nutritiously +nutritiousness +nutritiousnesses +nutritive +nutritively +nuts +nutsedge +nutsedges +nutshell +nutshells +nutsier +nutsiest +nutsy +nutted +nutter +nutters +nuttier +nuttiest +nuttily +nuttiness +nuttinesses +nutting +nuttings +nutty +nutwood +nutwoods +nuzzle +nuzzled +nuzzler +nuzzlers +nuzzles +nuzzling +nyala +nyalas +nyctalopia +nyctalopias +nylghai +nylghais +nylghau +nylghaus +nylon +nylons +nymph +nympha +nymphae +nymphal +nymphalid +nymphalids +nymphean +nymphet +nymphets +nymphette +nymphettes +nympho +nympholepsies +nympholepsy +nympholept +nympholeptic +nympholepts +nymphomania +nymphomaniac +nymphomaniacal +nymphomaniacs +nymphomanias +nymphos +nymphs +nystagmic +nystagmus +nystagmuses +nystatin +nystatins +oaf +oafish +oafishly +oafishness +oafishnesses +oafs +oak +oaken +oaklike +oakmoss +oakmosses +oaks +oakum +oakums +oar +oared +oarfish +oarfishes +oaring +oarless +oarlike +oarlock +oarlocks +oars +oarsman +oarsmanship +oarsmanships +oarsmen +oarswoman +oarswomen +oases +oasis +oast +oasthouse +oasthouses +oasts +oat +oatcake +oatcakes +oaten +oater +oaters +oath +oaths +oatlike +oatmeal +oatmeals +oats +oaves +obbligati +obbligato +obbligatos +obconic +obcordate +obduracies +obduracy +obdurate +obdurately +obdurateness +obduratenesses +obe +obeah +obeahism +obeahisms +obeahs +obedience +obediences +obedient +obediently +obeisance +obeisances +obeisant +obeisantly +obeli +obelia +obelias +obelise +obelised +obelises +obelising +obelisk +obelisks +obelism +obelisms +obelize +obelized +obelizes +obelizing +obelus +obes +obese +obesely +obesities +obesity obey +obeyable +obeyed +obeyer +obeyers +obeying +obeys +obfuscate +obfuscated +obfuscates +obfuscating +obfuscation +obfuscations +obfuscatory +obi +obia +obias +obiism +obiisms +obis +obit +obits +obituaries +obituarist +obituarists +obituary object +objected +objectification +objectifications +objectified +objectifies +objectify +objectifying +objecting +objection +objectionable +objectionableness +objectionablenesses +objectionably +objections +objective +objectively +objectiveness +objectivenesses +objectives +objectivism +objectivisms +objectivist +objectivistic +objectivists +objectivities +objectivity +objectless +objectlessness +objectlessnesses +objector +objectors +objects +objet +objets +objurgate +objurgated +objurgates +objurgating +objurgation +objurgations +objurgatory +oblanceolate +oblast +oblasti +oblasts +oblate +oblately +oblateness +oblatenesses +oblates +oblation +oblations +oblatory +obligate +obligated +obligately +obligates +obligati +obligating +obligation +obligations +obligato +obligatorily +obligatory +obligatos +oblige +obliged +obligee +obligees +obliger +obligers +obliges +obliging +obligingly +obligingness +obligingnesses +obligor +obligors +oblique +obliqued +obliquely +obliqueness +obliquenesses +obliques +obliquing +obliquities +obliquity +obliterate +obliterated +obliterates +obliterating +obliteration +obliterations +obliterative +obliterator +obliterators +oblivion +oblivions +oblivious +obliviously +obliviousness +obliviousnesses +oblong +oblongly +oblongs +obloquies +obloquy +obnoxious +obnoxiously +obnoxiousness +obnoxiousnesses +obnubilate +obnubilated +obnubilates +obnubilating +obnubilation +obnubilations +oboe +oboes +oboist +oboists +obol +obole +oboles +oboli +obols +obolus +obovate +obovoid +obscene +obscenely +obscener +obscenest +obscenities +obscenity +obscurant +obscurantic +obscurantism +obscurantisms +obscurantist +obscurantists +obscurants +obscuration +obscurations +obscure +obscured +obscurely +obscureness +obscurenesses +obscurer +obscures +obscurest +obscuring +obscurities +obscurity +obsequies +obsequious +obsequiously +obsequiousness +obsequiousnesses +obsequy +observabilities +observability +observable +observables +observably +observance +observances +observant +observantly +observants +observation +observational +observationally +observations +observatories +observatory observe +observed +observer +observers +observes +observing +observingly +obsess +obsessed +obsesses +obsessing +obsession +obsessional +obsessionally +obsessions +obsessive +obsessively +obsessiveness +obsessivenesses +obsessives +obsessor +obsessors +obsidian +obsidians +obsolesce +obsolesced +obsolescence +obsolescences +obsolescent +obsolescently +obsolesces +obsolescing +obsolete +obsoleted +obsoletely +obsoleteness +obsoletenesses +obsoletes +obsoleting +obstacle +obstacles +obstetric +obstetrical +obstetrically +obstetrician +obstetricians +obstetrics +obstinacies +obstinacy +obstinate +obstinately +obstinateness +obstinatenesses +obstreperous +obstreperously +obstreperousness +obstreperousnesses +obstruct +obstructed +obstructing +obstruction +obstructionism +obstructionisms +obstructionist +obstructionistic +obstructionists +obstructions +obstructive +obstructively +obstructiveness +obstructivenesses +obstructives +obstructor +obstructors +obstructs obtain +obtainabilities +obtainability +obtainable +obtained +obtainer +obtainers +obtaining +obtainment +obtainments +obtains +obtect +obtected +obtest +obtested +obtesting +obtests +obtrude +obtruded +obtruder +obtruders +obtrudes +obtruding +obtrusion +obtrusions +obtrusive +obtrusively +obtrusiveness +obtrusivenesses +obtund +obtunded +obtunding +obtunds +obturate +obturated +obturates +obturating +obturation +obturations +obturator +obturators +obtuse +obtusely +obtuseness +obtusenesses +obtuser +obtusest +obtusities +obtusity +obverse +obversely +obverses +obvert +obverted +obverting +obverts +obviable +obviate +obviated +obviates +obviating +obviation +obviations +obviator +obviators obvious +obviously +obviousness +obviousnesses +obvolute +oca +ocarina +ocarinas +ocas +occasion +occasional +occasionally +occasioned +occasioning +occasions +occident +occidental +occidentalize +occidentalized +occidentalizes +occidentalizing +occidentally +occidents +occipita +occipital +occipitally +occipitals +occiput +occiputs +occlude +occluded +occludes +occluding +occlusal +occlusion +occlusions +occlusive +occult +occultation +occultations +occulted +occulter +occulters +occulting +occultism +occultisms +occultist +occultists +occultly +occults +occupancies +occupancy +occupant +occupants occupation +occupational +occupationally +occupations +occupied +occupier +occupiers +occupies occupy +occupying occur +occurred +occurrence +occurrences +occurrent +occurrents +occurring +occurs ocean -oceania -oclock +oceanaria +oceanarium +oceanariums +oceanaut +oceanauts +oceanfront +oceanfronts +oceangoing +oceanic +oceanographer +oceanographers +oceanographic +oceanographical +oceanographically +oceanographies +oceanography +oceanologies +oceanologist +oceanologists +oceanology +oceans +ocellar +ocellate +ocelli +ocellus +oceloid +ocelot +ocelots +ocher +ochered +ochering +ocherous +ochers +ochery +ochlocracies +ochlocracy +ochlocrat +ochlocratic +ochlocratical +ochlocrats +ochone +ochre +ochrea +ochreae +ochred +ochreous +ochres +ochring +ochroid +ochrous +ochry +ocker +ockers +ocotillo +ocotillos +ocrea +ocreae +ocreate +octad +octadic +octads +octagon +octagonal +octagonally +octagons +octahedra +octahedral +octahedrally +octahedron +octahedrons +octal +octameter +octameters +octan +octane +octanes +octangle +octangles +octanol +octanols +octans +octant +octantal +octants +octapeptide +octapeptides +octarchies +octarchy +octaval +octave +octaves +octavo +octavos +octet +octets +octette +octettes +octillion +octillions +octodecillion +octodecillions +octogenarian +octogenarians +octonaries +octonary +octopi +octoploid +octoploids +octopod +octopodes +octopods +octopus +octopuses +octoroon +octoroons +octosyllabic +octosyllabics +octosyllable +octosyllables +octothorp +octothorps +octroi +octrois +octuple +octupled +octuples +octuplet +octuplets +octuplex +octupling +octuply +octyl +octyls +ocular +ocularist +ocularists +ocularly +oculars +oculi +oculist +oculists +oculomotor +oculus +od +odalisk +odalisks +odalisque +odalisques +odd +oddball +oddballs +odder +oddest +oddish +oddities +oddity +oddly +oddment +oddments +oddness +oddnesses +odds +oddsmaker +oddsmakers +ode +odea +odeon +odeons +odes +odeum +odeums +odic +odious +odiously +odiousness +odiousnesses +odist +odists +odium +odiums +odograph +odographs +odometer +odometers +odometries +odometry +odonate +odonates +odontoblast +odontoblastic +odontoblasts +odontoglossum +odontoglossums +odontoid +odontoids +odor +odorant +odorants +odored +odorful +odoriferous +odoriferously +odoriferousness +odoriferousnesses +odorize +odorized +odorizes +odorizing +odorless +odorous +odorously +odorousness +odorousnesses +odors +odour +odourful +odours +ods +odyl +odyle +odyles +odyls +odyssey +odysseys +oe +oecologies +oecology +oecumenical +oedema +oedemas +oedemata +oedipal +oedipally +oedipean +oeillade +oeillades +oenologies +oenology +oenomel +oenomels +oenophile +oenophiles +oersted +oersteds +oes +oesophagi +oesophagus +oestrin +oestrins +oestriol +oestriols +oestrone +oestrones +oestrous +oestrum +oestrums +oestrus +oestruses +oeuvre +oeuvres of +ofay +ofays off +offal +offals +offbeat +offbeats +offcast +offcasts +offcut +offcuts +offed offence +offences +offend +offended +offender +offenders +offending +offends +offense +offenseless +offenses +offensive +offensively +offensiveness +offensivenesses +offensives offer +offered +offerer +offerers +offering +offerings +offeror +offerors +offers +offertories +offertory +offhand +offhanded +offhandedly +offhandedness +offhandednesses office +officeholder +officeholders officer +officered +officering +officers +offices official +officialdom +officialdoms +officialese +officialeses +officialism +officialisms +officially +officials +officiant +officiants +officiaries +officiary +officiate +officiated +officiates +officiating +officiation +officiations +officinal +officious +officiously +officiousness +officiousnesses +offing +offings +offish +offishly +offishness +offishnesses +offkey +offload +offloaded +offloading +offloads +offprint +offprinted +offprinting +offprints +offramp +offramps +offs +offscouring +offscourings +offscreen +offset +offsets +offsetting +offshoot +offshoots offshore +offside +offsides +offspring +offsprings +offstage +offstages +offtrack +oft often +oftener +oftenest +oftentimes +ofter +oftest +ofttimes +ogam +ogams +ogdoad +ogdoads +ogee +ogees +ogham +oghamic +oghamist +oghamists +oghams +ogival +ogive +ogives +ogle +ogled +ogler +oglers +ogles +ogling +ogre +ogreish +ogreism +ogreisms +ogres +ogress +ogresses +ogrish +ogrishly +ogrism +ogrisms oh +ohed +ohia +ohias +ohing +ohm +ohmage +ohmages +ohmic +ohmically +ohmmeter +ohmmeters +ohms +oho +ohs +oidia +oidium oil -oilfield -ok +oilbird +oilbirds +oilcamp +oilcamps +oilcan +oilcans +oilcloth +oilcloths +oilcup +oilcups +oiled +oiler +oilers +oilhole +oilholes +oilier +oiliest +oilily +oiliness +oilinesses +oiling +oilman +oilmen +oilpaper +oilpapers +oilproof +oils +oilseed +oilseeds +oilskin +oilskins +oilstone +oilstones +oiltight +oilway +oilways +oily +oink +oinked +oinking +oinks +oinologies +oinology +oinomel +oinomels +ointment +ointments +oiticica +oiticicas +oka +okapi +okapis +okas +okay +okayed +okaying +okays +oke +okeh +okehs +okes +okeydoke +okeydokey +okra +okras old -olympic -olympics +olden +older +oldest +oldfangled +oldie +oldies +oldish +oldness +oldnesses +olds +oldsquaw +oldsquaws +oldster +oldsters +oldstyle +oldstyles +oldwife +oldwives +oldy +ole +olea +oleaginous +oleaginously +oleaginousness +oleaginousnesses +oleander +oleanders +oleandomycin +oleandomycins +oleaster +oleasters +oleate +oleates +olecranon +olecranons +olefin +olefine +olefines +olefinic +olefins +oleic +olein +oleine +oleines +oleins +oleo +oleograph +oleographs +oleomargarine +oleomargarines +oleoresin +oleoresinous +oleoresins +oleos +oles +oleum +oleums +olfaction +olfactions +olfactometer +olfactometers +olfactory +olibanum +olibanums +oligarch +oligarchic +oligarchical +oligarchies +oligarchs +oligarchy +oligochaete +oligochaetes +oligoclase +oligoclases +oligodendrocyte +oligodendrocytes +oligodendroglia +oligodendroglial +oligodendroglias +oligomer +oligomeric +oligomerization +oligomerizations +oligomers +oligonucleotide +oligonucleotides +oligophagies +oligophagous +oligophagy +oligopolies +oligopolistic +oligopoly +oligopsonies +oligopsonistic +oligopsony +oligosaccharide +oligosaccharides +oligotrophic +oliguria +oligurias +olio +olios +olivaceous +olivary +olive +olivenite +olivenites +olives +olivine +olivines +olivinic +olivinitic +olla +ollas +ologies +ologist +ologists +ology +ololiuqui +ololiuquis +oloroso +olorosos +olympiad +olympiads +om +omasa +omasum +omber +ombers +ombre +ombres +ombudsman +ombudsmanship +ombudsmanships +ombudsmen +omega +omegas +omelet +omelets +omelette +omelettes +omen +omened +omening +omens +omenta +omental +omentum +omentums +omer +omers +omicron +omicrons +omikron +omikrons +ominous +ominously +ominousness +ominousnesses +omissible +omission +omissions +omissive +omit +omits +omitted +omitter +omitters +omitting +ommatidia +ommatidial +ommatidium +omniarch +omniarchs +omnibus +omnibuses +omnicompetence +omnicompetences +omnicompetent +omnidirectional +omnifarious +omnific +omnificent +omniform +omnimode +omnipotence +omnipotences +omnipotent +omnipotently +omnipotents +omnipresence +omnipresences +omnipresent +omnirange +omniranges +omniscience +omnisciences +omniscient +omnisciently +omnivora +omnivore +omnivores +omnivorous +omnivorously +omophagies +omophagy +omphali +omphalos +omphaloskepses +omphaloskepsis +oms on +onager +onagers +onagri +onanism +onanisms +onanist +onanistic +onanists +onboard once +onchocerciases +onchocerciasis +oncidium +oncidiums +oncogene +oncogenes +oncogeneses +oncogenesis +oncogenic +oncogenicities +oncogenicity +oncologic +oncological +oncologies +oncologist +oncologists +oncology +oncoming +oncomings +oncornavirus +oncornaviruses +ondogram +ondograms one +onefold +oneiric +oneirically +oneiromancies +oneiromancy +oneness +onenesses +onerier +oneriest +onerous +onerously +onerousness +onerousnesses +onery +ones oneself +onetime +ongoing +ongoingness +ongoingnesses onion +onions +onionskin +onionskins +oniony +onium +onlooker +onlookers +onlooking only +onomastic +onomastically +onomastician +onomasticians +onomastics +onomatologies +onomatologist +onomatologists +onomatology +onomatopoeia +onomatopoeias +onomatopoeic +onomatopoeically +onomatopoetic +onomatopoetically +onrush +onrushes +onrushing +ons +onset +onsets +onshore +onside +onslaught +onslaughts +onstage +onstream +ontic +ontically onto +ontogeneses +ontogenesis +ontogenetic +ontogenetically +ontogenies +ontogeny +ontological +ontologically +ontologies +ontologist +ontologists +ontology +onus +onuses +onward +onwards +onychophoran +onychophorans +onyx +onyxes +oocyst +oocysts +oocyte +oocytes +oodles +oodlins +oogamete +oogametes +oogamies +oogamous +oogamy +oogeneses +oogenesis +oogenetic +oogenies +oogeny +oogonia +oogonial +oogonium +oogoniums +ooh +oohed +oohing +oohs +oolachan +oolachans +oolite +oolites +oolith +ooliths +oolitic +oologic +oologies +oologist +oologists +oology +oolong +oolongs +oomiac +oomiack +oomiacks +oomiacs +oomiak +oomiaks +oompah +oompahed +oompahing +oompahs +oomph +oomphs +oophorectomies +oophorectomy +oophyte +oophytes +oophytic +oops +oorali +ooralis +oorie +oosperm +oosperms +oosphere +oospheres +oospore +oospores +oosporic +oot +ootheca +oothecae +oothecal +ootid +ootids +oots +ooze +oozed +oozes +oozier +ooziest +oozily +ooziness +oozinesses +oozing +oozy +op +opacified +opacifies +opacify +opacifying +opacities +opacity +opah +opahs +opal +opalesce +opalesced +opalescence +opalescences +opalescent +opalescently +opalesces +opalescing +opaline +opalines +opals +opaque +opaqued +opaquely +opaqueness +opaquenesses +opaquer +opaques +opaquest +opaquing +ope +oped open +openabilities +openability +openable +opencast +opened +opener +openers +openest +openhanded +openhandedly +openhandedness +openhandednesses +openhearted +openheartedly +openheartedness +openheartednesses opening +openings +openly +openmouthed +openmouthedly +openmouthedness +openmouthednesses +openness +opennesses +opens +openwork +openworks opera +operabilities +operability +operable +operably +operagoer +operagoers +operagoing +operagoings +operand +operands +operant +operantly +operants +operas operate +operated +operates +operatic +operatically +operatics +operating operation +operational +operationalism +operationalisms +operationalist +operationalistic +operationalists +operationally +operationism +operationisms +operationist +operationists +operations +operative +operatively +operativeness +operativenesses +operatives operator +operatorless +operators +opercele +operceles +opercula +opercular +operculars +operculate +operculated +opercule +opercules +operculum +operculums +operetta +operettas +operettist +operettists +operon +operons +operose +operosely +operoseness +operosenesses +opes +ophidian +ophidians +ophite +ophites +ophitic +ophiuroid +ophiuroids +ophthalmia +ophthalmias +ophthalmic +ophthalmologic +ophthalmological +ophthalmologically +ophthalmologies +ophthalmologist +ophthalmologists +ophthalmology +ophthalmoscope +ophthalmoscopes +ophthalmoscopic +ophthalmoscopies +ophthalmoscopy +opiate +opiated +opiates +opiating +opine +opined +opines +oping +opining opinion +opinionated +opinionatedly +opinionatedness +opinionatednesses +opinionative +opinionatively +opinionativeness +opinionativenesses +opinioned +opinions +opioid +opioids +opisthobranch +opisthobranchs +opium +opiumism +opiumisms +opiums +opossum +opossums +oppidan +oppidans +oppilant +oppilate +oppilated +oppilates +oppilating +opponent +opponents +opportune +opportunely +opportuneness +opportunenesses +opportunism +opportunisms +opportunist +opportunistic +opportunistically +opportunists +opportunities +opportunity +opposabilities +opposability +opposable oppose +opposed +opposeless +opposer +opposers +opposes +opposing opposite +oppositely +oppositeness +oppositenesses +opposites +opposition +oppositional +oppositionist +oppositionists +oppositions +oppress +oppressed +oppresses +oppressing +oppression +oppressions +oppressive +oppressively +oppressiveness +oppressivenesses +oppressor +oppressors +opprobrious +opprobriously +opprobriousness +opprobriousnesses +opprobrium +opprobriums +oppugn +oppugned +oppugner +oppugners +oppugning +oppugns +ops +opsin +opsins +opsonic +opsonified +opsonifies +opsonify +opsonifying +opsonin +opsonins +opsonize +opsonized +opsonizes +opsonizing +opt +optative +optatively +optatives +opted +optic +optical +optically +optician +opticians +opticist +opticists +optics +optima +optimal +optimalities +optimality +optimally +optime +optimes +optimisation +optimisations +optimise +optimised +optimises +optimising +optimism +optimisms +optimist optimistic +optimistically +optimists +optimization +optimizations +optimize +optimized +optimizer +optimizers +optimizes +optimizing +optimum +optimums +opting +option optional +optionalities +optionality +optionally +optionals +optioned +optionee +optionees +optioning +options +optoelectronic +optoelectronics +optokinetic +optometric +optometries +optometrist +optometrists +optometry +opts +opulence +opulences +opulencies +opulency +opulent +opulently +opuntia +opuntias +opus +opuscula +opuscule +opuscules +opusculum +opuses +oquassa +oquassas or +ora +orach +orache +oraches +oracle +oracles +oracular +oracularities +oracularity +oracularly +orad oral +oralism +oralisms +oralist +oralists +oralities +orality +orally +orals +orang orange +orangeade +orangeades +orangerie +orangeries +orangery +oranges +orangewood +orangewoods +orangey +orangier +orangiest +orangish +orangs +orangutan +orangutans +orangy +orate +orated +orates +orating +oration +orations +orator +oratorical +oratorically +oratories +oratorio +oratorios +orators +oratory +oratress +oratresses +oratrices +oratrix +orb +orbed +orbicular +orbicularly +orbiculate +orbier +orbiest +orbing orbit +orbital +orbitals +orbited +orbiter +orbiters +orbiting +orbits +orbs +orby +orc +orca +orcas +orcein +orceins +orchard +orchardist +orchardists +orchards +orchestra +orchestral +orchestrally +orchestras +orchestrate +orchestrated +orchestrater +orchestraters +orchestrates +orchestrating +orchestration +orchestrational +orchestrations +orchestrator +orchestrators +orchid +orchidaceous +orchidlike +orchids +orchil +orchils +orchis +orchises +orchitic +orchitis +orchitises +orcin +orcinol +orcinols +orcins +orcs +ordain +ordained +ordainer +ordainers +ordaining +ordainment +ordainments +ordains +ordeal +ordeals order +orderable +ordered +orderer +orderers +ordering +orderless +orderlies +orderliness +orderlinesses +orderly +orders +ordinal +ordinals +ordinance +ordinances +ordinand +ordinands +ordinarier +ordinaries +ordinariest +ordinarily +ordinariness +ordinarinesses ordinary +ordinate +ordinates +ordination +ordinations +ordines +ordnance +ordnances +ordo +ordonnance +ordonnances +ordos +ordure +ordures +ore +oread +oreads +orectic +orective +oregano +oreganos +oreide +oreides +ores +orfray +orfrays organ +organa +organdie +organdies +organdy +organelle +organelles +organic +organically +organicism +organicisms +organicist +organicists +organicities +organicity +organics organisation +organisations organise +organised +organiser +organisers +organises +organising +organism +organismal +organismic +organismically +organisms +organist +organists +organizable organization +organizational +organizationally +organizations organize +organized +organizer +organizers +organizes +organizing +organochlorine +organochlorines +organogeneses +organogenesis +organogenetic +organoleptic +organoleptically +organologies +organology +organomercurial +organomercurials +organometallic +organometallics +organon +organons +organophosphate +organophosphates +organophosphorous +organophosphorus +organophosphoruses +organs +organum +organums +organza +organzas +organzine +organzines +orgasm +orgasmic +orgasms +orgastic +orgeat +orgeats +orgiac +orgiastic +orgiastically +orgic +orgies +orgone +orgones +orgulous +orgy +oribatid +oribatids +oribi +oribis +oriel +oriels +orient +oriental +orientalism +orientalisms +orientalist +orientalists +orientalize +orientalized +orientalizes +orientalizing +orientally +orientals +orientate +orientated +orientates +orientating +orientation +orientational +orientationally +orientations +oriented +orienteer +orienteering +orienteerings +orienteers +orienting +orients +orifice +orifices +orificial +oriflamme +oriflammes +origami +origamis +origan +origans +origanum +origanums origin +original +originalities +originality +originally +originals +originate +originated +originates +originating +origination +originations +originative +originatively +originator +originators +origins +orinasal +orinasals +oriole +orioles +orismological +orismologies +orismology +orison +orisons +orle +orles +orlop +orlops +ormer +ormers +ormolu +ormolus +ornament +ornamental +ornamentally +ornamentals +ornamentation +ornamentations +ornamented +ornamenting +ornaments +ornate +ornately +ornateness +ornatenesses +ornerier +orneriest +orneriness +ornerinesses +ornery +ornis +ornithes +ornithic +ornithine +ornithines +ornithischian +ornithischians +ornithologic +ornithological +ornithologically +ornithologies +ornithologist +ornithologists +ornithology +ornithopod +ornithopods +ornithopter +ornithopters +ornithoses +ornithosis +orogeneses +orogenesis +orogenetic +orogenic +orogenies +orogeny +orographic +orographical +orographies +orography +oroide +oroides +orologies +orology +orometer +orometers +oropharyngeal +oropharynges +oropharynx +oropharynxes +orotund +orotundities +orotundity +orphan +orphanage +orphanages +orphaned +orphanhood +orphanhoods +orphaning +orphans +orphic +orphical +orphically +orphrey +orphreys +orpiment +orpiments +orpin +orpine +orpines +orpins +orra +orreries +orrery +orrice +orrices +orris +orrises +orrisroot +orrisroots +ors +ort +orthicon +orthicons +ortho +orthocenter +orthocenters +orthochromatic +orthoclase +orthoclases +orthodontia +orthodontias +orthodontic +orthodontically +orthodontics +orthodontist +orthodontists +orthodox +orthodoxes +orthodoxies +orthodoxly +orthodoxy +orthoepic +orthoepically +orthoepies +orthoepist +orthoepists +orthoepy +orthogeneses +orthogenesis +orthogenetic +orthogenetically +orthogonal +orthogonalities +orthogonality +orthogonalization +orthogonalizations +orthogonalize +orthogonalized +orthogonalizes +orthogonalizing +orthogonally +orthograde +orthographic +orthographical +orthographically +orthographies +orthography +orthomolecular +orthonormal +orthopaedic +orthopaedics +orthopedic +orthopedically +orthopedics +orthopedist +orthopedists +orthophosphate +orthophosphates +orthopsychiatric +orthopsychiatries +orthopsychiatrist +orthopsychiatrists +orthopsychiatry +orthoptera +orthopteran +orthopterans +orthopterist +orthopterists +orthopteroid +orthopteroids +orthorhombic +orthoscopic +orthoses +orthosis +orthostatic +orthotic +orthotics +orthotist +orthotists +orthotropous +ortolan +ortolans +orts +oryx +oryxes +orzo +orzos +os +osar +oscillate +oscillated +oscillates +oscillating +oscillation +oscillational +oscillations +oscillator +oscillators +oscillatory +oscillogram +oscillograms +oscillograph +oscillographic +oscillographically +oscillographies +oscillographs +oscillography +oscilloscope +oscilloscopes +oscilloscopic +oscine +oscines +oscinine +oscitant +oscula +osculant +oscular +osculate +osculated +osculates +osculating +osculation +osculations +osculatory +oscule +oscules +osculum +ose +oses +osier +osiers +osmatic +osmeteria +osmeterium +osmic +osmics +osmious +osmiridium +osmiridiums +osmium +osmiums +osmol +osmolal +osmolalities +osmolality +osmolar +osmolarities +osmolarity +osmole +osmoles +osmols +osmometer +osmometers +osmometric +osmometries +osmometry +osmoregulation +osmoregulations +osmoregulatory +osmose +osmosed +osmoses +osmosing +osmosis +osmotic +osmotically +osmous +osmund +osmunda +osmundas +osmunds +osnaburg +osnaburgs +osprey +ospreys +ossa +ossein +osseins +osseous +ossia +ossicle +ossicles +ossicular +ossific +ossification +ossifications +ossified +ossifier +ossifiers +ossifies +ossifrage +ossifrages +ossify +ossifying +ossuaries +ossuary +osteal +osteitic +osteitides +osteitis +ostensible +ostensibly +ostensive +ostensively +ostensoria +ostensorium +ostentation +ostentations +ostentatious +ostentatiously +ostentatiousness +ostentatiousnesses +osteoarthritic +osteoarthritides +osteoarthritis +osteoblast +osteoblastic +osteoblasts +osteoclast +osteoclastic +osteoclasts +osteocyte +osteocytes +osteogeneses +osteogenesis +osteogenic +osteoid +osteoids +osteological +osteologies +osteologist +osteologists +osteology +osteoma +osteomalacia +osteomalacias +osteomas +osteomata +osteomyelitides +osteomyelitis +osteopath +osteopathic +osteopathically +osteopathies +osteopaths +osteopathy +osteoplastic +osteoplasties +osteoplasty +osteoporoses +osteoporosis +osteoporotic +osteosarcoma +osteosarcomas +osteosarcomata +osteoses +osteosis +osteosises +ostia +ostiaries +ostiary +ostinato +ostinatos +ostiolar +ostiole +ostioles +ostium +ostler +ostlers +ostmark +ostmarks +ostomies +ostomy +ostoses +ostosis +ostosises +ostraca +ostracise +ostracised +ostracises +ostracising +ostracism +ostracisms +ostracize +ostracized +ostracizes +ostracizing +ostracod +ostracode +ostracoderm +ostracoderms +ostracodes +ostracods +ostracon +ostrich +ostriches +ostrichlike +otalgia +otalgias +otalgic +otalgies +otalgy other +otherguess +otherness +othernesses +others +otherwhere +otherwhile +otherwhiles otherwise +otherworld +otherworldliness +otherworldlinesses +otherworldly +otherworlds +otic +otiose +otiosely +otioseness +otiosenesses +otiosities +otiosity +otitic +otitides +otitis +otocyst +otocystic +otocysts +otolaryngological +otolaryngologies +otolaryngologist +otolaryngologists +otolaryngology +otolith +otolithic +otoliths +otologies +otology +otorhinolaryngological +otorhinolaryngologies +otorhinolaryngologist +otorhinolaryngologists +otorhinolaryngology +otoscleroses +otosclerosis +otoscope +otoscopes +otoscopies +otoscopy +ototoxic +ototoxicities +ototoxicity +ottar +ottars +ottava +ottavas +otter +otters +otto +ottoman +ottomans +ottos +ouabain +ouabains +oubliette +oubliettes +ouch +ouched +ouches +ouching +oud +ouds ought +oughted +oughting +oughts +ouguiya +ouistiti +ouistitis +ounce +ounces +ouph +ouphe +ouphes +ouphs our +ourang +ourangs +ourari +ouraris +ourebi +ourebis +ourie ours +ourself ourselves +ousel +ousels +oust +ousted +ouster +ousters +ousting +ousts out +outachieve +outachieved +outachieves +outachieving +outact +outacted +outacting +outacts +outadd +outadded +outadding +outadds +outage +outages +outargue +outargued +outargues +outarguing +outask +outasked +outasking +outasks +outate +outback +outbacks +outbake +outbaked +outbakes +outbaking +outbalance +outbalanced +outbalances +outbalancing +outbargain +outbargained +outbargaining +outbargains +outbark +outbarked +outbarking +outbarks +outbawl +outbawled +outbawling +outbawls +outbeam +outbeamed +outbeaming +outbeams +outbeg +outbegged +outbegging +outbegs +outbid +outbidden +outbidding +outbids +outbitch +outbitched +outbitches +outbitching +outblaze +outblazed +outblazes +outblazing +outbleat +outbleated +outbleating +outbleats +outbless +outblessed +outblesses +outblessing +outbloom +outbloomed +outblooming +outblooms +outbluff +outbluffed +outbluffing +outbluffs +outblush +outblushed +outblushes +outblushing +outboard +outboards +outboast +outboasted +outboasting +outboasts +outbought +outbound +outbox +outboxed +outboxes +outboxing +outbrag +outbragged +outbragging +outbrags +outbrave +outbraved +outbraves +outbraving +outbrawl +outbrawled +outbrawling +outbrawls +outbreak +outbreaks +outbred +outbreed +outbreeding +outbreedings +outbreeds +outbribe +outbribed +outbribes +outbribing +outbuild +outbuilding +outbuildings +outbuilds +outbuilt +outbulk +outbulked +outbulking +outbulks +outbullied +outbullies +outbully +outbullying +outburn +outburned +outburning +outburns +outburnt +outburst +outbursts +outbuy +outbuying +outbuys +outby +outbye +outcaper +outcapered +outcapering +outcapers +outcast +outcaste +outcastes +outcasts +outcatch +outcatches +outcatching +outcaught +outcavil +outcaviled +outcaviling +outcavilled +outcavilling +outcavils +outcharge +outcharged +outcharges +outcharging +outcharm +outcharmed +outcharming +outcharms +outcheat +outcheated +outcheating +outcheats +outchid +outchidden +outchide +outchided +outchides +outchiding +outclass +outclassed +outclasses +outclassing +outclimb +outclimbed +outclimbing +outclimbs +outclomb +outcoach +outcoached +outcoaches +outcoaching outcome +outcomes +outcompete +outcompeted +outcompetes +outcompeting +outcook +outcooked +outcooking +outcooks +outcount +outcounted +outcounting +outcounts +outcrawl +outcrawled +outcrawling +outcrawls +outcried +outcries +outcrop +outcropped +outcropping +outcroppings +outcrops +outcross +outcrossed +outcrosses +outcrossing +outcrow +outcrowed +outcrowing +outcrows +outcry +outcrying +outcurse +outcursed +outcurses +outcursing +outcurve +outcurves +outdance +outdanced +outdances +outdancing +outdare +outdared +outdares +outdaring +outdate +outdated +outdatedly +outdatedness +outdatednesses +outdates +outdating +outdazzle +outdazzled +outdazzles +outdazzling +outdebate +outdebated +outdebates +outdebating +outdeliver +outdelivered +outdelivering +outdelivers +outdesign +outdesigned +outdesigning +outdesigns +outdid +outdistance +outdistanced +outdistances +outdistancing +outdo +outdodge +outdodged +outdodges +outdodging +outdoer +outdoers +outdoes +outdoing +outdone +outdoor outdoors +outdoorsman +outdoorsmanship +outdoorsmanships +outdoorsmen +outdoorsy +outdrag +outdragged +outdragging +outdrags +outdrank +outdraw +outdrawing +outdrawn +outdraws +outdream +outdreamed +outdreaming +outdreams +outdreamt +outdress +outdressed +outdresses +outdressing +outdrew +outdrink +outdrinking +outdrinks +outdrive +outdriven +outdrives +outdriving +outdrop +outdropped +outdropping +outdrops +outdrove +outdrunk +outduel +outdueled +outdueling +outduelled +outduelling +outduels +outearn +outearned +outearning +outearns +outeat +outeaten +outeating +outeats +outecho +outechoed +outechoes +outechoing +outed outer +outercoat +outercoats +outermost +outers +outerwear +outfable +outfabled +outfables +outfabling +outface +outfaced +outfaces +outfacing +outfall +outfalls +outfast +outfasted +outfasting +outfasts +outfawn +outfawned +outfawning +outfawns +outfeast +outfeasted +outfeasting +outfeasts +outfeel +outfeeling +outfeels +outfelt +outfield +outfielder +outfielders +outfields +outfight +outfighting +outfights +outfigure +outfigured +outfigures +outfiguring +outfind +outfinding +outfinds +outfire +outfired +outfires +outfiring +outfish +outfished +outfishes +outfishing +outfit +outfits +outfitted +outfitter +outfitters +outfitting +outflank +outflanked +outflanking +outflanks +outflew +outflies +outflow +outflowed +outflowing +outflown +outflows +outfly +outflying +outfool +outfooled +outfooling +outfools +outfoot +outfooted +outfooting +outfoots +outfought +outfound +outfox +outfoxed +outfoxes +outfoxing +outfrown +outfrowned +outfrowning +outfrowns +outfumble +outfumbled +outfumbles +outfumbling +outgain +outgained +outgaining +outgains +outgas +outgassed +outgasses +outgassing +outgave +outgeneral +outgeneraled +outgeneraling +outgenerals +outgive +outgiven +outgives +outgiving +outgivings +outglare +outglared +outglares +outglaring +outglitter +outglittered +outglittering +outglitters +outglow +outglowed +outglowing +outglows +outgnaw +outgnawed +outgnawing +outgnawn +outgnaws +outgo +outgoes outgoing +outgoingness +outgoingnesses +outgoings +outgone +outgrew +outgrin +outgrinned +outgrinning +outgrins +outgross +outgrossed +outgrosses +outgrossing +outgroup +outgroups +outgrow +outgrowing +outgrown +outgrows +outgrowth +outgrowths +outguess +outguessed +outguesses +outguessing +outguide +outguided +outguides +outguiding +outgun +outgunned +outgunning +outguns +outgush +outgushes +outhaul +outhauls +outhear +outheard +outhearing +outhears +outhit +outhits +outhitting +outhomer +outhomered +outhomering +outhomers +outhouse +outhouses +outhowl +outhowled +outhowling +outhowls +outhumor +outhumored +outhumoring +outhumors +outhunt +outhunted +outhunting +outhunts +outhustle +outhustled +outhustles +outhustling outing +outings +outintrigue +outintrigued +outintrigues +outintriguing +outjinx +outjinxed +outjinxes +outjinxing +outjump +outjumped +outjumping +outjumps +outjut +outjuts +outjutted +outjutting +outkeep +outkeeping +outkeeps +outkept +outkick +outkicked +outkicking +outkicks +outkill +outkilled +outkilling +outkills +outkiss +outkissed +outkisses +outkissing +outlaid +outlain +outland +outlander +outlanders +outlandish +outlandishly +outlandishness +outlandishnesses +outlands +outlast +outlasted +outlasting +outlasts +outlaugh +outlaughed +outlaughing +outlaughs +outlaw +outlawed +outlawing +outlawries +outlawry +outlaws +outlay +outlaying +outlays +outleap +outleaped +outleaping +outleaps +outleapt +outlearn +outlearned +outlearning +outlearns +outlearnt +outlet +outlets +outlie +outlier +outliers +outlies outline +outlined +outliner +outliners +outlines +outlining +outlive +outlived +outliver +outlivers +outlives +outliving +outlook +outlooks +outlove +outloved +outloves +outloving +outlying +outman +outmaneuver +outmaneuvered +outmaneuvering +outmaneuvers +outmanipulate +outmanipulated +outmanipulates +outmanipulating +outmanned +outmanning +outmans +outmarch +outmarched +outmarches +outmarching +outmatch +outmatched +outmatches +outmatching +outmode +outmoded +outmodes +outmoding +outmost +outmove +outmoved +outmoves +outmoving +outmuscle +outmuscled +outmuscles +outmuscling +outnumber +outnumbered +outnumbering +outnumbers +outorganize +outorganized +outorganizes +outorganizing +outpace +outpaced +outpaces +outpacing +outpaint +outpainted +outpainting +outpaints +outpass +outpassed +outpasses +outpassing +outpatient +outpatients +outperform +outperformed +outperforming +outperforms +outpitch +outpitched +outpitches +outpitching +outpitied +outpities +outpity +outpitying +outplacement +outplacements +outplan +outplanned +outplanning +outplans +outplay +outplayed +outplaying +outplays +outplod +outplodded +outplodding +outplods +outplot +outplots +outplotted +outplotting +outpoint +outpointed +outpointing +outpoints +outpolitick +outpoliticked +outpoliticking +outpoliticks +outpoll +outpolled +outpolling +outpolls +outpopulate +outpopulated +outpopulates +outpopulating +outport +outports +outpost +outposts +outpour +outpoured +outpouring +outpourings +outpours +outpower +outpowered +outpowering +outpowers +outpray +outprayed +outpraying +outprays +outpreach +outpreached +outpreaches +outpreaching +outpreen +outpreened +outpreening +outpreens +outpress +outpressed +outpresses +outpressing +outprice +outpriced +outprices +outpricing +outproduce +outproduced +outproduces +outproducing +outpromise +outpromised +outpromises +outpromising +outpull +outpulled +outpulling +outpulls +outpunch +outpunched +outpunches +outpunching +outpush +outpushed +outpushes +outpushing output +outputs +outputted +outputting +outquote +outquoted +outquotes +outquoting +outrace +outraced +outraces +outracing +outrage +outraged +outrageous +outrageously +outrageousness +outrageousnesses +outrages +outraging +outraise +outraised +outraises +outraising +outran +outrance +outrances +outrang +outrange +outranged +outranges +outranging +outrank +outranked +outranking +outranks +outrate +outrated +outrates +outrating +outrave +outraved +outraves +outraving +outre +outreach +outreached +outreaches +outreaching +outread +outreading +outreads +outrebound +outrebounded +outrebounding +outrebounds +outreproduce +outreproduced +outreproduces +outreproducing +outridden +outride +outrider +outriders +outrides +outriding +outrigger +outriggers +outright +outrightly +outring +outringing +outrings +outrival +outrivaled +outrivaling +outrivalled +outrivalling +outrivals +outroar +outroared +outroaring +outroars +outrock +outrocked +outrocking +outrocks +outrode +outroll +outrolled +outrolling +outrolls +outroot +outrooted +outrooting +outroots +outrow +outrowed +outrowing +outrows +outrun +outrung +outrunning +outruns +outrush +outrushed +outrushes +outrushing +outs +outsail +outsailed +outsailing +outsails +outsang +outsat +outsavor +outsavored +outsavoring +outsavors +outsaw +outscheme +outschemed +outschemes +outscheming +outscold +outscolded +outscolding +outscolds +outscoop +outscooped +outscooping +outscoops +outscore +outscored +outscores +outscoring +outscorn +outscorned +outscorning +outscorns +outsee +outseeing +outseen +outsees +outsell +outselling +outsells +outsert +outserts +outserve +outserved +outserves +outserving +outset +outsets +outshame +outshamed +outshames +outshaming +outshine +outshined +outshines +outshining +outshone +outshoot +outshooting +outshoots +outshot +outshout +outshouted +outshouting +outshouts outside +outsider +outsiderness +outsidernesses +outsiders +outsides +outsight +outsights +outsin +outsing +outsinging +outsings +outsinned +outsinning +outsins +outsit +outsits +outsitting +outsize +outsized +outsizes +outskate +outskated +outskates +outskating +outskirt +outskirts +outsleep +outsleeping +outsleeps +outslept +outslick +outslicked +outslicking +outslicks +outsmart +outsmarted +outsmarting +outsmarts +outsmile +outsmiled +outsmiles +outsmiling +outsmoke +outsmoked +outsmokes +outsmoking +outsnore +outsnored +outsnores +outsnoring +outsoar +outsoared +outsoaring +outsoars +outsold +outsole +outsoles +outsourcing +outsourcings +outspan +outspanned +outspanning +outspans +outsparkle +outsparkled +outsparkles +outsparkling +outspeak +outspeaking +outspeaks +outsped +outspeed +outspeeded +outspeeding +outspeeds +outspell +outspelled +outspelling +outspells +outspelt +outspend +outspending +outspends +outspent +outspoke outspoken +outspokenly +outspokenness +outspokennesses +outspread +outspreading +outspreads +outsprint +outsprinted +outsprinting +outsprints +outstand outstanding +outstandingly +outstands +outstare +outstared +outstares +outstaring +outstart +outstarted +outstarting +outstarts +outstate +outstated +outstates +outstating +outstation +outstations +outstay +outstayed +outstaying +outstays +outsteer +outsteered +outsteering +outsteers +outstood +outstretch +outstretched +outstretches +outstretching +outstridden +outstride +outstrides +outstriding +outstrip +outstripped +outstripping +outstrips +outstrode +outstudied +outstudies +outstudy +outstudying +outstunt +outstunted +outstunting +outstunts +outsulk +outsulked +outsulking +outsulks +outsung +outswam +outsware +outswear +outswearing +outswears +outswim +outswimming +outswims +outswore +outsworn +outswum +outtake +outtakes +outtalk +outtalked +outtalking +outtalks +outtask +outtasked +outtasking +outtasks +outtell +outtelling +outtells +outthank +outthanked +outthanking +outthanks +outthink +outthinking +outthinks +outthought +outthrew +outthrob +outthrobbed +outthrobbing +outthrobs +outthrow +outthrowing +outthrown +outthrows +outthrust +outthrusting +outthrusts +outtold +outtower +outtowered +outtowering +outtowers +outtrade +outtraded +outtrades +outtrading +outtrick +outtricked +outtricking +outtricks +outtrot +outtrots +outtrotted +outtrotting +outtrump +outtrumped +outtrumping +outtrumps +outturn +outturns +outvalue +outvalued +outvalues +outvaluing +outvaunt +outvaunted +outvaunting +outvaunts +outvie +outvied +outvies +outvoice +outvoiced +outvoices +outvoicing +outvote +outvoted +outvotes +outvoting +outvying +outwait +outwaited +outwaiting +outwaits +outwalk +outwalked +outwalking +outwalks +outwar outward +outwardly +outwardness +outwardnesses outwards +outwarred +outwarring +outwars +outwash +outwashes +outwaste +outwasted +outwastes +outwasting +outwatch +outwatched +outwatches +outwatching +outwear +outwearied +outwearies +outwearing +outwears +outweary +outwearying +outweep +outweeping +outweeps +outweigh +outweighed +outweighing +outweighs +outwent +outwept +outwhirl +outwhirled +outwhirling +outwhirls +outwile +outwiled +outwiles +outwiling +outwill +outwilled +outwilling +outwills +outwind +outwinded +outwinding +outwinds +outwish +outwished +outwishes +outwishing +outwit +outwits +outwitted +outwitting +outwore +outwork +outworked +outworker +outworkers +outworking +outworks +outworn +outwrestle +outwrestled +outwrestles +outwrestling +outwrit +outwrite +outwrites +outwriting +outwritten +outwrote +outwrought +outyell +outyelled +outyelling +outyells +outyelp +outyelped +outyelping +outyelps +outyield +outyielded +outyielding +outyields +ouzel +ouzels +ouzo +ouzos +ova oval +ovalbumin +ovalbumins +ovalities +ovality +ovally +ovalness +ovalnesses +ovals +ovarial +ovarian +ovariectomies +ovariectomized +ovariectomy +ovaries +ovariole +ovarioles +ovariotomies +ovariotomy +ovaritides +ovaritis +ovary +ovate +ovately +ovation +ovations +oven +ovenbird +ovenbirds +ovenlike +ovenproof +ovens +ovenware +ovenwares over +overable +overabstract +overabstracted +overabstracting +overabstracts +overabundance +overabundances +overabundant +overaccentuate +overaccentuated +overaccentuates +overaccentuating +overachieve +overachieved +overachievement +overachievements +overachiever +overachievers +overachieves +overachieving +overact +overacted +overacting +overaction +overactions +overactive +overactivities +overactivity +overacts +overadjustment +overadjustments +overadvertise +overadvertised +overadvertises +overadvertising +overage +overaged +overages +overaggressive +overalert +overall +overalled +overalls +overambitious +overambitiousness +overambitiousnesses +overamplified +overanalyses +overanalysis +overanalytical +overanalyze +overanalyzed +overanalyzes +overanalyzing +overanxieties +overanxiety +overanxious +overapplication +overapplications +overapt +overarch +overarched +overarches +overarching +overarm +overarousal +overarousals +overarrange +overarranged +overarranges +overarranging +overarticulate +overarticulated +overarticulates +overarticulating +overassert +overasserted +overasserting +overassertion +overassertions +overassertive +overasserts +overassessment +overassessments +overate +overattention +overattentions +overawe +overawed +overawes +overawing +overbake +overbaked +overbakes +overbaking +overbalance +overbalanced +overbalances +overbalancing +overbear +overbearing +overbearingly +overbears +overbeat +overbeaten +overbeating +overbeats +overbed +overbejeweled +overbet +overbets +overbetted +overbetting +overbid +overbidden +overbidding +overbids +overbig +overbill +overbilled +overbilling +overbills +overbite +overbites +overbleach +overbleached +overbleaches +overbleaching +overblew +overblouse +overblouses +overblow +overblowing +overblown +overblows +overboard +overboil +overboiled +overboiling +overboils +overbold +overbook +overbooked +overbooking +overbooks +overbore +overborn +overborne +overborrow +overborrowed +overborrowing +overborrows +overbought +overbreathing +overbred +overbrief +overbright +overbroad +overbrowse +overbrowsed +overbrowses +overbrowsing +overbrutal +overbuild +overbuilding +overbuilds +overbuilt +overburden +overburdened +overburdening +overburdens +overburn +overburned +overburning +overburns +overburnt +overbusy +overbuy +overbuying +overbuys +overcall +overcalled +overcalling +overcalls +overcame +overcapacities +overcapacity +overcapitalization +overcapitalizations +overcapitalize +overcapitalized +overcapitalizes +overcapitalizing +overcareful +overcast +overcasted +overcasting +overcastings +overcasts +overcaution +overcautioned +overcautioning +overcautions +overcautious +overcentralization +overcentralizations +overcentralize +overcentralized +overcentralizes +overcentralizing +overcharge +overcharged +overcharges +overcharging +overchill +overchilled +overchilling +overchills +overcivilized +overclaim +overclaimed +overclaiming +overclaims +overclassification +overclassifications +overclassified +overclassifies +overclassify +overclassifying +overclean +overcleaned +overcleaning +overcleans +overclear +overcleared +overclearing +overclears +overcloud +overclouded +overclouding +overclouds +overcoach +overcoached +overcoaches +overcoaching overcoat +overcoats +overcold overcome +overcomer +overcomers +overcomes +overcoming +overcommercialization +overcommercializations +overcommercialize +overcommercialized +overcommercializes +overcommercializing +overcommit +overcommitment +overcommitments +overcommits +overcommitted +overcommitting +overcommunicate +overcommunicated +overcommunicates +overcommunicating +overcommunication +overcommunications +overcompensate +overcompensated +overcompensates +overcompensating +overcompensation +overcompensations +overcompensatory +overcomplex +overcompliance +overcompliances +overcomplicate +overcomplicated +overcomplicates +overcomplicating +overcompress +overcompressed +overcompresses +overcompressing +overconcentration +overconcentrations +overconcern +overconcerned +overconcerning +overconcerns +overconfidence +overconfidences +overconfident +overconfidently +overconscientious +overconscious +overconservative +overconstruct +overconstructed +overconstructing +overconstructs +overconsume +overconsumed +overconsumes +overconsuming +overconsumption +overconsumptions +overcontrol +overcontrolled +overcontrolling +overcontrols +overcook +overcooked +overcooking +overcooks +overcool +overcooled +overcooling +overcools +overcorrect +overcorrected +overcorrecting +overcorrection +overcorrections +overcorrects +overcount +overcounted +overcounting +overcounts +overcoy +overcram +overcrammed +overcramming +overcrams +overcredulous +overcritical +overcrop +overcropped +overcropping +overcrops +overcrowd +overcrowded +overcrowding +overcrowds +overcultivation +overcultivations +overcure +overcured +overcures +overcuring +overcut +overcuts +overcutting +overdare +overdared +overdares +overdaring +overdear +overdeck +overdecked +overdecking +overdecks +overdecorate +overdecorated +overdecorates +overdecorating +overdecoration +overdecorations +overdemanding +overdependence +overdependences +overdependent +overdesign +overdesigned +overdesigning +overdesigns +overdetermined +overdevelop +overdeveloped +overdeveloping +overdevelopment +overdevelopments +overdevelops +overdid +overdifferentiation +overdifferentiations +overdirect +overdirected +overdirecting +overdirects +overdiscount +overdiscounted +overdiscounting +overdiscounts +overdiversities +overdiversity +overdo +overdocument +overdocumented +overdocumenting +overdocuments +overdoer +overdoers +overdoes +overdog +overdogs +overdoing +overdominance +overdominances +overdominant +overdone +overdosage +overdosages +overdose +overdosed +overdoses +overdosing +overdraft +overdrafts +overdramatic +overdramatize +overdramatized +overdramatizes +overdramatizing +overdrank +overdraw +overdrawing +overdrawn +overdraws +overdress +overdressed +overdresses +overdressing +overdrew +overdried +overdries +overdrink +overdrinking +overdrinks +overdrive +overdriven +overdrives +overdriving +overdrove +overdrunk +overdry +overdrying +overdub +overdubbed +overdubbing +overdubs +overdue +overdye +overdyed +overdyeing +overdyes +overeager +overeagerness +overeagernesses +overearnest +overeasy +overeat +overeaten +overeater +overeaters +overeating +overeats +overed +overedit +overedited +overediting +overedits +overeducate +overeducated +overeducates +overeducating +overeducation +overeducations +overelaborate +overelaborated +overelaborates +overelaborating +overelaboration +overelaborations +overembellish +overembellished +overembellishes +overembellishing +overembellishment +overembellishments +overemote +overemoted +overemotes +overemoting +overemotional +overemphases +overemphasis +overemphasize +overemphasized +overemphasizes +overemphasizing +overemphatic +overenamored +overencourage +overencouraged +overencourages +overencouraging +overenergetic +overengineer +overengineered +overengineering +overengineers +overenrolled +overentertained +overenthusiasm +overenthusiasms +overenthusiastic +overenthusiastically +overequipped +overestimate +overestimated +overestimates +overestimating +overestimation +overestimations +overevaluation +overevaluations +overexaggerate +overexaggerated +overexaggerates +overexaggerating +overexaggeration +overexaggerations +overexcite +overexcited +overexcites +overexciting +overexercise +overexercised +overexercises +overexercising +overexert +overexerted +overexerting +overexertion +overexertions +overexerts +overexpand +overexpanded +overexpanding +overexpands +overexpansion +overexpansions +overexpectation +overexpectations +overexplain +overexplained +overexplaining +overexplains +overexplicit +overexploit +overexploitation +overexploitations +overexploited +overexploiting +overexploits +overexpose +overexposed +overexposes +overexposing +overexposure +overexposures +overextend +overextended +overextending +overextends +overextension +overextensions +overextraction +overextractions +overextrapolation +overextrapolations +overextravagant +overexuberant +overfacile +overfamiliar +overfamiliarities +overfamiliarity +overfar +overfast +overfastidious +overfat +overfatigue +overfatigued +overfatigues +overfavor +overfavored +overfavoring +overfavors +overfear +overfeared +overfearing +overfears +overfed +overfeed +overfeeding +overfeeds +overfertilization +overfertilizations +overfertilize +overfertilized +overfertilizes +overfertilizing +overfill +overfilled +overfilling +overfills +overfish +overfished +overfishes +overfishing +overflew +overflies +overflight +overflights +overflow +overflowed +overflowing +overflown +overflows +overfly +overflying +overfocus +overfocused +overfocuses +overfocusing +overfocussed +overfocusses +overfocussing +overfond +overfoul +overfree +overfulfill +overfulfilled +overfulfilling +overfulfills +overfull +overfund +overfunded +overfunding +overfunds +overfussy +overgarment +overgarments +overgeneralization +overgeneralizations +overgeneralize +overgeneralized +overgeneralizes +overgeneralizing +overgenerosities +overgenerosity +overgenerous +overgenerously +overgild +overgilded +overgilding +overgilds +overgilt +overgird +overgirded +overgirding +overgirds +overgirt +overglad +overglamorize +overglamorized +overglamorizes +overglamorizing +overglaze +overglazes +overgoad +overgoaded +overgoading +overgoads +overgovern +overgoverned +overgoverning +overgoverns +overgraze +overgrazed +overgrazes +overgrazing +overgrew +overgrow +overgrowing +overgrown +overgrows +overgrowth +overgrowths +overhand +overhanded +overhanding +overhandle +overhandled +overhandles +overhandling +overhands +overhang +overhanging +overhangs +overhard +overharvest +overharvested +overharvesting +overharvests +overhasty +overhate +overhated +overhates +overhating +overhaul +overhauled +overhauling +overhauls overhead +overheads +overheap +overheaped +overheaping +overheaps +overhear +overheard +overhearing +overhears +overheat +overheated +overheating +overheats +overheld +overhigh +overhold +overholding +overholds +overholy +overhomogenize +overhomogenized +overhomogenizes +overhomogenizing +overhope +overhoped +overhopes +overhoping +overhot +overhung +overhunt +overhunted +overhunting +overhuntings +overhunts +overhype +overhyped +overhypes +overhyping +overidealize +overidealized +overidealizes +overidealizing +overidentification +overidentifications +overidentified +overidentifies +overidentify +overidentifying +overidle +overimaginative +overimpress +overimpressed +overimpresses +overimpressing +overindebtedness +overindebtednesses +overindulge +overindulged +overindulgence +overindulgences +overindulgent +overindulges +overindulging +overindustrialize +overindustrialized +overindustrializes +overindustrializing +overinflate +overinflated +overinflates +overinflating +overinflation +overinflations +overinform +overinformed +overinforming +overinforms +overing +overingenious +overingenuities +overingenuity +overinsistent +overinsure +overinsured +overinsures +overinsuring +overintellectualization +overintellectualizations +overintellectualize +overintellectualized +overintellectualizes +overintellectualizing +overintense +overintensities +overintensity +overinterpretation +overinterpretations +overinvestment +overinvestments +overissuance +overissuances +overissue +overissued +overissues +overissuing +overjoy +overjoyed +overjoying +overjoys +overjust +overkeen +overkill +overkilled +overkilling +overkills +overkind +overlabor +overlabored +overlaboring +overlabors +overlade +overladed +overladen +overlades +overlading +overlaid +overlain +overland +overlands +overlap +overlapped +overlapping +overlaps +overlarge +overlate +overlavish +overlax +overlay +overlaying +overlays +overleaf +overleap +overleaped +overleaping +overleaps +overleapt +overlearn +overlearned +overlearning +overlearns +overlend +overlending +overlends +overlength +overlengthen +overlengthened +overlengthening +overlengthens +overlent +overlet +overlets +overletting +overlewd +overlie +overlies +overlight +overlighted +overlighting +overlights +overlit +overliteral +overliterary +overlive +overlived +overlives +overliving +overload +overloaded +overloading +overloads +overlong overlook +overlooked +overlooking +overlooks +overlord +overlorded +overlording +overlords +overlordship +overlordships +overloud +overlove +overloved +overloves +overloving +overlush +overly +overlying +overman +overmanage +overmanaged +overmanages +overmanaging +overmanned +overmannered +overmanning +overmans +overmantel +overmantels +overmany +overmaster +overmastered +overmastering +overmasters +overmatch +overmatched +overmatches +overmatching +overmature +overmaturities +overmaturity +overmedicate +overmedicated +overmedicates +overmedicating +overmedication +overmedications +overmeek +overmelt +overmelted +overmelting +overmelts +overmen +overmighty +overmild +overmilk +overmilked +overmilking +overmilks +overmine +overmined +overmines +overmining +overmix +overmixed +overmixes +overmixing +overmodest +overmodestly +overmodulated +overmuch +overmuches +overmuscled +overnear +overneat +overnew +overnice +overnight +overnighted +overnighter +overnighters +overnighting +overnights +overnourish +overnourished +overnourishes +overnourishing +overnutrition +overnutritions +overobvious +overoperate +overoperated +overoperates +overoperating +overopinionated +overoptimism +overoptimisms +overoptimist +overoptimistic +overoptimistically +overoptimists +overorchestrate +overorchestrated +overorchestrates +overorchestrating +overorganize +overorganized +overorganizes +overorganizing +overornament +overornamented +overornamenting +overornaments +overpackage +overpackaged +overpackages +overpackaging +overpaid +overparticular +overpass +overpassed +overpasses +overpassing +overpast +overpay +overpaying +overpayment +overpayments +overpays +overpedal +overpedaled +overpedaling +overpedalled +overpedalling +overpedals +overpeople +overpeopled +overpeoples +overpeopling +overpersuade +overpersuaded +overpersuades +overpersuading +overpersuasion +overpersuasions +overpert +overplaid +overplaided +overplaids +overplan +overplanned +overplanning +overplans +overplant +overplanted +overplanting +overplants +overplay +overplayed +overplaying +overplays +overplied +overplies +overplot +overplots +overplotted +overplotting +overplus +overpluses +overply +overplying +overpopulate +overpopulated +overpopulates +overpopulating +overpopulation +overpopulations +overpotent +overpower +overpowered +overpowering +overpoweringly +overpowers +overpraise +overpraised +overpraises +overpraising +overprecise +overprescribe +overprescribed +overprescribes +overprescribing +overprescription +overprescriptions +overpressure +overpressures +overprice +overpriced +overprices +overpricing +overprint +overprinted +overprinting +overprints +overprivileged +overprize +overprized +overprizes +overprizing +overprocess +overprocessed +overprocesses +overprocessing +overproduce +overproduced +overproduces +overproducing +overproduction +overproductions +overprogram +overprogramed +overprograming +overprogrammed +overprogramming +overprograms +overpromise +overpromised +overpromises +overpromising +overpromote +overpromoted +overpromotes +overpromoting +overproof +overproportion +overproportionate +overproportionately +overproportioned +overproportioning +overproportions +overprotect +overprotected +overprotecting +overprotection +overprotections +overprotective +overprotectiveness +overprotectivenesses +overprotects +overpump +overpumped +overpumping +overpumps +overqualified +overran +overrank +overrash +overrate +overrated +overrates +overrating +overreach +overreached +overreacher +overreachers +overreaches +overreaching +overreact +overreacted +overreacting +overreaction +overreactions +overreacts +overrefined +overrefinement +overrefinements +overregulate +overregulated +overregulates +overregulating +overregulation +overregulations +overreliance +overreliances +overreport +overreported +overreporting +overreports +overrepresentation +overrepresentations +overrepresented +overrespond +overresponded +overresponding +overresponds +overrich +overridden +override +overrides +overriding +overrife +overrigid +overripe +overrode +overrude +overruff +overruffed +overruffing +overruffs +overrule +overruled +overrules +overruling +overrun +overrunning +overruns +overs +oversad +oversale +oversales +oversalt +oversalted +oversalting +oversalts +oversanguine +oversaturate +oversaturated +oversaturates +oversaturating +oversaturation +oversaturations +oversauce +oversauced +oversauces +oversaucing +oversave +oversaved +oversaves +oversaving +oversaw +overscale +overscaled +overscrupulous +oversea +overseas +oversecretion +oversecretions +oversee +overseed +overseeded +overseeding +overseeds +overseeing +overseen +overseer +overseers +oversees +oversell +overselling +oversells +oversensitive +oversensitiveness +oversensitivenesses +oversensitivities +oversensitivity +overserious +overseriously +overservice +overserviced +overservices +overservicing +overset +oversets +oversetting +oversew +oversewed +oversewing +oversewn +oversews +oversexed +overshadow +overshadowed +overshadowing +overshadows +overshirt +overshirts +overshoe +overshoes +overshoot +overshooting +overshoots +overshot +overshots +oversick +overside +oversides +oversight +oversights +oversimple +oversimplification +oversimplifications +oversimplified +oversimplifies +oversimplify +oversimplifying +oversimplistic +oversimply +oversize +oversized +oversizes +overskirt +overskirts +overslaugh +overslaughed +overslaughing +overslaughs +oversleep +oversleeping +oversleeps +overslept +overslip +overslipped +overslipping +overslips +overslipt +overslow +oversmoke +oversmoked +oversmokes +oversmoking +oversoak +oversoaked +oversoaking +oversoaks +oversoft +oversold +oversolicitous +oversoon +oversophisticated +oversoul +oversouls +overspecialization +overspecializations +overspecialize +overspecialized +overspecializes +overspecializing +overspeculate +overspeculated +overspeculates +overspeculating +overspeculation +overspeculations +overspend +overspender +overspenders +overspending +overspends +overspent +overspill +overspills +overspin +overspins +overspread +overspreading +overspreads +overstabilities +overstability +overstaff +overstaffed +overstaffing +overstaffs +overstate +overstated +overstatement +overstatements +overstates +overstating +overstay +overstayed +overstaying +overstays +oversteer +oversteers +overstep +overstepped +overstepping +oversteps +overstimulate +overstimulated +overstimulates +overstimulating +overstimulation +overstimulations +overstir +overstirred +overstirring +overstirs +overstock +overstocked +overstocking +overstocks +overstories +overstory +overstrain +overstrained +overstraining +overstrains +overstress +overstressed +overstresses +overstressing +overstretch +overstretched +overstretches +overstretching +overstrew +overstrewed +overstrewing +overstrewn +overstrews +overstridden +overstride +overstrides +overstriding +overstrike +overstrikes +overstriking +overstrode +overstruck +overstructured +overstrung +overstuff +overstuffed +overstuffing +overstuffs +oversubscribe +oversubscribed +oversubscribes +oversubscribing +oversubscription +oversubscriptions +oversubtle +oversuds +oversudsed +oversudses +oversudsing +oversup +oversupped +oversupping +oversupplied +oversupplies +oversupply +oversupplying +oversups +oversure +oversuspicious +oversweet +oversweeten +oversweetened +oversweetening +oversweetens +oversweetness +oversweetnesses +overswing +overswinging +overswings +overswung +overt +overtake +overtaken +overtakes +overtaking +overtalk +overtalkative +overtalked +overtalking +overtalks +overtame +overtart +overtask +overtasked +overtasking +overtasks +overtax +overtaxation +overtaxations +overtaxed +overtaxes +overtaxing +overthin +overthink +overthinking +overthinks +overthought +overthrew +overthrow +overthrowing +overthrown +overthrows +overtighten +overtightened +overtightening +overtightens +overtime +overtimed +overtimes +overtiming +overtip +overtipped +overtipping +overtips +overtire +overtired +overtires +overtiring +overtly +overtness +overtnesses +overtoil +overtoiled +overtoiling +overtoils +overtone +overtones +overtook +overtop +overtopped +overtopping +overtops +overtrade +overtraded +overtrades +overtrading +overtrain +overtrained +overtraining +overtrains +overtreat +overtreated +overtreating +overtreatment +overtreatments +overtreats +overtrick +overtricks +overtrim +overtrimmed +overtrimming +overtrims +overtrump +overtrumped +overtrumping +overtrumps +overture +overtured +overtures +overturing +overturn +overturned +overturning +overturns +overurge +overurged +overurges +overurging +overuse +overused +overuses +overusing +overutilization +overutilizations +overutilize +overutilized +overutilizes +overutilizing +overvaluation +overvaluations +overvalue +overvalued +overvalues +overvaluing +overview +overviews +overviolent +overvivid +overvoltage +overvoltages +overvote +overvoted +overvotes +overvoting +overwarm +overwarmed +overwarming +overwarms +overwary +overwater +overwatered +overwatering +overwaters +overweak +overwear +overwearing +overwears +overweary +overween +overweened +overweening +overweeningly +overweens +overweigh +overweighed +overweighing +overweighs overweight +overweighted +overweighting +overweights +overwet +overwets +overwetted +overwetting +overwhelm +overwhelmed +overwhelming +overwhelmingly +overwhelms +overwide +overwily +overwind +overwinding +overwinds +overwinter +overwintered +overwintering +overwinters +overwise +overwithheld +overwithhold +overwithholding +overwithholds +overword +overwords +overwore +overwork +overworked +overworking +overworks +overworn +overwound +overwrite +overwrites +overwriting +overwritten +overwrote +overwrought +overzeal +overzealous +overzealously +overzealousness +overzealousnesses +overzeals +ovibos +ovicidal +ovicide +ovicides +oviducal +oviduct +oviductal +oviducts +oviform +ovine +ovines +ovipara +oviparous +oviposit +oviposited +ovipositing +oviposition +ovipositional +ovipositions +ovipositor +ovipositors +oviposits +ovisac +ovisacs +ovoid +ovoidal +ovoids +ovolactovegetarian +ovolactovegetarians +ovoli +ovolo +ovolos +ovonic +ovonics +ovotestes +ovotestis +ovoviviparous +ovoviviparously +ovoviviparousness +ovoviviparousnesses +ovular +ovulary +ovulate +ovulated +ovulates +ovulating +ovulation +ovulations +ovulatory +ovule +ovules +ovum +ow owe +owed +owes +owing +owl +owlet +owlets +owlish +owlishly +owlishness +owlishnesses +owllike +owls own +ownable +owned owner +owners ownership +ownerships +owning +owns +owse +owsen ox +oxacillin +oxacillins +oxalacetate +oxalacetates +oxalate +oxalated +oxalates +oxalating +oxalic +oxalis +oxalises +oxaloacetate +oxaloacetates +oxazepam +oxazepams +oxazine +oxazines +oxblood +oxbloods +oxbow +oxbows +oxcart +oxcarts +oxen +oxes +oxeye +oxeyes +oxford +oxfords +oxheart +oxhearts +oxid +oxidable +oxidant +oxidants +oxidase +oxidases +oxidasic +oxidate +oxidated +oxidates +oxidating +oxidation +oxidations +oxidative +oxidatively +oxide +oxides +oxidic +oxidise +oxidised +oxidiser +oxidisers +oxidises +oxidising +oxidizable +oxidize +oxidized +oxidizer +oxidizers +oxidizes +oxidizing +oxidoreductase +oxidoreductases +oxids +oxim +oxime +oximes +oxims +oxlip +oxlips +oxo +oxpecker +oxpeckers +oxtail +oxtails +oxter +oxters +oxtongue +oxtongues +oxy +oxyacetylene +oxyacid +oxyacids oxygen +oxygenate +oxygenated +oxygenates +oxygenating +oxygenation +oxygenations +oxygenator +oxygenators +oxygenic +oxygenless +oxygens +oxyhemoglobin +oxyhemoglobins +oxyhydrogen +oxymora +oxymoron +oxymoronic +oxymoronically +oxymorons +oxyphenbutazone +oxyphenbutazones +oxyphil +oxyphile +oxyphiles +oxyphilic +oxyphils +oxysalt +oxysalts +oxysome +oxysomes +oxytetracycline +oxytetracyclines +oxytocic +oxytocics +oxytocin +oxytocins +oxytone +oxytones +oxyuriases +oxyuriasis +oy +oyer +oyers +oyes +oyesses +oyez +oyster +oystercatcher +oystercatchers +oystered +oysterer +oysterers +oystering +oysterings +oysterman +oystermen +oysters +ozocerite +ozocerites +ozokerite +ozokerites +ozonate +ozonated +ozonates +ozonating +ozonation +ozonations +ozone +ozones +ozonic +ozonide +ozonides +ozonise +ozonised +ozonises +ozonising +ozonization +ozonizations +ozonize +ozonized +ozonizer +ozonizers +ozonizes +ozonizing +ozonosphere +ozonospheres +ozonous +pa +pablum +pablums +pabular +pabulum +pabulums +pac +paca +pacas pace +paced +pacemaker +pacemakers +pacemaking +pacemakings +pacer +pacers +paces +pacesetter +pacesetters +pacesetting +pacha +pachadom +pachadoms +pachalic +pachalics +pachas +pachinko +pachinkos +pachisi +pachisis +pachouli +pachoulis +pachuco +pachucos +pachyderm +pachydermatous +pachyderms +pachysandra +pachysandras +pachytene +pachytenes +pacifiable pacific +pacifically +pacification +pacifications +pacificator +pacificators +pacificism +pacificisms +pacificist +pacificists +pacified +pacifier +pacifiers +pacifies +pacifism +pacifisms +pacifist +pacifistic +pacifistically +pacifists +pacify +pacifying +pacing pack +packabilities +packability +packable package +packaged +packager +packagers +packages +packaging +packboard +packboards +packed +packer +packers packet +packeted +packeting +packets +packhorse +packhorses +packing +packinghouse +packinghouses +packings +packly +packman +packmen +packness +packnesses +packs +packsack +packsacks +packsaddle +packsaddles +packthread +packthreads +packwax +packwaxes +pacs +pact +paction +pactions +pacts +pad +padauk +padauks +padded +padder +padders +paddies +padding +paddings paddle +paddleball +paddleballs +paddleboard +paddleboards +paddleboat +paddleboats +paddled +paddlefish +paddlefishes +paddler +paddlers +paddles +paddling +paddlings +paddock +paddocked +paddocking +paddocks +paddy +padi +padis +padishah +padishahs +padle +padles +padlock +padlocked +padlocking +padlocks +padnag +padnags +padouk +padouks +padre +padres +padri +padrone +padrones +padroni +pads +padshah +padshahs +paduasoy +paduasoys +paean +paeanism +paeanisms +paeans +paediatric +paediatrician +paediatricians +paediatrics +paedogeneses +paedogenesis +paedogenetic +paedogenetically +paedogenic +paedomorphic +paedomorphism +paedomorphisms +paedomorphoses +paedomorphosis +paella +paellas +paeon +paeons +paesan +paesani +paesano +paesanos +paesans +pagan +pagandom +pagandoms +paganise +paganised +paganises +paganish +paganising +paganism +paganisms +paganist +paganists +paganize +paganized +paganizer +paganizers +paganizes +paganizing +pagans page +pageant +pageantries +pageantry +pageants +pageboy +pageboys +paged +pager +pagers +pages +paginal +paginate +paginated +paginates +paginating +pagination +paginations +paging +pagings +pagod +pagoda +pagodas +pagods +pagurian +pagurians +pagurid +pagurids +pah +pahlavi +pahlavis +pahoehoe +pahoehoes +paid +paik +paiked +paiking +paiks +pail +pailful +pailfuls +paillard +paillards +paillette +paillettes +pails +pailsful pain +painch +painches +pained painful +painfuller +painfullest +painfully +painfulness +painfulnesses +paining +painkiller +painkillers +painkilling +painless +painlessly +painlessness +painlessnesses +pains +painstaking +painstakingly +painstakings paint +paintbrush +paintbrushes +painted painter +painterliness +painterlinesses +painterly +painters +paintier +paintiest painting +paintings +paints +paintwork +paintworks +painty pair +paired +pairing +pairings +pairs +paisa +paisan +paisana +paisanas +paisano +paisanos +paisans +paisas +paise +paisley +paisleys +pajama +pajamaed +pajamas +pakeha +pakehas +pal +palabra +palabras palace +palaced +palaces +paladin +paladins +palaestra +palaestrae +palais +palanquin +palanquins +palatabilities +palatability +palatable +palatableness +palatablenesses +palatably +palatal +palatalization +palatalizations +palatalize +palatalized +palatalizes +palatalizing +palatally +palatals +palate +palates +palatial +palatially +palatialness +palatialnesses +palatinate +palatinates +palatine +palatines +palaver +palavered +palavering +palavers +palazzi +palazzo +palazzos pale +palea +paleae +paleal +paled +paleface +palefaces +palely +paleness +palenesses +paleoanthropological +paleoanthropologies +paleoanthropologist +paleoanthropologists +paleoanthropology +paleobiologic +paleobiological +paleobiologies +paleobiologist +paleobiologists +paleobiology +paleobotanic +paleobotanical +paleobotanically +paleobotanies +paleobotanist +paleobotanists +paleobotany +paleoclimatologies +paleoclimatologist +paleoclimatologists +paleoclimatology +paleoecologic +paleoecological +paleoecologies +paleoecologist +paleoecologists +paleoecology +paleogeographic +paleogeographical +paleogeographically +paleogeographies +paleogeography +paleographer +paleographers +paleographic +paleographical +paleographically +paleographies +paleography +paleomagnetic +paleomagnetically +paleomagnetism +paleomagnetisms +paleomagnetist +paleomagnetists +paleontologic +paleontological +paleontologies +paleontologist +paleontologists +paleontology +paleopathological +paleopathologies +paleopathologist +paleopathologists +paleopathology +paleosol +paleosols +paleozoological +paleozoologies +paleozoologist +paleozoologists +paleozoology +paler +pales +palest +palestra +palestrae +palestras +palet +paletot +paletots +palets +palette +palettes +paleways +palewise +palfrey +palfreys +palier +paliest +palikar +palikars +palimonies +palimony +palimpsest +palimpsests +palindrome +palindromes +palindromic +palindromist +palindromists +paling +palingeneses +palingenesis +palingenetic +palings +palinode +palinodes +palisade +palisaded +palisades +palisading +palish +pall +palladia +palladic +palladium +palladiums +palladous +pallbearer +pallbearers +palled +pallet +palletise +palletised +palletises +palletising +palletization +palletizations +palletize +palletized +palletizer +palletizers +palletizes +palletizing +pallets +pallette +pallettes +pallia +pallial +palliasse +palliasses +palliate +palliated +palliates +palliating +palliation +palliations +palliative +palliatively +palliatives +palliator +palliators +pallid +pallidly +pallidness +pallidnesses +pallier +palliest +palling +pallium +palliums +pallor +pallors +palls +pally +palm +palmar +palmary +palmate +palmated +palmately +palmation +palmations +palmed +palmer +palmers +palmerworm +palmerworms +palmette +palmettes +palmetto +palmettoes +palmettos +palmier +palmiest +palming +palmist +palmistries +palmistry +palmists +palmitate +palmitates +palmitin +palmitins +palmlike +palms +palmy +palmyra +palmyras +palomino +palominos +palooka +palookas +paloverde +paloverdes +palp +palpabilities +palpability +palpable +palpably +palpal +palpate +palpated +palpates +palpating +palpation +palpations +palpator +palpators +palpebra +palpebrae +palpebral +palpi +palpitant +palpitate +palpitated +palpitates +palpitating +palpitation +palpitations +palps +palpus +pals +palsgrave +palsgraves +palship +palships +palsied +palsies +palsy +palsying +palter +paltered +palterer +palterers +paltering +palters +paltrier +paltriest +paltrily +paltriness +paltrinesses +paltry +paludal +paludism +paludisms +paly +palynologic +palynological +palynologically +palynologies +palynologist +palynologists +palynology +pam +pampa +pampas +pampean +pampeans +pamper +pampered +pamperer +pamperers +pampering +pampero +pamperos +pampers +pamphlet +pamphleteer +pamphleteered +pamphleteering +pamphleteers +pamphlets +pams pan +panacea +panacean +panaceas +panache +panaches +panada +panadas +panama +panamas +panatela +panatelas +panbroil +panbroiled +panbroiling +panbroils pancake +pancaked +pancakes +pancaking +pancetta +pancettas +panchax +panchaxes +panchromatic +pancratium +pancratiums +pancreas +pancreases +pancreatectomies +pancreatectomized +pancreatectomy +pancreatic +pancreatin +pancreatins +pancreatitides +pancreatitis +pancreozymin +pancreozymins +pancytopenia +pancytopenias panda +pandani +pandanus +pandanuses +pandas +pandect +pandects +pandemic +pandemics +pandemonium +pandemoniums +pander +pandered +panderer +panderers +pandering +panders +pandied +pandies +pandit +pandits +pandoor +pandoors +pandora +pandoras +pandore +pandores +pandour +pandours +pandowdies +pandowdy +pandura +panduras +pandy +pandying +pane +paned +panegyric +panegyrical +panegyrically +panegyrics +panegyrist +panegyrists +panel +paneled +paneling +panelings +panelist +panelists +panelled +panelling +panellings +panels +panes +panetela +panetelas +panettone +panettones +panfish +panfishes +panfried +panfries +panfry +panfrying +panful +panfuls +pang +panga +pangas +panged +pangen +pangene +pangenes +pangeneses +pangenesis +pangenetic +pangens +panging +pangolin +pangolins +pangs +panhandle +panhandled +panhandler +panhandlers +panhandles +panhandling +panhuman panic +panicked +panickier +panickiest +panicking +panicky +panicle +panicled +panicles +panics +paniculate +panicum +panicums +panier +paniers +panjandra +panjandrum +panjandrums +panleukopenia +panleukopenias +panmictic +panmixes +panmixia +panmixias +panmixis +panmixises +panne +panned +pannes +pannier +panniers +pannikin +pannikins +panning +panocha +panochas +panoche +panoches +panoplied +panoplies +panoply +panoptic +panorama +panoramas +panoramic +panoramically +panpipe +panpipes +pans +pansexual +pansexualities +pansexuality +pansies +pansophies +pansophy +pansy +pant +pantalets +pantalettes +pantalone +pantalones +pantaloon +pantaloons +pantdress +pantdresses +pantechnicon +pantechnicons +panted +pantheism +pantheisms +pantheist +pantheistic +pantheistical +pantheistically +pantheists +pantheon +pantheons +panther +panthers +pantie +panties +pantile +pantiled +pantiles +panting +pantisocracies +pantisocracy +pantisocratic +pantisocratical +pantisocratist +pantisocratists +panto +pantofle +pantofles +pantograph +pantographic +pantographs +pantomime +pantomimed +pantomimes +pantomimic +pantomiming +pantomimist +pantomimists +pantos +pantothenate +pantothenates +pantoum +pantoums +pantries +pantropic +pantropical +pantry +pantryman +pantrymen +pants +pantsuit +pantsuited +pantsuits +panty +pantyhose +pantywaist +pantywaists +panzer +panzers +pap +papa +papacies +papacy +papain +papains +papal +papally +paparazzi +paparazzo +papas +papaverine +papaverines +papaw +papaws +papaya +papayan +papayas paper +paperback +paperbacked +paperbacks +paperboard +paperboards +paperbound +paperbounds +paperboy +paperboys +papered +paperer +paperers +paperhanger +paperhangers +paperhanging +paperhangings +paperiness +paperinesses +papering +paperless +papermaker +papermakers +papermaking +papermakings +papers +paperweight +paperweights paperwork +paperworks +papery +papeterie +papeteries +paphian +paphians +papilionaceous +papilla +papillae +papillar +papillary +papillate +papilloma +papillomas +papillomata +papillomatous +papillomavirus +papillomaviruses +papillon +papillons +papillose +papillote +papillotes +papist +papistic +papistries +papistry +papists +papoose +papooses +papovavirus +papovaviruses +pappi +pappier +pappies +pappiest +pappoose +pappooses +pappose +pappous +pappus +pappy +paprica +papricas +paprika +paprikas +paps +papula +papulae +papular +papule +papules +papulose +papyral +papyri +papyrian +papyrine +papyrologies +papyrologist +papyrologists +papyrology +papyrus +papyruses +par +para +parabioses +parabiosis +parabiotic +parabiotically +parable +parables +parabola +parabolas +parabolic +parabolically +paraboloid +paraboloidal +paraboloids +parachor +parachors +parachute +parachuted +parachutes +parachutic +parachuting +parachutist +parachutists +parade +paraded +parader +paraders +parades +paradichlorobenzene +paradichlorobenzenes +paradiddle +paradiddles +paradigm +paradigmatic +paradigmatically +paradigms +parading +paradisaic +paradisaical +paradisaically +paradisal +paradise +paradises +paradisiac +paradisiacal +paradisiacally +paradisial +paradisical +parador +paradores +paradors +parados +paradoses +paradox +paradoxes +paradoxical +paradoxicalities +paradoxicality +paradoxically +paradoxicalness +paradoxicalnesses +paradrop +paradropped +paradropping +paradrops +paraesthesia +paraesthesias +paraffin +paraffined +paraffinic +paraffining +paraffins +paraform +paraformaldehyde +paraformaldehydes +paraforms +parageneses +paragenesis +paragenetic +paragenetically +paragoge +paragoges +paragon +paragoned +paragoning +paragons paragraph +paragraphed +paragrapher +paragraphers +paragraphic +paragraphing +paragraphs +parainfluenza +parainfluenzas +parajournalism +parajournalisms +parakeet +parakeets +parakite +parakites +paralanguage +paralanguages +paraldehyde +paraldehydes +paralegal +paralegals +paralinguistic +paralinguistics +parallactic +parallax +parallaxes parallel +paralleled +parallelepiped +parallelepipeds +paralleling +parallelism +parallelisms +parallelled +parallelling +parallelogram +parallelograms +parallels +paralogism +paralogisms +paralyse +paralysed +paralyses +paralysing +paralysis +paralytic +paralytically +paralytics +paralyzation +paralyzations +paralyze +paralyzed +paralyzer +paralyzers +paralyzes +paralyzing +paralyzingly +paramagnet +paramagnetic +paramagnetically +paramagnetism +paramagnetisms +paramagnets +paramecia +paramecium +parameciums +paramedic +paramedical +paramedicals +paramedics +parament +paramenta +paraments +parameter +parameterization +parameterizations +parameterize +parameterized +parameterizes +parameterizing +parameters +parametric +parametrically +parametrization +parametrizations +parametrize +parametrized +parametrizes +parametrizing +paramilitary +paramnesia +paramnesias +paramo +paramos +paramount +paramountcies +paramountcy +paramountly +paramounts +paramour +paramours +paramylum +paramylums +paramyxovirus +paramyxoviruses +parang +parangs +paranoea +paranoeas +paranoia +paranoiac +paranoiacs +paranoias +paranoic +paranoically +paranoics +paranoid +paranoidal +paranoids +paranormal +paranormalities +paranormality +paranormally +paranormals +paranymph +paranymphs +parapet +parapeted +parapets +paraph +paraphernalia +paraphrasable +paraphrase +paraphrased +paraphraser +paraphrasers +paraphrases +paraphrasing +paraphrastic +paraphrastically +paraphs +paraphyses +paraphysis +paraplegia +paraplegias +paraplegic +paraplegics +parapodia +parapodial +parapodium +paraprofessional +paraprofessionals +parapsychological +parapsychologies +parapsychologist +parapsychologists +parapsychology +paraquat +paraquats +paraquet +paraquets +pararosaniline +pararosanilines +paras +parasailing +parasailings +parasang +parasangs +parasexual +parasexualities +parasexuality +parashah +parashioth +parashoth +parasite +parasites +parasitic +parasitical +parasitically +parasiticidal +parasiticide +parasiticides +parasitise +parasitised +parasitises +parasitising +parasitism +parasitisms +parasitization +parasitizations +parasitize +parasitized +parasitizes +parasitizing +parasitoid +parasitoids +parasitologic +parasitological +parasitologically +parasitologies +parasitologist +parasitologists +parasitology +parasitoses +parasitosis +parasol +parasols +parasympathetic +parasympathetics +parasympathomimetic +parasyntheses +parasynthesis +parasynthetic +paratactic +paratactical +paratactically +parataxes +parataxis +parathion +parathions +parathormone +parathormones +parathyroid +parathyroidectomies +parathyroidectomized +parathyroidectomy +parathyroids +paratroop +paratrooper +paratroopers +paratroops +paratyphoid +paratyphoids +paravane +paravanes +parawing +parawings +parazoan +parazoans +parboil +parboiled +parboiling +parboils +parbuckle +parbuckled +parbuckles +parbuckling parcel +parceled +parceling +parcelled +parcelling +parcels +parcenaries +parcenary +parcener +parceners +parch +parched +parches +parchesi +parchesis +parching +parchisi +parchisis +parchment +parchments +pard +pardah +pardahs +pardee +pardi +pardie +pardine +pardner +pardners pardon +pardonable +pardonableness +pardonablenesses +pardonably +pardoned +pardoner +pardoners +pardoning +pardons +pards +pardy +pare +parecism +parecisms +pared +paregoric +paregorics +pareira +pareiras +parenchyma +parenchymal +parenchymas +parenchymata +parenchymatous parent +parentage +parentages +parental +parentally +parented +parenteral +parenterally +parentheses +parenthesis +parenthesize +parenthesized +parenthesizes +parenthesizing +parenthetic +parenthetical +parenthetically +parenthood +parenthoods +parenting +parentings +parentless +parents +pareo +pareos +parer +parerga +parergon +parers +pares +pareses +paresis +paresthesia +paresthesias +paresthetic +paretic +paretics +pareu +pareus +pareve +parfait +parfaits +parfleche +parfleches +parflesh +parfleshes +parfocal +parfocalities +parfocality +parfocalize +parfocalized +parfocalizes +parfocalizing +parge +parged +parges +parget +pargeted +pargeting +pargets +pargetted +pargetting +parging +pargings +pargo +pargos +pargyline +pargylines +parhelia +parhelic +parhelion +pariah +pariahs +parian +parians +paries +parietal +parietals +parietes +parimutuel +paring +parings +paris +parises +parish +parishes +parishioner +parishioners +parities +parity park +parka +parkas +parked +parker +parkers parking +parkings +parkinsonian +parkinsonism +parkinsonisms +parkland +parklands +parklike +parks +parkway +parkways +parlance +parlances +parlando +parlante +parlay +parlayed +parlaying +parlays +parle +parled +parles +parley +parleyed +parleyer +parleyers +parleying +parleys +parliament +parliamentarian +parliamentarians +parliamentary +parliaments +parling +parlor +parlors +parlour +parlours +parlous +parlously +parmigiana +parmigiano +parochial +parochialism +parochialisms +parochially +parodic +parodied +parodies +parodist +parodistic +parodists +parodoi +parodos +parody +parodying +parol +parole +paroled +parolee +parolees +paroles +paroling +parols +paronomasia +paronomasias +paronomastic +paronym +paronymous +paronyms +paroquet +paroquets +parotic +parotid +parotids +parotitis +parotitises +parotoid +parotoids +parous +paroxysm +paroxysmal +paroxysms +parquet +parqueted +parqueting +parquetries +parquetry +parquets +parr +parrakeet +parrakeets +parral +parrals +parred +parrel +parrels +parricidal +parricide +parricides +parridge +parridges +parried +parries +parring +parritch +parritches +parroket +parrokets parrot +parroted +parroter +parroters +parroting +parrots +parroty +parrs +parry +parrying +pars +parsable +parse +parsec +parsecs +parsed +parser +parsers +parses +parsimonies +parsimonious +parsimoniously +parsimony +parsing +parsley +parsleyed +parsleys +parslied +parsnip +parsnips +parson +parsonage +parsonages +parsonic +parsons part -part-time +partake +partaken +partaker +partakers +partakes +partaking +partan +partans +parted +parterre +parterres +parthenocarpic +parthenocarpies +parthenocarpy +parthenogeneses +parthenogenesis +parthenogenetic +parthenogenetically +partial +partialities +partiality +partially +partials +partibilities +partibility +partible +participant +participants participate +participated +participates +participating +participation +participational +participations +participative +participator +participators +participatory +participial +participially +participle +participles +particle +particleboard +particleboards +particles particular +particularise +particularised +particularises +particularising +particularism +particularisms +particularist +particularistic +particularists +particularities +particularity +particularization +particularizations +particularize +particularized +particularizes +particularizing +particularly +particulars +particulate +particulates +partied +partier +partiers +parties +parting +partings +partisan +partisanly +partisans +partisanship +partisanships +partita +partitas +partite +partition +partitioned +partitioner +partitioners +partitioning +partitionist +partitionists +partitions +partitive +partitively +partizan +partizans +partlet +partlets partly partner +partnered +partnering +partnerless +partners +partnership +partnerships +parton +partons +partook +partridge +partridgeberries +partridgeberry +partridges +parts +parturient +parturients +parturition +parturitions +partway party +partyer +partyers +partying +parura +paruras +parure +parures +parve +parvenu +parvenue +parvenus +parvis +parvise +parvises +parvo +parvolin +parvolins +parvos +parvovirus +parvoviruses +pas +pascal +pascals +paschal +paschals +pase +paseo +paseos +pases +pash +pasha +pashadom +pashadoms +pashalic +pashalics +pashalik +pashaliks +pashas +pashed +pashes +pashing +pasqueflower +pasqueflowers +pasquil +pasquils +pasquinade +pasquinaded +pasquinades +pasquinading pass +passable +passably +passacaglia +passacaglias +passade +passades +passado +passadoes +passados passage +passaged +passages +passageway +passageways +passagework +passageworks +passaging +passant +passband +passbands +passbook +passbooks +passe +passed +passee +passel +passels +passementerie +passementeries passenger +passengers +passer passerby +passerine +passerines +passers +passersby +passes +passible +passim +passing +passings +passion +passional +passionate +passionately +passionateness +passionatenesses +passionflower +passionflowers +passionless +passions +passivate +passivated +passivates +passivating +passivation +passivations passive +passively +passiveness +passivenesses +passives +passivism +passivisms +passivist +passivists +passivities +passivity +passkey +passkeys +passless +passover +passovers passport +passports +passus +passuses +password +passwords past +pasta +pastas +paste +pasteboard +pasteboards +pasted +pastedown +pastedowns +pastel +pastelist +pastelists +pastellist +pastellists +pastels +paster +pastern +pasterns +pasters +pastes +pasteup +pasteups +pasteurise +pasteurised +pasteurises +pasteurising +pasteurization +pasteurizations +pasteurize +pasteurized +pasteurizer +pasteurizers +pasteurizes +pasteurizing +pasticci +pasticcio +pasticcios +pastiche +pastiches +pasticheur +pasticheurs +pastie +pastier +pasties +pastiest +pastil +pastille +pastilles +pastils +pastime +pastimes +pastina +pastinas +pastiness +pastinesses +pasting +pastis +pastises +pastless +pastness +pastnesses +pastor +pastoral +pastorale +pastorales +pastoralism +pastoralisms +pastoralist +pastoralists +pastorally +pastoralness +pastoralnesses +pastorals +pastorate +pastorates +pastored +pastoring +pastors +pastorship +pastorships +pastrami +pastramis +pastries +pastromi +pastromis +pastry +pasts +pasturage +pasturages +pastural +pasture +pastured +pastureland +pasturelands +pasturer +pasturers +pastures +pasturing +pasty +pat +pataca +patacas +patagia +patagial +patagium +patamar +patamars +patch +patchboard +patchboards +patched +patcher +patchers +patches +patchier +patchiest +patchily +patchiness +patchinesses +patching +patchouli +patchoulies +patchoulis +patchouly +patchwork +patchworks +patchy +pate +pated +patella +patellae +patellar +patellas +patelliform +paten +patencies +patency +patens patent +patentabilities +patentability +patentable +patented +patentee +patentees +patenting +patently +patentor +patentors +patents +pater +paterfamilias +paternal +paternalism +paternalisms +paternalist +paternalistic +paternalistically +paternalists +paternally +paternities +paternity +paternoster +paternosters +paters +pates path +pathbreaking +pathetic +pathetical +pathetically +pathfinder +pathfinders +pathfinding +pathfindings +pathless +pathlessness +pathlessnesses +pathobiologies +pathobiology +pathogen +pathogeneses +pathogenesis +pathogenetic +pathogenic +pathogenicities +pathogenicity +pathogens +pathognomonic +pathologic +pathological +pathologically +pathologies +pathologist +pathologists +pathology +pathophysiologic +pathophysiological +pathophysiologies +pathophysiology +pathos +pathoses +paths +pathway +pathways patience +patiences patient +patienter +patientest +patiently +patients +patin +patina +patinae +patinas +patinate +patinated +patinates +patinating +patination +patinations +patine +patined +patines +patining +patinize +patinized +patinizes +patinizing +patins +patio +patios +patisserie +patisseries +patissier +patissiers +patly +patness +patnesses +patois +patresfamilias +patriarch +patriarchal +patriarchate +patriarchates +patriarchies +patriarchs +patriarchy +patrician +patricians +patriciate +patriciates +patricidal +patricide +patricides +patrilineal +patrimonial +patrimonies +patrimony +patriot +patriotic +patriotically +patriotism +patriotisms +patriots +patristic +patristical +patristics +patrol +patrolled +patroller +patrollers +patrolling +patrolman +patrolmen +patrols +patron +patronage +patronages +patronal +patroness +patronesses +patronise +patronised +patronises +patronising +patronization +patronizations +patronize +patronized +patronizes +patronizing +patronizingly +patronly +patrons +patronymic +patronymics +patroon +patroons +pats +patsies +patsy +pattamar +pattamars +patted +pattee +patten +pattens +patter +pattered +patterer +patterers +pattering pattern +patterned +patterning +patternings +patternless +patterns +patters +pattie +patties +patting +patty +pattypan +pattypans +patulent +patulous +paty +patzer +patzers +paucities +paucity +paughty +pauldron +pauldrons +paulin +paulins +paulownia +paulownias +paunch +paunched +paunches +paunchier +paunchiest +paunchiness +paunchinesses +paunchy +pauper +paupered +paupering +pauperism +pauperisms +pauperize +pauperized +pauperizes +pauperizing +paupers +paupiette +paupiettes +pausal pause +paused +pauser +pausers +pauses +pausing +pavan +pavane +pavanes +pavans +pave +paved +paveed pavement +pavements +paver +pavers +paves +pavid +pavilion +pavilioned +pavilioning +pavilions +pavillon +pavillons +pavin +paving +pavings +pavins +pavior +paviors +paviour +paviours +pavis +pavise +paviser +pavisers +pavises +pavlova +pavlovas +pavonine +paw +pawed +pawer +pawers +pawing +pawkier +pawkiest +pawkily +pawky +pawl +pawls +pawn +pawnable +pawnage +pawnages +pawnbroker +pawnbrokers +pawnbroking +pawnbrokings +pawned +pawnee +pawnees +pawner +pawners +pawning +pawnor +pawnors +pawns +pawnshop +pawnshops +pawpaw +pawpaws +paws +pax +paxes +paxwax +paxwaxes pay -pc +payable +payables +payably +payback +paybacks +paycheck +paychecks +payday +paydays +payed +payee +payees +payer +payers +paygrade +paygrades +paying +payload +payloads +paymaster +paymasters +payment +payments +paynim +paynims +payoff +payoffs +payola +payolas +payor +payors +payout +payouts +payroll +payrolls +pays +pazazz +pazazzes pe pea peace +peaceable +peaceableness +peaceablenesses +peaceably +peaced peaceful +peacefuller +peacefullest +peacefully +peacefulness +peacefulnesses +peacekeeper +peacekeepers +peacekeeping +peacekeepings +peacemaker +peacemakers +peacemaking +peacemakings +peacenik +peaceniks +peaces +peacetime +peacetimes peach +peached +peacher +peachers +peaches +peachier +peachiest +peaching +peachy +peacing +peacoat +peacoats +peacock +peacocked +peacockier +peacockiest +peacocking +peacockish +peacocks +peacocky +peafowl +peafowls +peag +peage +peages +peags +peahen +peahens +peak +peaked +peakedness +peakednesses +peakier +peakiest +peaking +peakish +peakless +peaklike +peaks +peaky +peal +pealed +pealike +pealing +peals +pean +peans +peanut +peanuts pear +pearl +pearlash +pearlashes +pearled +pearler +pearlers +pearlescence +pearlescences +pearlescent +pearlier +pearliest +pearling +pearlite +pearlites +pearlitic +pearlized +pearls +pearly +pearmain +pearmains +pears +peart +pearter +peartest +peartly +peas +peasant +peasantries +peasantry +peasants +peascod +peascods +pease +peasecod +peasecods +peasen +peases +peashooter +peashooters +peat +peatier +peatiest +peats +peaty +peavey +peaveys +peavies +peavy +pebble +pebbled +pebbles +pebblier +pebbliest +pebbling +pebbly +pec +pecan +pecans +peccable +peccadillo +peccadilloes +peccadillos +peccancies +peccancy +peccant +peccantly +peccaries +peccary +peccavi +peccavis +pech +pechan +pechans +peched +peching +pechs +peck +pecked +pecker +peckers +peckerwood +peckerwoods +peckier +peckiest +pecking +peckish +pecks +pecky +pecorini +pecorino +pecorinos +pecs +pectase +pectases +pectate +pectates +pecten +pectens +pectic +pectin +pectinaceous +pectinate +pectination +pectinations +pectines +pectinesterase +pectinesterases +pectins +pectize +pectized +pectizes +pectizing +pectoral +pectorals +peculate +peculated +peculates +peculating +peculation +peculations +peculator +peculators +peculia +peculiar +peculiarities +peculiarity +peculiarly +peculiars +peculium +pecuniarily +pecuniary +ped +pedagog +pedagogic +pedagogical +pedagogically +pedagogics +pedagogies +pedagogs +pedagogue +pedagogues +pedagogy +pedal +pedaled +pedalfer +pedalfers +pedalier +pedaliers +pedaling +pedalled +pedalling +pedalo +pedalos +pedals +pedant +pedantic +pedantically +pedantries +pedantry +pedants +pedate +pedately +peddle +peddled +peddler +peddleries +peddlers +peddlery +peddles +peddling +pederast +pederastic +pederasties +pederasts +pederasty +pedes +pedestal +pedestaled +pedestaling +pedestalled +pedestalling +pedestals pedestrian +pedestrianism +pedestrianisms +pedestrians +pediatric +pediatrician +pediatricians +pediatrics +pediatrist +pediatrists +pedicab +pedicabs +pedicel +pedicellate +pedicels +pedicle +pedicled +pedicles +pediculate +pediculates +pediculoses +pediculosis +pediculosises +pediculous +pedicure +pedicured +pedicures +pedicuring +pedicurist +pedicurists +pediform +pedigree +pedigreed +pedigrees +pediment +pedimental +pedimented +pediments +pedipalp +pedipalps +pedlar +pedlaries +pedlars +pedlary +pedler +pedleries +pedlers +pedlery +pedocal +pedocalic +pedocals +pedogeneses +pedogenesis +pedogenetic +pedogenic +pedologic +pedological +pedologies +pedologist +pedologists +pedology +pedometer +pedometers +pedophile +pedophiles +pedophilia +pedophiliac +pedophilias +pedophilic +pedro +pedros +peds +peduncle +peduncled +peduncles +peduncular +pedunculate +pedunculated +pee +peebeen +peebeens +peed +peeing +peek +peekaboo +peekaboos +peeked +peeking +peeks +peel +peelable +peeled +peeler +peelers +peeling +peelings +peels +peen +peened +peening +peens +peep +peeped +peeper +peepers +peephole +peepholes +peeping +peeps +peepshow +peepshows +peepul +peepuls +peer +peerage +peerages +peered +peeress +peeresses +peerie +peeries +peering +peerless +peerlessly +peers +peery +pees +peesweep +peesweeps +peetweet +peetweets +peeve +peeved +peeves +peeving +peevish +peevishly +peevishness +peevishnesses +peewee +peewees +peewit +peewits +peg +pegboard +pegboards +pegbox +pegboxes +pegged +pegging +pegless +peglike +pegmatite +pegmatites +pegmatitic +pegs +peh +pehs +peignoir +peignoirs +pein +peined +peining +peins +peise +peised +peises +peising +pejorative +pejoratively +pejoratives +pekan +pekans +peke +pekes +pekin +pekins +pekoe +pekoes +pelage +pelages +pelagial +pelagic +pelargonium +pelargoniums +pele +pelecypod +pelecypods +pelerine +pelerines +peles +pelf +pelfs +pelican +pelicans +pelisse +pelisses +pelite +pelites +pelitic +pellagra +pellagras +pellagrin +pellagrins +pellagrous +pellet +pelletal +pelleted +pelleting +pelletise +pelletised +pelletises +pelletising +pelletization +pelletizations +pelletize +pelletized +pelletizer +pelletizers +pelletizes +pelletizing +pellets +pellicle +pellicles +pellitories +pellitory +pellmell +pellmells +pellucid +pellucidly +pelmet +pelmets +pelon +peloria +pelorian +pelorias +peloric +pelorus +peloruses +pelota +pelotas +pelt +peltast +peltasts +peltate +pelted +pelter +peltered +peltering +pelters +pelting +peltries +peltry +pelts +pelves +pelvic +pelvics +pelvis +pelvises +pelycosaur +pelycosaurs +pembina +pembinas +pemican +pemicans +pemmican +pemmicans +pemoline +pemolines +pemphigus +pemphiguses +pemphix +pemphixes pen +penal +penalise +penalised +penalises +penalising +penalities +penality +penalization +penalizations +penalize +penalized +penalizes +penalizing +penally +penalties +penalty +penance +penanced +penances +penancing +penang +penangs +penates pence +pencel +pencels +penchant +penchants pencil +penciled +penciler +pencilers +penciling +pencilings +pencilled +pencilling +pencillings +pencils +pend +pendant +pendants +pended +pendencies +pendency +pendent +pendentive +pendentives +pendents +pending +pends +pendular +pendulous +pendulousness +pendulousnesses +pendulum +pendulums +peneplain +peneplains +peneplane +peneplanes +penes +penetrabilities +penetrability +penetrable +penetralia +penetrance +penetrances +penetrant +penetrants +penetrate +penetrated +penetrates +penetrating +penetratingly +penetration +penetrations +penetrative +penetrometer +penetrometers +pengo +pengos +penguin +penguins +penholder +penholders +penial +penicil +penicillamine +penicillamines +penicillate +penicillia +penicillin +penicillinase +penicillinases +penicillins +penicillium +penicils +penile +peninsula +peninsular +peninsulas +penis +penises +penitence +penitences +penitent +penitential +penitentially +penitentiaries +penitentiary +penitently +penitents +penknife +penknives +penlight +penlights +penlite +penlites +penman +penmanship +penmanships +penmen +penna +pennae +penname +pennames +pennant +pennants +pennate +pennated +penne +penned +penner +penners +penni +pennia +pennies +penniless +pennine +pennines +penning +pennis +pennon +pennoncel +pennoncels +pennoned +pennons penny +pennycress +pennycresses +pennyroyal +pennyroyals +pennyweight +pennyweights +pennywhistle +pennywhistles +pennywort +pennyworth +pennyworths +pennyworts +penoche +penoches +penological +penologies +penologist +penologists +penology +penoncel +penoncels +penpoint +penpoints +pens +pensee +pensees +pensil +pensile +pensils pension +pensionable +pensionaries +pensionary +pensione +pensioned +pensioner +pensioners +pensiones +pensioning +pensionless +pensions +pensive +pensively +pensiveness +pensivenesses +penstemon +penstemons +penster +pensters +penstock +penstocks +pent +pentachlorophenol +pentachlorophenols +pentacle +pentacles +pentad +pentads +pentagon +pentagonal +pentagonally +pentagonals +pentagons +pentagram +pentagrams +pentahedra +pentahedral +pentahedron +pentahedrons +pentamerous +pentameter +pentameters +pentamidine +pentamidines +pentane +pentanes +pentangle +pentangles +pentanol +pentanols +pentapeptide +pentapeptides +pentaploid +pentaploidies +pentaploids +pentaploidy +pentarch +pentarchies +pentarchs +pentarchy +pentathlete +pentathletes +pentathlon +pentathlons +pentatonic +pentavalent +pentazocine +pentazocines +pentene +pentenes +penthouse +penthouses +pentlandite +pentlandites +pentobarbital +pentobarbitals +pentobarbitone +pentobarbitones +pentode +pentodes +pentomic +pentosan +pentosans +pentose +pentoses +pentoxide +pentoxides +pentstemon +pentstemons +pentyl +pentylenetetrazol +pentylenetetrazols +pentyls +penuche +penuches +penuchi +penuchis +penuchle +penuchles +penuckle +penuckles +penult +penultima +penultimas +penultimate +penultimately +penults +penumbra +penumbrae +penumbral +penumbras +penuries +penurious +penuriously +penuriousness +penuriousnesses +penury +peon +peonage +peonages +peones +peonies +peonism +peonisms +peons +peony people +peopled +peoplehood +peoplehoods +peopleless +peopler +peoplers +peoples +peopling +pep +peperomia +peperomias +peperoni +peperonis +pepla +peplos +peploses +peplum +peplumed +peplums +peplus +pepluses +pepo +peponida +peponidas +peponium +peponiums +pepos +pepped pepper +pepperbox +pepperboxes +peppercorn +peppercorns +peppered +pepperer +pepperers +peppergrass +peppergrasses +pepperiness +pepperinesses +peppering +peppermint +peppermints +pepperminty +pepperoni +pepperonis +peppers +peppertree +peppertrees +peppery +peppier +peppiest +peppily +peppiness +peppinesses +pepping +peppy +peps +pepsin +pepsine +pepsines +pepsinogen +pepsinogens +pepsins +peptic +peptics +peptid +peptidase +peptidases +peptide +peptides +peptidic +peptidoglycan +peptidoglycans +peptids +peptize +peptized +peptizer +peptizers +peptizes +peptizing +peptone +peptones +peptonic per +peracid +peracids +peradventure +peradventures +perambulate +perambulated +perambulates +perambulating +perambulation +perambulations +perambulator +perambulators +perambulatory +perborate +perborates +percale +percales +percaline +percalines +perceivable +perceivably +perceive +perceived +perceiver +perceivers +perceives +perceiving percent percentage +percentages +percentile +percentiles +percents +percept +perceptibilities +perceptibility +perceptible +perceptibly +perception +perceptional +perceptions +perceptive +perceptively +perceptiveness +perceptivenesses +perceptivities +perceptivity +percepts +perceptual +perceptually +perch +perchance +perched +percher +perchers +perches +perching +perchlorate +perchlorates +perchloroethylene +perchloroethylenes +percipience +percipiences +percipient +percipiently +percipients +percoid +percoids +percolate +percolated +percolates +percolating +percolation +percolations +percolator +percolators +percuss +percussed +percusses +percussing +percussion +percussionist +percussionists +percussions +percussive +percussively +percussiveness +percussivenesses +percutaneous +percutaneously +perdie +perdition +perditions +perdu +perdue +perdues +perdurabilities +perdurability +perdurable +perdurably +perdure +perdured +perdures +perduring +perdus +perdy +perea +peregrin +peregrinate +peregrinated +peregrinates +peregrinating +peregrination +peregrinations +peregrine +peregrines +peregrins +pereia +pereion +pereiopod +pereiopods +peremptorily +peremptoriness +peremptorinesses +peremptory +perennate +perennated +perennates +perennating +perennation +perennations +perennial +perennially +perennials +pereon +pereopod +pereopods +perestroika +perestroikas perfect +perfecta +perfectas +perfected +perfecter +perfecters +perfectest +perfectibilities +perfectibility +perfectible +perfecting +perfection +perfectionism +perfectionisms +perfectionist +perfectionistic +perfectionists +perfections +perfective +perfectively +perfectiveness +perfectivenesses +perfectives +perfectivities +perfectivity +perfectly +perfectness +perfectnesses +perfecto +perfectos +perfects +perfervid +perfidies +perfidious +perfidiously +perfidiousness +perfidiousnesses +perfidy +perfoliate +perforate +perforated +perforates +perforating +perforation +perforations +perforator +perforators +perforce perform +performabilities +performability +performable performance +performances +performative +performatives +performatory +performed performer +performers +performing +performs perfume +perfumed +perfumer +perfumeries +perfumers +perfumery +perfumes +perfuming +perfunctorily +perfunctoriness +perfunctorinesses +perfunctory +perfusate +perfusates +perfuse +perfused +perfuses +perfusing +perfusion +perfusionist +perfusionists +perfusions +pergola +pergolas perhaps +perhapses +peri +perianth +perianths +periapt +periapts +periblem +periblems +pericardia +pericardial +pericarditides +pericarditis +pericardium +pericarp +pericarps +perichondral +perichondria +perichondrium +pericopae +pericope +pericopes +pericrania +pericranial +pericranium +pericycle +pericycles +pericyclic +periderm +periderms +peridia +peridial +peridium +peridot +peridotic +peridotite +peridotites +peridotitic +peridots +perigeal +perigean +perigee +perigees +perigon +perigons +perigynies +perigynous +perigyny +perihelia +perihelial +perihelion +perikarya +perikaryal +perikaryon +peril +periled +periling +perilla +perillas +perilled +perilling +perilous +perilously +perilousness +perilousnesses +perils +perilune +perilunes +perilymph +perilymphs +perimeter +perimeters +perimysia +perimysium +perinatal +perinatally +perinea +perineal +perineum +perineuria +perineurium period +periodic +periodical +periodically +periodicals +periodicities +periodicity +periodid +periodids +periodization +periodizations +periodontal +periodontally +periodontics +periodontist +periodontists +periodontologies +periodontology +periods +perionychia +perionychium +periostea +periosteal +periosteum +periostites +periostitides +periostitis +periostitises +periotic +peripatetic +peripatetically +peripatetics +peripatus +peripatuses +peripeteia +peripeteias +peripeties +peripety +peripheral +peripherally +peripherals +peripheries +periphery +periphrases +periphrasis +periphrastic +periphrastically +periphytic +periphyton +periphytons +periplast +periplasts +peripter +peripters +perique +periques +peris +perisarc +perisarcs +periscope +periscopes +periscopic +perish +perishabilities +perishability +perishable +perishables +perished +perishes +perishing +perissodactyl +perissodactyls +peristalses +peristalsis +peristaltic +peristome +peristomes +peristomial +peristyle +peristyles +perithecia +perithecial +perithecium +peritonea +peritoneal +peritoneally +peritoneum +peritoneums +peritonites +peritonitides +peritonitis +peritonitises +peritrichous +peritrichously +periwig +periwigged +periwigs +periwinkle +periwinkles +perjure +perjured +perjurer +perjurers +perjures +perjuries +perjuring +perjurious +perjuriously +perjury +perk +perked +perkier +perkiest +perkily +perkiness +perkinesses +perking +perkish +perks +perky +perlite +perlites +perlitic +perm +permafrost +permafrosts +permanence +permanences +permanencies +permanency permanent +permanently +permanentness +permanentnesses +permanents +permanganate +permanganates +permeabilities +permeability +permeable +permeant +permease +permeases +permeate +permeated +permeates +permeating +permeation +permeations +permeative +permed +permethrin +permethrins +permillage +permillages +perming +permissibilities +permissibility +permissible +permissibleness +permissiblenesses +permissibly permission +permissions +permissive +permissively +permissiveness +permissivenesses permit +permits +permitted +permittee +permittees +permitter +permitters +permitting +permittivities +permittivity +perms +permutable +permutation +permutational +permutations +permute +permuted +permutes +permuting +pernicious +perniciously +perniciousness +perniciousnesses +pernickety +peroneal +peroral +perorally +perorate +perorated +perorates +perorating +peroration +perorational +perorations +perovskite +perovskites +peroxid +peroxidase +peroxidases +peroxide +peroxided +peroxides +peroxidic +peroxiding +peroxids +peroxisomal +peroxisome +peroxisomes +peroxy +perpend +perpended +perpendicular +perpendicularities +perpendicularity +perpendicularly +perpendiculars +perpending +perpends +perpent +perpents +perpetrate +perpetrated +perpetrates +perpetrating +perpetration +perpetrations +perpetrator +perpetrators +perpetual +perpetually +perpetuate +perpetuated +perpetuates +perpetuating +perpetuation +perpetuations +perpetuator +perpetuators +perpetuities +perpetuity +perphenazine +perphenazines +perplex +perplexed +perplexedly +perplexes +perplexing +perplexities +perplexity +perquisite +perquisites +perries +perron +perrons +perry +persalt +persalts +perse +persecute +persecuted +persecutee +persecutees +persecutes +persecuting +persecution +persecutions +persecutive +persecutor +persecutors +persecutory +perses +perseverance +perseverances +perseverate +perseverated +perseverates +perseverating +perseveration +perseverations +persevere +persevered +perseveres +persevering +perseveringly +persiflage +persiflages +persimmon +persimmons +persist +persisted +persistence +persistences +persistencies +persistency +persistent +persistently +persister +persisters +persisting +persists +persnicketiness +persnicketinesses +persnickety person +persona +personable +personableness +personablenesses +personae +personage +personages personal +personalise +personalised +personalises +personalising +personalism +personalisms +personalist +personalistic +personalists +personalities +personality +personalization +personalizations +personalize +personalized +personalizes +personalizing personally +personals +personalties +personalty +personas +personate +personated +personates +personating +personation +personations +personative +personator +personators +personhood +personhoods +personification +personifications +personified +personifier +personifiers +personifies +personify +personifying personnel +personnels +persons +perspectival +perspective +perspectively +perspectives +perspicacious +perspicaciously +perspicaciousness +perspicaciousnesses +perspicacities +perspicacity +perspicuities +perspicuity +perspicuous +perspicuously +perspicuousness +perspicuousnesses +perspiration +perspirations +perspiratory +perspire +perspired +perspires +perspiring +perspiry +persuadable persuade +persuaded +persuader +persuaders +persuades +persuading +persuasible +persuasion +persuasions +persuasive +persuasively +persuasiveness +persuasivenesses +pert +pertain +pertained +pertaining +pertains +perter +pertest +pertinacious +pertinaciously +pertinaciousness +pertinaciousnesses +pertinacities +pertinacity +pertinence +pertinences +pertinencies +pertinency +pertinent +pertinently +pertly +pertness +pertnesses +perturb +perturbable +perturbation +perturbational +perturbations +perturbed +perturbing +perturbs +pertussis +pertussises +peruke +peruked +perukes +perusal +perusals +peruse +perused +peruser +perusers +peruses +perusing +pervade +pervaded +pervader +pervaders +pervades +pervading +pervasion +pervasions +pervasive +pervasively +pervasiveness +pervasivenesses +perverse +perversely +perverseness +perversenesses +perversion +perversions +perversities +perversity +perversive +pervert +perverted +pervertedly +pervertedness +pervertednesses +perverter +perverters +perverting +perverts +pervious +perviousness +perviousnesses +pes +pesade +pesades +peseta +pesetas +pesewa +pesewas +peskier +peskiest +peskily +pesky +peso +pesos +pessaries +pessary +pessimism +pessimisms +pessimist +pessimistic +pessimistically +pessimists pest +pester +pestered +pesterer +pesterers +pestering +pesters +pesthole +pestholes +pesthouse +pesthouses +pesticide +pesticides +pestier +pestiest +pestiferous +pestiferously +pestiferousness +pestiferousnesses +pestilence +pestilences +pestilent +pestilential +pestilentially +pestilently +pestle +pestled +pestles +pestling +pesto +pestos +pests +pesty pet +petal +petaled +petaline +petalled +petallike +petalodies +petalody +petaloid +petalous +petals +petard +petards +petasos +petasoses +petasus +petasuses +petcock +petcocks +petechia +petechiae +petechial +peter +petered +petering +peters +petiolar +petiolate +petiole +petioled +petioles +petiolule +petiolules +petit +petite +petiteness +petitenesses +petites +petition +petitionary +petitioned +petitioner +petitioners +petitioning +petitions +petnap +petnapped +petnapping +petnaps +petrale +petrales +petrel +petrels +petrifaction +petrifactions +petrification +petrifications +petrified +petrifies +petrify +petrifying +petrochemical +petrochemicals +petrochemistries +petrochemistry +petrodollar +petrodollars +petrogeneses +petrogenesis +petrogenetic +petroglyph +petroglyphs +petrographer +petrographers +petrographic +petrographical +petrographically +petrographies +petrography petrol +petrolatum +petrolatums +petroleum +petroleums +petrolic +petrologic +petrological +petrologically +petrologies +petrologist +petrologists +petrology +petrols +petronel +petronels +petrosal +petrous +pets +petsai +petsais +petted +pettedly +petter +petters +petti +petticoat +petticoated +petticoats +pettier +pettiest +pettifog +pettifogged +pettifogger +pettifoggeries +pettifoggers +pettifoggery +pettifogging +pettifoggings +pettifogs +pettily +pettiness +pettinesses +petting +pettings +pettish +pettishly +pettishness +pettishnesses +pettitoes +pettle +pettled +pettles +pettling +petto +petty +petulance +petulances +petulancies +petulancy +petulant +petulantly +petunia +petunias +petuntse +petuntses +petuntze +petuntzes +pew +pewee +pewees +pewholder +pewholders +pewit +pewits +pews +pewter +pewterer +pewterers +pewters +peyote +peyotes +peyotl +peyotls +peytral +peytrals +peytrel +peytrels +pfennig +pfennige +pfennigs +pfft +pfui +phaeton +phaetons +phage +phages +phagocyte +phagocytes +phagocytic +phagocytize +phagocytized +phagocytizes +phagocytizing +phagocytose +phagocytosed +phagocytoses +phagocytosing +phagocytosis +phagocytotic +phalange +phalangeal +phalanger +phalangers +phalanges +phalansteries +phalanstery +phalanx +phalanxes +phalarope +phalaropes +phalli +phallic +phallically +phallicism +phallicisms +phallism +phallisms +phallist +phallists +phallocentric +phallus +phalluses +phanerogam +phanerogams +phanerophyte +phanerophytes +phantasied +phantasies +phantasm +phantasma +phantasmagoria +phantasmagorias +phantasmagoric +phantasmagorical +phantasmal +phantasmata +phantasmic +phantasms +phantast +phantasts +phantasy +phantasying +phantom +phantomlike +phantoms +pharaoh +pharaohs +pharaonic +pharisaic +pharisaical +pharisaically +pharisaicalness +pharisaicalnesses +pharisaism +pharisaisms +pharisee +pharisees +pharmaceutical +pharmaceutically +pharmaceuticals +pharmacies +pharmacist +pharmacists +pharmacodynamic +pharmacodynamically +pharmacodynamics +pharmacognosies +pharmacognostic +pharmacognostical +pharmacognosy +pharmacokinetic +pharmacokinetics +pharmacologic +pharmacological +pharmacologically +pharmacologies +pharmacologist +pharmacologists +pharmacology +pharmacopeia +pharmacopeial +pharmacopeias +pharmacopoeia +pharmacopoeial +pharmacopoeias +pharmacotherapies +pharmacotherapy +pharmacy +pharos +pharoses +pharyngeal +pharynges +pharyngitides +pharyngitis +pharynx +pharynxes +phase +phaseal +phased +phasedown +phasedowns +phaseout +phaseouts +phases +phasic +phasing +phasis +phasmid +phasmids +phat +phatic +phatically +pheasant +pheasants +phellem +phellems +phelloderm +phelloderms +phellogen +phellogens +phelonia +phelonion +phelonions +phenacaine +phenacaines +phenacetin +phenacetins +phenacite +phenacites +phenakite +phenakites +phenanthrene +phenanthrenes +phenate +phenates +phenazin +phenazine +phenazines +phenazins +phencyclidine +phencyclidines +phenetic +pheneticist +pheneticists +phenetics +phenetol +phenetols +phenix +phenixes +phenmetrazine +phenmetrazines +phenobarbital +phenobarbitals +phenobarbitone +phenobarbitones +phenocopies +phenocopy +phenocryst +phenocrystic +phenocrysts +phenol +phenolate +phenolated +phenolates +phenolic +phenolics +phenological +phenologically +phenologies +phenology +phenolphthalein +phenolphthaleins +phenols +phenom +phenomena +phenomenal +phenomenalism +phenomenalisms +phenomenalist +phenomenalistic +phenomenalistically +phenomenalists +phenomenally +phenomenas +phenomenological +phenomenologically +phenomenologies +phenomenologist +phenomenologists +phenomenology phenomenon +phenomenons +phenoms +phenothiazine +phenothiazines +phenotype +phenotypes +phenotypic +phenotypical +phenotypically +phenoxide +phenoxides +phenoxy +phentolamine +phentolamines +phenyl +phenylalanine +phenylalanines +phenylbutazone +phenylbutazones +phenylephrine +phenylephrines +phenylethylamine +phenylethylamines +phenylic +phenylketonuria +phenylketonurias +phenylketonuric +phenylketonurics +phenylpropanolamine +phenylpropanolamines +phenyls +phenylthiocarbamide +phenylthiocarbamides +phenylthiourea +phenylthioureas +phenytoin +phenytoins +pheochromocytoma +pheochromocytomas +pheochromocytomata +pheromonal +pheromone +pheromones +phew +phi +phial +phials +philabeg +philabegs +philadelphus +philadelphuses +philander +philandered +philanderer +philanderers +philandering +philanders +philanthropic +philanthropical +philanthropically +philanthropies +philanthropist +philanthropists +philanthropoid +philanthropoids +philanthropy +philatelic +philatelically +philatelies +philatelist +philatelists +philately +philharmonic +philharmonics +philhellene +philhellenes +philhellenic +philhellenism +philhellenisms +philhellenist +philhellenists +philibeg +philibegs +philippic +philippics +philistia +philistine +philistines +philistinism +philistinisms +phillumenist +phillumenists +philodendra +philodendron +philodendrons +philological +philologically +philologies +philologist +philologists +philology +philomel +philomels +philoprogenitive +philoprogenitiveness +philoprogenitivenesses +philosophe +philosopher +philosophers +philosophes +philosophic +philosophical +philosophically +philosophies +philosophise +philosophised +philosophises +philosophising +philosophize +philosophized +philosophizer +philosophizers +philosophizes +philosophizing +philosophy +philter +philtered +philtering +philters +philtra +philtre +philtred +philtres +philtring +philtrum +phimoses +phimosis +phimotic +phis +phiz +phizes +phlebitides +phlebitis +phlebogram +phlebograms +phlebographic +phlebographies +phlebography +phlebologies +phlebology +phlebotomies +phlebotomist +phlebotomists +phlebotomy +phlegm +phlegmatic +phlegmatically +phlegmier +phlegmiest +phlegms +phlegmy +phloem +phloems +phlogistic +phlogiston +phlogistons +phlogopite +phlogopites +phlox +phloxes +phobia +phobias +phobic +phobics +phocine +phoebe +phoebes +phoebus +phoebuses +phoenix +phoenixes +phoenixlike +phon +phonal +phonate +phonated +phonates +phonating +phonation +phonations +phone +phoned +phonematic +phoneme +phonemes +phonemic +phonemically +phonemicist +phonemicists +phonemics +phones +phonetic +phonetically +phonetician +phoneticians +phonetics +phoney +phoneyed +phoneying +phoneys +phonic +phonically +phonics +phonied +phonier +phonies +phoniest +phonily +phoniness +phoninesses +phoning +phono +phonocardiogram +phonocardiograms +phonocardiograph +phonocardiographic +phonocardiographies +phonocardiographs +phonocardiography +phonogram +phonogramic +phonogramically +phonogrammic +phonogrammically +phonograms +phonograph +phonographer +phonographers +phonographic +phonographically +phonographies +phonographs +phonography +phonolite +phonolites +phonologic +phonological +phonologically +phonologies +phonologist +phonologists +phonology +phonon +phonons +phonos +phonotactic +phonotactics +phons +phony +phonying +phooey +phorate +phorates +phoronid +phoronids +phosgene +phosgenes +phosphatase +phosphatases +phosphate +phosphates +phosphatic +phosphatide +phosphatides +phosphatidic +phosphatidyl +phosphatidylcholine +phosphatidylcholines +phosphatidylethanolamine +phosphatidylethanolamines +phosphatidyls +phosphatization +phosphatizations +phosphatize +phosphatized +phosphatizes +phosphatizing +phosphaturia +phosphaturias +phosphene +phosphenes +phosphid +phosphide +phosphides +phosphids +phosphin +phosphine +phosphines +phosphins +phosphite +phosphites +phosphocreatine +phosphocreatines +phosphodiesterase +phosphodiesterases +phosphoenolpyruvate +phosphoenolpyruvates +phosphofructokinase +phosphofructokinases +phosphoglucomutase +phosphoglucomutases +phosphoglyceraldehyde +phosphoglyceraldehydes +phosphoglycerate +phosphoglycerates +phosphokinase +phosphokinases +phospholipase +phospholipases +phospholipid +phospholipids +phosphomonoesterase +phosphomonoesterases +phosphonium +phosphoniums +phosphoprotein +phosphoproteins +phosphor +phosphore +phosphores +phosphoresce +phosphoresced +phosphorescence +phosphorescences +phosphorescent +phosphorescently +phosphoresces +phosphorescing +phosphoric +phosphorite +phosphorites +phosphoritic +phosphorolyses +phosphorolysis +phosphorolytic +phosphorous +phosphors +phosphorus +phosphoruses +phosphoryl +phosphorylase +phosphorylases +phosphorylate +phosphorylated +phosphorylates +phosphorylating +phosphorylation +phosphorylations +phosphorylative +phosphoryls +phot +photic +photically +photics photo +photoautotroph +photoautotrophic +photoautotrophically +photoautotrophs +photobiologic +photobiological +photobiologies +photobiologist +photobiologists +photobiology +photocathode +photocathodes +photocell +photocells +photochemical +photochemically +photochemist +photochemistries +photochemistry +photochemists +photochromic +photochromism +photochromisms +photocoagulation +photocoagulations +photocompose +photocomposed +photocomposer +photocomposers +photocomposes +photocomposing +photocomposition +photocompositions +photoconductive +photoconductivities +photoconductivity +photocopied +photocopier +photocopiers +photocopies +photocopy +photocopying +photocurrent +photocurrents +photodecomposition +photodecompositions +photodegradable +photodetector +photodetectors +photodiode +photodiodes +photodisintegrate +photodisintegrated +photodisintegrates +photodisintegrating +photodisintegration +photodisintegrations +photodissociate +photodissociated +photodissociates +photodissociating +photodissociation +photodissociations +photoduplicate +photoduplicated +photoduplicates +photoduplicating +photoduplication +photoduplications +photodynamic +photodynamically +photoed +photoelectric +photoelectrically +photoelectron +photoelectronic +photoelectrons +photoemission +photoemissions +photoemissive +photoengrave +photoengraved +photoengraver +photoengravers +photoengraves +photoengraving +photoengravings +photoexcitation +photoexcitations +photoexcited +photofinisher +photofinishers +photofinishing +photofinishings +photoflash +photoflashes +photoflood +photofloods +photofluorographies +photofluorography +photog +photogenic +photogenically +photogeologic +photogeological +photogeologies +photogeologist +photogeologists +photogeology +photogram +photogrammetric +photogrammetries +photogrammetrist +photogrammetrists +photogrammetry +photograms photograph +photographed photographer +photographers +photographic +photographically +photographies +photographing +photographs +photography +photogravure +photogravures +photogs +photoinduced +photoinduction +photoinductions +photoinductive +photoing +photointerpretation +photointerpretations +photointerpreter +photointerpreters +photoionization +photoionizations +photoionize +photoionized +photoionizes +photoionizing +photojournalism +photojournalisms +photojournalist +photojournalistic +photojournalists +photokineses +photokinesis +photokinetic +photolithograph +photolithographed +photolithographic +photolithographically +photolithographies +photolithographing +photolithographs +photolithography +photolyses +photolysis +photolytic +photolytically +photolyzable +photolyze +photolyzed +photolyzes +photolyzing +photomap +photomapped +photomapping +photomaps +photomask +photomasks +photomechanical +photomechanically +photometer +photometers +photometric +photometrically +photometries +photometry +photomicrograph +photomicrographic +photomicrographies +photomicrographs +photomicrography +photomontage +photomontages +photomorphogeneses +photomorphogenesis +photomorphogenic +photomosaic +photomosaics +photomultiplier +photomultipliers +photomural +photomurals +photon +photonegative +photonic +photonics +photons +photonuclear +photooxidation +photooxidations +photooxidative +photooxidize +photooxidized +photooxidizes +photooxidizing +photoperiod +photoperiodic +photoperiodically +photoperiodism +photoperiodisms +photoperiods +photophase +photophases +photophobia +photophobias +photophobic +photophore +photophores +photophosphorylation +photophosphorylations +photopia +photopias +photopic +photoplay +photoplays +photopolarimeter +photopolarimeters +photopolymer +photopolymers +photopositive +photoproduct +photoproduction +photoproductions +photoproducts +photoreaction +photoreactions +photoreactivating +photoreactivation +photoreactivations +photoreception +photoreceptions +photoreceptive +photoreceptor +photoreceptors +photoreconnaissance +photoreconnaissances +photoreduce +photoreduced +photoreduces +photoreducing +photoreduction +photoreductions +photoreproduction +photoreproductions +photoresist +photoresists +photorespiration +photorespirations +photos +photosensitive +photosensitivities +photosensitivity +photosensitization +photosensitizations +photosensitize +photosensitized +photosensitizer +photosensitizers +photosensitizes +photosensitizing +photoset +photosets +photosetter +photosetters +photosetting +photosphere +photospheres +photospheric +photostat +photostated +photostatic +photostating +photostats +photostatted +photostatting +photosynthate +photosynthates +photosyntheses +photosynthesis +photosynthesize +photosynthesized +photosynthesizes +photosynthesizing +photosynthetic +photosynthetically +photosystem +photosystems +phototactic +phototactically +phototaxes +phototaxis +phototelegraphies +phototelegraphy +phototoxic +phototoxicities +phototoxicity +phototropic +phototropically +phototropism +phototropisms +phototube +phototubes +phototypesetter +phototypesetters +phototypesetting +phototypesettings +photovoltaic +photovoltaics +phots +phpht +phragmoplast +phragmoplasts +phrasal +phrasally phrase +phrased +phrasemaker +phrasemakers +phrasemaking +phrasemakings +phrasemonger +phrasemongering +phrasemongerings +phrasemongers +phraseological +phraseologies +phraseologist +phraseologists +phraseology +phrases +phrasing +phrasings +phratral +phratric +phratries +phratry +phreatic +phreatophyte +phreatophytes +phreatophytic +phrenetic +phrenic +phrenological +phrenologies +phrenologist +phrenologists +phrenology +phrensied +phrensies +phrensy +phrensying +pht +phthalic +phthalin +phthalins +phthalocyanine +phthalocyanines +phthises +phthisic +phthisical +phthisics +phthisis +phut +phuts +phycocyanin +phycocyanins +phycoerythrin +phycoerythrins +phycological +phycologies +phycologist +phycologists +phycology +phycomycete +phycomycetes +phycomycetous +phyla +phylacteries +phylactery +phylae +phylar +phylaxis +phylaxises +phyle +phyleses +phylesis +phylesises +phyletic +phyletically +phylic +phyllaries +phyllary +phyllite +phyllites +phyllo +phylloclade +phylloclades +phyllode +phyllodes +phyllodia +phyllodium +phylloid +phylloids +phyllome +phyllomes +phyllos +phyllotactic +phyllotaxes +phyllotaxies +phyllotaxis +phyllotaxy +phylloxera +phylloxerae +phylloxeras +phylogenetic +phylogenetically +phylogenies +phylogeny +phylon +phylum +physed +physeds +physes +physiatrist +physiatrists +physic physical +physicalism +physicalisms +physicalist +physicalistic +physicalists +physicalities +physicality +physically +physicalness +physicalnesses +physicals physician +physicians physicist +physicists +physicked +physicking +physicochemical +physicochemically physics +physiocratic +physiognomic +physiognomical +physiognomically +physiognomies +physiognomy +physiographer +physiographers +physiographic +physiographical +physiographies +physiography +physiologic +physiological +physiologically +physiologies +physiologist +physiologists +physiology +physiopathologic +physiopathological +physiopathologies +physiopathology +physiotherapies +physiotherapist +physiotherapists +physiotherapy +physique +physiques +physis +physostigmine +physostigmines +phytane +phytanes +phytoalexin +phytoalexins +phytochemical +phytochemically +phytochemist +phytochemistries +phytochemistry +phytochemists +phytochrome +phytochromes +phytoflagellate +phytoflagellates +phytogeographer +phytogeographers +phytogeographic +phytogeographical +phytogeographically +phytogeographies +phytogeography +phytohemagglutinin +phytohemagglutinins +phytohormone +phytohormones +phytoid +phytol +phytols +phyton +phytonic +phytons +phytopathogen +phytopathogenic +phytopathogens +phytopathological +phytopathologies +phytopathology +phytophagous +phytoplankter +phytoplankters +phytoplankton +phytoplanktonic +phytoplanktons +phytosociological +phytosociologies +phytosociology +phytosterol +phytosterols +phytotoxic +phytotoxicities +phytotoxicity +pi +pia +piacular +piaffe +piaffed +piaffer +piaffers +piaffes +piaffing +pial +pian +pianic +pianism +pianisms +pianissimi +pianissimo +pianissimos pianist +pianistic +pianistically +pianists piano +pianoforte +pianofortes +pianos +pians +pias +piasaba +piasabas +piasava +piasavas +piassaba +piassabas +piassava +piassavas +piaster +piasters +piastre +piastres +piazza +piazzas +piazze +pibal +pibals +pibroch +pibrochs +pic +pica +picacho +picachos +picador +picadores +picadors +pical +picaninnies +picaninny +picara +picaras +picaresque +picaresques +picaro +picaroon +picarooned +picarooning +picaroons +picaros +picas +picayune +picayunes +picayunish +piccalilli +piccalillis +piccolo +piccoloist +piccoloists +piccolos +pice +piceous +piciform pick +pickaback +pickabacked +pickabacking +pickabacks +pickadil +pickadils +pickaninnies +pickaninny +pickaroon +pickaroons +pickax +pickaxe +pickaxed +pickaxes +pickaxing +picked +pickeer +pickeered +pickeering +pickeers +picker +pickerel +pickerels +pickerelweed +pickerelweeds +pickers +picket +picketboat +picketboats +picketed +picketer +picketers +picketing +pickets +pickier +pickiest +picking +pickings +pickle +pickled +pickles +pickling +picklock +picklocks +pickoff +pickoffs +pickpocket +pickpockets +pickproof +picks +pickthank +pickthanks +pickup +pickups +pickwick +pickwicks +picky +picloram +piclorams picnic +picnicked +picnicker +picnickers +picnicking +picnicky +picnics +picofarad +picofarads +picogram +picograms +picolin +picoline +picolines +picolins +picomole +picomoles +picornavirus +picornaviruses +picosecond +picoseconds +picot +picoted +picotee +picotees +picoting +picots +picquet +picquets +picrate +picrated +picrates +picric +picrite +picrites +picritic +picrotoxin +picrotoxins +pics +pictogram +pictograms +pictograph +pictographic +pictographies +pictographs +pictography +pictorial +pictorialism +pictorialisms +pictorialist +pictorialists +pictorialization +pictorializations +pictorialize +pictorialized +pictorializes +pictorializing +pictorially +pictorialness +pictorialnesses +pictorials picture +pictured +picturephone +picturephones +pictures +picturesque +picturesquely +picturesqueness +picturesquenesses +picturing +picturization +picturizations +picturize +picturized +picturizes +picturizing +picul +piculs +piddle +piddled +piddler +piddlers +piddles +piddling +piddly +piddock +piddocks +pidgin +pidginization +pidginizations +pidginize +pidginized +pidginizes +pidginizing +pidgins pie +piebald +piebalds piece +pieced +piecemeal +piecer +piecers +pieces +piecewise +piecework +pieceworker +pieceworkers +pieceworks +piecing +piecings +piecrust +piecrusts +pied +piedfort +piedforts +piedmont +piedmonts +piefort +pieforts +pieing +pieplant +pieplants +pier +pierce +pierced +piercer +piercers +pierces +piercing +piercingly +pierogi +pierogies +pierrot +pierrots +piers +pies +pieta +pietas +pieties +pietism +pietisms +pietist +pietistic +pietistically +pietists +piety +piezoelectric +piezoelectrically +piezoelectricities +piezoelectricity +piezometer +piezometers +piezometric +piffle +piffled +piffles +piffling pig +pigboat +pigboats +pigeon +pigeonhole +pigeonholed +pigeonholer +pigeonholers +pigeonholes +pigeonholing +pigeonite +pigeonites +pigeons +pigeonwing +pigeonwings +pigfish +pigfishes +pigged +piggeries +piggery +piggie +piggier +piggies +piggiest +piggin +pigging +piggins +piggish +piggishly +piggishness +piggishnesses +piggy +piggyback +piggybacked +piggybacking +piggybacks +pigheaded +pigheadedly +pigheadedness +pigheadednesses +piglet +piglets +piglike +pigment +pigmentary +pigmentation +pigmentations +pigmented +pigmenting +pigments +pigmies +pigmy +pignoli +pignolia +pignolias +pignolis +pignora +pignus +pignut +pignuts +pigout +pigouts +pigpen +pigpens +pigs +pigskin +pigskins +pigsney +pigsneys +pigstick +pigsticked +pigsticker +pigstickers +pigsticking +pigsticks +pigsties +pigsty +pigtail +pigtailed +pigtails +pigweed +pigweeds +piing +pika +pikake +pikakes +pikas +pike +piked +pikeman +pikemen +piker +pikers +pikes +pikestaff +pikestaffs +pikestaves +piki +piking +pikis +pilaf +pilaff +pilaffs +pilafs +pilar +pilaster +pilasters +pilau +pilaus +pilaw +pilaws +pilchard +pilchards pile +pilea +pileate +pileated +piled +pilei +pileless +pileous +piles +pileum +pileup +pileups +pileus +pilewort +pileworts +pilfer +pilferable +pilferage +pilferages +pilfered +pilferer +pilferers +pilfering +pilferproof +pilfers +pilgarlic +pilgarlics +pilgrim +pilgrimage +pilgrimaged +pilgrimages +pilgrimaging +pilgrims +pili +piliform +piling +pilings +pilis pill +pillage +pillaged +pillager +pillagers +pillages +pillaging +pillar +pillared +pillaring +pillarless +pillars +pillbox +pillboxes +pilled +pilling +pillion +pillions +pilloried +pillories +pillory +pillorying pillow +pillowcase +pillowcases +pillowed +pillowing +pillows +pillowy +pills +pilocarpine +pilocarpines +pilose +pilosities +pilosity pilot +pilotage +pilotages +piloted +pilothouse +pilothouses +piloting +pilotings +pilotless +pilots +pilous +pilsener +pilseners +pilsner +pilsners +pilular +pilule +pilules +pilus +pily +pima +pimas +pimento +pimentos +pimiento +pimientos +pimp +pimped +pimpernel +pimpernels +pimping +pimple +pimpled +pimples +pimplier +pimpliest +pimply +pimpmobile +pimpmobiles +pimps pin +pina +pinafore +pinafored +pinafores +pinang +pinangs +pinas +pinaster +pinasters +pinata +pinatas +pinball +pinballs +pinbone +pinbones +pincer +pincerlike +pincers +pinch +pinchbeck +pinchbecks +pinchbug +pinchbugs +pincheck +pinchecks +pinched +pincher +pinchers +pinches +pinching +pinchpenny +pincushion +pincushions +pinder +pinders +pindling pine +pineal +pinealectomies +pinealectomize +pinealectomized +pinealectomizes +pinealectomizing +pinealectomy +pineals pineapple -pingpong +pineapples +pinecone +pinecones +pined +pinedrops +pineland +pinelands +pinelike +pinene +pinenes +pineries +pinery +pines +pinesap +pinesaps +pineta +pinetum +pinewood +pinewoods +piney +pinfeather +pinfeathers +pinfish +pinfishes +pinfold +pinfolded +pinfolding +pinfolds +ping +pinged +pinger +pingers +pinging +pingo +pingos +pingrass +pingrasses +pings +pinguid +pinhead +pinheaded +pinheadedness +pinheadednesses +pinheads +pinhole +pinholes +pinier +piniest +pining +pinion +pinioned +pinioning +pinions +pinite +pinites +pinitol +pinitols pink +pinked +pinken +pinkened +pinkening +pinkens +pinker +pinkers +pinkest +pinkey +pinkeye +pinkeyes +pinkeys +pinkie +pinkies +pinking +pinkings +pinkish +pinkishness +pinkishnesses +pinkly +pinkness +pinknesses +pinko +pinkoes +pinkos +pinkroot +pinkroots +pinks +pinky +pinna +pinnace +pinnaces +pinnacle +pinnacled +pinnacles +pinnacling +pinnae +pinnal +pinnas +pinnate +pinnated +pinnately +pinnatifid +pinned +pinner +pinners +pinnies +pinning +pinniped +pinnipeds +pinnula +pinnulae +pinnular +pinnule +pinnules +pinny +pinochle +pinochles +pinocle +pinocles +pinocytic +pinocytoses +pinocytosis +pinocytotic +pinocytotically +pinole +pinoles +pinon +pinones +pinons +pinot +pinots +pinpoint +pinpointed +pinpointing +pinpoints +pinprick +pinpricked +pinpricking +pinpricks +pins +pinscher +pinschers +pinsetter +pinsetters +pinspotter +pinspotters +pinstripe +pinstriped +pinstripes pint +pinta +pintada +pintadas +pintado +pintadoes +pintados +pintail +pintails +pintano +pintanos +pintas +pintle +pintles +pinto +pintoes +pintos +pints +pintsize +pinup +pinups +pinwale +pinwales +pinweed +pinweeds +pinwheel +pinwheeled +pinwheeling +pinwheels +pinwork +pinworks +pinworm +pinworms +piny +pinyin +pinyon +pinyons +piolet +piolets +pion pioneer +pioneered +pioneering +pioneers +pionic +pions +piosities +piosity +pious +piously +piousness +piousnesses +pip +pipage +pipages +pipal +pipals pipe +pipeage +pipeages +piped +pipefish +pipefishes +pipeful +pipefuls +pipeless +pipelike +pipeline +pipelined +pipelines +pipelining +piper +piperazine +piperazines +piperidine +piperidines +piperine +piperines +piperonal +piperonals +pipers +pipes +pipestem +pipestems +pipestone +pipestones +pipet +pipets +pipette +pipetted +pipettes +pipetting +pipier +pipiest +pipiness +pipinesses +piping +pipingly +pipings +pipit +pipits +pipkin +pipkins +pipped +pippin +pipping +pippins +pips +pipsissewa +pipsissewas +pipsqueak +pipsqueaks +pipy +piquance +piquances +piquancies +piquancy +piquant +piquantly +piquantness +piquantnesses +pique +piqued +piques +piquet +piquets +piquing +piracies +piracy +piragua +piraguas +pirana +piranas +piranha +piranhas +pirarucu +pirarucus +pirate +pirated +pirates +piratic +piratical +piratically +pirating +piraya +pirayas +piriform +pirn +pirns +pirog +pirogen +piroghi +pirogi +pirogies +pirogue +pirogues +pirojki +piroplasm +piroplasma +piroplasmata +piroplasms +piroque +piroques +piroshki +pirouette +pirouetted +pirouettes +pirouetting +pirozhki +pirozhok +pis +piscaries +piscary +piscator +piscatorial +piscators +piscatory +pisciculture +piscicultures +piscina +piscinae +piscinal +piscinas +piscine +piscivorous +pisco +piscos +pish +pished +pishes +pishing +pishoge +pishoges +pishogue +pishogues +pisiform +pisiforms +pismire +pismires +piso +pisolite +pisolites +pisolitic +pisos +piss +pissant +pissants +pissed +pisser +pissers +pisses +pissing +pissoir +pissoirs +pistache +pistaches +pistachio +pistachios +pistareen +pistareens +piste +pistes +pistil +pistillate +pistils +pistol +pistole +pistoled +pistoleer +pistoleers +pistoles +pistoling +pistolled +pistolling +pistols +piston +pistons +pit +pita +pitapat +pitapats +pitapatted +pitapatting +pitas +pitch +pitchblende +pitchblendes +pitched +pitcher +pitcherful +pitcherfuls +pitchers +pitchersful +pitches +pitchfork +pitchforked +pitchforking +pitchforks +pitchier +pitchiest +pitchily +pitching +pitchman +pitchmen +pitchout +pitchouts +pitchpole +pitchpoled +pitchpoles +pitchpoling +pitchwoman +pitchwomen +pitchy +piteous +piteously +piteousness +piteousnesses +pitfall +pitfalls +pith +pithead +pitheads +pithecanthropi +pithecanthropine +pithecanthropines +pithecanthropus +pithed +pithier +pithiest +pithily +pithiness +pithinesses +pithing +pithless +piths +pithy +pitiable +pitiableness +pitiablenesses +pitiably +pitied +pitier +pitiers +pities +pitiful +pitifuller +pitifullest +pitifully +pitifulness +pitifulnesses +pitiless +pitilessly +pitilessness +pitilessnesses +pitman +pitmans +pitmen +piton +pitons +pits +pitsaw +pitsaws +pittance +pittances +pitted +pitting +pittings +pittosporum +pittosporums +pituitaries +pituitary pity +pitying +pityingly +pityriases +pityriasis +piu +pivot +pivotable +pivotal +pivotally +pivoted +pivoting +pivotman +pivotmen +pivots +pix +pixel +pixels +pixes +pixie +pixieish +pixies +pixilated +pixilation +pixilations +pixillated +pixiness +pixinesses +pixy +pixyish +pizazz +pizazzes +pizazzy +pizza +pizzalike +pizzas +pizzeria +pizzerias +pizzicati +pizzicato +pizzle +pizzles +placabilities +placability +placable +placably +placard +placarded +placarding +placards +placate +placated +placater +placaters +placates +placating +placatingly +placation +placations +placative +placatory place +placeable +placebo +placeboes +placebos +placed +placeholder +placeholders +placekick +placekicked +placekicker +placekickers +placekicking +placekicks +placeless +placelessly +placeman +placemen +placement +placements +placenta +placentae +placental +placentals +placentas +placentation +placentations +placer +placers +places +placet +placets +placid +placidities +placidity +placidly +placidness +placidnesses +placing +plack +placket +plackets +placks +placoid +placoids +plafond +plafonds +plagal +plage +plages +plagiaries +plagiarise +plagiarised +plagiarises +plagiarising +plagiarism +plagiarisms +plagiarist +plagiaristic +plagiarists +plagiarize +plagiarized +plagiarizer +plagiarizers +plagiarizes +plagiarizing +plagiary +plagioclase +plagioclases +plagiotropic +plague +plagued +plaguer +plaguers +plagues +plaguey +plaguily +plaguing +plaguy +plaice +plaices +plaid +plaided +plaids plain +plainchant +plainchants +plainclothes +plainclothesman +plainclothesmen +plained +plainer +plainest +plaining +plainly +plainness +plainnesses +plains +plainsman +plainsmen +plainsong +plainsongs +plainspoken +plainspokenness +plainspokennesses +plaint +plaintext +plaintexts +plaintful +plaintiff +plaintiffs +plaintive +plaintively +plaintiveness +plaintivenesses +plaints +plaister +plaistered +plaistering +plaisters +plait +plaited +plaiter +plaiters +plaiting +plaitings +plaits plan +planar +planaria +planarian +planarians +planarias +planarities +planarity +planate +planation +planations +planch +planche +planches +planchet +planchets +planchette +planchettes plane +planed +planeload +planeloads +planer +planers +planes planet +planetaria +planetarium +planetariums +planetary +planetesimal +planetesimals +planetlike +planetoid +planetoidal +planetoids +planetological +planetologies +planetologist +planetologists +planetology +planets +planetwide +planform +planforms +plangencies +plangency +plangent +plangently +planimeter +planimeters +planimetric +planimetrically +planing +planish +planished +planisher +planishers +planishes +planishing +planisphere +planispheres +planispheric +plank +planked +planking +plankings +planks +plankter +plankters +plankton +planktonic +planktons +planless +planlessly +planlessness +planlessnesses +planned +planner +planners +planning +plannings +planographic +planographies +planography +planosol +planosols +plans plant +plantable +plantain +plantains +plantar +plantation +plantations +planted +planter +planters +plantigrade +plantigrades +planting +plantings +plantlet +plantlets +plantlike +plantocracies +plantocracy +plants +plantsman +plantsmen +planula +planulae +planular +plaque +plaques +plash +plashed +plasher +plashers +plashes +plashier +plashiest +plashing +plashy +plasm +plasma +plasmagel +plasmagels +plasmagene +plasmagenes +plasmalemma +plasmalemmas +plasmaphereses +plasmapheresis +plasmas +plasmasol +plasmasols +plasmatic +plasmic +plasmid +plasmids +plasmin +plasminogen +plasminogens +plasmins +plasmodesm +plasmodesma +plasmodesmas +plasmodesmata +plasmodesms +plasmodia +plasmodium +plasmogamies +plasmogamy +plasmoid +plasmoids +plasmolyses +plasmolysis +plasmolytic +plasmolyze +plasmolyzed +plasmolyzes +plasmolyzing +plasmon +plasmons +plasms +plaster +plasterboard +plasterboards +plastered +plasterer +plasterers +plastering +plasterings +plasters +plasterwork +plasterworks +plastery plastic +plastically +plasticene +plasticenes +plasticine +plasticines +plasticities +plasticity +plasticization +plasticizations +plasticize +plasticized +plasticizer +plasticizers +plasticizes +plasticizing +plasticky +plastics +plastid +plastidial +plastids +plastisol +plastisols +plastocyanin +plastocyanins +plastoquinone +plastoquinones +plastral +plastron +plastrons +plastrum +plastrums +plat +platan +platane +platanes +platans plate +plateau +plateaued +plateauing +plateaus +plateaux +plated +plateful +platefuls +plateglass +platelet +platelets +platelike +platemaker +platemakers +platemaking +platemakings +platen +platens +plater +plateresque +platers +plates +platesful platform +platforms +platier +platies +platiest +platina +platinas +plating +platings +platinic +platinize +platinized +platinizes +platinizing +platinocyanide +platinocyanides +platinum +platinums +platitude +platitudes +platitudinal +platitudinarian +platitudinarians +platitudinize +platitudinized +platitudinizes +platitudinizing +platitudinous +platitudinously +platonic +platonically +platoon +platooned +platooning +platoons +plats +platted +platter +platterful +platterfuls +platters +plattersful +platting +platy +platyfish +platyfishes +platyhelminth +platyhelminthic +platyhelminths +platypi +platypus +platypuses +platyrrhine +platyrrhines +platys +plaudit +plaudits +plausibilities +plausibility +plausible +plausibleness +plausiblenesses +plausibly +plausive play +playa +playabilities +playability +playable +playact +playacted +playacting +playactings +playacts +playas +playback +playbacks +playbill +playbills +playbook +playbooks +playboy +playboys +playdate +playdates +playday +playdays +playdown +playdowns +played +player +players +playfellow +playfellows +playfield +playfields +playful +playfully +playfulness +playfulnesses +playgirl +playgirls +playgoer +playgoers playground +playgrounds +playhouse +playhouses +playing +playland +playlands +playless +playlet +playlets +playlike +playlist +playlists +playmaker +playmakers +playmaking +playmakings +playmate +playmates +playoff +playoffs +playpen +playpens +playroom +playrooms +plays +playsuit +playsuits +plaything +playthings +playtime +playtimes +playwear +playwright +playwrighting +playwrightings +playwrights +playwriting +playwritings +plaza +plazas +plea +pleach +pleached +pleaches +pleaching +plead +pleadable +pleaded +pleader +pleaders +pleading +pleadingly +pleadings +pleads +pleas +pleasance +pleasances pleasant +pleasanter +pleasantest +pleasantly +pleasantness +pleasantnesses +pleasantries +pleasantry please pleased +pleaser +pleasers +pleases +pleasing +pleasingly +pleasingness +pleasingnesses +pleasurabilities +pleasurability +pleasurable +pleasurableness +pleasurablenesses +pleasurably pleasure +pleasured +pleasureless +pleasures +pleasuring +pleat +pleated +pleater +pleaters +pleating +pleatless +pleats +pleb +plebe +plebeian +plebeianism +plebeianisms +plebeianly +plebeians +plebes +plebiscitary +plebiscite +plebiscites +plebs +plecopteran +plecopterans +plectra +plectron +plectrons +plectrum +plectrums +pled +pledge +pledged +pledgee +pledgees +pledgeor +pledgeors +pledger +pledgers +pledges +pledget +pledgets +pledging +pledgor +pledgors +pleiad +pleiades +pleiads +pleinairism +pleinairisms +pleinairist +pleinairists +pleiotropic +pleiotropies +pleiotropy +plena +plenary +plench +plenches +plenipotent +plenipotentiaries +plenipotentiary +plenish +plenished +plenishes +plenishing +plenism +plenisms +plenist +plenists +plenitude +plenitudes +plenitudinous +plenteous +plenteously +plenteousness +plenteousnesses +plenties +plentiful +plentifully +plentifulness +plentifulnesses +plentitude +plentitudes plenty +plenum +plenums +pleochroic +pleochroism +pleochroisms +pleomorphic +pleomorphism +pleomorphisms +pleonasm +pleonasms +pleonastic +pleonastically +pleopod +pleopods +plerocercoid +plerocercoids +plesiosaur +plesiosaurs +plessor +plessors +plethora +plethoras +plethoric +plethysmogram +plethysmograms +plethysmograph +plethysmographic +plethysmographically +plethysmographies +plethysmographs +plethysmography +pleura +pleurae +pleural +pleuras +pleurisies +pleurisy +pleuritic +pleuron +pleuropneumonia +pleuropneumonias +pleuston +pleustonic +pleustons +plew +plews +plexal +plexiform +plexor +plexors +plexus +plexuses +pliabilities +pliability +pliable +pliableness +pliablenesses +pliably +pliancies +pliancy +pliant +pliantly +pliantness +pliantnesses +plica +plicae +plical +plicate +plicated +plication +plications +plie +plied +plier +pliers +plies +plight +plighted +plighter +plighters +plighting +plights +plimsol +plimsole +plimsoles +plimsoll +plimsolls +plimsols +plink +plinked +plinker +plinkers +plinking +plinks +plinth +plinths +pliotron +pliotrons +pliskie +pliskies +plisky +plisse +plisses +plod +plodded +plodder +plodders +plodding +ploddingly +plods +ploidies +ploidy +plonk +plonked +plonking +plonks +plop +plopped +plopping +plops +plosion +plosions +plosive +plosives plot +plotless +plotlessness +plotlessnesses +plotline +plotlines +plots +plottage +plottages +plotted +plotter +plotters +plottier +plotties +plottiest +plotting +plotty +plotz +plotzed +plotzes +plotzing +plough +ploughed +plougher +ploughers +ploughing +ploughs +plover +plovers +plow +plowable +plowback +plowbacks +plowboy +plowboys +plowed +plower +plowers +plowhead +plowheads +plowing +plowland +plowlands +plowman +plowmen +plows +plowshare +plowshares +ploy +ployed +ploying +ploys +pluck +plucked +plucker +pluckers +pluckier +pluckiest +pluckily +pluckiness +pluckinesses +plucking +plucks +plucky plug +plugged +plugger +pluggers +plugging +plugless +plugola +plugolas +plugs +pluguglies +plugugly +plum +plumage +plumaged +plumages +plumate +plumb +plumbago +plumbagos +plumbed +plumber +plumberies +plumbers +plumbery +plumbic +plumbing +plumbings +plumbism +plumbisms +plumbous +plumbs +plumbum +plumbums +plume +plumed +plumelet +plumelets +plumeria +plumerias +plumes +plumier +plumiest +pluming +plumiped +plumipeds +plumlike +plummet +plummeted +plummeting +plummets +plummier +plummiest +plummy +plumose +plump +plumped +plumpen +plumpened +plumpening +plumpens +plumper +plumpers +plumpest +plumping +plumpish +plumply +plumpness +plumpnesses +plumps +plums +plumular +plumule +plumules +plumy +plunder +plundered +plunderer +plunderers +plundering +plunderous +plunders +plunge +plunged +plunger +plungers +plunges +plunging +plunk +plunked +plunker +plunkers +plunking +plunks +pluperfect +pluperfects +plural +pluralism +pluralisms +pluralist +pluralistic +pluralistically +pluralists +pluralities +plurality +pluralization +pluralizations +pluralize +pluralized +pluralizes +pluralizing +plurally +plurals +pluripotent plus -pm +pluses +plush +plusher +plushes +plushest +plushier +plushiest +plushily +plushiness +plushinesses +plushly +plushness +plushnesses +plushy +plussage +plussages +plusses +plutei +pluteus +plutocracies +plutocracy +plutocrat +plutocratic +plutocratically +plutocrats +pluton +plutonian +plutonic +plutonium +plutoniums +plutons +pluvial +pluvials +pluvian +pluviose +pluvious +ply +plyer +plyers +plying +plyingly +plywood +plywoods +pneuma +pneumas +pneumatic +pneumatically +pneumaticities +pneumaticity +pneumatologies +pneumatology +pneumatolytic +pneumatophore +pneumatophores +pneumococcal +pneumococci +pneumococcus +pneumoconioses +pneumoconiosis +pneumograph +pneumographs +pneumonectomies +pneumonectomy +pneumonia +pneumonias +pneumonic +pneumonites +pneumonitides +pneumonitis +pneumonitises +pneumothoraces +pneumothorax +pneumothoraxes +poaceous +poach +poached +poacher +poachers +poaches +poachier +poachiest +poaching +poachy +pochard +pochards +pock +pocked pocket +pocketable +pocketbook +pocketbooks +pocketed +pocketer +pocketers +pocketful +pocketfuls +pocketing +pocketknife +pocketknives +pockets +pocketsful +pockier +pockiest +pockily +pocking +pockmark +pockmarked +pockmarking +pockmarks +pocks +pocky +poco +pococurante +pococurantism +pococurantisms +pocosin +pocosins +pod +podagra +podagral +podagras +podagric +podded +podding +podesta +podestas +podgier +podgiest +podgily +podgy +podia +podiatric +podiatries +podiatrist +podiatrists +podiatry +podite +podites +poditic +podium +podiums +podlike +podocarp +podomere +podomeres +podophylli +podophyllin +podophyllins +podophyllum +podophyllums +pods +podsol +podsolic +podsolization +podsolizations +podsols +podzol +podzolic +podzolization +podzolizations +podzolize +podzolized +podzolizes +podzolizing +podzols +poechore +poechores poem +poems +poesies +poesy poet +poetaster +poetasters +poetess +poetesses +poetic +poetical +poetically +poeticalness +poeticalnesses +poeticism +poeticisms +poeticize +poeticized +poeticizes +poeticizing +poetics +poetise +poetised +poetiser +poetisers +poetises +poetising +poetize +poetized +poetizer +poetizers +poetizes +poetizing +poetless +poetlike +poetries +poetry +poets +pogey +pogeys +pogies +pogonia +pogonias +pogonip +pogonips +pogonophoran +pogonophorans +pogrom +pogromed +pogroming +pogromist +pogromists +pogroms +pogy +poh +poi +poignance +poignances +poignancies +poignancy +poignant +poignantly +poikilotherm +poikilothermic +poikilotherms +poilu +poilus +poinciana +poincianas +poind +poinded +poinding +poinds +poinsettia +poinsettias point +pointe +pointed +pointedly +pointedness +pointednesses +pointelle +pointelles +pointer +pointers +pointes +pointier +pointiest +pointillism +pointillisms +pointillist +pointillistic +pointillists +pointing +pointless +pointlessly +pointlessness +pointlessnesses +pointman +pointmen +points +pointtillist +pointy +pois +poise +poised +poiser +poisers +poises +poisha +poising poison +poisoned +poisoner +poisoners +poisoning +poisonings poisonous +poisonously +poisons +poisonwood +poisonwoods +poitrel +poitrels +poke +pokeberries +pokeberry +poked +poker +pokeroot +pokeroots +pokers +pokes +pokeweed +pokeweeds +pokey +pokeys +pokier +pokies +pokiest +pokily +pokiness +pokinesses +poking +poky +pol +polar +polarimeter +polarimeters +polarimetric +polarimetries +polarimetry +polariscope +polariscopes +polariscopic +polarise +polarised +polarises +polarising +polarities +polarity +polarizabilities +polarizability +polarizable +polarization +polarizations +polarize +polarized +polarizer +polarizers +polarizes +polarizing +polarographic +polarographically +polarographies +polarography +polaron +polarons +polars +polder +polders pole +poleax +poleaxe +poleaxed +poleaxes +poleaxing +polecat +polecats +poled +poleis +poleless +polemic +polemical +polemically +polemicist +polemicists +polemicize +polemicized +polemicizes +polemicizing +polemics +polemist +polemists +polemize +polemized +polemizes +polemizing +polemonium +polemoniums +polenta +polentas +poler +polers +poles +polestar +polestars +poleward +poleyn +poleyns police +policed policeman +policemen +polices policewoman +policewomen +policies +policing policy +policyholder +policyholders +poling +polio +poliomyelitides +poliomyelitis +polios +poliovirus +polioviruses +polis polish +polished +polisher +polishers +polishes +polishing +politburo +politburos polite +politely +politeness +politenesses +politer +politesse +politesses +politest +politic political +politicalization +politicalizations +politicalize +politicalized +politicalizes +politicalizing +politically politician +politicians +politicise +politicised +politicises +politicising +politicization +politicizations +politicize +politicized +politicizes +politicizing +politick +politicked +politicker +politickers +politicking +politicks +politico +politicoes +politicos politics +polities +polity +polka +polkaed +polkaing +polkas +poll +pollack +pollacks +pollard +pollarded +pollarding +pollards +polled +pollee +pollees +pollen +pollened +pollening +pollenizer +pollenizers +pollenoses +pollenosis +pollenosises +pollens +poller +pollers +pollex +pollical +pollices +pollinate +pollinated +pollinates +pollinating +pollination +pollinations +pollinator +pollinators +polling +pollinia +pollinic +pollinium +pollinizer +pollinizers +pollinoses +pollinosis +pollinosises +pollist +pollists +polliwog +polliwogs +pollock +pollocks +polls +pollster +pollsters +pollutant +pollutants pollute +polluted +polluter +polluters +pollutes +polluting pollution +pollutions +pollutive +pollywog +pollywogs +polo +poloist +poloists +polonaise +polonaises +polonium +poloniums +polos +pols +poltergeist +poltergeists +poltroon +poltrooneries +poltroonery +poltroons +poly +polyacrylamide +polyacrylamides +polyacrylonitrile +polyacrylonitriles +polyalcohol +polyalcohols +polyamide +polyamides +polyamine +polyamines +polyandries +polyandrous +polyandry +polyantha +polyanthas +polyanthi +polyanthus +polyanthuses +polyatomic +polybrid +polybrids +polybutadiene +polybutadienes +polycarbonate +polycarbonates +polycentric +polycentrism +polycentrisms +polychaete +polychaetes +polychotomies +polychotomous +polychotomy +polychromatic +polychromatophilia +polychromatophilias +polychromatophilic +polychrome +polychromed +polychromes +polychromies +polychroming +polychromy +polycistronic +polyclinic +polyclinics +polyclonal +polycondensation +polycondensations +polycot +polycots +polycrystal +polycrystalline +polycrystals +polycyclic +polycystic +polycythemia +polycythemias +polycythemic +polydactyl +polydactylies +polydactyly +polydipsia +polydipsias +polydipsic +polydisperse +polydispersities +polydispersity +polyelectrolyte +polyelectrolytes +polyembryonic +polyembryonies +polyembryony +polyene +polyenes +polyenic +polyester +polyesterification +polyesterifications +polyesters +polyestrous +polyethylene +polyethylenes +polygala +polygalas +polygamic +polygamies +polygamist +polygamists +polygamize +polygamized +polygamizes +polygamizing +polygamous +polygamy +polygene +polygenes +polygeneses +polygenesis +polygenetic +polygenic +polyglot +polyglotism +polyglotisms +polyglots +polyglottism +polyglottisms +polygon +polygonal +polygonally +polygonies +polygons +polygonum +polygonums +polygony +polygraph +polygrapher +polygraphers +polygraphic +polygraphist +polygraphists +polygraphs +polygynies +polygynous +polygyny +polyhedra +polyhedral +polyhedron +polyhedrons +polyhedroses +polyhedrosis +polyhistor +polyhistoric +polyhistors +polyhydroxy +polylysine +polylysines +polymath +polymathic +polymathies +polymaths +polymathy +polymer +polymerase +polymerases +polymeric +polymerisation +polymerisations +polymerise +polymerised +polymerises +polymerising +polymerism +polymerisms +polymerization +polymerizations +polymerize +polymerized +polymerizes +polymerizing +polymers +polymorph +polymorphic +polymorphically +polymorphism +polymorphisms +polymorphonuclear +polymorphonuclears +polymorphous +polymorphously +polymorphs +polymyxin +polymyxins +polyneuritides +polyneuritis +polyneuritises +polynomial +polynomials +polynuclear +polynucleotide +polynucleotides +polynya +polynyas +polynyi +polyolefin +polyolefins +polyoma +polyomas +polyonymous +polyp +polyparies +polypary +polypeptide +polypeptides +polypeptidic +polypetalous +polyphagia +polyphagias +polyphagies +polyphagous +polyphagy +polyphase +polyphasic +polyphenol +polyphenolic +polyphenols +polyphiloprogenitive +polyphone +polyphones +polyphonic +polyphonically +polyphonies +polyphonous +polyphonously +polyphony +polyphyletic +polyphyletically +polypi +polypide +polypides +polyploid +polyploidies +polyploids +polyploidy +polypnea +polypneas +polypod +polypodies +polypods +polypody +polypoid +polypore +polypores +polypous +polypropylene +polypropylenes +polyps +polyptych +polyptychs +polypus +polypuses +polyrhythm +polyrhythmic +polyrhythmically +polyrhythms +polyribonucleotide +polyribonucleotides +polyribosomal +polyribosome +polyribosomes +polys +polysaccharide +polysaccharides +polysemies +polysemous +polysemy +polysome +polysomes +polysorbate +polysorbates +polystichous +polystyrene +polystyrenes +polysulfide +polysulfides +polysyllabic +polysyllabically +polysyllable +polysyllables +polysynaptic +polysynaptically +polysyndeton +polysyndetons +polytechnic +polytechnics +polytene +polytenies +polyteny +polytheism +polytheisms +polytheist +polytheistic +polytheistical +polytheists +polythene +polythenes +polytonal +polytonalities +polytonality +polytonally +polytype +polytypes +polytypic +polyunsaturated +polyurethane +polyurethanes +polyuria +polyurias +polyuric +polyvalence +polyvalences +polyvalent +polyvinyl +polywater +polywaters +polyzoan +polyzoans +polyzoic +pom +pomace +pomaceous +pomaces +pomade +pomaded +pomades +pomading +pomander +pomanders +pomatum +pomatums +pome +pomegranate +pomegranates +pomelo +pomelos +pomes +pomfret +pomfrets +pommee +pommel +pommeled +pommeling +pommelled +pommelling +pommels +pommie +pommies +pommy +pomological +pomologies +pomologist +pomologists +pomology +pomp +pompadour +pompadoured +pompadours +pompano +pompanos +pompom +pompoms +pompon +pompons +pomposities +pomposity +pompous +pompously +pompousness +pompousnesses +pomps +poms +ponce +ponced +ponces +poncho +ponchos +poncing pond +ponded +ponder +ponderable +pondered +ponderer +ponderers +pondering +ponderosa +ponderosas +ponderous +ponderously +ponderousness +ponderousnesses +ponders +ponding +ponds +pondweed +pondweeds +pone +ponent +pones +pong +ponged +pongee +pongees +pongid +pongids +ponging +pongs +poniard +poniarded +poniarding +poniards +ponied +ponies +pons +pontes +pontifex +pontiff +pontiffs +pontific +pontifical +pontifically +pontificals +pontificate +pontificated +pontificates +pontificating +pontification +pontifications +pontificator +pontificators +pontifices +pontil +pontils +pontine +ponton +pontons +pontoon +pontoons +pony +ponying +ponytail +ponytailed +ponytails +pooch +pooched +pooches +pooching +pood +poodle +poodles +poods +poof +poofs +pooftah +pooftahs +poofter +poofters +poofy +pooh +poohed +poohing +poohs pool +pooled +poolhall +poolhalls +pooling +poolroom +poolrooms +pools +poolside +poolsides +poon +poons +poop +pooped +pooping +poops poor +poorer +poorest +poorhouse +poorhouses +poori +pooris +poorish +poorly +poorness +poornesses +poortith +poortiths +poove +pooves pop popcorn +popcorns +pope +popedom +popedoms +popeless +popelike +poperies +popery +popes +popeyed +popgun +popguns +popinjay +popinjays +popish +popishly +poplar +poplars +poplin +poplins +popliteal +poplitic +popover +popovers +poppa +poppas +popped +popper +poppers +poppet +poppets +poppied +poppies +popping +popple +poppled +popples +poppling +poppy +poppycock +poppycocks +poppyhead +poppyheads +pops +popsie +popsies +popsy +populace +populaces popular +popularise +popularised +popularises +popularising +popularities +popularity +popularization +popularizations +popularize +popularized +popularizer +popularizers +popularizes +popularizing +popularly +populate +populated +populates +populating population +populational +populations +populism +populisms +populist +populistic +populists +populous +populously +populousness +populousnesses +porbeagle +porbeagles +porcelain +porcelainize +porcelainized +porcelainizes +porcelainizing +porcelainlike +porcelains +porcelaneous +porcellaneous +porch +porches +porcine +porcini +porcino +porcupine +porcupines +pore +pored +pores +porgies +porgy +poring +porism +porisms pork +porker +porkers +porkier +porkies +porkiest +porkpie +porkpies +porks +porkwood +porkwoods +porky +porn +pornier +porniest +porno +pornographer +pornographers +pornographic +pornographically +pornographies +pornography +pornos +porns +porny +porose +porosities +porosity +porous +porously +porousness +porousnesses +porphyria +porphyrias +porphyries +porphyrin +porphyrins +porphyritic +porphyropsin +porphyropsins +porphyry +porpoise +porpoises +porrect porridge +porridges +porridgy +porringer +porringers port +portabilities +portability portable +portables +portably +portage +portaged +portages +portaging +portal +portaled +portals +portamenti +portamento +portance +portances +portapack +portapacks +portapak +portapaks +portative +portcullis +portcullises +ported +portend +portended +portending +portends +portent +portentous +portentously +portentousness +portentousnesses +portents porter +porterage +porterages +portered +porterhouse +porterhouses +portering +porters +portfolio +portfolios +porthole +portholes +portico +porticoes +porticos +portiere +portieres +porting +portion +portioned +portioning +portionless +portions +portless +portlier +portliest +portliness +portlinesses +portly +portmanteau +portmanteaus +portmanteaux +portrait +portraitist +portraitists +portraits +portraiture +portraitures +portray +portrayal +portrayals +portrayed +portrayer +portrayers +portraying +portrays +portress +portresses +ports +portulaca +portulacas +posada +posadas +pose +posed +poser +posers +poses +poseur +poseurs +posh +posher +poshest +poshly +poshness +poshnesses +posies +posing +posingly +posit +posited +positing position +positional +positionally +positioned +positioning +positions positive +positively +positiveness +positivenesses +positiver +positives +positivest +positivism +positivisms +positivist +positivistic +positivistically +positivists +positivities +positivity +positron +positronium +positroniums +positrons +posits +posologies +posology +posse +posses possess +possessed +possessedly +possessedness +possessednesses +possesses +possessing possession +possessional +possessionless +possessions +possessive +possessively +possessiveness +possessivenesses +possessives +possessor +possessors +possessory +posset +possets +possibilities possibility possible +possibler +possiblest +possibly +possum +possums post +postabortion +postaccident +postadolescent +postadolescents postage +postages +postal +postally +postals +postamputation +postanal +postapocalyptic +postarrest +postatomic +postattack +postaxial +postbaccalaureate +postbag +postbags +postbase +postbellum +postbiblical +postbourgeois +postbox +postboxes +postboy +postboys +postburn +postcapitalist postcard +postcardlike +postcards +postcava +postcavae +postcaval +postclassic +postclassical postcode +postcodes +postcoital +postcollege +postcolleges +postcollegiate +postcolonial +postconception +postconcert +postconquest +postconsonantal +postconvention +postcopulatory +postcoronary +postcoup +postcranial +postcranially +postcrash +postcrises +postcrisis +postdate +postdated +postdates +postdating +postdeadline +postdebate +postdebutante +postdebutantes +postdelivery +postdepositional +postdepression +postdevaluation +postdiluvian +postdiluvians +postdive +postdivestiture +postdivorce +postdoc +postdocs +postdoctoral +postdoctorate +postdrug +posted +postediting +posteditings +posteen +posteens +postelection +postembryonal +postembryonic +postemergence +postemergency +postencephalitic +postepileptic poster +posterior +posteriorities +posteriority +posteriorly +posteriors +posterities +posterity +postern +posterns +posterolateral +posters +posteruptive +postexercise +postexilic +postexperience +postexperimental +postexposure +postface +postfaces +postfault +postfeminist +postfire +postfix +postfixed +postfixes +postfixing +postflight +postform +postformed +postforming +postforms +postfracture +postfractures +postfreeze +postgame +postganglionic +postglacial +postgraduate +postgraduates +postgraduation +postharvest +posthaste +posthastes +postheat +postheats +posthemorrhagic +posthole +postholes +postholiday +postholocaust +posthospital +posthumous +posthumously +posthumousness +posthumousnesses +posthypnotic +postiche +postiches +postilion +postilions +postillion +postillions +postimpact +postimperial +postin +postinaugural +postindependence +postindustrial +postinfection +posting +postings +postinjection +postinoculation +postins +postique +postiques +postirradiation +postischemic +postisolation +postlanding +postlapsarian +postlaunch +postliberation +postliterate +postlude +postludes postman +postmarital +postmark +postmarked +postmarking +postmarks +postmastectomy +postmaster +postmasters +postmastership +postmasterships +postmating +postmedieval +postmen +postmenopausal +postmidnight +postmillenarian +postmillenarianism +postmillenarianisms +postmillenarians +postmillennial +postmillennialism +postmillennialisms +postmillennialist +postmillennialists +postmistress +postmistresses +postmodern +postmodernism +postmodernisms +postmodernist +postmodernists +postmortem +postmortems +postnatal +postnatally +postneonatal +postnuptial +postoperative +postoperatively +postoral +postorbital +postorgasmic +postpaid +postpartum +postpollination +postponable postpone +postponed +postponement +postponements +postponer +postponers +postpones +postponing +postposition +postpositional +postpositionally +postpositions +postpositive +postpositively +postprandial +postpresidential +postprimary +postprison +postproduction +postproductions +postpsychoanalytic +postpuberty +postpubescent +postpubescents +postrace +postrecession +postresurrection +postresurrections +postretirement +postrevolutionary +postriot +postromantic +posts +postscript +postscripts +postseason +postseasons +postsecondary +postshow +poststimulation +poststimulatory +poststimulus +poststrike +postsurgical +postsynaptic +postsynaptically +postsync +postsynced +postsyncing +postsyncs +posttax +postteen +posttension +posttensioned +posttensioning +posttensions +posttest +posttests +posttranscriptional +posttransfusion +posttranslational +posttraumatic +posttreatment +posttrial +postulancies +postulancy +postulant +postulants +postulate +postulated +postulates +postulating +postulation +postulational +postulations +postulator +postulators +postural +posture +postured +posturer +posturers +postures +posturing +posturings +postvaccinal +postvaccination +postvagotomy +postvasectomy +postvocalic +postwar +postweaning +postworkshop +posy pot +potabilities +potability +potable +potableness +potablenesses +potables +potage +potages +potamic +potash +potashes +potassic +potassium +potassiums +potation +potations potato +potatoes +potatory +potbellied +potbellies +potbelly +potboil +potboiled +potboiler +potboilers +potboiling +potboils +potboy +potboys +poteen +poteens +potence +potences +potencies +potency +potent +potentate +potentates potential +potentialities +potentiality +potentially +potentials +potentiate +potentiated +potentiates +potentiating +potentiation +potentiations +potentiator +potentiators +potentilla +potentillas +potentiometer +potentiometers +potentiometric +potently +potful +potfuls +pothead +potheads +potheen +potheens +pother +potherb +potherbs +pothered +pothering +pothers +potholder +potholders +pothole +potholed +potholes +pothook +pothooks +pothouse +pothouses +pothunter +pothunters +pothunting +pothuntings +potiche +potiches +potion +potions +potlach +potlache +potlaches +potlatch +potlatched +potlatches +potlatching +potlike +potline +potlines +potluck +potlucks +potman +potmen +potometer +potometers +potpie +potpies +potpourri +potpourris +pots +potshard +potshards +potsherd +potsherds +potshot +potshots +potshotting +potsie +potsies +potstone +potstones +potsy +pottage +pottages +potted +potteen +potteens +potter +pottered +potterer +potterers +potteries +pottering +potteringly +potters +pottery +pottier +potties +pottiest +potting +pottle +pottles +potto +pottos +potty +potzer +potzers +pouch +pouched +pouches +pouchier +pouchiest +pouching +pouchy +pouf +poufed +pouff +pouffe +pouffed +pouffes +pouffs +poufs +poulard +poularde +poulardes +poulards +poult +poulter +poulterer +poulterers +poulters +poultice +poulticed +poultices +poulticing +poultries +poultry +poultryman +poultrymen +poults +pounce +pounced +pouncer +pouncers +pounces +pouncing pound +poundage +poundages +poundal +poundals +pounded +pounder +pounders +pounding +pounds pour +pourable +pourboire +pourboires +poured +pourer +pourers +pouring +pouringly +pourparler +pourparlers +pourpoint +pourpoints +pours +poussette +poussetted +poussettes +poussetting +poussie +poussies +pout +pouted +pouter +pouters +poutful +poutier +poutiest +pouting +pouts +pouty +poverties +poverty +pow powder +powdered +powderer +powderers +powdering +powderless +powderlike +powders +powdery power +powerboat +powerboats +powerbroker +powerbrokers +powered powerful +powerfully +powerhouse +powerhouses +powering +powerless +powerlessly +powerlessness +powerlessnesses +powers +pows +powter +powters +powwow +powwowed +powwowing +powwows +pox +poxed +poxes +poxing +poxvirus +poxviruses +poyou +poyous +pozzolan +pozzolana +pozzolanas +pozzolanic +pozzolans +praam +praams +practic +practicabilities +practicability +practicable +practicableness +practicablenesses +practicably practical +practicalities +practicality +practically +practicalness +practicalnesses +practicals practice +practiced +practicer +practicers +practices +practicing +practicum +practicums practise +practised +practises +practising +practitioner +practitioners +praecipe +praecipes +praedial +praefect +praefects +praelect +praelected +praelecting +praelects +praemunire +praemunires +praenomen +praenomens +praenomina +praesidia +praesidium +praesidiums +praetor +praetorial +praetorian +praetorians +praetors +praetorship +praetorships +pragmatic +pragmatical +pragmatically +pragmaticism +pragmaticisms +pragmaticist +pragmaticists +pragmatics +pragmatism +pragmatisms +pragmatist +pragmatistic +pragmatists +prahu +prahus +prairie +prairies praise +praised +praiser +praisers +praises +praiseworthily +praiseworthiness +praiseworthinesses +praiseworthy +praising +praline +pralines +pralltriller +pralltrillers +pram +prams +prance +pranced +prancer +prancers +prances +prancing +prandial +prang +pranged +pranging +prangs +prank +pranked +pranking +prankish +prankishly +prankishness +prankishnesses +pranks +prankster +pranksters +prao +praos +prase +praseodymium +praseodymiums +prases +prat +prate +prated +prater +praters +prates +pratfall +pratfalls +pratincole +pratincoles +prating +pratingly +pratique +pratiques +prats +prattle +prattled +prattler +prattlers +prattles +prattling +prattlingly +prau +praus +prawn +prawned +prawner +prawners +prawning +prawns +praxeological +praxeologies +praxeology +praxes +praxis +praxises pray +prayed prayer +prayerful +prayerfully +prayerfulness +prayerfulnesses +prayers +praying +prays +preach +preached +preacher +preachers +preaches +preachier +preachiest +preachified +preachifies +preachify +preachifying +preachily +preachiness +preachinesses +preaching +preachingly +preachment +preachments +preachy +preact +preacted +preacting +preacts +preadapt +preadaptation +preadaptations +preadapted +preadapting +preadaptive +preadapts +preadmission +preadmissions +preadmit +preadmits +preadmitted +preadmitting +preadolescence +preadolescences +preadolescent +preadolescents +preadopt +preadopted +preadopting +preadopts +preadult +preaged +preagricultural +preallot +preallots +preallotted +preallotting +preamble +preambles +preamp +preamplifier +preamplifiers +preamps +preanal +preanesthetic +preanesthetics +preannounce +preannounced +preannounces +preannouncing +preapprove +preapproved +preapproves +preapproving +prearm +prearmed +prearming +prearms +prearrange +prearranged +prearrangement +prearrangements +prearranges +prearranging +preassembled +preassign +preassigned +preassigning +preassigns +preatomic +preaudit +preaudits +preaver +preaverred +preaverring +preavers +preaxial +prebake +prebaked +prebakes +prebaking +prebasal +prebattle +prebend +prebendal +prebendaries +prebendary +prebends +prebiblical +prebill +prebilled +prebilling +prebills +prebind +prebinding +prebinds +prebiologic +prebiological +prebiotic +prebless +preblessed +preblesses +preblessing +preboil +preboiled +preboiling +preboils +prebook +prebooked +prebooking +prebooks +preboom +prebound +prebreakfast +precalculi +precalculus +precalculuses +precancel +precanceled +precanceling +precancellation +precancellations +precancelled +precancelling +precancels +precancerous +precapitalist +precapitalists +precarious +precariously +precariousness +precariousnesses +precast +precasting +precasts +precatory +precaution +precautionary +precautioned +precautioning +precautions +precava +precavae +precaval +precede +preceded +precedence +precedences +precedencies +precedency +precedent +precedents +precedes +preceding +precensor +precensored +precensoring +precensors +precent +precented +precenting +precentor +precentorial +precentors +precentorship +precentorships +precents +precept +preceptive +preceptor +preceptorial +preceptorials +preceptories +preceptors +preceptorship +preceptorships +preceptory +precepts +precertification +precertifications +precertified +precertifies +precertify +precertifying +precess +precessed +precesses +precessing +precession +precessional +precessions +precheck +prechecked +prechecking +prechecks +prechill +prechilled +prechilling +prechills +precieuse +precieux +precinct +precincts +preciosities +preciosity precious +preciouses +preciously +preciousness +preciousnesses +precipe +precipes +precipice +precipices +precipitable +precipitance +precipitances +precipitancies +precipitancy +precipitant +precipitantly +precipitantness +precipitantnesses +precipitants +precipitate +precipitated +precipitately +precipitateness +precipitatenesses +precipitates +precipitating +precipitation +precipitations +precipitative +precipitator +precipitators +precipitin +precipitinogen +precipitinogens +precipitins +precipitous +precipitously +precipitousness +precipitousnesses +precis precise +precised +precisely +preciseness +precisenesses +preciser +precises +precisest +precisian +precisians +precising +precision +precisionist +precisionists +precisions +precited +preclean +precleaned +precleaning +precleans +preclear +preclearance +preclearances +precleared +preclearing +preclears +preclinical +preclude +precluded +precludes +precluding +preclusion +preclusions +preclusive +preclusively +precocial +precocious +precociously +precociousness +precociousnesses +precocities +precocity +precode +precoded +precodes +precoding +precognition +precognitions +precognitive +precoital +precollege +precolleges +precollegiate +precolonial +precombustion +precombustions +precommitment +precompute +precomputed +precomputer +precomputers +precomputes +precomputing +preconceive +preconceived +preconceives +preconceiving +preconception +preconceptions +preconcert +preconcerted +preconcerting +preconcerts +precondition +preconditioned +preconditioning +preconditions +preconquest +preconscious +preconsciouses +preconsciously +preconsonantal +preconstructed +precontact +preconvention +preconventions +preconviction +preconvictions +precook +precooked +precooking +precooks +precool +precooled +precooling +precools +precopulatory +precoup +precrash +precrease +precreased +precreases +precreasing +precrisis +precritical +precure +precured +precures +precuring +precursor +precursors +precursory +precut +precuts +precutting +predaceous +predaceousness +predaceousnesses +predacious +predacities +predacity +predate +predated +predates +predating +predation +predations +predator +predators +predatory +predawn +predawns +predecease +predeceased +predeceases +predeceasing +predecessor +predecessors +predefine +predefined +predefines +predefining +predeliveries +predelivery +predeparture +predepartures +predesignate +predesignated +predesignates +predesignating +predestinarian +predestinarianism +predestinarianisms +predestinarians +predestinate +predestinated +predestinates +predestinating +predestination +predestinations +predestinator +predestinators +predestine +predestined +predestines +predestining +predetermination +predeterminations +predetermine +predetermined +predeterminer +predeterminers +predetermines +predetermining +predevaluation +predevaluations +predevelopment +predevelopments +prediabetes +prediabeteses +prediabetic +prediabetics +predial +predicable +predicables +predicament +predicaments +predicate +predicated +predicates +predicating +predication +predications +predicative +predicatively +predicatory predict +predictabilities +predictability +predictable +predictably +predicted +predicting +prediction +predictions +predictive +predictively +predictor +predictors +predicts +predigest +predigested +predigesting +predigestion +predigestions +predigests +predilection +predilections +predinner +predischarge +predischarged +predischarges +predischarging +prediscoveries +prediscovery +predispose +predisposed +predisposes +predisposing +predisposition +predispositions +predive +prednisolone +prednisolones +prednisone +prednisones +predoctoral +predominance +predominances +predominancies +predominancy +predominant +predominantly +predominate +predominated +predominately +predominates +predominating +predomination +predominations +predrill +predrilled +predrilling +predrills +predusk +predusks +predynastic +pree +preeclampsia +preeclampsias +preeclamptic +preed +preedit +preedited +preediting +preedits +preeing +preelect +preelected +preelecting +preelection +preelections +preelectric +preelects +preembargo +preemergence +preemergent +preemie +preemies +preeminence +preeminences +preeminent +preeminently +preemployment +preemployments +preempt +preempted +preempting +preemption +preemptions +preemptive +preemptively +preemptor +preemptors +preemptory +preempts +preen +preenact +preenacted +preenacting +preenacts +preened +preener +preeners +preening +preenrollment +preenrollments +preens +preerect +preerected +preerecting +preerects +prees +preestablish +preestablished +preestablishes +preestablishing +preethical +preexilic +preexist +preexisted +preexistence +preexistences +preexistent +preexisting +preexists +preexperiment +preexperiments +prefab +prefabbed +prefabbing +prefabricate +prefabricated +prefabricates +prefabricating +prefabrication +prefabrications +prefabs +preface +prefaced +prefacer +prefacers +prefaces +prefacing +prefade +prefaded +prefades +prefading +prefascist +prefascists +prefatory +prefect +prefects +prefectural +prefecture +prefectures prefer +preferabilities +preferability +preferable +preferably preference +preferences +preferential +preferentially +preferment +preferments +preferred +preferrer +preferrers +preferring +prefers +prefeudal +prefight +prefiguration +prefigurations +prefigurative +prefiguratively +prefigurativeness +prefigurativenesses +prefigure +prefigured +prefigurement +prefigurements +prefigures +prefiguring +prefile +prefiled +prefiles +prefiling +prefilled +prefinance +prefinanced +prefinances +prefinancing +prefire +prefired +prefires +prefiring +prefix +prefixal +prefixed +prefixes +prefixing +preflame +preflight +prefocus +prefocused +prefocuses +prefocusing +prefocussed +prefocusses +prefocussing +preform +preformat +preformation +preformationist +preformationists +preformations +preformats +preformatted +preformatting +preformed +preforming +preforms +preformulate +preformulated +preformulates +preformulating +prefrank +prefranked +prefranking +prefranks +prefreeze +prefreezes +prefreezing +prefreshman +prefreshmen +prefrontal +prefrontals +prefroze +prefrozen +pregame +preganglionic +pregenital +preggers +pregnabilities +pregnability +pregnable +pregnancies +pregnancy pregnant +pregnantly +pregnenolone +pregnenolones +preharvest +preharvests +preheadache +preheat +preheated +preheater +preheaters +preheating +preheats +prehensile +prehensilities +prehensility +prehension +prehensions +prehiring +prehistorian +prehistorians +prehistoric +prehistorical +prehistorically +prehistories +prehistory +preholiday +prehominid +prehominids +prehuman +prehumans +preignition +preignitions +preimplantation +preinaugural +preincorporation +preincorporations +preinduction +preinductions +preindustrial +preinterview +preinterviewed +preinterviewing +preinterviews +preinvasion +prejudge +prejudged +prejudger +prejudgers +prejudges +prejudging +prejudgment +prejudgments prejudice +prejudiced +prejudices +prejudicial +prejudicially +prejudicialness +prejudicialnesses +prejudicing +prekindergarten +prekindergartens +prelacies +prelacy +prelapsarian +prelate +prelates +prelatic +prelature +prelatures +prelaunch +prelect +prelected +prelecting +prelection +prelections +prelects +prelegal +prelibation +prelibations +prelife +prelim +preliminaries +preliminarily +preliminary +prelimit +prelimited +prelimiting +prelimits +prelims +preliterary +preliterate +preliterates +prelives +prelogical +prelude +preluded +preluder +preluders +preludes +preluding +prelunch +preluncheon +prelusion +prelusions +prelusive +prelusively +premade +premalignant +preman +premanufacture +premanufactured +premanufactures +premanufacturing +premarital +premaritally +premarket +premarketing +premarketings +premarriage +premarriages +premature +prematurely +prematureness +prematurenesses +prematures +prematurities +prematurity +premaxilla +premaxillae +premaxillaries +premaxillary +premaxillas +premeal +premeasure +premeasured +premeasures +premeasuring +premed +premedic +premedical +premedics +premedieval +premeditate +premeditated +premeditatedly +premeditates +premeditating +premeditation +premeditations +premeditative +premeditator +premeditators +premeds +premeet +premeiotic +premen +premenopausal +premenstrual +premenstrually +premerger +premie premier +premiere +premiered +premieres +premiering +premiers +premiership +premierships +premies +premigration +premillenarian +premillenarianism +premillenarianisms +premillenarians +premillennial +premillennialism +premillennialisms +premillennialist +premillennialists +premillennially +premise +premised +premises +premising +premiss +premisses +premium +premiums +premix +premixed +premixes +premixing +premixt +premodern +premodification +premodifications +premodified +premodifies +premodify +premodifying +premoisten +premoistened +premoistening +premoistens +premolar +premolars +premold +premolded +premolding +premolds +premolt +premonish +premonished +premonishes +premonishing +premonition +premonitions +premonitorily +premonitory +premoral +premorse +premune +premunition +premunitions +premycotic +prename +prenames +prenatal +prenatally +prenomen +prenomens +prenomina +prenominate +prenominated +prenominates +prenominating +prenomination +prenominations +prenoon +prenotification +prenotifications +prenotified +prenotifies +prenotify +prenotifying +prenotion +prenotions +prentice +prenticed +prentices +prenticing +prenumber +prenumbered +prenumbering +prenumbers +prenuptial +preoccupancies +preoccupancy +preoccupation +preoccupations +preoccupied +preoccupies +preoccupy +preoccupying +preopening +preoperational +preoperative +preoperatively +preordain +preordained +preordaining +preordainment +preordainments +preordains +preorder +preordered +preordering +preorders +preordination +preordinations +preovulatory +prep +prepack +prepackage +prepackaged +prepackages +prepackaging +prepacked +prepacking +prepacks +prepaid preparation +preparations +preparative +preparatively +preparatives +preparator +preparatorily +preparators +preparatory prepare +prepared +preparedly +preparedness +preparednesses +preparer +preparers +prepares +preparing +prepaste +prepasted +prepastes +prepasting +prepay +prepaying +prepayment +prepayments +prepays +prepense +prepensely +preperformance +preperformances +prepill +preplace +preplaced +preplaces +preplacing +preplan +preplanned +preplanning +preplans +preplant +preplanting +preponderance +preponderances +preponderancies +preponderancy +preponderant +preponderantly +preponderate +preponderated +preponderately +preponderates +preponderating +preponderation +preponderations +preportion +preportioned +preportioning +preportions +preposition +prepositional +prepositionally +prepositions +prepositive +prepositively +prepossess +prepossessed +prepossesses +prepossessing +prepossession +prepossessions +preposterous +preposterously +preposterousness +preposterousnesses +prepotencies +prepotency +prepotent +prepotently +prepped +preppie +preppier +preppies +preppiest +preppily +preppiness +preppinesses +prepping +preppy +preprandial +prepreg +prepregs +preprepared +prepresidential +preprice +prepriced +preprices +prepricing +preprimary +preprint +preprinted +preprinting +preprints +preprocess +preprocessed +preprocesses +preprocessing +preprocessor +preprocessors +preproduction +preproductions +preprofessional +preprogram +preprogramed +preprograming +preprogrammed +preprogramming +preprograms +preps +prepsychedelic +prepuberal +prepubertal +prepuberties +prepuberty +prepubescence +prepubescences +prepubescent +prepubescents +prepublication +prepublications +prepuce +prepuces +prepunch +prepunched +prepunches +prepunching +prepupal +prepurchase +prepurchased +prepurchases +prepurchasing +preputial +prequalification +prequalifications +prequalified +prequalifies +prequalify +prequalifying +prequel +prequels +prerace +prerecession +prerecord +prerecorded +prerecording +prerecords +preregister +preregistered +preregistering +preregisters +preregistration +preregistrations +prerehearsal +prerelease +prereleases +prerenal +prerequire +prerequired +prerequires +prerequiring +prerequisite +prerequisites +preretirement +preretirements +prereturn +prereview +prerevisionist +prerevisionists +prerevolution +prerevolutionary +prerinse +prerinses +preriot +prerock +prerogative +prerogatived +prerogatives +preromantic +presa +presage +presaged +presageful +presager +presagers +presages +presaging +presale +presanctified +presbyope +presbyopes +presbyopia +presbyopias +presbyopic +presbyopics +presbyter +presbyterate +presbyterates +presbyterial +presbyterially +presbyterials +presbyterian +presbyteries +presbyters +presbytery +preschedule +prescheduled +preschedules +prescheduling +preschool +preschooler +preschoolers +preschools +prescience +presciences +prescient +prescientific +presciently +prescind +prescinded +prescinding +prescinds +prescore +prescored +prescores +prescoring +prescreen +prescreened +prescreening +prescreens +prescribe +prescribed +prescriber +prescribers +prescribes +prescribing +prescript prescription +prescriptions +prescriptive +prescriptively +prescripts +prese +preseason +preseasons +preselect +preselected +preselecting +preselection +preselections +preselects +presell +preselling +presells +presence +presences present +presentabilities +presentability +presentable +presentableness +presentablenesses +presentably presentation +presentational +presentations +presentative +presented +presentee +presentees +presentence +presentenced +presentences +presentencing +presentencings +presenter +presenters +presentient +presentiment +presentimental +presentiments +presenting +presentism +presentisms +presentist +presently +presentment +presentments +presentness +presentnesses +presents +preservabilities +preservability +preservable +preservation +preservationist +preservationists +preservations +preservative +preservatives preserve +preserved +preserver +preservers +preserves +preservice +preserving +preset +presets +presetting +presettlement +presettlements +preshape +preshaped +preshapes +preshaping +preshow +preshowed +preshowing +preshown +preshows +preshrank +preshrink +preshrinking +preshrinks +preshrunk +preshrunken +preside +presided +presidencies +presidency president +presidential +presidentially +presidents +presidentship +presidentships +presider +presiders +presides +presidia +presidial +presidiary +presiding +presidio +presidios +presidium +presidiums +presift +presifted +presifting +presifts +presignified +presignifies +presignify +presignifying +preslaughter +presleep +preslice +presliced +preslices +preslicing +presoak +presoaked +presoaking +presoaks +presold +presong +presort +presorted +presorting +presorts +prespecified +prespecifies +prespecify +prespecifying +presplit press +pressboard +pressboards +pressed +presser +pressers +presses +pressing +pressingly +pressings +pressman +pressmark +pressmarks +pressmen +pressor +pressors +pressroom +pressrooms +pressrun +pressruns pressure +pressured +pressureless +pressures +pressuring +pressurise +pressurised +pressurises +pressurising +pressurization +pressurizations +pressurize +pressurized +pressurizer +pressurizers +pressurizes +pressurizing +presswork +pressworks +prest +prestamp +prestamped +prestamping +prestamps +prester +presterilize +presterilized +presterilizes +presterilizing +presters +prestidigitation +prestidigitations +prestidigitator +prestidigitators +prestige +prestigeful +prestiges +prestigious +prestigiously +prestigiousness +prestigiousnesses +prestissimo +presto +prestorage +prestorages +prestos +prestress +prestressed +prestresses +prestressing +prestrike +prestructure +prestructured +prestructures +prestructuring +prests +presumable +presumably +presume +presumed +presumedly +presumer +presumers +presumes +presuming +presumingly +presummit +presumption +presumptions +presumptive +presumptively +presumptuous +presumptuously +presumptuousness +presumptuousnesses +presuppose +presupposed +presupposes +presupposing +presupposition +presuppositional +presuppositions +presurgery +presweeten +presweetened +presweetening +presweetens +presymptomatic +presynaptic +presynaptically +pretape +pretaped +pretapes +pretaping +pretaste +pretasted +pretastes +pretasting +pretax +pretechnological +preteen +preteens +pretelevision +pretence +pretences pretend +pretended +pretendedly +pretender +pretenders +pretending +pretends +pretense +pretenses +pretension +pretensioned +pretensioning +pretensionless +pretensions +pretentious +pretentiously +pretentiousness +pretentiousnesses +preterit +preterite +preterites +preterits +preterm +preterminal +pretermination +preterminations +pretermission +pretermissions +pretermit +pretermits +pretermitted +pretermitting +preternatural +preternaturally +preternaturalness +preternaturalnesses +pretest +pretested +pretesting +pretests +pretext +pretexted +pretexting +pretexts +pretheater +pretor +pretorian +pretorians +pretors +pretournament +pretournaments +pretrain +pretrained +pretraining +pretrains +pretravel +pretreat +pretreated +pretreating +pretreatment +pretreatments +pretreats +pretrial +pretrials +pretrim +pretrimmed +pretrimming +pretrims +prettied +prettier +pretties +prettiest +prettification +prettifications +prettified +prettifier +prettifiers +prettifies +prettify +prettifying +prettily +prettiness +prettinesses pretty +prettying +prettyish +pretype +pretyped +pretypes +pretyping +pretzel +pretzels +preunification +preunion +preunions +preunite +preunited +preunites +preuniting +preuniversity +prevail +prevailed +prevailing +prevails +prevalence +prevalences +prevalent +prevalently +prevalents +prevaricate +prevaricated +prevaricates +prevaricating +prevarication +prevarications +prevaricator +prevaricators +prevenient +preveniently prevent +preventabilities +preventability +preventable +preventative +preventatives +prevented +preventer +preventers +preventible +preventing +prevention +preventions +preventive +preventively +preventiveness +preventivenesses +preventives +prevents +preverbal +previable preview +previewed +previewer +previewers +previewing +previews +previous +previously +previousness +previousnesses +previse +prevised +previses +prevising +prevision +previsional +previsionary +previsioned +previsioning +previsions +previsor +previsors +prevocalic +prevocational +prevue +prevued +prevues +prevuing +prewar +prewarm +prewarmed +prewarming +prewarms +prewarn +prewarned +prewarning +prewarns +prewash +prewashed +prewashes +prewashing +preweaning +prework +prewrap +prewrapped +prewrapping +prewraps +prewriting +prewritings +prex +prexes +prexies +prexy +prey +preyed +preyer +preyers +preying +preys +prez +prezes +priapean +priapi +priapic +priapism +priapisms +priapus +priapuses price +priced +priceless +pricelessly +pricer +pricers +prices +pricey +pricier +priciest +pricing +prick +pricked +pricker +prickers +pricket +prickets +prickier +prickiest +pricking +prickings +prickle +prickled +prickles +pricklier +prickliest +prickliness +pricklinesses +prickling +prickly +pricks +pricky +pricy pride +prided +prideful +pridefully +pridefulness +pridefulnesses +prides +priding +pried +priedieu +priedieus +priedieux +prier +priers +pries +priest +priested +priestess +priestesses +priesthood +priesthoods +priesting +priestlier +priestliest +priestliness +priestlinesses +priestly +priests +prig +prigged +priggeries +priggery +prigging +priggish +priggishly +priggishness +priggishnesses +priggism +priggisms +prigs +prill +prilled +prilling +prills +prim +prima +primacies +primacy +primage +primages +primal +primalities +primality +primaries +primarily primary +primas +primatal +primatals +primate +primates +primateship +primateships +primatial +primatological +primatologies +primatologist +primatologists +primatology +prime +primed +primely +primeness +primenesses +primer +primero +primeros +primers +primes +primeval +primevally +primi +primine +primines +priming +primings +primipara +primiparae +primiparas +primiparous primitive +primitively +primitiveness +primitivenesses +primitives +primitivism +primitivisms +primitivist +primitivistic +primitivists +primitivities +primitivity +primly +primmed +primmer +primmest +primming +primness +primnesses +primo +primogenitor +primogenitors +primogeniture +primogenitures +primordia +primordial +primordially +primordium +primos +primp +primped +primping +primps +primrose +primroses +prims +primsie +primula +primulas +primus +primuses +prince +princedom +princedoms +princelet +princelets +princelier +princeliest +princeliness +princelinesses +princeling +princelings +princely +princes +princeship +princeships +princess +princesse +princesses +principal +principalities +principality +principally +principals +principalship +principalships +principe +principi +principia +principium principle +principled +principles +princock +princocks +princox +princoxes +prink +prinked +prinker +prinkers +prinking +prinks print +printabilities +printability +printable +printed +printer +printeries +printers +printery +printhead +printheads +printing +printings +printless +printmaker +printmakers +printmaking +printmakings +printout +printouts +prints +prion +prions +prior +priorate +priorates +prioress +prioresses +priories +priorities +prioritization +prioritizations +prioritize +prioritized +prioritizes +prioritizing +priority +priorly +priors +priorship +priorships +priory +prise +prised +prisere +priseres +prises +prising +prism +prismatic +prismatically +prismatoid +prismatoids +prismoid +prismoidal +prismoids +prisms prison +prisoned prisoner +prisoners +prisoning +prisons +priss +prissed +prisses +prissier +prissies +prissiest +prissily +prissiness +prissinesses +prissing +prissy +pristane +pristanes +pristine +pristinely +prithee +privacies +privacy +privatdocent +privatdocents +privatdozent +privatdozents private +privateer +privateered +privateering +privateers +privately +privateness +privatenesses +privater +privates +privatest +privation +privations +privatise +privatised +privatises +privatising +privatism +privatisms +privative +privatively +privatives +privatization +privatizations +privatize +privatized +privatizes +privatizing +privet +privets +privier +privies +priviest privilege +privileged +privileges +privileging +privily +privities +privity +privy prize +prized +prizefight +prizefighter +prizefighters +prizefighting +prizefightings +prizefights +prizer +prizers +prizes +prizewinner +prizewinners +prizewinning +prizing +pro +proa +proabortion +proactive +proas +probabilism +probabilisms +probabilist +probabilistic +probabilistically +probabilists +probabilities +probability +probable +probables probably +proband +probands +probang +probangs +probate +probated +probates +probating +probation +probational +probationally +probationary +probationer +probationers +probations +probative +probatory +probe +probed +probenecid +probenecids +prober +probers +probes +probing +probit +probities +probits +probity problem +problematic +problematical +problematically +problematics +problems +proboscidean +proboscideans +proboscides +proboscidian +proboscidians +proboscis +proboscises +procaine +procaines +procambia +procambial +procambium +procambiums +procarbazine +procarbazines +procarp +procarps +procaryote +procaryotes +procathedral +procathedrals +procedural +procedurally +procedurals procedure +procedures +proceed +proceeded +proceeding +proceedings +proceeds +procephalic +procercoid +procercoids process +processabilities +processability +processable +processed +processes +processibilities +processibility +processible +processing +procession +processional +processionally +processionals +processioned +processioning +processions +processor +processors +prochain +prochein +proclaim +proclaimed +proclaimer +proclaimers +proclaiming +proclaims +proclamation +proclamations +proclitic +proclitics +proclivities +proclivity +proconsul +proconsular +proconsulate +proconsulates +proconsuls +proconsulship +proconsulships +procrastinate +procrastinated +procrastinates +procrastinating +procrastination +procrastinations +procrastinator +procrastinators +procreant +procreate +procreated +procreates +procreating +procreation +procreations +procreative +procreator +procreators +procrustean +procryptic +proctodaea +proctodaeum +proctodaeums +proctologic +proctological +proctologies +proctologist +proctologists +proctology +proctor +proctored +proctorial +proctoring +proctors +proctorship +proctorships +procumbent +procurable +procural +procurals +procuration +procurations +procurator +procuratorial +procurators +procure +procured +procurement +procurements +procurer +procurers +procures +procuring +prod +prodded +prodder +prodders +prodding +prodigal +prodigalities +prodigality +prodigally +prodigals +prodigies +prodigious +prodigiously +prodigiousness +prodigiousnesses +prodigy +prodromal +prodromata +prodrome +prodromes +prods produce +produced +producer +producers +produces +producible +producing product production +productional +productions +productive +productively +productiveness +productivenesses +productivities +productivity +products +proem +proemial +proems +proenzyme +proenzymes +proestrus +proestruses +proette +proettes +prof +profanation +profanations +profanatory +profane +profaned +profanely +profaneness +profanenesses +profaner +profaners +profanes +profaning +profanities +profanity +profess +professed +professedly +professes +professing profession +professional +professionalism +professionalisms +professionalization +professionalizations +professionalize +professionalized +professionalizes +professionalizing +professionally +professionals +professions professor +professorate +professorates +professorial +professorially +professoriat +professoriate +professoriates +professoriats +professors +professorship +professorships +proffer +proffered +proffering +proffers +proficiencies +proficiency +proficient +proficiently +proficients +profile +profiled +profiler +profilers +profiles +profiling profit +profitabilities +profitability +profitable +profitableness +profitablenesses +profitably +profited +profiteer +profiteered +profiteering +profiteers +profiter +profiterole +profiteroles +profiters +profiting +profitless +profits +profitwise +profligacies +profligacy +profligate +profligately +profligates +profluent +profound +profounder +profoundest +profoundly +profoundness +profoundnesses +profounds +profs +profundities +profundity +profuse +profusely +profuseness +profusenesses +profusion +profusions +prog +progenies +progenitor +progenitors +progeny +progeria +progerias +progestational +progesterone +progesterones +progestin +progestins +progestogen +progestogenic +progestogens +progged +progger +proggers +progging +proglottid +proglottides +proglottids +proglottis +prognathism +prognathisms +prognathous +prognose +prognosed +prognoses +prognosing +prognosis +prognostic +prognosticate +prognosticated +prognosticates +prognosticating +prognostication +prognostications +prognosticative +prognosticator +prognosticators +prognostics +prograde program +programed +programer +programers +programing +programings +programmabilities +programmability +programmable +programmables +programmatic +programmatically programme +programmed +programmer +programmers +programmes +programming +programmings +programs progress +progressed +progresses +progressing +progression +progressional +progressions +progressive +progressively +progressiveness +progressivenesses +progressives +progressivism +progressivisms +progressivist +progressivistic +progressivists +progressivities +progressivity +progs prohibit +prohibited +prohibiting +prohibition +prohibitionist +prohibitionists +prohibitions +prohibitive +prohibitively +prohibitiveness +prohibitivenesses +prohibitory +prohibits +proinsulin +proinsulins project +projectable +projected +projectile +projectiles +projecting +projection +projectional +projectionist +projectionists +projections +projective +projectively +projector +projectors +projects +projet +projets +prokaryote +prokaryotes +prokaryotic +prolabor +prolactin +prolactins +prolamin +prolamine +prolamines +prolamins +prolan +prolans +prolapse +prolapsed +prolapses +prolapsing +prolate +prole +proleg +prolegomena +prolegomenon +prolegomenous +prolegs +prolepses +prolepsis +proleptic +proleptically +proles +proletarian +proletarianise +proletarianised +proletarianises +proletarianising +proletarianization +proletarianizations +proletarianize +proletarianized +proletarianizes +proletarianizing +proletarians +proletariat +proletariats +proliferate +proliferated +proliferates +proliferating +proliferation +proliferations +proliferative +prolific +prolificacies +prolificacy +prolifically +prolificities +prolificity +prolificness +prolificnesses +proline +prolines +prolix +prolixities +prolixity +prolixly +prolocutor +prolocutors +prolog +prologed +prologing +prologize +prologized +prologizes +prologizing +prologs +prologue +prologued +prologues +prologuing +prologuize +prologuized +prologuizes +prologuizing +prolong +prolongation +prolongations +prolonge +prolonged +prolonger +prolongers +prolonges +prolonging +prolongs +prolusion +prolusions +prolusory +prom +promenade +promenaded +promenader +promenaders +promenades +promenading +promethium +promethiums +promine +prominence +prominences +prominent +prominently +promines +promiscuities +promiscuity +promiscuous +promiscuously +promiscuousness +promiscuousnesses promise +promised +promisee +promisees +promiser +promisers +promises +promising +promisingly +promisor +promisors +promissory +promo +promontories +promontory +promos +promotabilities +promotability +promotable promote +promoted +promoter +promoters +promotes +promoting +promotion +promotional +promotions +promotive +promotiveness +promotivenesses +prompt +promptbook +promptbooks +prompted +prompter +prompters +promptest +prompting +promptitude +promptitudes +promptly +promptness +promptnesses +prompts +proms +promulgate +promulgated +promulgates +promulgating +promulgation +promulgations +promulgator +promulgators +promulge +promulged +promulges +promulging +pronate +pronated +pronates +pronating +pronation +pronations +pronator +pronatores +pronators +prone +pronely +proneness +pronenesses +pronephric +pronephros +pronephroses +prong +pronged +pronghorn +pronghorns +pronging +prongs +pronominal +pronominally +pronota +pronotum +pronoun pronounce +pronounceabilities +pronounceability +pronounceable +pronounced +pronouncedly +pronouncement +pronouncements +pronouncer +pronouncers +pronounces +pronouncing +pronouns +pronto +pronuclear +pronuclei +pronucleus +pronucleuses +pronunciamento +pronunciamentoes +pronunciamentos pronunciation +pronunciational +pronunciations +proof +proofed +proofer +proofers +proofing +proofread +proofreader +proofreaders +proofreading +proofreads +proofroom +proofrooms +proofs +prop +propaedeutic +propaedeutics +propagable +propaganda +propagandas +propagandist +propagandistic +propagandistically +propagandists +propagandize +propagandized +propagandizer +propagandizers +propagandizes +propagandizing +propagate +propagated +propagates +propagating +propagation +propagations +propagative +propagator +propagators +propagule +propagules +propane +propanes +propel +propellant +propellants +propelled +propellent +propellents +propeller +propellers +propelling +propellor +propellors +propels +propend +propended +propending +propends +propene +propenes +propenol +propenols +propense +propensities +propensity +propenyl proper +properdin +properdins +properer +properest properly +properness +propernesses +propers +propertied +properties +property +propertyless +propertylessness +propertylessnesses +prophage +prophages +prophase +prophases +prophasic +prophecies +prophecy +prophesied +prophesier +prophesiers +prophesies +prophesy +prophesying +prophet +prophetess +prophetesses +prophethood +prophethoods +prophetic +prophetical +prophetically +prophets +prophylactic +prophylactically +prophylactics +prophylaxes +prophylaxis +propine +propined +propines +propining +propinquities +propinquity +propionate +propionates +propitiate +propitiated +propitiates +propitiating +propitiation +propitiations +propitiator +propitiators +propitiatory +propitious +propitiously +propitiousness +propitiousnesses +propjet +propjets +proplastid +proplastids +propman +propmen +propolis +propolises +propone +proponed +proponent +proponents +propones +proponing +proportion +proportionable +proportionably +proportional +proportionalities +proportionality +proportionally +proportionals +proportionate +proportionated +proportionately +proportionates +proportionating +proportioned +proportioning +proportions +proposal +proposals +propose +proposed +proposer +proposers +proposes +proposing +propositi +proposition +propositional +propositioned +propositioning +propositions +propositus +propound +propounded +propounder +propounders +propounding +propounds +propoxyphene +propoxyphenes +propped +propping +propraetor +propraetors +propranolol +propranolols +propretor +propretors +proprietaries +proprietary +proprieties +proprietor +proprietorial +proprietors +proprietorship +proprietorships +proprietress +proprietresses +propriety +proprioception +proprioceptions +proprioceptive +proprioceptor +proprioceptors +props +proptoses +proptosis +propulsion +propulsions +propulsive +propyl +propyla +propylaea +propylaeum +propylene +propylenes +propylic +propylon +propyls +prorate +prorated +prorates +prorating +proration +prorations +prorogate +prorogated +prorogates +prorogating +prorogation +prorogations +prorogue +prorogued +prorogues +proroguing +pros +prosaic +prosaically +prosaism +prosaisms +prosaist +prosaists +prosateur +prosateurs +prosauropod +prosauropods +proscenium +prosceniums +prosciutti +prosciutto +prosciuttos +proscribe +proscribed +proscriber +proscribers +proscribes +proscribing +proscription +proscriptions +proscriptive +proscriptively +prose +prosect +prosected +prosecting +prosector +prosectors +prosects +prosecutable +prosecute +prosecuted +prosecutes +prosecuting +prosecution +prosecutions +prosecutor +prosecutorial +prosecutors +prosed +proselyte +proselyted +proselytes +proselyting +proselytise +proselytised +proselytises +proselytising +proselytism +proselytisms +proselytization +proselytizations +proselytize +proselytized +proselytizer +proselytizers +proselytizes +proselytizing +proseminar +proseminars +prosencephala +prosencephalic +prosencephalon +proser +prosers +proses +prosier +prosiest +prosily +prosimian +prosimians +prosiness +prosinesses +prosing +prosit +proso +prosobranch +prosobranchs +prosodic +prosodical +prosodically +prosodies +prosodist +prosodists +prosody +prosoma +prosomal +prosomas +prosopographical +prosopographies +prosopography +prosopopoeia +prosopopoeias +prosos +prospect +prospected +prospecting +prospective +prospectively +prospector +prospectors +prospects +prospectus +prospectuses +prosper +prospered +prospering +prosperities +prosperity +prosperous +prosperously +prosperousness +prosperousnesses +prospers +pross +prosses +prossie +prossies +prost +prostacyclin +prostacyclins +prostaglandin +prostaglandins +prostate +prostatectomies +prostatectomy +prostates +prostatic +prostatism +prostatisms +prostatites +prostatitides +prostatitis +prostatitises +prostheses +prosthesis +prosthetic +prosthetically +prosthetics +prosthetist +prosthetists +prosthodontics +prosthodontist +prosthodontists +prostie +prosties +prostitute +prostituted +prostitutes +prostituting +prostitution +prostitutions +prostitutor +prostitutors +prostomia +prostomial +prostomium +prostrate +prostrated +prostrates +prostrating +prostration +prostrations +prostyle +prostyles +prosy +protactinium +protactiniums +protagonist +protagonists +protamin +protamine +protamines +protamins +protases +protasis +protatic +protea +protean +proteans +proteas +protease +proteases protect +protectant +protectants +protected +protecting protection +protectionism +protectionisms +protectionist +protectionists +protections +protective +protectively +protectiveness +protectivenesses +protector +protectoral +protectorate +protectorates +protectories +protectors +protectorship +protectorships +protectory +protectress +protectresses +protects +protege +protegee +protegees +proteges +protei +proteid +proteide +proteides +proteids +protein +proteinaceous +proteinase +proteinases +proteins +proteinuria +proteinurias +protend +protended +protending +protends +protensive +protensively +proteoglycan +proteoglycans +proteolyses +proteolysis +proteolytic +proteolytically +proteose +proteoses +protest +protestant +protestants +protestation +protestations +protested +protester +protesters +protesting +protestor +protestors +protests +proteus +proteuses +prothalamia +prothalamion +prothalamium +prothalli +prothallia +prothallium +prothallus +prothalluses +protheses +prothesis +prothetic +prothonotarial +prothonotaries +prothonotary +prothoraces +prothoracic +prothorax +prothoraxes +prothrombin +prothrombins +protist +protistan +protistans +protists +protium +protiums +protocol +protocoled +protocoling +protocolled +protocolling +protocols +protoderm +protoderms +protogalaxies +protogalaxy +protohistorian +protohistorians +protohistoric +protohistories +protohistory +protohuman +protohumans +protolanguage +protolanguages +protomartyr +protomartyrs +proton +protonate +protonated +protonates +protonating +protonation +protonations +protonema +protonemal +protonemata +protonematal +protonic +protonotaries +protonotary +protons +protopathic +protophloem +protophloems +protoplanet +protoplanetary +protoplanets +protoplasm +protoplasmic +protoplasms +protoplast +protoplasts +protopod +protopods +protoporphyrin +protoporphyrins +protostar +protostars +protostele +protosteles +protostelic +protostome +protostomes +prototroph +prototrophic +prototrophies +prototrophs +prototrophy +prototypal +prototype +prototyped +prototypes +prototypic +prototypical +prototypically +prototyping +protoxid +protoxids +protoxylem +protoxylems +protozoa +protozoal +protozoan +protozoans +protozoologies +protozoologist +protozoologists +protozoology +protozoon +protract +protracted +protractile +protracting +protraction +protractions +protractive +protractor +protractors +protracts +protreptic +protreptics +protrude +protruded +protrudes +protruding +protrusible +protrusion +protrusions +protrusive +protrusively +protrusiveness +protrusivenesses +protuberance +protuberances +protuberant +protuberantly +protyl +protyle +protyles +protyls proud +prouder +proudest +proudful +proudhearted +proudly +prounion +proustite +proustites +provable +provableness +provablenesses +provably +provascular prove +proved +proven +provenance +provenances +provender +provenders +provenience +proveniences +provenly +proventriculi +proventriculus +prover +proverb +proverbed +proverbial +proverbially +proverbing +proverbs +provers +proves provide +provided +providence +providences +provident +providential +providentially +providently +provider +providers +provides +providing province +provinces +provincial +provincialism +provincialisms +provincialist +provincialists +provincialities +provinciality +provincialization +provincializations +provincialize +provincialized +provincializes +provincializing +provincially +provincials +proving +proviral +provirus +proviruses +provision +provisional +provisionally +provisionals +provisionary +provisioned +provisioner +provisioners +provisioning +provisions +proviso +provisoes +provisory +provisos +provitamin +provitamins +provocateur +provocateurs +provocation +provocations +provocative +provocatively +provocativeness +provocativenesses +provocatives +provoke +provoked +provoker +provokers +provokes +provoking +provokingly +provolone +provolones +provost +provosts +prow +prowar +prower +prowess +prowesses +prowest +prowl +prowled +prowler +prowlers +prowling +prowls +prows +proxemic +proxemics +proxies +proximal +proximally +proximate +proximately +proximateness +proximatenesses +proximities +proximity +proximo +proxy +prude +prudence +prudences +prudent +prudential +prudentially +prudently +pruderies +prudery +prudes +prudish +prudishly +prudishness +prudishnesses +pruinose +prunable +prune +pruned +prunella +prunellas +prunelle +prunelles +prunello +prunellos +pruner +pruners +prunes +pruning +prunus +prunuses +prurience +pruriences +pruriencies +pruriency +prurient +pruriently +prurigo +prurigos +pruritic +pruritus +prurituses +prussianise +prussianised +prussianises +prussianising +prussianization +prussianizations +prussianize +prussianized +prussianizes +prussianizing +prussic +pruta +prutah +prutot +prutoth +pry +pryer +pryers +prying +pryingly +prythee +psalm +psalmbook +psalmbooks +psalmed +psalmic +psalming +psalmist +psalmists +psalmodies +psalmody +psalms +psalter +psalteria +psalteries +psalterium +psalters +psaltery +psaltries +psaltry +psammite +psammites +psammon +psammons +pschent +pschents +psephite +psephites +psephological +psephologies +psephologist +psephologists +psephology +pseud +pseudepigraph +pseudepigrapha +pseudepigraphies +pseudepigraphon +pseudepigraphs +pseudepigraphy +pseudo +pseudoallele +pseudoalleles +pseudocholinesterase +pseudocholinesterases +pseudoclassic +pseudoclassicism +pseudoclassicisms +pseudoclassics +pseudocoel +pseudocoelomate +pseudocoelomates +pseudocoels +pseudocyeses +pseudocyesis +pseudomonad +pseudomonades +pseudomonads +pseudomonas +pseudomorph +pseudomorphic +pseudomorphism +pseudomorphisms +pseudomorphous +pseudomorphs +pseudonym +pseudonymities +pseudonymity +pseudonymous +pseudonymously +pseudonymousness +pseudonymousnesses +pseudonyms +pseudoparenchyma +pseudoparenchymas +pseudoparenchymata +pseudoparenchymatous +pseudopod +pseudopodal +pseudopodia +pseudopodial +pseudopodium +pseudopods +pseudopregnancies +pseudopregnancy +pseudopregnant +pseudorandom +pseudos +pseudoscience +pseudosciences +pseudoscientific +pseudoscientist +pseudoscientists +pseudoscorpion +pseudoscorpions +pseudosophisticated +pseudosophistication +pseudosophistications +pseudotuberculoses +pseudotuberculosis +pseuds +pshaw +pshawed +pshawing +pshaws +psi +psilocin +psilocins +psilocybin +psilocybins +psilophyte +psilophytes +psilophytic +psiloses +psilosis +psilotic +psis +psittacine +psittacines +psittacoses +psittacosis +psittacosises +psittacotic +psoae +psoai +psoas +psoatic +psocid +psocids +psoralea +psoraleas +psoralen +psoralens +psoriases +psoriasis +psoriatic +psoriatics +psst +psych +psychasthenia +psychasthenias +psychasthenic +psychasthenics +psyche +psyched +psychedelia +psychedelias +psychedelic +psychedelically +psychedelics +psyches +psychiatric +psychiatrically +psychiatries +psychiatrist +psychiatrists +psychiatry +psychic +psychical +psychically +psychics +psyching +psycho +psychoacoustic +psychoacoustics +psychoactive +psychoanalyses +psychoanalysis +psychoanalyst +psychoanalysts +psychoanalytic +psychoanalytical +psychoanalytically +psychoanalyze +psychoanalyzed +psychoanalyzes +psychoanalyzing +psychobabble +psychobabbler +psychobabblers +psychobabbles +psychobiographer +psychobiographers +psychobiographical +psychobiographies +psychobiography +psychobiologic +psychobiological +psychobiologies +psychobiologist +psychobiologists +psychobiology +psychochemical +psychochemicals +psychodrama +psychodramas +psychodramatic +psychodynamic +psychodynamically +psychodynamics +psychogeneses +psychogenesis +psychogenetic +psychogenic +psychogenically +psychograph +psychographs +psychohistorian +psychohistorians +psychohistorical +psychohistories +psychohistory +psychokineses +psychokinesis +psychokinetic +psycholinguist +psycholinguistic +psycholinguistics +psycholinguists +psychologic +psychological +psychologically +psychologies +psychologise +psychologised +psychologises +psychologising +psychologism +psychologisms +psychologist +psychologists +psychologize +psychologized +psychologizes +psychologizing psychology +psychometric +psychometrically +psychometrician +psychometricians +psychometrics +psychometries +psychometry +psychomotor +psychoneuroses +psychoneurosis +psychoneurotic +psychoneurotics +psychopath +psychopathic +psychopathically +psychopathics +psychopathies +psychopathologic +psychopathological +psychopathologically +psychopathologies +psychopathologist +psychopathologists +psychopathology +psychopaths +psychopathy +psychopharmacologic +psychopharmacological +psychopharmacologies +psychopharmacologist +psychopharmacologists +psychopharmacology +psychophysical +psychophysically +psychophysicist +psychophysicists +psychophysics +psychophysiologic +psychophysiological +psychophysiologically +psychophysiologies +psychophysiologist +psychophysiologists +psychophysiology +psychos +psychoses +psychosexual +psychosexualities +psychosexuality +psychosexually +psychosis +psychosocial +psychosocially +psychosomatic +psychosomatically +psychosomatics +psychosurgeon +psychosurgeons +psychosurgeries +psychosurgery +psychosurgical +psychosyntheses +psychosynthesis +psychotherapeutic +psychotherapeutically +psychotherapies +psychotherapist +psychotherapists +psychotherapy +psychotic +psychotically +psychotics +psychotomimetic +psychotomimetically +psychotomimetics +psychotropic +psychotropics +psychrometer +psychrometers +psychrometric +psychrometries +psychrometry +psychrophilic +psychs +psylla +psyllas +psyllid +psyllids +psyllium +psylliums +psywar +psywars +ptarmigan +ptarmigans +pteranodon +pteranodons +pteridine +pteridines +pteridological +pteridologies +pteridologist +pteridologists +pteridology +pteridophyte +pteridophytes +pteridosperm +pteridosperms +pterin +pterins +pterodactyl +pterodactyls +pteropod +pteropods +pterosaur +pterosaurs +pterygia +pterygium +pterygiums +pterygoid +pterygoids +pteryla +pterylae +ptisan +ptisans +ptomain +ptomaine +ptomaines +ptomains +ptoses +ptosis +ptotic +ptyalin +ptyalins +ptyalism +ptyalisms pub +puberal +pubertal +puberties +puberty +puberulent +pubes +pubescence +pubescences +pubescent +pubic +pubis public +publically +publican +publicans +publication +publications +publicise +publicised +publicises +publicising +publicist +publicists +publicities +publicity +publicize +publicized +publicizes +publicizing +publicly +publicness +publicnesses +publics publish +publishable +published +publisher +publishers +publishes +publishing +publishings +pubs +puccoon +puccoons +puce +puces +puck +pucka +pucker +puckered +puckerer +puckerers +puckerier +puckeriest +puckering +puckers +puckery +puckish +puckishly +puckishness +puckishnesses +pucks +pud +pudding +puddings +puddle +puddled +puddler +puddlers +puddles +puddlier +puddliest +puddling +puddlings +puddly +pudencies +pudency +pudenda +pudendal +pudendum +pudgier +pudgiest +pudgily +pudginess +pudginesses +pudgy +pudibund +pudic +puds +pueblo +pueblos +puerile +puerilely +puerilism +puerilisms +puerilities +puerility +puerperal +puerperia +puerperium +puff +puffball +puffballs +puffed +puffer +pufferies +puffers +puffery +puffier +puffiest +puffily +puffin +puffiness +puffinesses +puffing +puffins +puffs +puffy +pug +pugaree +pugarees +puggaree +puggarees +pugged +puggier +puggiest +pugging +puggish +puggree +puggrees +puggries +puggry +puggy +pugh +pugilism +pugilisms +pugilist +pugilistic +pugilists +pugmark +pugmarks +pugnacious +pugnaciously +pugnaciousness +pugnaciousnesses +pugnacities +pugnacity +pugree +pugrees +pugs +puisne +puisnes +puissance +puissances +puissant +puja +pujah +pujahs +pujas +puke +puked +pukes +puking +pukka +pul +pula +pulchritude +pulchritudes +pulchritudinous +pule +puled +puler +pulers +pules +puli +pulicene +pulicide +pulicides +pulik +puling +pulingly +pulings +pulis pull +pullback +pullbacks +pulled +puller +pullers +pullet +pullets +pulley +pulleys +pulling +pullman +pullmans +pullout +pullouts +pullover +pullovers +pulls +pullulate +pullulated +pullulates +pullulating +pullulation +pullulations +pullup +pullups +pulmonary +pulmonate +pulmonates +pulmonic +pulmotor +pulmotors +pulp +pulpal +pulpally +pulped +pulper +pulpers +pulpier +pulpiest +pulpily +pulpiness +pulpinesses +pulping +pulpit +pulpital +pulpits +pulpless +pulpous +pulps +pulpwood +pulpwoods +pulpy +pulque +pulques +puls +pulsant +pulsar +pulsars +pulsate +pulsated +pulsates +pulsatile +pulsating +pulsation +pulsations +pulsator +pulsators pulse +pulsed +pulsejet +pulsejets +pulser +pulsers +pulses +pulsing +pulsion +pulsions +pulsojet +pulsojets +pulverable +pulverise +pulverised +pulverises +pulverising +pulverizable +pulverization +pulverizations +pulverize +pulverized +pulverizer +pulverizers +pulverizes +pulverizing +pulverulent +pulvilli +pulvillus +pulvinar +pulvini +pulvinus +puma +pumas +pumelo +pumelos +pumice +pumiced +pumiceous +pumicer +pumicers +pumices +pumicing +pumicite +pumicites +pummel +pummeled +pummeling +pummelled +pummelling +pummelo +pummelos +pummels pump +pumped +pumper +pumpernickel +pumpernickels +pumpers +pumping +pumpkin +pumpkins +pumpkinseed +pumpkinseeds +pumpless +pumplike +pumps +pun +puna +punas +punch +punchball +punchballs +punchboard +punchboards +punched +puncheon +puncheons +puncher +punchers +punches +punchier +punchiest +punchily +punchinello +punchinellos +punching +punchless +punchy +punctate +punctation +punctations +punctilio +punctilios +punctilious +punctiliously +punctiliousness +punctiliousnesses punctual +punctualities +punctuality +punctually +punctuate +punctuated +punctuates +punctuating punctuation +punctuations +punctuator +punctuators +puncture +punctured +punctures +puncturing +pundit +punditic +punditries +punditry +pundits +pung +pungencies +pungency +pungent +pungently +pungle +pungled +pungles +pungling +pungs +punier +puniest +punily +puniness +puninesses punish +punishabilities +punishability +punishable +punished +punisher +punishers +punishes +punishing punishment +punishments +punition +punitions +punitive +punitively +punitiveness +punitivenesses +punitory +punk +punka +punkah +punkahs +punkas +punker +punkers +punkest +punkey +punkeys +punkie +punkier +punkies +punkiest +punkin +punkiness +punkinesses +punkins +punkish +punks +punky +punned +punner +punners +punnet +punnets +punnier +punniest +punning +punny +puns +punster +punsters +punt +punted +punter +punters +punties +punting +punto +puntos +punts +punty +puny +pup +pupa +pupae +pupal +puparia +puparial +puparium +pupas +pupate +pupated +pupates +pupating +pupation +pupations +pupfish +pupfishes pupil +pupilage +pupilages +pupilar +pupilary +pupillage +pupillages +pupillary +pupils +pupped +puppet +puppeteer +puppeteers +puppetlike +puppetries +puppetry +puppets +puppies +pupping +puppy +puppydom +puppydoms +puppyhood +puppyhoods +puppyish +puppylike +pups +pur +purana +puranas +puranic +purblind +purblindly +purblindness +purblindnesses +purchasable purchase +purchased +purchaser +purchasers +purchases +purchasing +purda +purdah +purdahs +purdas pure +pureblood +purebloods +purebred +purebreds +puree +pureed +pureeing +purees +purely +pureness +purenesses +purer +purest +purfle +purfled +purfles +purfling +purflings +purgation +purgations +purgative +purgatives +purgatorial +purgatories +purgatory +purge +purged +purger +purgers +purges +purging +purgings +puri +purification +purifications +purificator +purificators +purificatory +purified +purifier +purifiers +purifies +purify +purifying +purin +purine +purines +purins +puris +purism +purisms +purist +puristic +puristically +purists +puritan +puritanical +puritanically +puritanism +puritanisms +puritans +purities +purity +purl +purled +purlieu +purlieus +purlin +purline +purlines +purling +purlins +purloin +purloined +purloiner +purloiners +purloining +purloins +purls +puromycin +puromycins purple +purpled +purpleheart +purplehearts +purpler +purples +purplest +purpling +purplish +purply +purport +purported +purportedly +purporting +purports purpose +purposed +purposeful +purposefully +purposefulness +purposefulnesses +purposeless +purposelessly +purposelessness +purposelessnesses +purposely +purposes +purposing +purposive +purposively +purposiveness +purposivenesses +purpura +purpuras +purpure +purpures +purpuric +purpurin +purpurins +purr +purred +purring +purringly +purrs +purs purse +pursed +purselike +purser +pursers +purses +pursier +pursiest +pursily +pursiness +pursinesses +pursing +purslane +purslanes +pursuance +pursuances +pursuant +pursue +pursued +pursuer +pursuers +pursues +pursuing +pursuit +pursuits +pursuivant +pursuivants +pursy +purtenance +purtenances +purulence +purulences +purulent +purvey +purveyance +purveyances +purveyed +purveying +purveyor +purveyors +purveys +purview +purviews +pus +puses push +pushball +pushballs +pushcart +pushcarts +pushchair +pushchairs +pushdown +pushdowns +pushed +pusher +pushers +pushes +pushful +pushfulness +pushfulnesses +pushier +pushiest +pushily +pushiness +pushinesses +pushing +pushover +pushovers +pushpin +pushpins +pushrod +pushrods +pushup +pushups +pushy +pusillanimities +pusillanimity +pusillanimous +pusillanimously +pusley +pusleys +puslike +puss +pusses +pussier +pussies +pussiest +pussley +pussleys +pusslies +pusslike +pussly +pussy +pussycat +pussycats +pussyfoot +pussyfooted +pussyfooter +pussyfooters +pussyfooting +pussyfoots +pussytoes +pustulant +pustulants +pustular +pustulated +pustulation +pustulations +pustule +pustuled +pustules put +putamen +putamina +putative +putatively +putlog +putlogs +putoff +putoffs +puton +putons +putout +putouts +putrefaction +putrefactions +putrefactive +putrefied +putrefies +putrefy +putrefying +putrescence +putrescences +putrescent +putrescible +putrescine +putrescines +putrid +putridities +putridity +putridly +puts +putsch +putsches +putschist +putschists +putt +putted +puttee +puttees +putter +puttered +putterer +putterers +puttering +putters +putti +puttied +puttier +puttiers +putties +putting +putto +putts +putty +puttying +puttyless +puttylike +puttyroot +puttyroots +putz +putzed +putzes +putzing puzzle +puzzled +puzzleheaded +puzzleheadedness +puzzleheadednesses +puzzlement +puzzlements +puzzler +puzzlers +puzzles +puzzling +puzzlingly +pya +pyaemia +pyaemias +pyaemic +pyas +pycnidia +pycnidial +pycnidium +pycnogonid +pycnogonids +pycnometer +pycnometers +pycnoses +pycnosis +pycnotic +pye +pyelitic +pyelitis +pyelitises +pyelonephritic +pyelonephritides +pyelonephritis +pyemia +pyemias +pyemic +pyes +pygidia +pygidial +pygidium +pygmaean +pygmean +pygmies +pygmoid +pygmy +pygmyish +pygmyism +pygmyisms +pyic +pyin +pyins +pyjamas +pyknic +pyknics +pyknoses +pyknosis +pyknotic +pylon +pylons +pylori +pyloric +pylorus +pyloruses +pyoderma +pyodermas +pyogenic +pyoid +pyorrhea +pyorrheas +pyoses +pyosis +pyracantha +pyracanthas +pyralid +pyralids pyramid +pyramidal +pyramidally +pyramided +pyramidical +pyramiding +pyramids +pyran +pyranoid +pyranose +pyranoses +pyranoside +pyranosides +pyrans +pyrargyrite +pyrargyrites +pyre +pyrene +pyrenes +pyrenoid +pyrenoids +pyres +pyrethrin +pyrethrins +pyrethroid +pyrethroids +pyrethrum +pyrethrums +pyretic +pyrexia +pyrexial +pyrexias +pyrexic +pyrheliometer +pyrheliometers +pyrheliometric +pyric +pyridic +pyridine +pyridines +pyridoxal +pyridoxals +pyridoxamine +pyridoxamines +pyridoxine +pyridoxines +pyriform +pyrimethamine +pyrimethamines +pyrimidine +pyrimidines +pyrite +pyrites +pyritic +pyritous +pyrocatechol +pyrocatechols +pyroclastic +pyroelectric +pyroelectricities +pyroelectricity +pyrogallol +pyrogallols +pyrogen +pyrogenic +pyrogenicities +pyrogenicity +pyrogens +pyrola +pyrolas +pyrolize +pyrolized +pyrolizes +pyrolizing +pyrologies +pyrology +pyrolusite +pyrolusites +pyrolysate +pyrolysates +pyrolyses +pyrolysis +pyrolytic +pyrolytically +pyrolyzable +pyrolyzate +pyrolyzates +pyrolyze +pyrolyzed +pyrolyzer +pyrolyzers +pyrolyzes +pyrolyzing +pyromancies +pyromancy +pyromania +pyromaniac +pyromaniacal +pyromaniacs +pyromanias +pyrometallurgical +pyrometallurgies +pyrometallurgy +pyrometer +pyrometers +pyrometric +pyrometrically +pyrometries +pyrometry +pyromorphite +pyromorphites +pyrone +pyrones +pyronine +pyronines +pyroninophilic +pyrope +pyropes +pyrophoric +pyrophosphate +pyrophosphates +pyrophyllite +pyrophyllites +pyrosis +pyrosises +pyrostat +pyrostats +pyrotechnic +pyrotechnical +pyrotechnically +pyrotechnics +pyrotechnist +pyrotechnists +pyroxene +pyroxenes +pyroxenic +pyroxenite +pyroxenites +pyroxenitic +pyroxenoid +pyroxenoids +pyroxylin +pyroxylins +pyrrhic +pyrrhics +pyrrhotite +pyrrhotites +pyrrol +pyrrole +pyrroles +pyrrolic +pyrrols +pyruvate +pyruvates +python +pythoness +pythonesses +pythonic +pythons +pyuria +pyurias +pyx +pyxes +pyxides +pyxidia +pyxidium +pyxie +pyxies +pyxis +qaid +qaids +qanat +qanats +qat +qats +qindar +qindarka +qindars +qintar +qintars +qiviut +qiviuts +qoph +qophs +qua +quaalude +quaaludes +quack +quacked +quackeries +quackery +quacking +quackish +quackism +quackisms +quacks +quacksalver +quacksalvers +quad +quadded +quadding +quadplex +quadplexes +quadrangle +quadrangles +quadrangular +quadrans +quadrant +quadrantal +quadrantes +quadrants +quadraphonic +quadraphonics +quadrat +quadrate +quadrated +quadrates +quadratic +quadratically +quadratics +quadrating +quadrats +quadrature +quadratures +quadrennia +quadrennial +quadrennially +quadrennials +quadrennium +quadrenniums +quadric +quadricentennial +quadricentennials +quadriceps +quadricepses +quadrics +quadriga +quadrigae +quadrilateral +quadrilaterals +quadrille +quadrilles +quadrillion +quadrillions +quadrillionth +quadrillionths +quadripartite +quadriphonic +quadriphonics +quadriplegia +quadriplegias +quadriplegic +quadriplegics +quadrivalent +quadrivalents +quadrivia +quadrivial +quadrivium +quadriviums +quadroon +quadroons +quadrumanous +quadrumvir +quadrumvirate +quadrumvirates +quadrumvirs +quadruped +quadrupedal +quadrupeds +quadruple +quadrupled +quadruples +quadruplet +quadruplets +quadruplicate +quadruplicated +quadruplicates +quadruplicating +quadruplication +quadruplications +quadruplicities +quadruplicity +quadrupling +quadruply +quadrupole +quadrupoles +quads +quaere +quaeres +quaestor +quaestors +quaff +quaffed +quaffer +quaffers +quaffing +quaffs +quag +quagga +quaggas +quaggier +quaggiest +quaggy +quagmire +quagmires +quagmirier +quagmiriest +quagmiry +quags +quahaug +quahaugs +quahog +quahogs +quai +quaich +quaiches +quaichs +quaigh +quaighs +quail +quailed +quailing +quails +quaint +quainter +quaintest +quaintly +quaintness +quaintnesses +quais quake +quaked +quaker +quakers +quakes +quakier +quakiest +quakily +quaking +quaky +quale +qualia +qualifiable qualification +qualifications +qualified +qualifiedly +qualifier +qualifiers +qualifies +qualify +qualifying +qualitative +qualitatively +qualities quality +qualm +qualmier +qualmiest +qualmish +qualmishly +qualmishness +qualmishnesses +qualms +qualmy +quamash +quamashes +quandang +quandangs +quandaries +quandary +quandong +quandongs +quango +quangos +quant +quanta +quantal +quanted +quantic +quantics +quantifiable +quantification +quantificational +quantificationally +quantifications +quantified +quantifier +quantifiers +quantifies +quantify +quantifying +quantile +quantiles +quanting +quantitate +quantitated +quantitates +quantitating +quantitation +quantitations +quantitative +quantitatively +quantitativeness +quantitativenesses +quantities quantity +quantization +quantizations +quantize +quantized +quantizer +quantizers +quantizes +quantizing +quantong +quantongs +quants +quantum +quarantine +quarantined +quarantines +quarantining +quare +quark +quarks quarrel +quarreled +quarreler +quarrelers +quarreling +quarrelled +quarreller +quarrellers +quarrelling +quarrels +quarrelsome +quarrelsomely +quarrelsomeness +quarrelsomenesses +quarried +quarrier +quarriers +quarries +quarry +quarrying +quarryings +quarryman +quarrymen +quart +quartan +quartans +quarte quarter +quarterage +quarterages +quarterback +quarterbacked +quarterbacking +quarterbacks +quarterdeck +quarterdecks +quartered +quarterfinal +quarterfinalist +quarterfinalists +quarterfinals +quartering +quarterings +quarterlies +quarterly +quartermaster +quartermasters +quartern +quarterns +quarters +quartersawed +quartersawn +quarterstaff +quarterstaves +quartes +quartet +quartets +quartette +quartettes +quartic +quartics +quartile +quartiles +quarto +quartos +quarts +quartz +quartzes +quartzite +quartzites +quartzitic +quartzose +quasar +quasars +quash +quashed +quasher +quashers +quashes +quashing +quasi +quasiparticle +quasiparticles +quasiperiodic +quasiperiodicities +quasiperiodicity +quass +quasses +quassia +quassias +quassin +quassins +quate +quatercentenaries +quatercentenary +quaternaries +quaternary +quaternion +quaternions +quaternities +quaternity +quatorze +quatorzes +quatrain +quatrains +quatre +quatrefoil +quatrefoils +quatres +quattrocento +quattrocentos +quattuordecillion +quattuordecillions +quaver +quavered +quaverer +quaverers +quavering +quaveringly +quavers +quavery +quay +quayage +quayages +quaylike +quays +quayside +quaysides +quean +queans +queasier +queasiest +queasily +queasiness +queasinesses +queasy +queazier +queaziest +queazy +quebracho +quebrachos queen +queendom +queendoms +queened +queening +queenlier +queenliest +queenliness +queenlinesses +queenly +queens +queenship +queenships +queenside +queensides +queer +queered +queerer +queerest +queering +queerish +queerly +queerness +queernesses +queers +quell +quelled +queller +quellers +quelling +quells +quench +quenchable +quenched +quencher +quenchers +quenches +quenching +quenchless +quenelle +quenelles +quercetin +quercetins +quercine +quercitron +quercitrons +querida +queridas +queried +querier +queriers +queries +querist +querists +quern +querns +querulous +querulously +querulousness +querulousnesses +query +querying +quesadilla +quesadillas +quest +quested +quester +questers +questing question +questionable +questionableness +questionablenesses +questionably +questionaries +questionary +questioned +questioner +questioners +questioning +questionless questionnaire +questionnaires +questions +questor +questors +quests +quetzal +quetzales +quetzals queue +queued +queueing +queuer +queuers +queues +queuing +quey +queys +quezal +quezales +quezals +quibble +quibbled +quibbler +quibblers +quibbles +quibbling +quiche +quiches quick +quicken +quickened +quickener +quickeners +quickening +quickens +quicker +quickest +quickie +quickies +quicklime +quicklimes +quickly +quickness +quicknesses +quicks +quicksand +quicksands +quickset +quicksets +quicksilver +quicksilvers +quickstep +quicksteps +quid +quiddities +quiddity +quidnunc +quidnuncs +quids +quiescence +quiescences +quiescent +quiescently quiet +quieted +quieten +quietened +quietening +quietens +quieter +quieters +quietest +quieting +quietism +quietisms +quietist +quietistic +quietists +quietly +quietness +quietnesses +quiets +quietude +quietudes +quietus +quietuses +quiff +quiffs +quill +quillai +quillaia +quillaias +quillais +quillaja +quillajas +quillback +quillbacks +quilled +quillet +quillets +quilling +quillings +quills +quillwork +quillworks quilt +quilted +quilter +quilters +quilting +quiltings +quilts +quin +quinacrine +quinacrines +quinaries +quinary +quinate +quince +quincentenaries +quincentenary +quincentennial +quincentennials +quinces +quincuncial +quincunx +quincunxes +quincunxial +quindecillion +quindecillions +quinela +quinelas +quinella +quinellas +quinic +quinidine +quinidines +quiniela +quinielas +quinin +quinina +quininas +quinine +quinines +quinins +quinnat +quinnats +quinoa +quinoas +quinoid +quinoids +quinol +quinolin +quinoline +quinolines +quinolins +quinols +quinone +quinones +quinonoid +quinquennia +quinquennial +quinquennially +quinquennials +quinquennium +quinquenniums +quins +quinsies +quinsy +quint +quinta +quintain +quintains +quintal +quintals +quintan +quintans +quintar +quintars +quintas +quinte +quintes +quintessence +quintessences +quintessential +quintessentially +quintet +quintets +quintette +quintettes +quintic +quintics +quintile +quintiles +quintillion +quintillions +quintillionth +quintillionths +quintin +quintins +quints +quintuple +quintupled +quintuples +quintuplet +quintuplets +quintuplicate +quintuplicated +quintuplicates +quintuplicating +quintupling +quip +quipped +quipper +quippers +quipping +quippish +quippu +quippus +quips +quipster +quipsters +quipu +quipus +quire +quired +quires +quiring +quirk +quirked +quirkier +quirkiest +quirkily +quirkiness +quirkinesses +quirking +quirkish +quirks +quirky +quirt +quirted +quirting +quirts +quisling +quislingism +quislingisms +quislings quit +quitch +quitches +quitclaim +quitclaimed +quitclaiming +quitclaims quite +quitrent +quitrents +quits +quittance +quittances +quitted +quitter +quitters +quitting +quittor +quittors +quiver +quivered +quiverer +quiverers +quivering +quiveringly +quivers +quivery +quixote +quixotes +quixotic +quixotical +quixotically +quixotism +quixotisms +quixotries +quixotry quiz +quizmaster +quizmasters +quizzed +quizzer +quizzers +quizzes +quizzical +quizzicalities +quizzicality +quizzically +quizzing +quod +quodlibet +quodlibets +quods +quohog +quohogs +quoin +quoined +quoining +quoins +quoit +quoited +quoiting +quoits +quokka +quokkas +quomodo +quomodos +quondam +quorum +quorums +quota +quotabilities +quotability +quotable +quotably +quotas +quotation +quotations +quote +quoted +quoter +quoters +quotes +quoth +quotha +quotidian +quotidians +quotient +quotients +quoting +qursh +qurshes +qurush +qurushes +qwerty +qwertys +rabat +rabato +rabatos +rabats +rabbet +rabbeted +rabbeting +rabbets +rabbi +rabbies +rabbin +rabbinate +rabbinates +rabbinic +rabbinical +rabbinically +rabbinism +rabbinisms +rabbins +rabbis rabbit +rabbitbrush +rabbitbrushes +rabbited +rabbiter +rabbiters +rabbiting +rabbitries +rabbitry +rabbits +rabbity +rabble +rabbled +rabblement +rabblements +rabbler +rabblers +rabbles +rabbling +rabboni +rabbonis +rabic +rabid +rabidities +rabidity +rabidly +rabidness +rabidnesses +rabies +rabietic +raccoon +raccoons race +racecourse +racecourses +raced +racehorse +racehorses +racemate +racemates +raceme +racemed +racemes +racemic +racemism +racemisms +racemization +racemizations +racemize +racemized +racemizes +racemizing +racemoid +racemose +racemous +racer +racers +races +racetrack +racetracker +racetrackers +racetracks +racewalker +racewalkers +racewalking +racewalkings +raceway +raceways +rachet +rachets +rachial +rachides +rachilla +rachillae +rachis +rachises +rachitic +rachitides +rachitis racial +racialism +racialisms +racialist +racialistic +racialists +racially +racier +raciest +racily +raciness +racinesses +racing +racings +racism +racisms +racist +racists +rack +racked +racker +rackers +racket +racketed +racketeer +racketeered +racketeering +racketeers +racketier +racketiest +racketing +rackets +rackety +rackful +rackfuls +racking +rackingly +rackle +racks +rackwork +rackworks +raclette +raclettes +racon +racons +raconteur +raconteurs +racoon +racoons +racquet +racquetball +racquetballs +racquets +racy +rad +radar +radars +radarscope +radarscopes +radded +radding +raddle +raddled +raddles +raddling +radiable +radial +radiale +radialia +radially +radials +radian +radiance +radiances +radiancies +radiancy +radians +radiant +radiantly +radiants +radiate +radiated +radiately +radiates +radiating radiation +radiational +radiationless +radiations +radiative +radiator +radiators +radical +radicalise +radicalised +radicalises +radicalising +radicalism +radicalisms +radicalization +radicalizations +radicalize +radicalized +radicalizes +radicalizing +radically +radicalness +radicalnesses +radicals +radicand +radicands +radicate +radicated +radicates +radicating +radicchio +radicchios +radicel +radicels +radices +radicle +radicles +radicular +radii radio radioactive +radioactively +radioactivities +radioactivity +radioallergosorbent +radioautograph +radioautographic +radioautographies +radioautographs +radioautography +radiobiologic +radiobiological +radiobiologically +radiobiologies +radiobiologist +radiobiologists +radiobiology +radiocarbon +radiocarbons +radiochemical +radiochemically +radiochemist +radiochemistries +radiochemistry +radiochemists +radiochromatogram +radiochromatograms +radioecologies +radioecology +radioed +radioelement +radioelements +radiogenic +radiogram +radiograms +radiograph +radiographed +radiographic +radiographically +radiographies +radiographing +radiographs +radiography +radioimmunoassay +radioimmunoassayable +radioimmunoassays +radioing +radioisotope +radioisotopes +radioisotopic +radioisotopically +radiolabel +radiolabeled +radiolabeling +radiolabelled +radiolabelling +radiolabels +radiolarian +radiolarians +radiologic +radiological +radiologically +radiologies +radiologist +radiologists +radiology +radiolucencies +radiolucency +radiolucent +radiolyses +radiolysis +radiolytic +radioman +radiomen +radiometer +radiometers +radiometric +radiometrically +radiometries +radiometry +radiomimetic +radionuclide +radionuclides +radiopaque +radiopharmaceutical +radiopharmaceuticals +radiophone +radiophones +radiophoto +radiophotos +radioprotection +radioprotections +radioprotective +radios +radiosensitive +radiosensitivities +radiosensitivity +radiosonde +radiosondes +radiostrontium +radiostrontiums +radiotelegraph +radiotelegraphies +radiotelegraphs +radiotelegraphy +radiotelemetric +radiotelemetries +radiotelemetry +radiotelephone +radiotelephones +radiotelephonies +radiotelephony +radiotherapies +radiotherapist +radiotherapists +radiotherapy +radiothorium +radiothoriums +radiotracer +radiotracers +radish +radishes radium +radiums +radius +radiuses +radix +radixes +radome +radomes +radon +radons +rads +radula +radulae +radular +radulas +radwaste +radwastes +raff +raffia +raffias +raffinose +raffinoses +raffish +raffishly +raffishness +raffishnesses +raffle +raffled +raffler +rafflers +raffles +rafflesia +rafflesias +raffling +raffs +raft +rafted +rafter +raftered +rafters +rafting +rafts +raftsman +raftsmen rag +raga +ragamuffin +ragamuffins +ragas +ragbag +ragbags +rage +raged +ragee +ragees +rages +ragged +raggeder +raggedest +raggedly +raggedness +raggednesses +raggedy +raggee +raggees +raggies +ragging +raggle +raggles +raggy +ragi +raging +ragingly +ragis +raglan +raglans +ragman +ragmen +ragout +ragouted +ragouting +ragouts +ragpicker +ragpickers +rags +ragtag +ragtags +ragtime +ragtimes +ragtop +ragtops +ragweed +ragweeds +ragwort +ragworts +rah +raia +raias +raid +raided +raider +raiders +raiding +raids rail +railbird +railbirds +railbus +railbuses +railbusses +railcar +railcars +railed +railer +railers +railhead +railheads +railing +railings +railleries +raillery +railroad +railroaded +railroader +railroaders +railroading +railroadings +railroads +rails railway +railways +raiment +raiments rain +rainband +rainbands +rainbird +rainbirds rainbow +rainbowlike +rainbows raincoat +raincoats +raindrop +raindrops +rained rainfall +rainfalls +rainier +rainiest +rainily +raining +rainless +rainmaker +rainmakers +rainmaking +rainmakings +rainout +rainouts +rainproof +rains +rainspout +rainspouts +rainsquall +rainsqualls +rainstorm +rainstorms +rainwash +rainwashed +rainwashes +rainwashing +rainwater +rainwaters +rainwear rainy +raisable raise +raised +raiser +raisers +raises +raisin +raising +raisings +raisins +raisiny +raisonne +raj +raja +rajah +rajahs +rajas +rajes +rake +raked +rakee +rakees +rakehell +rakehells +rakehelly +rakeoff +rakeoffs +raker +rakers +rakes +raki +raking +rakis +rakish +rakishly +rakishness +rakishnesses +rale +rales +rallentando +rallied +rallier +ralliers +rallies +ralline +rally +rallye +rallyes +rallying +rallyings +rallyist +rallyists +ralph +ralphed +ralphing +ralphs +ram +ramate +ramble +rambled +rambler +ramblers +rambles +rambling +ramblingly +rambouillet +rambouillets +rambunctious +rambunctiously +rambunctiousness +rambunctiousnesses +rambutan +rambutans +ramee +ramees +ramekin +ramekins +ramenta +ramentum +ramequin +ramequins +ramet +ramets +rami +ramie +ramies +ramification +ramifications +ramified +ramifies +ramiform +ramify +ramifying +ramilie +ramilies +ramillie +ramillies +ramjet +ramjets +rammed +rammer +rammers +rammier +rammiest +ramming +rammish +rammy +ramose +ramosely +ramosities +ramosity +ramous +ramp +rampage +rampaged +rampageous +rampageously +rampageousness +rampageousnesses +rampager +rampagers +rampages +rampaging +rampancies +rampancy +rampant +rampantly +rampart +ramparted +ramparting +ramparts +ramped +rampike +rampikes +ramping +rampion +rampions +rampole +rampoles +ramps +ramrod +ramrodded +ramrodding +ramrods +rams +ramshackle +ramshorn +ramshorns +ramson +ramsons +ramtil +ramtils +ramulose +ramulous +ramus +ran +rance +rances +ranch +ranched +rancher +ranchero +rancheros +ranchers +ranches +ranching +ranchman +ranchmen +rancho +ranchos +rancid +rancidities +rancidity +rancidly +rancidness +rancidnesses +rancor +rancored +rancorous +rancorously +rancors +rancour +rancours +rand +randan +randans +randier +randies +randiest random +randomization +randomizations +randomize +randomized +randomizer +randomizers +randomizes +randomizing +randomly +randomness +randomnesses +randoms +rands +randy +ranee +ranees +rang range +ranged +rangeland +rangelands +ranger +rangers +ranges +rangier +rangiest +ranginess +ranginesses +ranging +rangy +rani +ranid +ranids +ranis rank +ranked +ranker +rankers +rankest +ranking +rankings +rankish +rankle +rankled +rankles +rankling +rankly +rankness +ranknesses +ranks +ranpike +ranpikes +ransack +ransacked +ransacker +ransackers +ransacking +ransacks +ransom +ransomed +ransomer +ransomers +ransoming +ransoms +rant +ranted +ranter +ranters +ranting +rantingly +rants +ranula +ranulas +ranunculi +ranunculus +ranunculuses +rap +rapacious +rapaciously +rapaciousness +rapaciousnesses +rapacities +rapacity +rape +raped +raper +rapers +rapes +rapeseed +rapeseeds +raphae +raphe +raphes +raphia +raphias +raphide +raphides +raphis rapid +rapider +rapidest +rapidities +rapidity +rapidly +rapidness +rapidnesses +rapids +rapier +rapiered +rapiers +rapine +rapines +raping +rapini +rapist +rapists +rapparee +rapparees +rapped +rappee +rappees +rappel +rappeled +rappeling +rappelled +rappelling +rappels +rappen +rapper +rappers +rapping +rappini +rapport +rapporteur +rapporteurs +rapports +rapprochement +rapprochements +raps +rapscallion +rapscallions +rapt +raptly +raptness +raptnesses +raptor +raptorial +raptors +rapture +raptured +raptures +rapturing +rapturous +rapturously +rapturousness +rapturousnesses rare +rarebit +rarebits +rared +rarefaction +rarefactional +rarefactions +rarefied +rarefier +rarefiers +rarefies +rarefy +rarefying +rarely +rareness +rarenesses +rarer +rareripe +rareripes +rares +rarest +rarified +rarifies +rarify +rarifying +raring +rarities +rarity +ras +rasbora +rasboras +rascal +rascalities +rascality +rascally +rascals +rase +rased +raser +rasers +rases +rash +rasher +rashers +rashes +rashest +rashlike +rashly +rashness +rashnesses +rasing +rasorial +rasp +raspberries +raspberry +rasped +rasper +raspers +raspier +raspiest +rasping +raspingly +raspish +rasps +raspy +rassle +rassled +rassles +rassling +raster +rasters +rasure +rasures rat +ratable +ratably +ratafee +ratafees +ratafia +ratafias +ratal +ratals +ratan +ratanies +ratans +ratany +rataplan +rataplanned +rataplanning +rataplans +ratatat +ratatats +ratatouille +ratatouilles +ratbag +ratbags +ratch +ratches +ratchet +ratcheted +ratcheting +ratchets rate +rateable +rateably +rated +ratel +ratels +ratemeter +ratemeters +ratepayer +ratepayers +rater +raters +rates +ratfink +ratfinks +ratfish +ratfishes +rath +rathe rather +rathole +ratholes +rathskeller +rathskellers +raticide +raticides +ratification +ratifications +ratified +ratifier +ratifiers +ratifies +ratify +ratifying +ratine +ratines +rating +ratings +ratio +ratiocinate +ratiocinated +ratiocinates +ratiocinating +ratiocination +ratiocinations +ratiocinative +ratiocinator +ratiocinators +ration +rational +rationale +rationales +rationalise +rationalised +rationalises +rationalising +rationalism +rationalisms +rationalist +rationalistic +rationalistically +rationalists +rationalities +rationality +rationalizable +rationalization +rationalizations +rationalize +rationalized +rationalizer +rationalizers +rationalizes +rationalizing +rationally +rationalness +rationalnesses +rationals +rationed +rationing +rations +ratios +ratite +ratites +ratlike +ratlin +ratline +ratlines +ratlins +rato +ratoon +ratooned +ratooner +ratooners +ratooning +ratoons +ratos +rats +ratsbane +ratsbanes +rattail +rattails +rattan +rattans +ratted +ratteen +ratteens +ratten +rattened +rattener +ratteners +rattening +rattens +ratter +ratters +rattier +rattiest +ratting +rattish +rattle +rattlebrain +rattlebrained +rattlebrains +rattled +rattler +rattlers +rattles +rattlesnake +rattlesnakes +rattletrap +rattletraps +rattling +rattlingly +rattlings +rattly +ratton +rattons +rattoon +rattooned +rattooning +rattoons +rattrap +rattraps +ratty +raucities +raucity +raucous +raucously +raucousness +raucousnesses +raunch +raunches +raunchier +raunchiest +raunchily +raunchiness +raunchinesses +raunchy +rauwolfia +rauwolfias +ravage +ravaged +ravagement +ravagements +ravager +ravagers +ravages +ravaging +rave +raved +ravel +raveled +raveler +ravelers +ravelin +raveling +ravelings +ravelins +ravelled +raveller +ravellers +ravelling +ravellings +ravelly +ravelment +ravelments +ravels +raven +ravened +ravener +raveners +ravening +ravenings +ravenous +ravenously +ravenousness +ravenousnesses +ravens +raver +ravers +raves +ravigote +ravigotes +ravin +ravine +ravined +ravines +raving +ravingly +ravings +ravining +ravins +ravioli +raviolis +ravish +ravished +ravisher +ravishers +ravishes +ravishing +ravishingly +ravishment +ravishments raw +rawboned +rawer +rawest +rawhide +rawhided +rawhides +rawhiding +rawin +rawins +rawinsonde +rawinsondes +rawish +rawly +rawness +rawnesses +raws +rax +raxed +raxes +raxing ray +raya +rayah +rayahs +rayas +rayed +raygrass +raygrasses +raying +rayless +raylessness +raylessnesses +raylike +rayon +rayons +rays +raze +razed +razee +razeed +razeeing +razees +razer +razers +razes +razing razor +razorback +razorbacks +razorbill +razorbills +razored +razoring +razors +razz +razzamatazz +razzamatazzes +razzed +razzes +razzing +razzmatazz +razzmatazzes +re +reabsorb +reabsorbed +reabsorbing +reabsorbs +reaccede +reacceded +reaccedes +reacceding +reaccelerate +reaccelerated +reaccelerates +reaccelerating +reaccent +reaccented +reaccenting +reaccents +reaccept +reaccepted +reaccepting +reaccepts +reaccession +reaccessions +reacclimatize +reacclimatized +reacclimatizes +reacclimatizing +reaccredit +reaccreditation +reaccreditations +reaccredited +reaccrediting +reaccredits +reaccuse +reaccused +reaccuses +reaccusing reach +reachable +reached +reacher +reachers +reaches +reaching +reacquaint +reacquainted +reacquainting +reacquaints +reacquire +reacquired +reacquires +reacquiring +reacquisition +reacquisitions react +reactance +reactances +reactant +reactants +reacted +reacting +reaction +reactionaries +reactionary +reactionaryism +reactionaryisms +reactions +reactivate +reactivated +reactivates +reactivating +reactivation +reactivations +reactive +reactively +reactiveness +reactivenesses +reactivities +reactivity +reactor +reactors +reacts read +readabilities +readability +readable +readableness +readablenesses +readably +readapt +readapted +readapting +readapts +readd +readded +readdict +readdicted +readdicting +readdicts +readding +readdress +readdressed +readdresses +readdressing +readds +reader +readerly +readers +readership +readerships +readied +readier +readies +readiest +readily +readiness +readinesses reading +readings +readjust +readjustable +readjusted +readjusting +readjustment +readjustments +readjusts +readmission +readmissions +readmit +readmits +readmitted +readmitting +readopt +readopted +readopting +readopts +readorn +readorned +readorning +readorns +readout +readouts +reads ready +readying +readymade +readymades +reaffirm +reaffirmation +reaffirmations +reaffirmed +reaffirming +reaffirms +reaffix +reaffixed +reaffixes +reaffixing +reafforest +reafforestation +reafforestations +reafforested +reafforesting +reafforests +reagent +reagents +reaggregate +reaggregated +reaggregates +reaggregating +reaggregation +reaggregations +reagin +reaginic +reagins real +realer +reales +realest +realgar +realgars +realia +realign +realigned +realigning +realignment +realignments +realigns realise +realised +realiser +realisers +realises +realising +realism +realisms +realist +realistic +realistically +realists +realities reality +realizable +realization +realizations realize +realized +realizer +realizers +realizes +realizing +reallocate +reallocated +reallocates +reallocating +reallocation +reallocations +reallot +reallots +reallotted +reallotting really +realm +realms +realness +realnesses +realpolitik +realpolitiks +reals +realter +realtered +realtering +realters +realties +realty +ream +reamed +reamer +reamers +reaming +reams +reanalyses +reanalysis +reanalyze +reanalyzed +reanalyzes +reanalyzing +reanimate +reanimated +reanimates +reanimating +reanimation +reanimations +reannex +reannexation +reannexations +reannexed +reannexes +reannexing +reanoint +reanointed +reanointing +reanoints +reap +reapable +reaped +reaper +reapers +reaphook +reaphooks +reaping +reappear +reappearance +reappearances +reappeared +reappearing +reappears +reapplication +reapplications +reapplied +reapplies +reapply +reapplying +reappoint +reappointed +reappointing +reappointment +reappointments +reappoints +reapportion +reapportioned +reapportioning +reapportionment +reapportionments +reapportions +reappraisal +reappraisals +reappraise +reappraised +reappraises +reappraising +reappropriate +reappropriated +reappropriates +reappropriating +reapprove +reapproved +reapproves +reapproving +reaps +rear +reared +rearer +rearers +rearguard +reargue +reargued +reargues +rearguing +reargument +rearguments +rearing +rearm +rearmament +rearmaments +rearmed +rearmice +rearming +rearmost +rearmouse +rearms +rearousal +rearousals +rearouse +rearoused +rearouses +rearousing +rearrange +rearranged +rearrangement +rearrangements +rearranges +rearranging +rearrest +rearrested +rearresting +rearrests +rears +rearticulate +rearticulated +rearticulates +rearticulating +rearward +rearwards +reascend +reascended +reascending +reascends +reascent +reascents reason +reasonabilities +reasonability reasonable +reasonableness +reasonablenesses +reasonably +reasoned +reasoner +reasoners +reasoning +reasonings +reasonless +reasonlessly +reasons +reassail +reassailed +reassailing +reassails +reassemblage +reassemblages +reassemble +reassembled +reassembles +reassemblies +reassembling +reassembly +reassert +reasserted +reasserting +reassertion +reassertions +reasserts +reassess +reassessed +reassesses +reassessing +reassessment +reassessments +reassign +reassigned +reassigning +reassignment +reassignments +reassigns +reassort +reassorted +reassorting +reassorts +reassume +reassumed +reassumes +reassuming +reassumption +reassumptions +reassurance +reassurances +reassure +reassured +reassures +reassuring +reassuringly +reata +reatas +reattach +reattached +reattaches +reattaching +reattachment +reattachments +reattack +reattacked +reattacking +reattacks +reattain +reattained +reattaining +reattains +reattempt +reattempted +reattempting +reattempts +reattribute +reattributed +reattributes +reattributing +reattribution +reattributions +reauthorization +reauthorizations +reauthorize +reauthorized +reauthorizes +reauthorizing +reavail +reavailed +reavailing +reavails +reave +reaved +reaver +reavers +reaves +reaving +reavow +reavowed +reavowing +reavows +reawake +reawaked +reawaken +reawakened +reawakening +reawakens +reawakes +reawaking +reawoke +reawoken +reb +rebait +rebaited +rebaiting +rebaits +rebalance +rebalanced +rebalances +rebalancing +rebaptism +rebaptisms +rebaptize +rebaptized +rebaptizes +rebaptizing +rebar +rebarbative +rebarbatively +rebars +rebate +rebated +rebater +rebaters +rebates +rebating +rebato +rebatos +rebbe +rebbes +rebec +rebeck +rebecks +rebecs +rebegan +rebegin +rebeginning +rebegins +rebegun +rebel +rebeldom +rebeldoms +rebelled +rebelling +rebellion +rebellions +rebellious +rebelliously +rebelliousness +rebelliousnesses +rebels +rebid +rebidden +rebidding +rebids +rebill +rebilled +rebilling +rebills +rebind +rebinding +rebinds +rebirth +rebirths +reblend +reblended +reblending +reblends +rebloom +rebloomed +reblooming +reblooms +reboant +reboard +reboarded +reboarding +reboards +rebodied +rebodies +rebody +rebodying +reboil +reboiled +reboiling +reboils +rebook +rebooked +rebooking +rebooks +reboot +rebooted +rebooting +reboots +rebop +rebops +rebore +rebored +rebores +reboring +reborn +rebottle +rebottled +rebottles +rebottling +rebought +rebound +rebounded +rebounder +rebounders +rebounding +rebounds +rebozo +rebozos +rebranch +rebranched +rebranches +rebranching +rebred +rebreed +rebreeding +rebreeds +rebroadcast +rebroadcasting +rebroadcasts +rebs +rebuff +rebuffed +rebuffing +rebuffs rebuild +rebuilded +rebuilding +rebuilds +rebuilt +rebuke +rebuked +rebuker +rebukers +rebukes +rebuking +reburial +reburials +reburied +reburies +rebury +reburying +rebus +rebuses +rebut +rebuts +rebuttable +rebuttal +rebuttals +rebutted +rebutter +rebutters +rebutting +rebutton +rebuttoned +rebuttoning +rebuttons +rebuy +rebuying +rebuys +rec +recalcitrance +recalcitrances +recalcitrancies +recalcitrancy +recalcitrant +recalcitrants +recalculate +recalculated +recalculates +recalculating +recalculation +recalculations +recalibrate +recalibrated +recalibrates +recalibrating +recalibration +recalibrations +recall +recallabilities +recallability +recallable +recalled +recaller +recallers +recalling +recalls +recamier +recamiers +recanalization +recanalizations +recanalize +recanalized +recanalizes +recanalizing +recane +recaned +recanes +recaning +recant +recantation +recantations +recanted +recanter +recanters +recanting +recants +recap +recapitalization +recapitalizations +recapitalize +recapitalized +recapitalizes +recapitalizing +recapitulate +recapitulated +recapitulates +recapitulating +recapitulation +recapitulations +recappable +recapped +recapping +recaps +recapture +recaptured +recaptures +recapturing +recarried +recarries +recarry +recarrying +recast +recasting +recasts +recce +recces +recede +receded +recedes +receding receipt +receipted +receipting +receipts +receivable +receivables receive +received receiver +receivers +receivership +receiverships +receives +receiving +recencies +recency +recension +recensions recent +recenter +recentest +recently +recentness +recentnesses +recentralization +recentralizations +recentrifuge +recentrifuged +recentrifuges +recentrifuging +recept +receptacle +receptacles reception receptionist +receptionists +receptions +receptive +receptively +receptiveness +receptivenesses +receptivities +receptivity +receptor +receptors +recepts +recertification +recertifications +recertified +recertifies +recertify +recertifying +recess +recessed +recesses +recessing +recession +recessional +recessionals +recessionary +recessions +recessive +recessively +recessiveness +recessivenesses +recessives +rechallenge +rechallenged +rechallenges +rechallenging +rechange +rechanged +rechanges +rechanging +rechannel +rechanneled +rechanneling +rechannelled +rechannelling +rechannels +recharge +rechargeable +recharged +recharger +rechargers +recharges +recharging +rechart +recharted +recharter +rechartered +rechartering +recharters +recharting +recharts +rechauffe +rechauffes +recheat +recheats +recheck +rechecked +rechecking +rechecks +recherche +rechew +rechewed +rechewing +rechews +rechoose +rechooses +rechoosing +rechoreograph +rechoreographed +rechoreographing +rechoreographs +rechose +rechosen +rechristen +rechristened +rechristening +rechristens +rechromatograph +rechromatographed +rechromatographies +rechromatographing +rechromatographs +rechromatography +recidivism +recidivisms +recidivist +recidivistic +recidivists recipe +recipes +recipient +recipients +reciprocal +reciprocally +reciprocals +reciprocate +reciprocated +reciprocates +reciprocating +reciprocation +reciprocations +reciprocative +reciprocator +reciprocators +reciprocities +reciprocity +recircle +recircled +recircles +recircling +recirculate +recirculated +recirculates +recirculating +recirculation +recirculations +recision +recisions +recital +recitalist +recitalists +recitals +recitation +recitations +recitative +recitatives +recitativi +recitativo +recitativos recite +recited +reciter +reciters +recites +reciting +reck +recked +recking +reckless +recklessly +recklessness +recklessnesses +reckon +reckoned +reckoner +reckoners +reckoning +reckonings +reckons +recks +reclad +reclaim +reclaimable +reclaimed +reclaiming +reclaims +reclamation +reclamations +reclame +reclames +reclasp +reclasped +reclasping +reclasps +reclassification +reclassifications +reclassified +reclassifies +reclassify +reclassifying +reclean +recleaned +recleaning +recleans +recline +reclined +recliner +recliners +reclines +reclining +reclosable +reclothe +reclothed +reclothes +reclothing +recluse +recluses +reclusion +reclusions +reclusive +reclusively +reclusiveness +reclusivenesses +recoal +recoaled +recoaling +recoals +recock +recocked +recocking +recocks +recode +recoded +recodes +recodification +recodifications +recodified +recodifies +recodify +recodifying +recoding recognise +recognised +recognises +recognising +recognition +recognitions +recognizabilities +recognizability +recognizable +recognizably +recognizance +recognizances recognize +recognized +recognizer +recognizers +recognizes +recognizing +recoil +recoiled +recoiler +recoilers +recoiling +recoilless +recoils +recoin +recoinage +recoinages +recoined +recoining +recoins +recollect +recollected +recollecting +recollection +recollections +recollects +recolonization +recolonizations +recolonize +recolonized +recolonizes +recolonizing +recolor +recolored +recoloring +recolors +recomb +recombed +recombinant +recombinants +recombination +recombinational +recombinations +recombine +recombined +recombines +recombing +recombining +recombs +recommence +recommenced +recommencement +recommencements +recommences +recommencing recommend +recommendable +recommendation +recommendations +recommendatory +recommended +recommending +recommends +recommission +recommissioned +recommissioning +recommissions +recommit +recommitment +recommitments +recommits +recommittal +recommittals +recommitted +recommitting +recompense +recompensed +recompenses +recompensing +recompilation +recompilations +recompile +recompiled +recompiles +recompiling +recompose +recomposed +recomposes +recomposing +recomposition +recompositions +recomputation +recomputations +recompute +recomputed +recomputes +recomputing +recon +reconceive +reconceived +reconceives +reconceiving +reconcentrate +reconcentrated +reconcentrates +reconcentrating +reconcentration +reconcentrations +reconception +reconceptions +reconceptualization +reconceptualizations +reconceptualize +reconceptualized +reconceptualizes +reconceptualizing +reconcilabilities +reconcilability +reconcilable +reconcile +reconciled +reconcilement +reconcilements +reconciler +reconcilers +reconciles +reconciliation +reconciliations +reconciliatory +reconciling +recondense +recondensed +recondenses +recondensing +recondite +reconditely +reconditeness +reconditenesses +recondition +reconditioned +reconditioning +reconditions +reconfigurable +reconfiguration +reconfigurations +reconfigure +reconfigured +reconfigures +reconfiguring +reconfirm +reconfirmation +reconfirmations +reconfirmed +reconfirming +reconfirms +reconnaissance +reconnaissances +reconnect +reconnected +reconnecting +reconnection +reconnections +reconnects +reconnoiter +reconnoitered +reconnoitering +reconnoiters +reconnoitre +reconnoitred +reconnoitres +reconnoitring +reconquer +reconquered +reconquering +reconquers +reconquest +reconquests +recons +reconsecrate +reconsecrated +reconsecrates +reconsecrating +reconsecration +reconsecrations +reconsider +reconsideration +reconsiderations +reconsidered +reconsidering +reconsiders +reconsolidate +reconsolidated +reconsolidates +reconsolidating +reconstitute +reconstituted +reconstitutes +reconstituting +reconstitution +reconstitutions +reconstruct +reconstructed +reconstructible +reconstructing +reconstruction +reconstructionism +reconstructionisms +reconstructionist +reconstructionists +reconstructions +reconstructive +reconstructor +reconstructors +reconstructs +recontact +recontacted +recontacting +recontacts +recontaminate +recontaminated +recontaminates +recontaminating +recontamination +recontaminations +recontextualize +recontextualized +recontextualizes +recontextualizing +recontour +recontoured +recontouring +recontours +reconvene +reconvened +reconvenes +reconvening +reconversion +reconversions +reconvert +reconverted +reconverting +reconverts +reconvey +reconveyance +reconveyances +reconveyed +reconveying +reconveys +reconvict +reconvicted +reconvicting +reconviction +reconvictions +reconvicts +reconvince +reconvinced +reconvinces +reconvincing +recook +recooked +recooking +recooks +recopied +recopies +recopy +recopying record +recordable +recordation +recordations +recorded recorder +recorders +recording +recordings +recordist +recordists +records +recork +recorked +recorking +recorks +recount +recounted +recounter +recounters +recounting +recounts +recoup +recoupable +recoupe +recouped +recouping +recouple +recoupled +recouples +recoupling +recoupment +recoupments +recoups +recourse +recourses recover +recoverabilities +recoverability +recoverable +recovered +recoverer +recoverers +recoveries +recovering +recovers +recovery +recrate +recrated +recrates +recrating +recreant +recreants +recreate +recreated +recreates +recreating recreation +recreational +recreationist +recreationists +recreations +recreative +recriminate +recriminated +recriminates +recriminating +recrimination +recriminations +recriminative +recriminatory +recross +recrossed +recrosses +recrossing +recrown +recrowned +recrowning +recrowns +recrudesce +recrudesced +recrudescence +recrudescences +recrudescent +recrudesces +recrudescing +recruit +recruited +recruiter +recruiters +recruiting +recruitment +recruitments +recruits +recrystallization +recrystallizations +recrystallize +recrystallized +recrystallizes +recrystallizing +recs +recta +rectal +rectally rectangle +rectangles +rectangular +rectangularities +rectangularity +rectangularly +recti +rectifiabilities +rectifiability +rectifiable +rectification +rectifications +rectified +rectifier +rectifiers +rectifies +rectify +rectifying +rectilinear +rectilinearly +rectitude +rectitudes +rectitudinous +recto +rector +rectorate +rectorates +rectorial +rectories +rectors +rectorship +rectorships +rectory +rectos +rectrices +rectrix +rectum +rectums +rectus +recultivate +recultivated +recultivates +recultivating +recumbencies +recumbency +recumbent +recuperate +recuperated +recuperates +recuperating +recuperation +recuperations +recuperative +recur +recurred +recurrence +recurrences +recurrent +recurrently +recurring +recurs +recursion +recursions +recursive +recursively +recursiveness +recursivenesses +recurve +recurved +recurves +recurving +recusal +recusals +recusancies +recusancy +recusant +recusants +recuse +recused +recuses +recusing +recut +recuts +recutting +recyclable +recyclables recycle +recycled +recycler +recyclers +recycles +recycling red +redact +redacted +redacting +redaction +redactional +redactions +redactor +redactors +redacts +redamage +redamaged +redamages +redamaging +redan +redans +redargue +redargued +redargues +redarguing +redate +redated +redates +redating +redbait +redbaited +redbaiting +redbaits +redbay +redbays +redbird +redbirds +redbone +redbones +redbreast +redbreasts +redbrick +redbricks +redbud +redbuds +redbug +redbugs +redcap +redcaps +redcoat +redcoats +redd +redded +redden +reddened +reddening +reddens +redder +redders +reddest +redding +reddish +reddishness +reddishnesses +reddle +reddled +reddles +reddling +redds +rede +redear +redears +redecide +redecided +redecides +redeciding +redecorate +redecorated +redecorates +redecorating +redecoration +redecorations +redecorator +redecorators +reded +rededicate +rededicated +rededicates +rededicating +rededication +rededications +redeem +redeemable +redeemed +redeemer +redeemers +redeeming +redeems +redefeat +redefeated +redefeating +redefeats +redefect +redefected +redefecting +redefects +redefied +redefies +redefine +redefined +redefines +redefining +redefinition +redefinitions +redefy +redefying +redeliver +redelivered +redeliveries +redelivering +redelivers +redelivery +redemand +redemanded +redemanding +redemands +redemption +redemptioner +redemptioners +redemptions +redemptive +redemptory +redenied +redenies +redeny +redenying +redeploy +redeployed +redeploying +redeployment +redeployments +redeploys +redeposit +redeposited +redepositing +redeposits +redes +redescribe +redescribed +redescribes +redescribing +redescription +redescriptions +redesign +redesigned +redesigning +redesigns +redetermination +redeterminations +redetermine +redetermined +redetermines +redetermining +redevelop +redeveloped +redeveloper +redevelopers +redeveloping +redevelopment +redevelopments +redevelops +redeye +redeyes +redfin +redfins +redfish +redfishes +redhead +redheaded +redheads +redhorse +redhorses +redia +rediae +redial +redialed +redialing +redialled +redialling +redials +redias +redid +redigest +redigested +redigesting +redigestion +redigestions +redigests +reding +redingote +redingotes +redintegrate +redintegrated +redintegrates +redintegrating +redintegration +redintegrations +redintegrative +redip +redipped +redipping +redips +redipt +redirect +redirected +redirecting +redirection +redirections +redirects +rediscount +rediscountable +rediscounted +rediscounting +rediscounts +rediscover +rediscovered +rediscoveries +rediscovering +rediscovers +rediscovery +rediscuss +rediscussed +rediscusses +rediscussing +redisplay +redisplayed +redisplaying +redisplays +redispose +redisposed +redisposes +redisposing +redisposition +redispositions +redissolve +redissolved +redissolves +redissolving +redistill +redistillation +redistillations +redistilled +redistilling +redistills +redistribute +redistributed +redistributes +redistributing +redistribution +redistributional +redistributionist +redistributionists +redistributions +redistributive +redistrict +redistricted +redistricting +redistricts +redivide +redivided +redivides +redividing +redivision +redivisions +redivivus +redleg +redlegs +redline +redlined +redlines +redlining +redly +redneck +rednecked +rednecks +redness +rednesses +redo +redock +redocked +redocking +redocks +redoes +redoing +redolence +redolences +redolent +redolently +redon +redone +redonned +redonning +redons +redos +redouble +redoubled +redoubles +redoubling +redoubt +redoubtable +redoubtably +redoubts +redound +redounded +redounding +redounds +redout +redouts +redowa +redowas +redox +redoxes +redpoll +redpolls +redraft +redrafted +redrafting +redrafts +redraw +redrawer +redrawers +redrawing +redrawn +redraws +redream +redreamed +redreaming +redreams +redreamt +redress +redressed +redresser +redressers +redresses +redressing +redrew +redried +redries +redrill +redrilled +redrilling +redrills +redrive +redriven +redrives +redriving +redroot +redroots +redrove +redry +redrying +reds +redshank +redshanks +redshift +redshifted +redshifts +redshirt +redshirted +redshirting +redshirts +redskin +redskins +redstart +redstarts +redtail +redtails +redtop +redtops +redub +redubbed +redubbing +redubs reduce +reduced +reducer +reducers +reduces +reducibilities +reducibility +reducible +reducibly +reducing +reductant +reductants +reductase +reductases +reduction +reductional +reductionism +reductionisms +reductionist +reductionistic +reductionists +reductions +reductive +reductively +reductiveness +reductivenesses +reductor +reductors +redundancies +redundancy +redundant +redundantly +reduplicate +reduplicated +reduplicates +reduplicating +reduplication +reduplications +reduplicative +reduplicatively +reduviid +reduviids +redux +redware +redwares +redwing +redwings +redwood +redwoods +redye +redyed +redyeing +redyes +ree +reearn +reearned +reearning +reearns +reechier +reechiest +reecho +reechoed +reechoes +reechoing +reechy +reed +reedbird +reedbirds +reedbuck +reedbucks +reeded +reedier +reediest +reedified +reedifies +reedify +reedifying +reedily +reediness +reedinesses +reeding +reedings +reedit +reedited +reediting +reedition +reeditions +reedits +reedlike +reedling +reedlings +reedman +reedmen +reeds +reeducate +reeducated +reeducates +reeducating +reeducation +reeducations +reeducative +reedy +reef +reefable +reefed +reefer +reefers +reefier +reefiest +reefing +reefs +reefy +reeject +reejected +reejecting +reejects +reek +reeked +reeker +reekers +reekier +reekiest +reeking +reeks +reeky +reel +reelable +reelect +reelected +reelecting +reelection +reelections +reelects +reeled +reeler +reelers +reeligibilities +reeligibility +reeligible +reeling +reels +reembark +reembarked +reembarking +reembarks +reembodied +reembodies +reembody +reembodying +reembroider +reembroidered +reembroidering +reembroiders +reemerge +reemerged +reemergence +reemergences +reemerges +reemerging +reemission +reemissions +reemit +reemits +reemitted +reemitting +reemphases +reemphasis +reemphasize +reemphasized +reemphasizes +reemphasizing +reemploy +reemployed +reemploying +reemployment +reemployments +reemploys +reenact +reenacted +reenacting +reenactment +reenactments +reenacts +reencounter +reencountered +reencountering +reencounters +reendow +reendowed +reendowing +reendows +reenergize +reenergized +reenergizes +reenergizing +reenforce +reenforced +reenforces +reenforcing +reengage +reengaged +reengagement +reengagements +reengages +reengaging +reengineer +reengineered +reengineering +reengineers +reengrave +reengraved +reengraves +reengraving +reenjoy +reenjoyed +reenjoying +reenjoys +reenlist +reenlisted +reenlisting +reenlistment +reenlistments +reenlists +reenroll +reenrolled +reenrolling +reenrolls +reenter +reentered +reentering +reenters +reenthrone +reenthroned +reenthrones +reenthroning +reentrance +reentrances +reentrant +reentrants +reentries +reentry +reequip +reequipment +reequipments +reequipped +reequipping +reequips +reerect +reerected +reerecting +reerects +rees +reescalate +reescalated +reescalates +reescalating +reescalation +reescalations +reest +reestablish +reestablished +reestablishes +reestablishing +reestablishment +reestablishments +reested +reestimate +reestimated +reestimates +reestimating +reesting +reests +reevaluate +reevaluated +reevaluates +reevaluating +reevaluation +reevaluations +reeve +reeved +reeves +reeving +reevoke +reevoked +reevokes +reevoking +reexamination +reexaminations +reexamine +reexamined +reexamines +reexamining +reexpel +reexpelled +reexpelling +reexpels +reexperience +reexperienced +reexperiences +reexperiencing +reexplore +reexplored +reexplores +reexploring +reexport +reexportation +reexportations +reexported +reexporting +reexports +reexpose +reexposed +reexposes +reexposing +reexposure +reexposures +reexpress +reexpressed +reexpresses +reexpressing +ref +reface +refaced +refaces +refacing +refall +refallen +refalling +refalls +refashion +refashioned +refashioning +refashions +refasten +refastened +refastening +refastens +refect +refected +refecting +refection +refections +refectories +refectory +refects +refed +refeed +refeeding +refeeds +refeel +refeeling +refeels +refel +refell +refelled +refelling +refels +refelt +refence +refenced +refences +refencing refer +referable referee +refereed +refereeing +referees reference +referenced +references +referencing +referenda +referendum +referendums +referent +referential +referentialities +referentiality +referentially +referents +referral +referrals +referred +referrer +referrers +referring +refers +reffed +reffing +refight +refighting +refights +refigure +refigured +refigures +refiguring +refile +refiled +refiles +refiling +refill +refillable +refilled +refilling +refills +refilm +refilmed +refilming +refilms +refilter +refiltered +refiltering +refilters +refinance +refinanced +refinances +refinancing +refind +refinding +refinds +refine +refined +refinement +refinements +refiner +refineries +refiners +refinery +refines +refining +refinish +refinished +refinisher +refinishers +refinishes +refinishing +refire +refired +refires +refiring +refit +refits +refitted +refitting +refix +refixed +refixes +refixing +reflate +reflated +reflates +reflating +reflation +reflationary +reflations reflect +reflectance +reflectances +reflected +reflecting +reflection +reflectional +reflections +reflective +reflectively +reflectiveness +reflectivenesses +reflectivities +reflectivity +reflectometer +reflectometers +reflectometries +reflectometry +reflector +reflectorize +reflectorized +reflectorizes +reflectorizing +reflectors +reflects +reflet +reflets +reflew +reflex +reflexed +reflexes +reflexing +reflexion +reflexions +reflexive +reflexively +reflexiveness +reflexivenesses +reflexives +reflexivities +reflexivity +reflexly +reflexologies +reflexology +reflies +refloat +refloated +refloating +refloats +reflood +reflooded +reflooding +refloods +reflow +reflowed +reflower +reflowered +reflowering +reflowers +reflowing +reflown +reflows +refluence +refluences +refluent +reflux +refluxed +refluxes +refluxing +refly +reflying +refocus +refocused +refocuses +refocusing +refocussed +refocusses +refocussing +refold +refolded +refolding +refolds +reforest +reforestation +reforestations +reforested +reforesting +reforests +reforge +reforged +reforges +reforging reform +reformabilities +reformability +reformable +reformat +reformate +reformates +reformation +reformational +reformations +reformative +reformatories +reformatory +reformats +reformatted +reformatting +reformed +reformer +reformers +reforming +reformism +reformisms +reformist +reformists +reforms +reformulate +reformulated +reformulates +reformulating +reformulation +reformulations +refortification +refortifications +refortified +refortifies +refortify +refortifying +refought +refound +refoundation +refoundations +refounded +refounding +refounds +refract +refracted +refractile +refracting +refraction +refractions +refractive +refractively +refractiveness +refractivenesses +refractivities +refractivity +refractometer +refractometers +refractometric +refractometries +refractometry +refractor +refractories +refractorily +refractoriness +refractorinesses +refractors +refractory +refracts +refrain +refrained +refraining +refrainment +refrainments +refrains +reframe +reframed +reframes +reframing +refrangibilities +refrangibility +refrangible +refrangibleness +refrangiblenesses +refreeze +refreezes +refreezing refresh +refreshed +refreshen +refreshened +refreshening +refreshens +refresher +refreshers +refreshes +refreshing +refreshingly +refreshment +refreshments +refried +refries +refrigerant +refrigerants +refrigerate +refrigerated +refrigerates +refrigerating +refrigeration +refrigerations refrigerator +refrigerators +refront +refronted +refronting +refronts +refroze +refrozen +refry +refrying +refs +reft +refuel +refueled +refueling +refuelled +refuelling +refuels +refuge +refuged +refugee +refugeeism +refugeeisms +refugees +refuges +refugia +refuging +refugium +refulgence +refulgences +refulgent +refund +refundabilities +refundability +refundable +refunded +refunder +refunders +refunding +refunds +refurbish +refurbished +refurbisher +refurbishers +refurbishes +refurbishing +refurbishment +refurbishments +refurnish +refurnished +refurnishes +refurnishing +refusal +refusals refuse +refused +refusenik +refuseniks +refuser +refusers +refuses +refusing +refusnik +refusniks +refutable +refutably +refutal +refutals +refutation +refutations +refute +refuted +refuter +refuters +refutes +refuting +reg +regain +regained +regainer +regainers +regaining +regains +regal +regale +regaled +regaler +regalers +regales +regalia +regaling +regalities +regality +regally regard +regardant +regarded +regardful +regardfully +regardfulness +regardfulnesses +regarding regardless +regardlessly +regardlessness +regardlessnesses +regards +regather +regathered +regathering +regathers +regatta +regattas +regauge +regauged +regauges +regauging +regave +regear +regeared +regearing +regears +regelate +regelated +regelates +regelating +regencies +regency +regenerable +regeneracies +regeneracy +regenerate +regenerated +regenerately +regenerateness +regeneratenesses +regenerates +regenerating +regeneration +regenerations +regenerative +regenerator +regenerators +regent +regental +regents +reges +reggae +reggaes +regicidal +regicide +regicides +regild +regilded +regilding +regilds +regilt +regime +regimen +regimens +regiment +regimental +regimentals +regimentation +regimentations +regimented +regimenting +regiments +regimes +regina +reginae +reginal +reginas +region +regional +regionalism +regionalisms +regionalist +regionalistic +regionalists +regionalization +regionalizations +regionalize +regionalized +regionalizes +regionalizing +regionally +regionals +regions +regisseur +regisseurs register +registerable +registered +registering +registers +registrable +registrant +registrants +registrar +registrars +registration +registrations +registries +registry +regius +regive +regiven +regives +regiving +reglaze +reglazed +reglazes +reglazing +reglet +reglets +regloss +reglossed +reglosses +reglossing +reglow +reglowed +reglowing +reglows +reglue +reglued +reglues +regluing +regma +regmata +regna +regnal +regnancies +regnancy +regnant +regnum +regolith +regoliths +regorge +regorged +regorges +regorging +regosol +regosols +regrade +regraded +regrades +regrading +regraft +regrafted +regrafting +regrafts +regrant +regranted +regranting +regrants +regrate +regrated +regrates +regrating +regreen +regreened +regreening +regreens +regreet +regreeted +regreeting +regreets +regress +regressed +regresses +regressing +regression +regressions +regressive +regressively +regressiveness +regressivenesses +regressivities +regressivity +regressor +regressors regret +regretful +regretfully +regretfulness +regretfulnesses +regrets +regrettable +regrettably +regretted +regretter +regretters +regretting +regrew +regrind +regrinding +regrinds +regroom +regroomed +regrooming +regrooms +regroove +regrooved +regrooves +regrooving +reground +regroup +regrouped +regrouping +regroups +regrow +regrowing +regrown +regrows +regrowth +regrowths +regs regular +regularities +regularity +regularization +regularizations +regularize +regularized +regularizes +regularizing +regularly +regulars +regulate +regulated +regulates +regulating regulation +regulations +regulative +regulator +regulators +regulatory +reguli +reguline +regulus +reguluses +regurgitate +regurgitated +regurgitates +regurgitating +regurgitation +regurgitations +rehab +rehabbed +rehabber +rehabbers +rehabbing +rehabilitant +rehabilitants +rehabilitate +rehabilitated +rehabilitates +rehabilitating +rehabilitation +rehabilitations +rehabilitative +rehabilitator +rehabilitators +rehabs +rehammer +rehammered +rehammering +rehammers +rehandle +rehandled +rehandles +rehandling +rehang +rehanged +rehanging +rehangs +reharden +rehardened +rehardening +rehardens +rehash +rehashed +rehashes +rehashing +rehear +reheard +rehearing +rehearings +rehears +rehearsal +rehearsals +rehearse +rehearsed +rehearser +rehearsers +rehearses +rehearsing +reheat +reheated +reheater +reheaters +reheating +reheats +reheel +reheeled +reheeling +reheels +rehem +rehemmed +rehemming +rehems +rehinge +rehinged +rehinges +rehinging +rehire +rehired +rehires +rehiring +rehoboam +rehoboams +rehospitalization +rehospitalizations +rehospitalize +rehospitalized +rehospitalizes +rehospitalizing +rehouse +rehoused +rehouses +rehousing +rehumanize +rehumanized +rehumanizes +rehumanizing +rehung +rehydratable +rehydrate +rehydrated +rehydrates +rehydrating +rehydration +rehydrations +rehypnotize +rehypnotized +rehypnotizes +rehypnotizing +rei +reichsmark +reichsmarks +reidentified +reidentifies +reidentify +reidentifying +reif +reification +reifications +reified +reifier +reifiers +reifies +reifs +reify +reifying +reign +reigned +reigning +reignite +reignited +reignites +reigniting +reignition +reignitions +reigns +reimage +reimaged +reimages +reimagine +reimagined +reimagines +reimaging +reimagining +reimbursable +reimburse +reimbursed +reimbursement +reimbursements +reimburses +reimbursing +reimmerse +reimmersed +reimmerses +reimmersing +reimplant +reimplantation +reimplantations +reimplanted +reimplanting +reimplants +reimport +reimportation +reimportations +reimported +reimporting +reimports +reimpose +reimposed +reimposes +reimposing +reimposition +reimpositions +reimpression +reimpressions +rein +reincarnate +reincarnated +reincarnates +reincarnating +reincarnation +reincarnations +reincite +reincited +reincites +reinciting +reincorporate +reincorporated +reincorporates +reincorporating +reincorporation +reincorporations +reincur +reincurred +reincurring +reincurs +reindeer +reindeers +reindex +reindexed +reindexes +reindexing +reindict +reindicted +reindicting +reindictment +reindictments +reindicts +reinduce +reinduced +reinduces +reinducing +reinduct +reinducted +reinducting +reinducts +reindustrialization +reindustrializations +reindustrialize +reindustrialized +reindustrializes +reindustrializing +reined +reinfect +reinfected +reinfecting +reinfection +reinfections +reinfects +reinfestation +reinfestations +reinflate +reinflated +reinflates +reinflating +reinflation +reinflations +reinforce +reinforceable +reinforced +reinforcement +reinforcements +reinforcer +reinforcers +reinforces +reinforcing +reinform +reinformed +reinforming +reinforms +reinfuse +reinfused +reinfuses +reinfusing +reinhabit +reinhabited +reinhabiting +reinhabits +reining +reinitiate +reinitiated +reinitiates +reinitiating +reinject +reinjected +reinjecting +reinjection +reinjections +reinjects +reinjure +reinjured +reinjures +reinjuries +reinjuring +reinjury +reink +reinked +reinking +reinks +reinless +reinnervate +reinnervated +reinnervates +reinnervating +reinnervation +reinnervations +reinoculate +reinoculated +reinoculates +reinoculating +reinoculation +reinoculations +reins +reinsert +reinserted +reinserting +reinsertion +reinsertions +reinserts +reinsman +reinsmen +reinspect +reinspected +reinspecting +reinspection +reinspections +reinspects +reinspire +reinspired +reinspires +reinspiring +reinstall +reinstallation +reinstallations +reinstalled +reinstalling +reinstalls +reinstate +reinstated +reinstatement +reinstatements +reinstates +reinstating +reinstitute +reinstituted +reinstitutes +reinstituting +reinstitutionalization +reinstitutionalizations +reinstitutionalize +reinstitutionalized +reinstitutionalizes +reinstitutionalizing +reinsurance +reinsurances +reinsure +reinsured +reinsurer +reinsurers +reinsures +reinsuring +reintegrate +reintegrated +reintegrates +reintegrating +reintegration +reintegrations +reintegrative +reinter +reinterpret +reinterpretation +reinterpretations +reinterpreted +reinterpreting +reinterprets +reinterred +reinterring +reinters +reinterview +reinterviewed +reinterviewing +reinterviews +reintroduce +reintroduced +reintroduces +reintroducing +reintroduction +reintroductions +reinvade +reinvaded +reinvades +reinvading +reinvasion +reinvasions +reinvent +reinvented +reinventing +reinvention +reinventions +reinvents +reinvest +reinvested +reinvestigate +reinvestigated +reinvestigates +reinvestigating +reinvestigation +reinvestigations +reinvesting +reinvestment +reinvestments +reinvests +reinvigorate +reinvigorated +reinvigorates +reinvigorating +reinvigoration +reinvigorations +reinvigorator +reinvigorators +reinvite +reinvited +reinvites +reinviting +reinvoke +reinvoked +reinvokes +reinvoking +reis +reissue +reissued +reissuer +reissuers +reissues +reissuing +reitbok +reitboks +reiterate +reiterated +reiterates +reiterating +reiteration +reiterations +reiterative +reiteratively +reive +reived +reiver +reivers +reives +reiving +rejacket +rejacketed +rejacketing +rejackets reject +rejected +rejectee +rejectees +rejecter +rejecters +rejecting +rejectingly +rejection +rejections +rejective +rejector +rejectors +rejects +rejigger +rejiggered +rejiggering +rejiggers +rejoice +rejoiced +rejoicer +rejoicers +rejoices +rejoicing +rejoicingly +rejoicings +rejoin +rejoinder +rejoinders +rejoined +rejoining +rejoins +rejudge +rejudged +rejudges +rejudging +rejuggle +rejuggled +rejuggles +rejuggling +rejuvenate +rejuvenated +rejuvenates +rejuvenating +rejuvenation +rejuvenations +rejuvenator +rejuvenators +rejuvenescence +rejuvenescences +rejuvenescent +rekey +rekeyboard +rekeyboarded +rekeyboarding +rekeyboards +rekeyed +rekeying +rekeys +rekindle +rekindled +rekindles +rekindling +reknit +reknits +reknitted +reknitting +relabel +relabeled +relabeling +relabelled +relabelling +relabels +relace +relaced +relaces +relacing +relacquer +relacquered +relacquering +relacquers +relaid +relandscape +relandscaped +relandscapes +relandscaping +relapse +relapsed +relapser +relapsers +relapses +relapsing +relatable relate +related +relatedly +relatedness +relatednesses +relater +relaters +relates +relating relation +relational +relationally +relations relationship +relationships relative +relatively +relatives +relativism +relativisms +relativist +relativistic +relativistically +relativists +relativities +relativity +relativize +relativized +relativizes +relativizing +relator +relators +relaunch +relaunched +relaunches +relaunching relax +relaxant +relaxants +relaxation +relaxations +relaxed +relaxedly +relaxedness +relaxednesses +relaxer +relaxers +relaxes +relaxin +relaxing +relaxins relay +relayed +relaying +relays +relearn +relearned +relearning +relearns +relearnt +releasable +release +released +releaser +releasers +releases +releasing +relegate +relegated +relegates +relegating +relegation +relegations +relend +relending +relends +relent +relented +relenting +relentless +relentlessly +relentlessness +relentlessnesses +relents +relet +relets +reletter +relettered +relettering +reletters +reletting +relevance +relevances +relevancies +relevancy relevant +relevantly +releve +releves +reliabilities +reliability reliable +reliableness +reliablenesses +reliables +reliably +reliance +reliances +reliant +reliantly +relic +relicense +relicensed +relicenses +relicensing +relicensure +relicensures +relics +relict +reliction +relictions +relicts +relied relief +reliefs +relier +reliers +relies +relievable +relieve +relieved +relievedly +reliever +relievers +relieves +relieving +relievo +relievos +relight +relighted +relighting +relights religion +religionist +religionists +religionless +religions +religiose +religiosities +religiosity religious +religiously +religiousness +religiousnesses +reline +relined +relines +relining +relink +relinked +relinking +relinks +relinquish +relinquished +relinquishes +relinquishing +relinquishment +relinquishments +reliquaries +reliquary +relique +reliquefied +reliquefies +reliquefy +reliquefying +reliques +reliquiae +relish +relishable +relished +relishes +relishing +relist +relisted +relisting +relists +relit +relive +relived +relives +reliving +reload +reloaded +reloader +reloaders +reloading +reloads +reloan +reloaned +reloaning +reloans +relocatable +relocate +relocated +relocatee +relocatees +relocates +relocating +relocation +relocations +relock +relocked +relocking +relocks +relook +relooked +relooking +relooks +relubricate +relubricated +relubricates +relubricating +relubrication +relubrications +relucent +reluct +reluctance +reluctances +reluctancies +reluctancy +reluctant +reluctantly +reluctate +reluctated +reluctates +reluctating +reluctation +reluctations +relucted +relucting +relucts +relume +relumed +relumes +relumine +relumined +relumines +reluming +relumining rely +relying +rem +remade +remail +remailed +remailing +remails remain +remainder +remaindered +remaindering +remainders +remained +remaining +remains +remake +remaker +remakers +remakes +remaking +reman +remand +remanded +remanding +remands +remanence +remanences +remanent +remanned +remanning +remans +remanufacture +remanufactured +remanufacturer +remanufacturers +remanufactures +remanufacturing +remap +remapped +remapping +remaps remark +remarkable +remarkableness +remarkablenesses +remarkably +remarked +remarker +remarkers +remarket +remarketed +remarketing +remarkets +remarking +remarks +remarque +remarques +remarriage +remarriages +remarried +remarries +remarry +remarrying +remaster +remastered +remastering +remasters +rematch +rematched +rematches +rematching +remate +remated +rematerialize +rematerialized +rematerializes +rematerializing +remates +remating +remeasure +remeasured +remeasurement +remeasurements +remeasures +remeasuring +remediabilities +remediability +remediable +remedial +remedially +remediate +remediated +remediates +remediating +remediation +remediations +remedied +remedies +remediless +remedy +remedying +remeet +remeeting +remeets +remelt +remelted +remelting +remelts remember +rememberabilities +rememberability +rememberable +remembered +rememberer +rememberers +remembering +remembers +remembrance +remembrancer +remembrancers +remembrances +remend +remended +remending +remends +remerge +remerged +remerges +remerging +remet +remex +remiges +remigial +remigration +remigrations +remilitarization +remilitarizations +remilitarize +remilitarized +remilitarizes +remilitarizing remind +reminded +reminder +reminders +remindful +reminding +reminds +reminisce +reminisced +reminiscence +reminiscences +reminiscent +reminiscential +reminiscently +reminiscer +reminiscers +reminisces +reminiscing +remint +reminted +reminting +remints +remise +remised +remises +remising +remiss +remissible +remissibly +remission +remissions +remissly +remissness +remissnesses +remit +remitment +remitments +remits +remittable +remittal +remittals +remittance +remittances +remitted +remittent +remitter +remitters +remitting +remittor +remittors +remix +remixed +remixes +remixing +remixt +remnant +remnants +remobilization +remobilizations +remobilize +remobilized +remobilizes +remobilizing +remodel +remodeled +remodeling +remodelled +remodelling +remodels +remodified +remodifies +remodify +remodifying +remoisten +remoistened +remoistening +remoistens +remolade +remolades +remold +remolded +remolding +remolds +remonetization +remonetizations +remonetize +remonetized +remonetizes +remonetizing +remonstrance +remonstrances +remonstrant +remonstrantly +remonstrants +remonstrate +remonstrated +remonstrates +remonstrating +remonstration +remonstrations +remonstrative +remonstratively +remonstrator +remonstrators +remora +remoras +remorid +remorse +remorseful +remorsefully +remorsefulness +remorsefulnesses +remorseless +remorselessly +remorselessness +remorselessnesses +remorses +remortgage +remortgaged +remortgages +remortgaging remote +remotely +remoteness +remotenesses +remoter +remotes +remotest +remotion +remotions +remotivate +remotivated +remotivates +remotivating +remotivation +remotivations +remount +remounted +remounting +remounts +removabilities +removability +removable +removableness +removablenesses +removably +removal +removals remove +removeable +removed +remover +removers +removes +removing +rems +remuda +remudas +remunerate +remunerated +remunerates +remunerating +remuneration +remunerations +remunerative +remuneratively +remunerativeness +remunerativenesses +remunerator +remunerators +remuneratory +remythologize +remythologized +remythologizes +remythologizing +renail +renailed +renailing +renails +renaissance +renaissances +renal +rename +renamed +renames +renaming +renascence +renascences +renascent +renationalization +renationalizations +renationalize +renationalized +renationalizes +renationalizing +renaturation +renaturations +renature +renatured +renatures +renaturing +rencontre +rencontres +rencounter +rencountered +rencountering +rencounters +rend +rended +render +renderable +rendered +renderer +renderers +rendering +renders +rendezvous +rendezvoused +rendezvouses +rendezvousing +rendible +rending +rendition +renditions +rends +rendzina +rendzinas +renegade +renegaded +renegades +renegading +renegado +renegadoes +renegados +renege +reneged +reneger +renegers +reneges +reneging +renegotiable +renegotiate +renegotiated +renegotiates +renegotiating +renegotiation +renegotiations +renest +renested +renesting +renests +renew +renewabilities +renewability +renewable +renewably +renewal +renewals +renewed +renewer +renewers +renewing +renews +reniform +renig +renigged +renigging +renigs +renin +renins +renitencies +renitency +renitent +renminbi +rennase +rennases +rennet +rennets +rennin +rennins +renogram +renograms +renographic +renographies +renography +renominate +renominated +renominates +renominating +renomination +renominations +renormalization +renormalizations +renormalize +renormalized +renormalizes +renormalizing +renotified +renotifies +renotify +renotifying +renounce +renounced +renouncement +renouncements +renouncer +renouncers +renounces +renouncing +renovascular +renovate +renovated +renovates +renovating +renovation +renovations +renovative +renovator +renovators +renown +renowned +renowning +renowns rent +rentabilities +rentability +rentable +rental +rentals +rente +rented +renter +renters +rentes +rentier +rentiers +renting +rents +renumber +renumbered +renumbering +renumbers +renunciate +renunciates +renunciation +renunciations +renunciative +renunciatory +renvoi +renvois +reobject +reobjected +reobjecting +reobjects +reobserve +reobserved +reobserves +reobserving +reobtain +reobtained +reobtaining +reobtains +reoccupation +reoccupations +reoccupied +reoccupies +reoccupy +reoccupying +reoccur +reoccurred +reoccurrence +reoccurrences +reoccurring +reoccurs +reoffer +reoffered +reoffering +reoffers +reoil +reoiled +reoiling +reoils +reopen +reopened +reopening +reopenings +reopens +reoperate +reoperated +reoperates +reoperating +reoperation +reoperations +reoppose +reopposed +reopposes +reopposing +reorchestrate +reorchestrated +reorchestrates +reorchestrating +reorchestration +reorchestrations +reordain +reordained +reordaining +reordains +reorder +reordered +reordering +reorders +reorganization +reorganizational +reorganizations +reorganize +reorganized +reorganizer +reorganizers +reorganizes +reorganizing +reorient +reorientate +reorientated +reorientates +reorientating +reorientation +reorientations +reoriented +reorienting +reorients +reoutfit +reoutfits +reoutfitted +reoutfitting +reovirus +reoviruses +reoxidation +reoxidations +reoxidize +reoxidized +reoxidizes +reoxidizing +rep +repacified +repacifies +repacify +repacifying +repack +repackage +repackaged +repackager +repackagers +repackages +repackaging +repacked +repacking +repacks +repaid +repaint +repainted +repainting +repaints repair +repairabilities +repairability +repairable +repaired +repairer +repairers +repairing +repairman +repairmen +repairs +repand +repandly +repanel +repaneled +repaneling +repanelled +repanelling +repanels +repaper +repapered +repapering +repapers +reparable +reparation +reparations +reparative +repark +reparked +reparking +reparks +repartee +repartees +repartition +repartitions +repass +repassage +repassages +repassed +repasses +repassing +repast +repasted +repasting +repasts +repatch +repatched +repatches +repatching +repatriate +repatriated +repatriates +repatriating +repatriation +repatriations +repattern +repatterned +repatterning +repatterns +repave +repaved +repaves +repaving +repay +repayable +repaying +repayment +repayments +repays +repeal +repealable +repealed +repealer +repealers +repealing +repeals repeat +repeatabilities +repeatability +repeatable +repeated +repeatedly +repeater +repeaters +repeating +repeats +repechage +repechages +repeg +repegged +repegging +repegs +repel +repellant +repellants +repelled +repellencies +repellency +repellent +repellently +repellents +repeller +repellers +repelling +repels +repent +repentance +repentances +repentant +repentantly +repented +repenter +repenters +repenting +repents +repeople +repeopled +repeoples +repeopling +repercussion +repercussions +repercussive +reperk +reperked +reperking +reperks +repertoire +repertoires +repertories +repertory +repetend +repetends +repetition +repetitional +repetitions +repetitious +repetitiously +repetitiousness +repetitiousnesses +repetitive +repetitively +repetitiveness +repetitivenesses +rephotograph +rephotographed +rephotographing +rephotographs +rephrase +rephrased +rephrases +rephrasing +repin +repine +repined +repiner +repiners +repines +repining +repinned +repinning +repins replace +replaceable +replaced +replacement +replacements +replacer +replacers +replaces +replacing +replan +replanned +replanning +replans +replant +replantation +replantations +replanted +replanting +replants +replaster +replastered +replastering +replasters +replate +replated +replates +replating +replay +replayed +replaying +replays +replead +repleaded +repleader +repleaders +repleading +repleads +repled +repledge +repledged +repledges +repledging +replenish +replenishable +replenished +replenisher +replenishers +replenishes +replenishing +replenishment +replenishments +replete +repleteness +repletenesses +repletion +repletions +repleviable +replevied +replevies +replevin +replevined +replevining +replevins +replevy +replevying +replica +replicabilities +replicability +replicable +replicas +replicase +replicases +replicate +replicated +replicates +replicating +replication +replications +replicative +replicon +replicons +replied +replier +repliers +replies +replot +replots +replotted +replotting +replumb +replumbed +replumbing +replumbs +replunge +replunged +replunges +replunging reply +replying +repo +repolarization +repolarizations +repolarize +repolarized +repolarizes +repolarizing +repolish +repolished +repolishes +repolishing +repoll +repolled +repolling +repolls +repopularize +repopularized +repopularizes +repopularizing +repopulate +repopulated +repopulates +repopulating +repopulation +repopulations report +reportable +reportage +reportages +reported +reportedly reporter +reporters +reporting +reportorial +reportorially +reports +repos +reposal +reposals +repose +reposed +reposeful +reposefully +reposefulness +reposefulnesses +reposer +reposers +reposes +reposing +reposit +reposited +repositing +reposition +repositioned +repositioning +repositions +repositories +repository +reposits +repossess +repossessed +repossesses +repossessing +repossession +repossessions +repossessor +repossessors +repot +repots +repotted +repotting +repour +repoured +repouring +repours +repousse +repousses +repower +repowered +repowering +repowers +repp +repped +repps +reprehend +reprehended +reprehending +reprehends +reprehensibilities +reprehensibility +reprehensible +reprehensibleness +reprehensiblenesses +reprehensibly +reprehension +reprehensions +reprehensive represent +representable +representation +representational +representationalism +representationalisms +representationalist +representationalists +representationally +representations representative +representatively +representativeness +representativenesses +representatives +representativities +representativity +represented +representer +representers +representing +represents +repress +repressed +represses +repressibilities +repressibility +repressible +repressing +repression +repressionist +repressions +repressive +repressively +repressiveness +repressivenesses +repressor +repressors +repressurize +repressurized +repressurizes +repressurizing +reprice +repriced +reprices +repricing +reprieval +reprievals +reprieve +reprieved +reprieves +reprieving +reprimand +reprimanded +reprimanding +reprimands +reprint +reprinted +reprinter +reprinters +reprinting +reprints +reprisal +reprisals +reprise +reprised +reprises +reprising +repristinate +repristinated +repristinates +repristinating +repristination +repristinations +reprivatization +reprivatizations +reprivatize +reprivatized +reprivatizes +reprivatizing +repro +reproach +reproachable +reproached +reproacher +reproachers +reproaches +reproachful +reproachfully +reproachfulness +reproachfulnesses +reproaching +reproachingly +reprobance +reprobances +reprobate +reprobated +reprobates +reprobating +reprobation +reprobations +reprobative +reprobatory +reprobe +reprobed +reprobes +reprobing +reprocess +reprocessed +reprocesses +reprocessing +reproduce +reproduced +reproducer +reproducers +reproduces +reproducibilities +reproducibility +reproducible +reproducibles +reproducibly +reproducing +reproduction +reproductions +reproductive +reproductively +reproductives +reprogram +reprogramed +reprograming +reprogrammable +reprogrammed +reprogramming +reprograms +reprographer +reprographers +reprographic +reprographics +reprographies +reprography +reproof +reproofs +repros +reproval +reprovals +reprove +reproved +reprover +reprovers +reproves +reproving +reprovingly +reprovision +reprovisioned +reprovisioning +reprovisions +reps +reptant +reptile +reptiles +reptilia +reptilian +reptilians +reptilium republic +republican +republicanism +republicanisms +republicanize +republicanized +republicanizes +republicanizing +republicans +republication +republications +republics +republish +republished +republisher +republishers +republishes +republishing +repudiate +repudiated +repudiates +repudiating +repudiation +repudiationist +repudiationists +repudiations +repudiator +repudiators +repugn +repugnance +repugnances +repugnancies +repugnancy +repugnant +repugnantly +repugned +repugning +repugns +repulse +repulsed +repulser +repulsers +repulses +repulsing +repulsion +repulsions +repulsive +repulsively +repulsiveness +repulsivenesses +repump +repumped +repumping +repumps +repunctuation +repunctuations +repurchase +repurchased +repurchases +repurchasing +repurified +repurifies +repurify +repurifying +repursue +repursued +repursues +repursuing +reputabilities +reputability +reputable +reputably reputation +reputational +reputations +repute +reputed +reputedly +reputes +reputing +requalification +requalifications +requalified +requalifies +requalify +requalifying request +requested +requester +requesters +requesting +requestor +requestors +requests +requiem +requiems +requiescat +requiescats +requin +requins require +required requirement +requirements +requirer +requirers +requires +requiring +requisite +requisiteness +requisitenesses +requisites +requisition +requisitioned +requisitioning +requisitions +requital +requitals +requite +requited +requiter +requiters +requites +requiting +rerack +reracked +reracking +reracks +reradiate +reradiated +reradiates +reradiating +reradiation +reradiations +reraise +reraised +reraises +reraising +reran +reread +rereading +rereadings +rereads +rerecord +rerecorded +rerecording +rerecords +reredos +reredoses +reregister +reregistered +reregistering +reregisters +reregistration +reregistrations +reregulate +reregulated +reregulates +reregulating +reregulation +reregulations +rerelease +rereleased +rereleases +rereleasing +reremice +reremind +rereminded +rereminding +rereminds +reremouse +rerepeat +rerepeated +rerepeating +rerepeats +rereview +rereviewed +rereviewing +rereviews +rereward +rerewards +rerig +rerigged +rerigging +rerigs +rerise +rerisen +rerises +rerising +reroll +rerolled +reroller +rerollers +rerolling +rerolls +reroof +reroofed +reroofing +reroofs +rerose +reroute +rerouted +reroutes +rerouting +rerun +rerunning +reruns +res +resaddle +resaddled +resaddles +resaddling +resaid +resail +resailed +resailing +resails +resalable +resale +resales +resalute +resaluted +resalutes +resaluting +resample +resampled +resamples +resampling +resaw +resawed +resawing +resawn +resaws +resay +resaying +resays +rescale +rescaled +rescales +rescaling +reschedule +rescheduled +reschedules +rescheduling +reschool +reschooled +reschooling +reschools +rescind +rescinded +rescinder +rescinders +rescinding +rescindment +rescindments +rescinds +rescission +rescissions +rescissory +rescore +rescored +rescores +rescoring +rescreen +rescreened +rescreening +rescreens +rescript +rescripts +rescuable rescue +rescued +rescuer +rescuers +rescues +rescuing +resculpt +resculpted +resculpting +resculpts +reseal +resealable +resealed +resealing +reseals research +researchable +researched +researcher +researchers +researches +researching +researchist +researchists +reseason +reseasoned +reseasoning +reseasons +reseat +reseated +reseating +reseats +reseau +reseaus +reseaux +resect +resectabilities +resectability +resectable +resected +resecting +resection +resections +resects +resecure +resecured +resecures +resecuring +reseda +resedas +resee +reseed +reseeded +reseeding +reseeds +reseeing +reseek +reseeking +reseeks +reseen +resees +resegregate +resegregated +resegregates +resegregating +resegregation +resegregations +reseize +reseized +reseizes +reseizing +resell +reseller +resellers +reselling +resells +resemblance +resemblances +resemblant resemble +resembled +resembles +resembling +resend +resending +resends +resensitize +resensitized +resensitizes +resensitizing +resent +resented +resentence +resentenced +resentences +resentencing +resentful +resentfully +resentfulness +resentfulnesses +resenting +resentment +resentments +resents +reserpine +reserpines +reservable reservation +reservationist +reservationists +reservations reserve +reserved +reservedly +reservedness +reservednesses +reserver +reservers +reserves +reservice +reserviced +reservices +reservicing +reserving +reservist +reservists +reservoir +reservoirs +reset +resets +resettable +resetter +resetters +resetting +resettle +resettled +resettlement +resettlements +resettles +resettling +resew +resewed +resewing +resewn +resews +resh +reshape +reshaped +reshaper +reshapers +reshapes +reshaping +reshave +reshaved +reshaven +reshaves +reshaving +reshes +reshine +reshined +reshines +reshingle +reshingled +reshingles +reshingling +reshining +reship +reshipped +reshipping +reships +reshod +reshoe +reshoeing +reshoes +reshone +reshoot +reshooting +reshoots +reshot +reshow +reshowed +reshowing +reshown +reshows +reshuffle +reshuffled +reshuffles +reshuffling +resid +reside +resided +residence +residences +residencies +residency +resident +residential +residentially +residents +resider +residers +resides +residing +resids +residua +residual +residually +residuals +residuary +residue +residues +residuum +residuums +resift +resifted +resifting +resifts +resight +resighted +resighting +resights resign +resignation +resignations +resigned +resignedly +resignedness +resignednesses +resigner +resigners +resigning +resigns +resile +resiled +resiles +resilience +resiliences +resiliencies +resiliency +resilient +resiliently +resiling +resilver +resilvered +resilvering +resilvers +resin +resinate +resinated +resinates +resinating +resined +resinified +resinifies +resinify +resinifying +resining +resinoid +resinoids +resinous +resins +resiny resist +resistance +resistances +resistant +resistants +resisted +resister +resisters +resistibilities +resistibility +resistible +resisting +resistive +resistively +resistiveness +resistivenesses +resistivities +resistivity +resistless +resistlessly +resistlessness +resistlessnesses +resistor +resistors +resists +resite +resited +resites +resiting +resitting +resittings +resize +resized +resizes +resizing +resketch +resketched +resketches +resketching +reslate +reslated +reslates +reslating +resmelt +resmelted +resmelting +resmelts +resmooth +resmoothed +resmoothing +resmooths +resoak +resoaked +resoaking +resoaks +resocialization +resocializations +resocialize +resocialized +resocializes +resocializing +resod +resodded +resodding +resods +resojet +resojets +resold +resolder +resoldered +resoldering +resolders +resole +resoled +resoles +resolidification +resolidifications +resolidified +resolidifies +resolidify +resolidifying +resoling +resoluble +resolute +resolutely +resoluteness +resolutenesses +resoluter +resolutes +resolutest +resolution +resolutions +resolvable +resolve +resolved +resolvent +resolvents +resolver +resolvers +resolves +resolving +resonance +resonances +resonant +resonantly +resonants +resonate +resonated +resonates +resonating +resonator +resonators +resorb +resorbed +resorbing +resorbs +resorcin +resorcinol +resorcinols +resorcins +resorption +resorptions +resorptive +resort +resorted +resorter +resorters +resorting +resorts +resought +resound +resounded +resounding +resoundingly +resounds +resource +resourceful +resourcefully +resourcefulness +resourcefulnesses +resources +resow +resowed +resowing +resown +resows +respace +respaced +respaces +respacing +respade +respaded +respades +respading +respeak +respeaking +respeaks respect +respectabilities +respectability +respectable +respectableness +respectablenesses +respectables +respectably +respected +respecter +respecters +respectful +respectfully +respectfulness +respectfulnesses +respecting +respective +respectively +respectiveness +respectivenesses +respects +respell +respelled +respelling +respellings +respells +respelt +respirable +respiration +respirations +respirator +respirators +respiratory +respire +respired +respires +respiring +respiritualize +respiritualized +respiritualizes +respiritualizing +respirometer +respirometers +respirometric +respirometries +respirometry +respite +respited +respites +respiting +resplendence +resplendences +resplendencies +resplendency +resplendent +resplendently +resplice +respliced +resplices +resplicing +resplit +resplits +resplitting +respoke +respoken respond +responded +respondent +respondents +responder +responders +responding +responds +responsa +response +responses +responsibilities responsibility +responsible +responsibleness +responsiblenesses +responsibly +responsions +responsive +responsively +responsiveness +responsivenesses +responsories +responsory +responsum +respot +respots +respotted +respotting +resprang +respray +resprayed +respraying +resprays +respread +respreading +respreads +respring +respringing +resprings +resprout +resprouted +resprouting +resprouts +resprung +ressentiment +ressentiments rest +restabilize +restabilized +restabilizes +restabilizing +restack +restacked +restacking +restacks +restaff +restaffed +restaffing +restaffs +restage +restaged +restages +restaging +restamp +restamped +restamping +restamps +restart +restartable +restarted +restarting +restarts +restate +restated +restatement +restatements +restates +restating restaurant +restauranteur +restauranteurs +restaurants +restaurateur +restaurateurs +rested +rester +resters +restful +restfuller +restfullest +restfully +restfulness +restfulnesses +restimulate +restimulated +restimulates +restimulating +restimulation +restimulations +resting +restitch +restitched +restitches +restitching +restitute +restituted +restitutes +restituting +restitution +restitutions +restive +restively +restiveness +restivenesses +restless +restlessly +restlessness +restlessnesses +restock +restocked +restocking +restocks +restoke +restoked +restokes +restoking +restorable +restoral +restorals +restoration +restorations +restorative +restoratives +restore +restored +restorer +restorers +restores +restoring +restrain +restrainable +restrained +restrainedly +restrainer +restrainers +restraining +restrains +restraint +restraints +restrengthen +restrengthened +restrengthening +restrengthens +restress +restressed +restresses +restressing +restricken +restrict +restricted +restrictedly +restricting restriction +restrictionism +restrictionisms +restrictionist +restrictionists +restrictions +restrictive +restrictively +restrictiveness +restrictivenesses +restrictives +restricts +restrike +restrikes +restriking +restring +restringing +restrings +restrive +restriven +restrives +restriving +restroom +restrooms +restrove +restruck +restructure +restructured +restructures +restructuring +restrung +rests +restudied +restudies +restudy +restudying +restuff +restuffed +restuffing +restuffs +restyle +restyled +restyles +restyling +resubmission +resubmissions +resubmit +resubmits +resubmitted +resubmitting result +resultant +resultantly +resultants +resulted +resultful +resulting +resultless +results +resume +resumed +resumer +resumers +resumes +resuming +resummon +resummoned +resummoning +resummons +resumption +resumptions +resupinate +resupine +resupplied +resupplies +resupply +resupplying +resurface +resurfaced +resurfacer +resurfacers +resurfaces +resurfacing +resurge +resurged +resurgence +resurgences +resurgent +resurges +resurging +resurrect +resurrected +resurrecting +resurrection +resurrectional +resurrectionist +resurrectionists +resurrections +resurrects +resurvey +resurveyed +resurveying +resurveys +resuscitate +resuscitated +resuscitates +resuscitating +resuscitation +resuscitations +resuscitative +resuscitator +resuscitators +resyntheses +resynthesis +resynthesize +resynthesized +resynthesizes +resynthesizing +resystematize +resystematized +resystematizes +resystematizing +ret +retable +retables +retack +retacked +retacking +retackle +retackled +retackles +retackling +retacks +retag +retagged +retagging +retags +retail +retailed +retailer +retailers +retailing +retailings +retailor +retailored +retailoring +retailors +retails +retain +retained +retainer +retainers +retaining +retains +retake +retaken +retaker +retakers +retakes +retaking +retaliate +retaliated +retaliates +retaliating +retaliation +retaliations +retaliative +retaliatory +retape +retaped +retapes +retaping +retard +retardant +retardants +retardate +retardates +retardation +retardations +retarded +retarder +retarders +retarding +retards +retarget +retargeted +retargeting +retargets +retaste +retasted +retastes +retasting +retaught +retax +retaxed +retaxes +retaxing +retch +retched +retches +retching +rete +reteach +reteaches +reteaching +reteam +reteamed +reteaming +reteams +retear +retearing +retears retell +retelling +retellings +retells +retem +retemper +retempered +retempering +retempers +retems +retene +retenes +retention +retentions +retentive +retentively +retentiveness +retentivenesses +retentivities +retentivity +retest +retested +retesting +retests +retexture +retextured +retextures +retexturing +rethink +rethinker +rethinkers +rethinking +rethinks +rethought +rethread +rethreaded +rethreading +rethreads +retia +retial +retiarii +retiarius +retiary +reticence +reticences +reticencies +reticency +reticent +reticently +reticle +reticles +reticula +reticular +reticulate +reticulated +reticulately +reticulates +reticulating +reticulation +reticulations +reticule +reticules +reticulocyte +reticulocytes +reticuloendothelial +reticulum +retie +retied +reties +retiform +retighten +retightened +retightening +retightens +retile +retiled +retiles +retiling +retime +retimed +retimes +retiming +retina +retinacula +retinaculum +retinae +retinal +retinals +retinas +retine +retinene +retinenes +retines +retinite +retinites +retinitides +retinitis +retinoblastoma +retinoblastomas +retinoblastomata +retinoid +retinoids +retinol +retinols +retinopathies +retinopathy +retinoscopies +retinoscopy +retinotectal +retint +retinted +retinting +retints +retinue +retinued +retinues +retinula +retinulae +retinular +retinulas +retirant +retirants retire +retired +retiredly +retiredness +retirednesses +retiree +retirees +retirement +retirements +retirer +retirers +retires +retiring +retiringly +retiringness +retiringnesses +retitle +retitled +retitles +retitling +retold +retook +retool +retooled +retooling +retools +retore +retorn +retort +retorted +retorter +retorters +retorting +retorts +retouch +retouched +retoucher +retouchers +retouches +retouching +retrace +retraced +retraces +retracing +retrack +retracked +retracking +retracks +retract +retractable +retracted +retractile +retractilities +retractility +retracting +retraction +retractions +retractor +retractors +retracts +retrain +retrainable +retrained +retraining +retrains +retral +retrally +retransfer +retransferred +retransferring +retransfers +retransform +retransformation +retransformations +retransformed +retransforming +retransforms +retranslate +retranslated +retranslates +retranslating +retranslation +retranslations +retransmission +retransmissions +retransmit +retransmits +retransmitted +retransmitting +retread +retreaded +retreading +retreads +retreat +retreatant +retreatants +retreated +retreater +retreaters +retreating +retreats +retrench +retrenched +retrenches +retrenching +retrenchment +retrenchments +retrial +retrials +retribution +retributions +retributive +retributively +retributory +retried +retries +retrievabilities +retrievability +retrievable +retrieval +retrievals +retrieve +retrieved +retriever +retrievers +retrieves +retrieving +retrim +retrimmed +retrimming +retrims +retro +retroact +retroacted +retroacting +retroaction +retroactions +retroactive +retroactively +retroactivities +retroactivity +retroacts +retrocede +retroceded +retrocedes +retroceding +retrocession +retrocessions +retrodict +retrodicted +retrodicting +retrodiction +retrodictions +retrodictive +retrodicts +retrofire +retrofired +retrofires +retrofiring +retrofit +retrofits +retrofitted +retrofitting +retroflection +retroflections +retroflex +retroflexion +retroflexions +retrogradation +retrogradations +retrograde +retrograded +retrogradely +retrogrades +retrograding +retrogress +retrogressed +retrogresses +retrogressing +retrogression +retrogressions +retrogressive +retrogressively +retropack +retropacks +retroperitoneal +retroperitoneally +retroreflection +retroreflections +retroreflective +retroreflector +retroreflectors +retrorse +retros +retrospect +retrospected +retrospecting +retrospection +retrospections +retrospective +retrospectively +retrospectives +retrospects +retrousse +retroversion +retroversions +retroviral +retrovirus +retroviruses +retry +retrying +rets +retsina +retsinas +retted +retting +retune +retuned +retunes +retuning return +returnable +returnables +returned +returnee +returnees +returner +returners +returning +returns +retuse +retwist +retwisted +retwisting +retwists +retying +retype +retyped +retypes +retyping +reunification +reunifications +reunified +reunifies +reunify +reunifying +reunion +reunionist +reunionistic +reunionists +reunions +reunite +reunited +reuniter +reuniters +reunites +reuniting +reupholster +reupholstered +reupholstering +reupholsters +reusabilities +reusability +reusable +reuse +reused +reuses +reusing +reutilization +reutilizations +reutilize +reutilized +reutilizes +reutilizing +reutter +reuttered +reuttering +reutters +rev +revaccinate +revaccinated +revaccinates +revaccinating +revaccination +revaccinations +revalidate +revalidated +revalidates +revalidating +revalidation +revalidations +revalorization +revalorizations +revalorize +revalorized +revalorizes +revalorizing +revaluate +revaluated +revaluates +revaluating +revaluation +revaluations +revalue +revalued +revalues +revaluing +revamp +revamped +revamper +revampers +revamping +revamps +revanche +revanches +revanchism +revanchisms +revanchist +revanchists +revascularization +revascularizations +reveal +revealable +revealed +revealer +revealers +revealing +revealingly +revealment +revealments +reveals +revegetate +revegetated +revegetates +revegetating +revegetation +revegetations +revehent +reveille +reveilles +revel +revelation +revelations +revelator +revelators +revelatory +reveled +reveler +revelers +reveling +revelled +reveller +revellers +revelling +revelries +revelry +revels +revenant +revenants +revenge +revenged +revengeful +revengefully +revengefulness +revengefulnesses +revenger +revengers +revenges +revenging +revenual +revenue +revenued +revenuer +revenuers +revenues +reverb +reverbed +reverberant +reverberantly +reverberate +reverberated +reverberates +reverberating +reverberation +reverberations +reverberative +reverberatory +reverbing +reverbs +revere +revered +reverence +reverenced +reverencer +reverencers +reverences +reverencing +reverend +reverends +reverent +reverential +reverentially +reverently +reverer +reverers +reveres +reverie +reveries +reverified +reverifies +reverify +reverifying +revering +revers +reversal +reversals +reverse +reversed +reversely +reverser +reversers +reverses +reversibilities +reversibility +reversible +reversibles +reversibly +reversing +reversion +reversional +reversionary +reversioner +reversioners +reversions +reverso +reversos +revert +revertant +revertants +reverted +reverter +reverters +revertible +reverting +reverts +revery +revest +revested +revesting +revests +revet +revetment +revetments +revets +revetted +revetting +revictual +revictualed +revictualing +revictualled +revictualling +revictuals review +reviewable +reviewal +reviewals +reviewed +reviewer +reviewers +reviewing +reviews +revile +reviled +revilement +revilements +reviler +revilers +reviles +reviling +revisable +revisal +revisals +revise +revised +reviser +revisers +revises +revising revision +revisionary +revisionism +revisionisms +revisionist +revisionists +revisions +revisit +revisited +revisiting +revisits +revisor +revisors +revisory +revisualization +revisualizations +revitalise +revitalised +revitalises +revitalising +revitalization +revitalizations +revitalize +revitalized +revitalizes +revitalizing +revivable +revival +revivalism +revivalisms +revivalist +revivalistic +revivalists +revivals +revive +revived +reviver +revivers +revives +revivification +revivifications +revivified +revivifies +revivify +revivifying +reviving +reviviscence +reviviscences +reviviscent +revocable +revocation +revocations +revoice +revoiced +revoices +revoicing +revokable +revoke +revoked +revoker +revokers +revokes +revoking +revolt +revolted +revolter +revolters +revolting +revoltingly +revolts +revolute revolution +revolutionaries +revolutionarily +revolutionariness +revolutionarinesses +revolutionary +revolutionise +revolutionised +revolutionises +revolutionising +revolutionist +revolutionists +revolutionize +revolutionized +revolutionizer +revolutionizers +revolutionizes +revolutionizing +revolutions +revolvable +revolve +revolved +revolver +revolvers +revolves +revolving +revote +revoted +revotes +revoting +revs +revue +revues +revuist +revuists +revulsed +revulsion +revulsions +revulsive +revved +revving +rewake +rewaked +rewaken +rewakened +rewakening +rewakens +rewakes +rewaking +rewan reward +rewardable +rewarded +rewarder +rewarders +rewarding +rewardingly +rewards +rewarm +rewarmed +rewarming +rewarms +rewash +rewashed +rewashes +rewashing +rewax +rewaxed +rewaxes +rewaxing +reweave +reweaved +reweaves +reweaving +rewed +rewedded +rewedding +reweds +reweigh +reweighed +reweighing +reweighs +reweld +rewelded +rewelding +rewelds +rewet +rewets +rewetted +rewetting +rewiden +rewidened +rewidening +rewidens +rewin rewind +rewinded +rewinder +rewinders +rewinding +rewinds +rewinning +rewins +rewire +rewired +rewires +rewiring +rewoke +rewoken +rewon +reword +reworded +rewording +rewords +rework +reworked +reworking +reworks +rewound +rewove +rewoven +rewrap +rewrapped +rewrapping +rewraps +rewrapt +rewrite +rewriter +rewriters +rewrites +rewriting +rewritten +rewrote +rewrought +rex +rexes +reynard +reynards +rezone +rezoned +rezones +rezoning +rhabdocoele +rhabdocoeles +rhabdom +rhabdomancer +rhabdomancers +rhabdomancies +rhabdomancy +rhabdome +rhabdomere +rhabdomeres +rhabdomes +rhabdoms +rhabdomyosarcoma +rhabdomyosarcomas +rhabdomyosarcomata +rhabdovirus +rhabdoviruses +rhachides +rhachis +rhachises +rhadamanthine +rhamnose +rhamnoses +rhamnus +rhamnuses +rhaphae +rhaphe +rhaphes +rhapsode +rhapsodes +rhapsodic +rhapsodical +rhapsodically +rhapsodies +rhapsodist +rhapsodists +rhapsodize +rhapsodized +rhapsodizes +rhapsodizing +rhapsody +rhatanies +rhatany +rhea +rheas +rhebok +rheboks +rhematic +rhenium +rheniums +rheobase +rheobases +rheological +rheologically +rheologies +rheologist +rheologists +rheology +rheometer +rheometers +rheophil +rheostat +rheostatic +rheostats +rhesus +rhesuses +rhetor +rhetoric +rhetorical +rhetorically +rhetorician +rhetoricians +rhetorics +rhetors +rheum +rheumatic +rheumatically +rheumatics +rheumatism +rheumatisms +rheumatiz +rheumatizes +rheumatoid +rheumatologies +rheumatologist +rheumatologists +rheumatology +rheumic +rheumier +rheumiest +rheums +rheumy +rhinal +rhinencephala +rhinencephalic +rhinencephalon +rhinestone +rhinestoned +rhinestones +rhinitides +rhinitis +rhino +rhinoceri +rhinoceros +rhinoceroses +rhinoplasties +rhinoplasty +rhinos +rhinoscopies +rhinoscopy +rhinovirus +rhinoviruses +rhizobia +rhizobial +rhizobium +rhizoctonia +rhizoctonias +rhizoid +rhizoidal +rhizoids +rhizoma +rhizomata +rhizomatous +rhizome +rhizomes +rhizomic +rhizopi +rhizoplane +rhizoplanes +rhizopod +rhizopods +rhizopus +rhizopuses +rhizosphere +rhizospheres +rhizotomies +rhizotomy +rho +rhodamin +rhodamine +rhodamines +rhodamins +rhodic +rhodium +rhodiums +rhodochrosite +rhodochrosites +rhododendron +rhododendrons +rhodolite +rhodolites +rhodomontade +rhodomontades +rhodonite +rhodonites +rhodopsin +rhodopsins +rhodora +rhodoras +rhomb +rhombencephala +rhombencephalon +rhombi +rhombic +rhombohedra +rhombohedral +rhombohedron +rhombohedrons +rhomboid +rhomboidal +rhomboidei +rhomboideus +rhomboids +rhombs +rhombus +rhombuses +rhonchal +rhonchi +rhonchus +rhos +rhubarb +rhubarbs +rhumb +rhumba +rhumbaed +rhumbaing +rhumbas +rhumbs +rhus +rhuses rhyme +rhymed +rhymeless +rhymer +rhymers +rhymes +rhymester +rhymesters +rhyming +rhynchocephalian +rhynchocephalians +rhyolite +rhyolites +rhyolitic +rhyta +rhythm +rhythmic +rhythmical +rhythmically +rhythmicities +rhythmicity +rhythmics +rhythmist +rhythmists +rhythmization +rhythmizations +rhythmize +rhythmized +rhythmizes +rhythmizing +rhythms +rhytidome +rhytidomes +rhyton +rhytons +ria +rial +rials +rialto +rialtos +riant +riantly +rias +riata +riatas +rib +ribald +ribaldly +ribaldries +ribaldry +ribalds +riband +ribands +ribavirin +ribavirins +ribband +ribbands +ribbed +ribber +ribbers +ribbier +ribbiest +ribbing +ribbings +ribbon +ribboned +ribbonfish +ribbonfishes +ribboning +ribbonlike +ribbons +ribbony +ribby +ribes +ribgrass +ribgrasses +ribier +ribiers +ribless +riblet +riblets +riblike +riboflavin +riboflavins +ribonuclease +ribonucleases +ribonucleoprotein +ribonucleoproteins +ribonucleoside +ribonucleosides +ribonucleotide +ribonucleotides +ribose +riboses +ribosomal +ribosome +ribosomes +ribs +ribwort +ribworts rice +ricebird +ricebirds +riced +ricer +ricercar +ricercare +ricercari +ricercars +ricers +rices rich +richen +richened +richening +richens +richer +riches +richest +richly +richness +richnesses +richweed +richweeds +ricin +ricing +ricins +ricinus +ricinuses +rick +ricked +ricketier +ricketiest +rickets +rickettsia +rickettsiae +rickettsial +rickettsias +rickety +rickey +rickeys +ricking +rickrack +rickracks +ricks +ricksha +rickshas +rickshaw +rickshaws +ricochet +ricocheted +ricocheting +ricochets +ricochetted +ricochetting +ricotta +ricottas +ricrac +ricracs +rictal +rictus +rictuses rid +ridable +riddance +riddances +ridded +ridden +ridder +ridders +ridding riddle +riddled +riddler +riddlers +riddles +riddling ride +rideable +rident +rider +riderless +riders +ridership +riderships +rides +ridge +ridged +ridgel +ridgeline +ridgelines +ridgeling +ridgelings +ridgels +ridgepole +ridgepoles +ridges +ridgier +ridgiest +ridgil +ridgils +ridging +ridgling +ridglings +ridgy +ridicule +ridiculed +ridiculer +ridiculers +ridicules +ridiculing ridiculous +ridiculously +ridiculousness +ridiculousnesses +riding +ridings +ridley +ridleys +ridotto +ridottos +rids +riel +riels +riesling +rieslings +riever +rievers +rif +rifampicin +rifampicins +rifampin +rifampins +rife +rifely +rifeness +rifenesses +rifer +rifest +riff +riffed +riffing +riffle +riffled +riffler +rifflers +riffles +riffling +riffraff +riffraffs +riffs +rifle +riflebird +riflebirds +rifled +rifleman +riflemen +rifler +rifleries +riflers +riflery +rifles +rifling +riflings +rifs +rift +rifted +rifting +riftless +rifts +rig +rigadoon +rigadoons +rigamarole +rigamaroles +rigatoni +rigatonis +rigaudon +rigaudons +rigged +rigger +riggers +rigging +riggings right +righted +righteous +righteously +righteousness +righteousnesses +righter +righters +rightest +rightful +rightfully +rightfulness +rightfulnesses +righties +righting +rightism +rightisms +rightist +rightists +rightly +rightmost +rightness +rightnesses +righto +rights +rightward +righty rigid +rigidification +rigidifications +rigidified +rigidifies +rigidify +rigidifying +rigidities +rigidity +rigidly +rigidness +rigidnesses +rigmarole +rigmaroles +rigor +rigorism +rigorisms +rigorist +rigoristic +rigorists +rigorous +rigorously +rigorousness +rigorousnesses +rigors +rigour +rigours +rigs +rijsttafel +rijsttafels +rikisha +rikishas +rikshaw +rikshaws +rile +riled +riles +riley +rilievi +rilievo +riling +rill +rille +rilled +rilles +rillet +rillets +rillettes +rilling +rills +rim +rime +rimed +rimer +rimers +rimes +rimester +rimesters +rimfire +rimfires +rimier +rimiest +riminess +riminesses +riming +rimland +rimlands +rimless +rimmed +rimmer +rimmers +rimming +rimose +rimosely +rimosities +rimosity +rimous +rimple +rimpled +rimples +rimpling +rimrock +rimrocks +rims +rimy +rin +rind +rinded +rinderpest +rinderpests +rinds ring +ringbark +ringbarked +ringbarking +ringbarks +ringbolt +ringbolts +ringbone +ringbones +ringdove +ringdoves +ringed +ringent +ringer +ringers +ringgit +ringgits +ringhals +ringhalses +ringing +ringingly +ringleader +ringleaders +ringlet +ringlets +ringlike +ringmaster +ringmasters +ringneck +ringnecks +rings +ringside +ringsides +ringstraked +ringtail +ringtails +ringtaw +ringtaws +ringtoss +ringtosses +ringworm +ringworms +rink +rinks +rinning +rins +rinsable +rinse +rinsed +rinser +rinsers +rinses +rinsible +rinsing +rinsings +rioja +riojas +riot +rioted +rioter +rioters +rioting +riotous +riotously +riotousness +riotousnesses +riots +rip +riparian +ripcord +ripcords ripe +riped +ripely ripen +ripened +ripener +ripeners +ripeness +ripenesses +ripening +ripens +riper +ripes +ripest +ripieni +ripieno +ripienos +riping +ripoff +ripoffs +ripost +riposte +riposted +ripostes +riposting +riposts +rippable +ripped +ripper +rippers +ripping +ripple +rippled +rippler +ripplers +ripples +ripplet +ripplets +ripplier +rippliest +rippling +ripply +riprap +riprapped +riprapping +ripraps +rips +ripsaw +ripsaws +ripsnorter +ripsnorters +ripsnorting +ripstop +ripstops +riptide +riptides rise +risen +riser +risers +rises +rishi +rishis +risibilities +risibility +risible +risibles +risibly +rising +risings risk +risked +risker +riskers +riskier +riskiest +riskily +riskiness +riskinesses +risking +riskless +risks +risky +risorgimento +risorgimentos +risotto +risottos +risque +rissole +rissoles +risus +risuses +ritard +ritardando +ritardandos +ritards +rite +rites +ritornelli +ritornello +ritornellos +ritter +ritters +ritual +ritualism +ritualisms +ritualist +ritualistic +ritualistically +ritualists +ritualization +ritualizations +ritualize +ritualized +ritualizes +ritualizing +ritually +rituals +ritz +ritzes +ritzier +ritziest +ritzily +ritziness +ritzinesses +ritzy +rivage +rivages +rival +rivaled +rivaling +rivalled +rivalling +rivalries +rivalrous +rivalry +rivals +rive +rived +riven river +riverbank +riverbanks +riverbed +riverbeds +riverboat +riverboats +riverfront +riverfronts +riverine +rivers +riverside +riversides +riverward +riverwards +rives +rivet +riveted +riveter +riveters +riveting +rivetingly +rivets +rivetted +rivetting +riviera +rivieras +riviere +rivieres +riving +rivulet +rivulets +rivulose +riyal +riyals +roach +roached +roaches +roaching road +roadabilities +roadability +roadbed +roadbeds +roadblock +roadblocked +roadblocking +roadblocks +roadeo +roadeos +roadholding +roadholdings +roadhouse +roadhouses +roadie +roadies +roadkill +roadkills +roadless +roadrunner +roadrunners +roads +roadshow +roadshows +roadside +roadsides +roadstead +roadsteads +roadster +roadsters +roadway +roadways +roadwork +roadworks +roadworthiness +roadworthinesses +roadworthy +roam +roamed +roamer +roamers +roaming +roams +roan +roans +roar +roared +roarer +roarers +roaring +roaringly +roarings +roars roast +roasted +roaster +roasters +roasting +roasts rob +robalo +robalos +roband +robands +robbed +robber +robberies +robbers +robbery +robbin +robbing +robbins +robe +robed +robes +robin +robing +robins +roble +robles +roborant +roborants robot +robotic +robotically +robotics +robotism +robotisms +robotization +robotizations +robotize +robotized +robotizes +robotizing +robotries +robotry +robots +robs +robust +robusta +robustas +robuster +robustest +robustious +robustiously +robustiousness +robustiousnesses +robustly +robustness +robustnesses +roc +rocaille +rocailles +rochet +rochets rock +rockabies +rockabillies +rockabilly +rockaby +rockabye +rockabyes +rockaway +rockaways +rockbound +rocked +rocker +rockeries +rockers +rockery rocket +rocketed +rocketeer +rocketeers +rocketer +rocketers +rocketing +rocketries +rocketry +rockets +rockfall +rockfalls +rockfish +rockfishes +rockhopper +rockhoppers +rockhound +rockhounding +rockhoundings +rockhounds +rockier +rockiest +rockiness +rockinesses +rocking +rockless +rocklike +rockling +rocklings +rockoon +rockoons +rockrose +rockroses +rocks +rockshaft +rockshafts +rockweed +rockweeds +rockwork +rockworks +rocky +rococo +rococos +rocs +rod +rodded +rodding +rode +rodent +rodenticide +rodenticides +rodents +rodeo +rodeoed +rodeoing +rodeos +rodless +rodlike +rodman +rodmen +rodomontade +rodomontades +rods +rodsman +rodsmen +roe +roebuck +roebucks +roentgen +roentgenogram +roentgenograms +roentgenographic +roentgenographically +roentgenographies +roentgenography +roentgenologic +roentgenological +roentgenologically +roentgenologies +roentgenologist +roentgenologists +roentgenology +roentgens +roes +rogation +rogations +rogatory +roger +rogers +rogue +rogued +rogueing +rogueries +roguery +rogues +roguing +roguish +roguishly +roguishness +roguishnesses +roil +roiled +roilier +roiliest +roiling +roils +roily +roister +roistered +roisterer +roisterers +roistering +roisterous +roisterously +roisters +rolamite +rolamites role +roles +rolf +rolfed +rolfer +rolfers +rolfing +rolfs roll +rollaway +rollback +rollbacks +rolled +roller +rollers +rollick +rollicked +rollicking +rollicks +rollicky +rolling +rollings +rollmop +rollmops +rollout +rollouts +rollover +rollovers +rolls +rolltop +rollway +rollways +rom +romaine +romaines +roman +romance +romanced +romancer +romancers +romances +romancing +romanise +romanised +romanises +romanising +romanization +romanizations +romanize +romanized +romanizes +romanizing +romano +romanos +romans +romantic +romantically +romanticise +romanticised +romanticises +romanticising +romanticism +romanticisms +romanticist +romanticists +romanticization +romanticizations +romanticize +romanticized +romanticizes +romanticizing +romantics +romaunt +romaunts +romeldale +romeldales +romeo +romeos +romp +romped +romper +rompers +romping +rompish +romps +roms +rondeau +rondeaux +rondel +rondelet +rondelets +rondelle +rondelles +rondels +rondo +rondos +rondure +rondures +ronion +ronions +ronnel +ronnels +rontgen +rontgens +ronyon +ronyons +rood +roods roof +roofed +roofer +roofers +roofing +roofings +roofless +rooflike +roofline +rooflines +roofs +rooftop +rooftops +rooftree +rooftrees +rook +rooked +rookeries +rookery +rookie +rookier +rookies +rookiest +rooking +rooks +rooky room +roomed +roomer +roomers +roomette +roomettes +roomful +roomfuls +roomie +roomier +roomies +roomiest +roomily +roominess +roominesses +rooming +roommate +roommates +rooms +roomy +roorbach +roorbachs +roorback +roorbacks +roose +roosed +rooser +roosers +rooses +roosing +roost +roosted rooster +roosters +roosting +roosts root +rootage +rootages +rooted +rootedness +rootednesses +rooter +rooters +roothold +rootholds +rootier +rootiest +rooting +rootless +rootlessness +rootlessnesses +rootlet +rootlets +rootlike +roots +rootstock +rootstocks +rooty +ropable rope +roped +ropedancer +ropedancers +ropedancing +ropedancings +ropelike +roper +roperies +ropers +ropery +ropes +ropewalk +ropewalker +ropewalkers +ropewalks +ropeway +ropeways +ropey +ropier +ropiest +ropily +ropiness +ropinesses +roping +ropy +roque +roquelaure +roquelaures +roques +roquet +roqueted +roqueting +roquets +rorqual +rorquals +rosaceous +rosaria +rosarian +rosarians +rosaries +rosarium +rosariums +rosary +roscoe +roscoes rose +roseate +roseately +rosebay +rosebays +rosebud +rosebuds +rosebush +rosebushes +rosed +rosefish +rosefishes +roselike +roselle +roselles +rosemaling +rosemalings +rosemaries +rosemary +roseola +roseolar +roseolas +roseries +roseroot +roseroots +rosery +roses +roseslug +roseslugs +roset +rosets +rosette +rosettes +rosewater +rosewood +rosewoods +rosier +rosiest +rosily +rosin +rosined +rosiness +rosinesses +rosing +rosining +rosinol +rosinols +rosinous +rosins +rosinweed +rosinweeds +rosiny +rosolio +rosolios +rostella +rostellar +rostellum +rostellums +roster +rosters +rostra +rostral +rostrally +rostrate +rostrum +rostrums +rosulate +rosy rot +rota +rotameter +rotameters +rotaries +rotary +rotas +rotatable +rotate +rotated +rotates +rotating +rotation +rotational +rotations +rotative +rotatively +rotator +rotatores +rotators +rotatory +rotavirus +rotaviruses +rotch +rotche +rotches +rote +rotenone +rotenones +rotes +rotgut +rotguts +roti +rotifer +rotifers +rotiform +rotis +rotisserie +rotisseries +rotl +rotls +roto +rotogravure +rotogravures +rotor +rotorcraft +rotors +rotos +rototill +rototilled +rototiller +rototillers +rototilling +rototills +rots +rotte +rotted +rotten +rottener +rottenest +rottenly +rottenness +rottennesses +rottenstone +rottenstones +rotter +rotters +rottes +rotting +rottweiler +rottweilers +rotund +rotunda +rotundas +rotundities +rotundity +rotundly +rotundness +rotundnesses +roturier +roturiers +rouble +roubles +rouche +rouches +roue +rouen +rouens +roues +rouge +rouged +rouges rough +roughage +roughages +roughcast +roughcasting +roughcasts +roughdried +roughdries +roughdry +roughdrying +roughed +roughen +roughened +roughening +roughens +rougher +roughers +roughest +roughhew +roughhewed +roughhewing +roughhewn +roughhews +roughhouse +roughhoused +roughhouses +roughhousing +roughing +roughish +roughleg +roughlegs +roughly +roughneck +roughnecks +roughness +roughnesses +roughrider +roughriders +roughs +roughshod +rouging +rouille +rouilles +roulade +roulades +rouleau +rouleaus +rouleaux +roulette +rouletted +roulettes +rouletting round roundabout +roundaboutness +roundaboutnesses +roundabouts +rounded +roundedness +roundednesses +roundel +roundelay +roundelays +roundels +rounder +rounders +roundest +roundheaded +roundheadedness +roundheadednesses +roundhouse +roundhouses +rounding +roundish +roundlet +roundlets +roundly +roundness +roundnesses +rounds +roundsman +roundsmen +roundtable +roundtables +roundup +roundups +roundwood +roundwoods +roundworm +roundworms +roup +rouped +roupet +roupier +roupiest +roupily +rouping +roups +roupy +rouse +rouseabout +rouseabouts +roused +rousement +rousements +rouser +rousers +rouses +rousing +rousingly +rousseau +rousseaus +roust +roustabout +roustabouts +rousted +rouster +rousters +rousting +rousts +rout +route +routed +routeman +routemen +router +routers +routes +routeway +routeways +routh +rouths routine +routinely +routines +routing +routinization +routinizations +routinize +routinized +routinizes +routinizing +routs +roux +rove +roved +roven +rover +rovers +roves +roving +rovingly +rovings row +rowable +rowan +rowanberries +rowanberry +rowans +rowboat +rowboats +rowdier +rowdies +rowdiest +rowdily +rowdiness +rowdinesses +rowdy +rowdyish +rowdyism +rowdyisms +rowed +rowel +roweled +roweling +rowelled +rowelling +rowels +rowen +rowens +rower +rowers +rowing +rowings +rowlock +rowlocks +rows +rowth +rowths royal +royalism +royalisms +royalist +royalists +royally +royals +royalties +royalty +royster +roystered +roystering +roysters +rozzer +rozzers +ruana +ruanas +rub +rubaboo +rubaboos +rubace +rubaces +rubaiyat +rubasse +rubasses +rubato +rubatos +rubbaboo +rubbaboos +rubbed rubber +rubbered +rubbering +rubberized +rubberlike +rubberneck +rubbernecked +rubbernecker +rubberneckers +rubbernecking +rubbernecks +rubbers +rubbery +rubbing +rubbings rubbish +rubbishes +rubbishy +rubble +rubbled +rubbles +rubblier +rubbliest +rubbling +rubbly +rubdown +rubdowns +rube +rubefacient +rubefacients +rubella +rubellas +rubellite +rubellites +rubeola +rubeolar +rubeolas +rubes +rubicund +rubicundities +rubicundity +rubidic +rubidium +rubidiums +rubied +rubier +rubies +rubiest +rubigo +rubigos +rubious +ruble +rubles +ruboff +ruboffs +rubout +rubouts +rubric +rubrical +rubrically +rubricate +rubricated +rubricates +rubricating +rubrication +rubrications +rubricator +rubricators +rubrics +rubs +rubus +ruby +rubying +rubylike +rubythroat +rubythroats +ruche +ruched +ruches +ruching +ruchings +ruck +rucked +rucking +ruckle +ruckled +ruckles +ruckling +rucks +rucksack +rucksacks +ruckus +ruckuses +ruction +ructions +ructious +rudbeckia +rudbeckias +rudd +rudder +rudderless +rudderpost +rudderposts +rudders +ruddier +ruddiest +ruddily +ruddiness +ruddinesses +ruddle +ruddled +ruddles +ruddling +ruddock +ruddocks +rudds +ruddy rude +rudely +rudeness +rudenesses +ruder +ruderal +ruderals +rudesbies +rudesby +rudest +rudiment +rudimental +rudimentarily +rudimentariness +rudimentarinesses +rudimentary +rudiments +rue +rued +rueful +ruefully +ruefulness +ruefulnesses +ruer +ruers +rues +rufescent +ruff +ruffe +ruffed +ruffes +ruffian +ruffianism +ruffianisms +ruffianly +ruffians +ruffing +ruffle +ruffled +ruffler +rufflers +ruffles +rufflier +ruffliest +rufflike +ruffling +ruffly +ruffs +rufiyaa +rufous +rug +ruga +rugae +rugal +rugate +rugbies rugby +rugged +ruggeder +ruggedest +ruggedization +ruggedizations +ruggedize +ruggedized +ruggedizes +ruggedizing +ruggedly +ruggedness +ruggednesses +rugger +ruggers +rugging +ruglike +rugola +rugolas +rugosa +rugosas +rugose +rugosely +rugosities +rugosity +rugous +rugs +rugulose ruin +ruinable +ruinate +ruinated +ruinates +ruinating +ruination +ruinations +ruined +ruiner +ruiners +ruing +ruining +ruinous +ruinously +ruinousness +ruinousnesses +ruins +rulable rule +ruled +ruleless ruler +rulers +rulership +rulerships +rules +rulier +ruliest +ruling +rulings +ruly +rum +rumaki +rumakis +rumba +rumbaed +rumbaing +rumbas +rumble +rumbled +rumbler +rumblers +rumbles +rumbling +rumblings +rumbly +rumbustious +rumbustiously +rumbustiousness +rumbustiousnesses +rumen +rumens +rumina +ruminal +ruminant +ruminantly +ruminants +ruminate +ruminated +ruminates +ruminating +rumination +ruminations +ruminative +ruminatively +ruminator +ruminators +rummage +rummaged +rummager +rummagers +rummages +rummaging +rummer +rummers +rummest +rummier +rummies +rummiest +rummy +rumor +rumored +rumoring +rumormonger +rumormongering +rumormongerings +rumormongers +rumors +rumour +rumoured +rumouring +rumours +rump +rumple +rumpled +rumples +rumpless +rumplier +rumpliest +rumpling +rumply +rumps +rumpus +rumpuses +rumrunner +rumrunners +rums run +runabout +runabouts +runagate +runagates +runaround +runarounds +runaway +runaways +runback +runbacks +runcinate +rundle +rundles +rundlet +rundlets +rundown +rundowns +rune +runelike +runes +rung +rungless +rungs +runic +runkle +runkled +runkles +runkling +runless +runlet +runlets +runnel +runnels +runner +runners +runnier +runniest +running +runnings +runny +runoff +runoffs +runout +runouts +runover +runovers +runround +runrounds +runs +runt +runtier +runtiest +runtiness +runtinesses +runtish +runts +runty +runway +runways +rupee +rupees +rupiah +rupiahs +rupture +ruptured +ruptures +rupturing +rural +ruralise +ruralised +ruralises +ruralising +ruralism +ruralisms +ruralist +ruralists +ruralite +ruralites +ruralities +rurality +ruralize +ruralized +ruralizes +ruralizing +rurally +rurban +ruse +ruses rush +rushed +rushee +rushees +rusher +rushers +rushes +rushier +rushiest +rushing +rushings +rushlight +rushlights +rushlike +rushy +rusine +rusk +rusks +russet +russeting +russetings +russets +russetting +russettings +russety +russified +russifies +russify +russifying +rust +rustable +rusted +rustic +rustical +rustically +rusticals +rusticate +rusticated +rusticates +rusticating +rustication +rustications +rusticator +rusticators +rusticities +rusticity +rusticly +rustics +rustier +rustiest +rustily +rustiness +rustinesses +rusting +rustle +rustled +rustler +rustlers +rustles +rustless +rustling +rustproof +rustproofed +rustproofing +rustproofs +rusts +rusty +rut +rutabaga +rutabagas +ruth +ruthenic +ruthenium +rutheniums +rutherfordium +rutherfordiums +ruthful +ruthfully +ruthfulness +ruthfulnesses +ruthless +ruthlessly +ruthlessness +ruthlessnesses +ruths +rutilant +rutile +rutiles +rutin +rutins +ruts +rutted +ruttier +ruttiest +ruttily +rutting +ruttish +ruttishly +ruttishness +ruttishnesses +rutty +rya +ryas +rye +ryegrass +ryegrasses +ryes +ryke +ryked +rykes +ryking +rynd +rynds +ryokan +ryokans +ryot +ryots +sab +sabadilla +sabadillas +sabaton +sabatons +sabayon +sabayons +sabbat +sabbath +sabbaths +sabbatic +sabbatical +sabbaticals +sabbatics +sabbats +sabbed +sabbing +sabe +sabed +sabeing +saber +sabered +sabering +sabermetrician +sabermetricians +sabermetrics +sabers +sabes +sabin +sabine +sabines +sabins +sabir +sabirs +sable +sablefish +sablefishes +sables +sabot +sabotage +sabotaged +sabotages +sabotaging +saboteur +saboteurs +sabots +sabra +sabras +sabre +sabred +sabres +sabring +sabs +sabulose +sabulous +sac +sacahuista +sacahuistas +sacahuiste +sacahuistes +sacaton +sacatons +sacbut +sacbuts +saccade +saccades +saccadic +saccate +saccharase +saccharases +saccharide +saccharides +saccharification +saccharifications +saccharified +saccharifies +saccharify +saccharifying +saccharimeter +saccharimeters +saccharin +saccharine +saccharinities +saccharinity +saccharins +saccharoidal +saccharometer +saccharometers +saccharomyces +saccular +sacculate +sacculated +sacculation +sacculations +saccule +saccules +sacculi +sacculus +sacerdotal +sacerdotalism +sacerdotalisms +sacerdotalist +sacerdotalists +sacerdotally +sachem +sachemic +sachems +sachet +sacheted +sachets +sack +sackbut +sackbuts +sackcloth +sackcloths +sacked +sacker +sackers +sackful +sackfuls +sacking +sackings +sacklike +sacks +sacksful +saclike +sacque +sacques +sacra +sacral +sacrals +sacrament +sacramental +sacramentalism +sacramentalisms +sacramentalist +sacramentalists +sacramentally +sacramentals +sacraments +sacraria +sacrarium sacred +sacredly +sacredness +sacrednesses sacrifice +sacrificed +sacrificer +sacrificers +sacrifices +sacrificial +sacrificially +sacrificing +sacrilege +sacrileges +sacrilegious +sacrilegiously +sacrilegiousness +sacrilegiousnesses +sacring +sacrings +sacrist +sacristan +sacristans +sacristies +sacrists +sacristy +sacroiliac +sacroiliacs +sacrosanct +sacrosanctities +sacrosanctity +sacrum +sacrums +sacs sad +sadden +saddened +saddening +saddens +sadder +saddest +saddhu +saddhus +saddle +saddlebag +saddlebags +saddlebow +saddlebows +saddlebred +saddlebreds +saddlecloth +saddlecloths +saddled +saddleless +saddler +saddleries +saddlers +saddlery +saddles +saddletree +saddletrees +saddling +sade +sades +sadhe +sadhes +sadhu +sadhus +sadi +sadiron +sadirons +sadis +sadism +sadisms +sadist +sadistic +sadistically +sadists +sadly sadness +sadnesses +sadomasochism +sadomasochisms +sadomasochist +sadomasochistic +sadomasochists +sae +safari +safaried +safariing +safaris safe +safecracker +safecrackers +safecracking +safecrackings +safeguard +safeguarded +safeguarding +safeguards +safekeeping +safekeepings +safelight +safelights safely +safeness +safenesses +safer +safes +safest +safetied +safeties +safety +safetying +safetyman +safetymen +safflower +safflowers +saffron +saffrons +safranin +safranine +safranines +safranins +safrol +safrole +safroles +safrols +sag +saga +sagacious +sagaciously +sagaciousness +sagaciousnesses +sagacities +sagacity +sagaman +sagamen +sagamore +sagamores +saganash +saganashes +sagas +sagbut +sagbuts +sage +sagebrush +sagebrushes +sagely +sageness +sagenesses +sager +sages +sagest +saggar +saggard +saggards +saggared +saggaring +saggars +sagged +sagger +saggered +saggering +saggers +saggier +saggiest +sagging +saggy +sagier +sagiest +sagittal +sagittally +sagittate +sago +sagos +sags +saguaro +saguaros +sagum +sagy +sahib +sahibs +sahiwal +sahiwals +sahuaro +sahuaros +saice +saices +said +saids +saiga +saigas sail +sailable +sailboard +sailboarding +sailboardings +sailboards +sailboat +sailboater +sailboaters +sailboating +sailboatings +sailboats +sailcloth +sailcloths +sailed +sailer +sailers +sailfish +sailfishes +sailing +sailings sailor +sailorly +sailors +sailplane +sailplaned +sailplaner +sailplaners +sailplanes +sailplaning +sails +saimin +saimins +sain +sained +sainfoin +sainfoins +saining +sains +saint +saintdom +saintdoms +sainted +sainthood +sainthoods +sainting +saintlier +saintliest +saintlike +saintliness +saintlinesses +saintly +saints +saintship +saintships +saith +saithe +saiyid +saiyids +sajou +sajous +sake +saker +sakers +sakes +saki +sakis +sal +salaam +salaamed +salaaming +salaams +salabilities +salability +salable +salably +salacious +salaciously +salaciousness +salaciousnesses +salacities +salacity salad +saladang +saladangs +salads +salal +salals +salamander +salamanders +salamandrine +salami +salamis +salariat +salariats +salaried +salaries salary +salarying +salaryman +salarymen +salchow +salchows sale +saleable +saleably +salep +saleps +saleratus +saleratuses +saleroom +salerooms +sales +salesclerk +salesclerks salesgirl +salesgirls +salesladies +saleslady salesman +salesmanship +salesmanships +salesmen +salespeople +salesperson +salespersons +salesroom +salesrooms saleswoman +saleswomen +salic +salicin +salicine +salicines +salicins +salicylate +salicylates +salience +saliences +saliencies +saliency +salient +saliently +salients +salified +salifies +salify +salifying +salina +salinas +saline +salines +salinities +salinity +salinization +salinizations +salinize +salinized +salinizes +salinizing +salinometer +salinometers +saliva +salivary +salivas +salivate +salivated +salivates +salivating +salivation +salivations +salivator +salivators +sall +sallet +sallets +sallied +sallier +salliers +sallies +sallow +sallowed +sallower +sallowest +sallowing +sallowish +sallowly +sallowness +sallownesses +sallows +sallowy +sally +sallying +salmagundi +salmagundis +salmi +salmis +salmon +salmonberries +salmonberry +salmonella +salmonellae +salmonellas +salmonelloses +salmonellosis +salmonid +salmonids +salmonoid +salmonoids +salmons +salol +salols +salometer +salometers +salon +salons +saloon +saloons +saloop +saloops +salp +salpa +salpae +salpas +salpian +salpians +salpid +salpids +salpiglosses +salpiglossis +salpiglossises +salpinges +salpingites +salpingitides +salpingitis +salpingitises +salpinx +salps +sals +salsa +salsas +salsifies +salsify +salsilla +salsillas salt +saltant +saltarello +saltarellos +saltation +saltations +saltatorial +saltatory +saltbox +saltboxes +saltbush +saltbushes +saltcellar +saltcellars +salted +salter +saltern +salterns +salters +saltest +saltie +saltier +saltiers +salties +saltiest +saltily +saltimbocca +saltimboccas +saltine +saltines +saltiness +saltinesses +salting +saltings +saltire +saltires +saltish +saltless +saltlike +saltness +saltnesses +saltpan +saltpans +saltpeter +saltpeters +salts +saltshaker +saltshakers +saltwater +saltwork +saltworks +saltwort +saltworts salty +salubrious +salubriously +salubriousness +salubriousnesses +salubrities +salubrity +saluki +salukis +salutarily +salutariness +salutarinesses +salutary +salutation +salutational +salutations +salutatorian +salutatorians +salutatories +salutatory salute +saluted +saluter +saluters +salutes +salutiferous +saluting +salvable +salvably +salvage +salvageabilities +salvageability +salvageable +salvaged +salvagee +salvagees +salvager +salvagers +salvages +salvaging +salvarsan +salvarsans +salvation +salvational +salvationism +salvationisms +salvationist +salvations +salve +salved +salver +salverform +salvers +salves +salvia +salvias +salvific +salving +salvo +salvoed +salvoes +salvoing +salvor +salvors +salvos +samara +samaras +samaritan +samaritans +samarium +samariums +samarskite +samarskites +samba +sambaed +sambaing +sambar +sambars +sambas +sambhar +sambhars +sambhur +sambhurs +sambo +sambos +sambuca +sambucas +sambuke +sambukes +sambur +samburs same +samech +samechs +samek +samekh +samekhs +sameks +sameness +samenesses +samiel +samiels +samisen +samisens +samite +samites +samizdat +samizdats +samlet +samlets +samosa +samosas +samovar +samovars +samp +sampan +sampans +samphire +samphires +sample +sampled +sampler +samplers +samples +sampling +samplings +samps +samsara +samsaras +samshu +samshus +samurai +samurais +sanative +sanatoria +sanatorium +sanatoriums +sanbenito +sanbenitos +sancta +sanctification +sanctifications +sanctified +sanctifier +sanctifiers +sanctifies +sanctify +sanctifying +sanctimonies +sanctimonious +sanctimoniously +sanctimoniousness +sanctimoniousnesses +sanctimony +sanction +sanctionable +sanctioned +sanctioning +sanctions +sanctities +sanctity +sanctuaries +sanctuary +sanctum +sanctums sand +sandal +sandaled +sandaling +sandalled +sandalling +sandals +sandalwood +sandalwoods +sandarac +sandaracs +sandbag +sandbagged +sandbagger +sandbaggers +sandbagging +sandbags +sandbank +sandbanks +sandbar +sandbars +sandblast +sandblasted +sandblaster +sandblasters +sandblasting +sandblasts +sandbox +sandboxes +sandbur +sandburr +sandburrs +sandburs +sanddab +sanddabs +sanded +sander +sanderling +sanderlings +sanders +sandfish +sandfishes +sandflies +sandfly +sandglass +sandglasses +sandgrouse +sandgrouses +sandhi +sandhis +sandhog +sandhogs +sandier +sandiest +sandiness +sandinesses +sanding +sandlike +sandling +sandlings +sandlot +sandlots +sandlotter +sandlotters +sandman +sandmen +sandpainting +sandpaintings +sandpaper +sandpapered +sandpapering +sandpapers +sandpapery +sandpeep +sandpeeps +sandpile +sandpiles +sandpiper +sandpipers +sandpit +sandpits +sands +sandshoe +sandshoes +sandsoap +sandsoaps +sandspur +sandspurs +sandstone +sandstones +sandstorm +sandstorms sandwich +sandwiched +sandwiches +sandwiching +sandworm +sandworms +sandwort +sandworts +sandy +sane +saned +sanely +saneness +sanenesses +saner +sanes +sanest +sang +sanga +sangar +sangaree +sangarees +sangars +sangas +sanger +sangers +sangfroid +sangfroids +sangh +sanghs +sangria +sangrias +sanguinaria +sanguinarias +sanguinarily +sanguinary +sanguine +sanguinely +sanguineness +sanguinenesses +sanguineous +sanguines +sanguinities +sanguinity +sanicle +sanicles +sanies +saning +sanious +sanitaria +sanitarian +sanitarians +sanitaries +sanitarily +sanitarium +sanitariums +sanitary +sanitate +sanitated +sanitates +sanitating +sanitation +sanitations +sanities +sanitise +sanitised +sanitises +sanitising +sanitization +sanitizations +sanitize +sanitized +sanitizes +sanitizing +sanitoria +sanitorium +sanitoriums +sanity +sanjak +sanjaks +sank +sannop +sannops +sannup +sannups +sannyasi +sannyasin +sannyasins +sannyasis +sans +sansar +sansars +sansculotte +sansculottes +sansculottic +sansculottish +sansculottism +sansculottisms +sansei +sanseis +sanserif +sanserifs +sansevieria +sansevierias +santalic +santalol +santalols +santimi +santims +santir +santirs +santo +santol +santolina +santolinas +santols +santonin +santonins +santos +santour +santours +santur +santurs +sap +sapajou +sapajous +saphead +sapheaded +sapheads +saphena +saphenae +saphenous +sapid +sapidities +sapidity +sapience +sapiences +sapiencies +sapiency +sapiens +sapient +sapiently +sapless +saplessness +saplessnesses +sapling +saplings +sapodilla +sapodillas +sapogenin +sapogenins +saponaceous +saponaceousness +saponaceousnesses +saponifiable +saponification +saponifications +saponified +saponifier +saponifiers +saponifies +saponify +saponifying +saponin +saponine +saponines +saponins +saponite +saponites +sapor +saporous +sapors +sapota +sapotas +sapote +sapotes +sapour +sapours +sapped +sapper +sappers +sapphic +sapphics +sapphire +sapphires +sapphirine +sapphism +sapphisms +sapphist +sapphists +sappier +sappiest +sappily +sappiness +sappinesses +sapping +sappy +sapremia +sapremias +sapremic +saprobe +saprobes +saprobic +saprogenic +saprogenicities +saprogenicity +saprolite +saprolites +sapropel +sapropels +saprophagous +saprophyte +saprophytes +saprophytic +saprophytically +saprozoic +saps +sapsago +sapsagos +sapsucker +sapsuckers +sapwood +sapwoods +saraband +sarabande +sarabandes +sarabands +saran +sarans +sarape +sarapes +sarcasm +sarcasms +sarcastic +sarcastically +sarcenet +sarcenets +sarcoid +sarcoidoses +sarcoidosis +sarcoids +sarcolemma +sarcolemmal +sarcolemmas +sarcoma +sarcomas +sarcomata +sarcomatoses +sarcomatosis +sarcomatous +sarcomere +sarcomeres +sarcophagi +sarcophagus +sarcophaguses +sarcoplasm +sarcoplasmic +sarcoplasms +sarcosomal +sarcosome +sarcosomes +sarcous +sard +sardana +sardanas +sardar +sardars +sardine +sardines +sardius +sardiuses +sardonic +sardonically +sardonicism +sardonicisms +sardonyx +sardonyxes +sards +saree +sarees +sargasso +sargassos +sargassum +sargassums +sarge +sarges +sari +sarin +sarins +saris +sark +sarkier +sarkiest +sarks +sarky +sarment +sarmenta +sarments +sarmentum +sarod +sarode +sarodes +sarodist +sarodists +sarods +sarong +sarongs +saros +saroses +sarracenia +sarracenias +sarsaparilla +sarsaparillas +sarsar +sarsars +sarsen +sarsenet +sarsenets +sarsens +sartor +sartorial +sartorially +sartorii +sartorius +sartors +sash +sashay +sashayed +sashaying +sashays +sashed +sashes +sashimi +sashimis +sashing +sasin +sasins +saskatoon +saskatoons +sass +sassabies +sassaby +sassafras +sassafrases +sassed +sasses +sassier +sassies +sassiest +sassily +sassing +sasswood +sasswoods +sassy +sastruga +sastrugi +sat +satang +satangs +satanic +satanically +satanism +satanisms +satanist +satanists +satara +sataras +satay +satays +satchel +satchelful +satchelfuls +satchels +satchelsful +sate +sated +sateen +sateens satellite +satellites +satem +sates +sati +satiable +satiably +satiate +satiated +satiates +satiating +satiation +satiations +satieties +satiety +satin +satinet +satinets +sating +satinpod +satinpods +satins +satinwood +satinwoods +satiny +satire +satires +satiric +satirical +satirically +satirise +satirised +satirises +satirising +satirist +satirists +satirizable +satirize +satirized +satirizes +satirizing +satis satisfaction +satisfactions +satisfactorily +satisfactoriness +satisfactorinesses +satisfactory +satisfiable +satisfied +satisfies satisfy +satisfying +satisfyingly +satori +satoris +satrap +satrapies +satraps +satrapy +satsuma +satsumas +saturable +saturant +saturants +saturate +saturated +saturates +saturating +saturation +saturations +saturator +saturators +saturnalia +saturnalian +saturnalianly +saturnalias +saturniid +saturniids +saturnine +saturnism +saturnisms +satyagraha +satyagrahas +satyr +satyriases +satyriasis +satyric +satyrid +satyrids +satyrs +sau +sauce +sauceboat +sauceboats +saucebox +sauceboxes +sauced +saucepan +saucepans saucer +saucerlike +saucers +sauces +sauch +sauchs +saucier +sauciest +saucily +sauciness +saucinesses +saucing +saucy +sauerbraten +sauerbratens +sauerkraut +sauerkrauts +sauger +saugers +saugh +saughs +saughy +saul +sauls +sault +saults +sauna +saunas +saunter +sauntered +saunterer +saunterers +sauntering +saunters +saurel +saurels +saurian +saurians +sauries +saurischian +saurischians +sauropod +sauropods +saury sausage +sausages +saute +sauted +sauteed +sauteing +sauterne +sauternes +sautes +sautoir +sautoire +sautoires +sautoirs +savable +savage +savaged +savagely +savageness +savagenesses +savager +savageries +savagery +savages +savagest +savaging +savagism +savagisms +savanna +savannah +savannahs +savannas +savant +savants +savarin +savarins +savate +savates save +saveable +saved +saveloy +saveloys +saver +savers +saves +savin +savine +savines +saving +savingly +savings +savins +savior +saviors +saviour +saviours +savor +savored +savorer +savorers +savorier +savories +savoriest +savorily +savoriness +savorinesses +savoring +savorless +savorous +savors +savory +savour +savoured +savourer +savourers +savourier +savouries +savouriest +savouring +savours +savoury +savoy +savoys +savvied +savvier +savvies +savviest +savvy +savvying +saw +sawbill +sawbills +sawbones +sawboneses +sawbuck +sawbucks +sawdust +sawdusts +sawed +sawer +sawers +sawfish +sawfishes +sawflies +sawfly +sawhorse +sawhorses +sawing +sawlike +sawlog +sawlogs +sawmill +sawmills +sawn +sawney +sawneys +saws +sawteeth +sawtimber +sawtimbers +sawtooth +sawyer +sawyers +sax +saxatile +saxes +saxhorn +saxhorns +saxicolous +saxifrage +saxifrages +saxitoxin +saxitoxins +saxonies +saxony +saxophone +saxophones +saxophonic +saxophonist +saxophonists +saxtuba +saxtubas say +sayable +sayer +sayers +sayest +sayid +sayids saying +sayings +sayonara +sayonaras +says +sayst +sayyid +sayyids +scab +scabbard +scabbarded +scabbarding +scabbards +scabbed +scabbier +scabbiest +scabbily +scabbing +scabble +scabbled +scabbles +scabbling +scabby +scabies +scabietic +scabiosa +scabiosas +scabious +scabiouses +scabland +scablands +scablike +scabrous +scabrously +scabrousness +scabrousnesses +scabs +scad +scads +scaffold +scaffolded +scaffolding +scaffoldings +scaffolds +scag +scagliola +scagliolas +scags +scalable +scalably +scalade +scalades +scalado +scalados +scalage +scalages +scalar +scalare +scalares +scalariform +scalariformly +scalars +scalawag +scalawags +scald +scalded +scaldic +scalding +scalds +scale +scaled +scaleless +scalelike +scalene +scaleni +scalenus +scalepan +scalepans +scaler +scalers +scales +scaleup +scaleups +scalier +scaliest +scaliness +scalinesses +scaling +scall +scallion +scallions +scallop +scalloped +scalloper +scallopers +scalloping +scallopini +scallopinis +scallops +scalls +scallywag +scallywags +scalogram +scalograms +scaloppine +scaloppines +scalp +scalped +scalpel +scalpels +scalper +scalpers +scalping +scalps +scaly +scam +scammed +scamming +scammonies +scammony +scamp +scamped +scamper +scampered +scampering +scampers +scampi +scampies +scamping +scampish +scamps +scams scan +scandal +scandaled +scandaling +scandalise +scandalised +scandalises +scandalising +scandalize +scandalized +scandalizes +scandalizing +scandalled +scandalling +scandalmonger +scandalmongering +scandalmongerings +scandalmongers +scandalous +scandalously +scandalousness +scandalousnesses +scandals +scandent +scandia +scandias +scandic +scandium +scandiums +scannable +scanned +scanner +scanners +scanning +scannings +scans +scansion +scansions +scant +scanted +scanter +scantest +scantier +scanties +scantiest +scantily +scantiness +scantinesses +scanting +scantling +scantlings +scantly +scantness +scantnesses +scants +scanty +scape +scaped +scapegoat +scapegoated +scapegoating +scapegoatings +scapegoatism +scapegoatisms +scapegoats +scapegrace +scapegraces +scapes +scaphoid +scaphoids +scaping +scapolite +scapolites +scapose +scapula +scapulae +scapular +scapulars +scapulas scar +scarab +scarabaei +scarabaeus +scarabaeuses +scarabs +scaramouch +scaramouche +scaramouches +scarce +scarcely +scarceness +scarcenesses +scarcer +scarcest +scarcities +scarcity scare +scarecrow +scarecrows +scared +scarehead +scareheads +scaremonger +scaremongers +scarer +scarers +scares +scarey scarf +scarfed +scarfing +scarfpin +scarfpins +scarfs +scarfskin +scarfskins +scarier +scariest +scarification +scarifications +scarified +scarifier +scarifiers +scarifies +scarify +scarifying +scarifyingly +scarily +scaring +scariose +scarious +scarlatina +scarlatinal +scarlatinas +scarless +scarlet +scarlets +scarp +scarped +scarper +scarpered +scarpering +scarpers +scarph +scarphed +scarphing +scarphs +scarping +scarps +scarred +scarrier +scarriest +scarring +scarry +scars +scart +scarted +scarting +scarts +scarves +scary +scat +scatback +scatbacks +scathe +scathed +scatheless +scathes +scathing +scathingly +scatological +scatologies +scatology +scats +scatt +scatted +scatter +scatteration +scatterations +scatterbrain +scatterbrained +scatterbrains +scattered +scatterer +scatterers +scattergood +scattergoods +scattergram +scattergrams +scattergun +scatterguns +scattering +scatteringly +scatterings +scatters +scattershot +scattier +scattiest +scatting +scatts +scatty +scaup +scauper +scaupers +scaups +scaur +scaurs +scavenge +scavenged +scavenger +scavengers +scavenges +scavenging +scena +scenario +scenarios +scenarist +scenarists +scenas +scend +scended +scending +scends scene +sceneries scenery +scenes +sceneshifter +sceneshifters +scenic +scenical +scenically +scenographer +scenographers +scenographic +scenographies +scenography +scent +scented +scenting +scentless +scents +scepter +sceptered +sceptering +scepters +sceptic sceptical +scepticism +scepticisms +sceptics +sceptral +sceptre +sceptred +sceptres +sceptring +schadenfreude +schadenfreudes +schappe +schappes +schav +schavs schedule +scheduled +scheduler +schedulers +schedules +scheduling +scheelite +scheelites +schema +schemas +schemata +schematic +schematically +schematics +schematism +schematisms +schematization +schematizations +schematize +schematized +schematizes +schematizing +scheme +schemed +schemer +schemers +schemes +scheming +scherzando +scherzandos +scherzi +scherzo +scherzos +schiller +schillers +schilling +schillings +schipperke +schipperkes +schism +schismatic +schismatical +schismatically +schismatics +schismatize +schismatized +schismatizes +schismatizing +schisms +schist +schistose +schistosities +schistosity +schistosomal +schistosome +schistosomes +schistosomiases +schistosomiasis +schists +schizier +schiziest +schizo +schizocarp +schizocarps +schizogonic +schizogonies +schizogonous +schizogony +schizoid +schizoids +schizont +schizonts +schizophrene +schizophrenes +schizophrenia +schizophrenias +schizophrenic +schizophrenically +schizophrenics +schizos +schizy +schizzier +schizziest +schizzy +schlemiel +schlemiels +schlep +schlepp +schlepped +schlepping +schlepps +schleps +schliere +schlieren +schlieric +schlock +schlockmeister +schlockmeisters +schlocks +schlocky +schlump +schlumped +schlumping +schlumps +schmaltz +schmaltzes +schmaltzier +schmaltziest +schmaltzy +schmalz +schmalzes +schmalzier +schmalziest +schmalzy +schmear +schmears +schmeer +schmeered +schmeering +schmeers +schmelze +schmelzes +schmo +schmoe +schmoes +schmoos +schmoose +schmoosed +schmooses +schmoosing +schmooze +schmoozed +schmoozes +schmoozing +schmos +schmuck +schmucks +schnapps +schnaps +schnauzer +schnauzers +schnecke +schnecken +schnitzel +schnitzels +schnook +schnooks +schnorkel +schnorkeled +schnorkeling +schnorkels +schnorrer +schnorrers +schnoz +schnozz +schnozzes +schnozzle +schnozzles scholar +scholarly +scholars scholarship +scholarships +scholastic +scholastically +scholasticate +scholasticates +scholasticism +scholasticisms +scholastics +scholia +scholiast +scholiastic +scholiasts +scholium +scholiums school schoolbag +schoolbags +schoolbook +schoolbooks schoolboy +schoolboyish +schoolboys +schoolchild +schoolchildren +schooled +schoolfellow +schoolfellows schoolgirl +schoolgirls +schoolhouse +schoolhouses +schooling +schoolings +schoolkid +schoolkids +schoolman +schoolmarm +schoolmarmish +schoolmarms +schoolmaster +schoolmasterish +schoolmasterly +schoolmasters schoolmate +schoolmates +schoolmen +schoolmistress +schoolmistresses +schoolroom +schoolrooms +schools +schoolteacher +schoolteachers +schooltime +schooltimes +schoolwork +schoolworks +schooner +schooners +schorl +schorls +schottische +schottisches +schrik +schriks +schrod +schrods +schtick +schticks +schtik +schtiks +schuit +schuits +schul +schuln +schuss +schussboomer +schussboomers +schussed +schusser +schussers +schusses +schussing +schwa +schwarmerei +schwarmereis +schwas +sciaenid +sciaenids +sciatic +sciatica +sciaticas +sciatics science +sciences +sciential scientific +scientifically +scientism +scientisms scientist +scientists +scientize +scientized +scientizes +scientizing +scilicet +scilla +scillas +scimetar +scimetars +scimitar +scimitars +scimiter +scimiters +scincoid +scincoids +scintigraphic +scintigraphies +scintigraphy +scintilla +scintillae +scintillant +scintillantly +scintillas +scintillate +scintillated +scintillates +scintillating +scintillation +scintillations +scintillator +scintillators +scintillometer +scintillometers +sciolism +sciolisms +sciolist +sciolistic +sciolists +scion +scions +scirocco +sciroccos +scirrhi +scirrhous +scirrhus +scirrhuses +scissile +scission +scissions +scissor +scissored +scissoring scissors +scissortail +scissortails +scissure +scissures +sciurid +sciurids +sciurine +sciurines +sciuroid +sclaff +sclaffed +sclaffer +sclaffers +sclaffing +sclaffs +sclera +sclerae +scleral +scleras +sclereid +sclereids +sclerenchyma +sclerenchymas +sclerenchymata +sclerenchymatous +sclerite +sclerites +scleroderma +sclerodermas +sclerodermata +scleroid +scleroma +scleromata +sclerometer +sclerometers +scleroprotein +scleroproteins +sclerose +sclerosed +scleroses +sclerosing +sclerosis +sclerotia +sclerotial +sclerotic +sclerotics +sclerotin +sclerotins +sclerotium +sclerotization +sclerotizations +sclerotized +sclerous +scoff +scoffed +scoffer +scoffers +scoffing +scofflaw +scofflaws +scoffs scold +scolded +scolder +scolders +scolding +scoldings +scolds +scoleces +scolecite +scolecites +scolex +scolices +scolioma +scoliomas +scolioses +scoliosis +scoliotic +scollop +scolloped +scolloping +scollops +scolopendra +scolopendras +scombroid +scombroids +sconce +sconced +sconces +sconcing +scone +scones +scoop +scooped +scooper +scoopers +scoopful +scoopfuls +scooping +scoops +scoopsful +scoot +scooted +scooter +scooters +scooting +scoots +scop +scope +scoped +scopes +scoping +scopolamine +scopolamines +scops +scopula +scopulae +scopulas +scorbutic +scorch +scorched +scorcher +scorchers +scorches +scorching +scorchingly score +scoreboard +scoreboards +scorecard +scorecards +scored +scorekeeper +scorekeepers +scoreless +scorepad +scorepads +scorer +scorers +scores +scoria +scoriaceous +scoriae +scorified +scorifies +scorify +scorifying +scoring +scorn +scorned +scorner +scorners +scornful +scornfully +scornfulness +scornfulnesses +scorning +scorns +scorpaenid +scorpaenids +scorpion +scorpions +scot +scotch +scotched +scotches +scotching +scoter +scoters +scotia +scotias +scotoma +scotomas +scotomata +scotopia +scotopias +scotopic +scots +scottie +scotties +scoundrel +scoundrelly +scoundrels +scour +scoured +scourer +scourers +scourge +scourged +scourger +scourgers +scourges +scourging +scouring +scourings +scours +scouse +scouses +scout +scoutcraft +scoutcrafts +scouted +scouter +scouters +scouth +scouther +scouthered +scouthering +scouthers +scouths +scouting +scoutings +scoutmaster +scoutmasters +scouts +scow +scowder +scowdered +scowdering +scowders +scowed +scowing +scowl +scowled +scowler +scowlers +scowling +scowlingly +scowls +scows +scrabble +scrabbled +scrabbler +scrabblers +scrabbles +scrabblier +scrabbliest +scrabbling +scrabbly +scrag +scragged +scraggier +scraggiest +scragging +scragglier +scraggliest +scraggly +scraggy +scrags +scraich +scraiched +scraiching +scraichs +scraigh +scraighed +scraighing +scraighs +scram +scramble +scrambled +scrambler +scramblers +scrambles +scrambling +scramjet +scramjets +scrammed +scramming +scrams +scrannel +scrannels +scrap +scrapbook +scrapbooks +scrape +scraped +scraper +scrapers +scrapes +scrapheap +scrapheaps +scrapie +scrapies +scraping +scrapings +scrappage +scrappages +scrapped +scrapper +scrappers +scrappier +scrappiest +scrappily +scrappiness +scrappinesses +scrapping +scrapple +scrapples +scrappy +scraps scratch +scratchboard +scratchboards +scratched +scratcher +scratchers +scratches +scratchier +scratchiest +scratchily +scratchiness +scratchinesses +scratching +scratchy +scrawl +scrawled +scrawler +scrawlers +scrawlier +scrawliest +scrawling +scrawls +scrawly +scrawnier +scrawniest +scrawniness +scrawninesses +scrawny +screak +screaked +screaking +screaks +screaky scream +screamed +screamer +screamers +screaming +screamingly +screams +scree +screech +screeched +screecher +screechers +screeches +screechier +screechiest +screeching +screechy +screed +screeded +screeding +screeds screen +screenable +screened +screener +screeners +screening +screenings +screenland +screenlands +screenplay +screenplays +screens +screenwriter +screenwriters +screes +screw +screwball +screwballs +screwbean +screwbeans +screwdriver +screwdrivers +screwed +screwer +screwers +screwier +screwiest +screwiness +screwinesses +screwing +screwlike +screws +screwup +screwups +screwworm +screwworms +screwy +scribal +scribble +scribbled +scribbler +scribblers +scribbles +scribbling +scribblings +scribe +scribed +scriber +scribers +scribes +scribing +scried +scries +scrieve +scrieved +scrieves +scrieving +scrim +scrimmage +scrimmaged +scrimmager +scrimmagers +scrimmages +scrimmaging +scrimp +scrimped +scrimper +scrimpers +scrimpier +scrimpiest +scrimping +scrimpit +scrimps +scrimpy +scrims +scrimshander +scrimshanders +scrimshaw +scrimshawed +scrimshawing +scrimshaws +scrip +scrips +script +scripted +scripter +scripters +scripting +scriptoria +scriptorium +scripts +scriptural +scripturally +scripture +scriptures +scriptwriter +scriptwriters +scrive +scrived +scrivener +scriveners +scrives +scriving +scrod +scrods +scrofula +scrofulas +scrofulous +scroggier +scroggiest +scroggy +scroll +scrolled +scrolling +scrolls +scrollwork +scrollworks +scrooch +scrooched +scrooches +scrooching +scrooge +scrooges +scroop +scrooped +scrooping +scroops +scrootch +scrootched +scrootches +scrootching +scrota +scrotal +scrotum +scrotums +scrouge +scrouged +scrouges +scrouging +scrounge +scrounged +scrounger +scroungers +scrounges +scroungier +scroungiest +scrounging +scroungy +scrub +scrubbable +scrubbed +scrubber +scrubbers +scrubbier +scrubbiest +scrubbing +scrubby +scrubland +scrublands +scrubs +scrubwoman +scrubwomen +scruff +scruffier +scruffiest +scruffily +scruffiness +scruffinesses +scruffs +scruffy +scrum +scrummage +scrummaged +scrummages +scrummaging +scrummed +scrumming +scrumptious +scrumptiously +scrums +scrunch +scrunched +scrunches +scrunching +scruple +scrupled +scruples +scrupling +scrupulosities +scrupulosity +scrupulous +scrupulously +scrupulousness +scrupulousnesses +scrutable +scrutineer +scrutineers +scrutinies +scrutinise +scrutinised +scrutinises +scrutinising +scrutinize +scrutinized +scrutinizer +scrutinizers +scrutinizes +scrutinizing +scrutiny +scry +scrying +scuba +scubas +scud +scudded +scudding +scudi +scudo +scuds +scuff +scuffed +scuffing +scuffle +scuffled +scuffler +scufflers +scuffles +scuffling +scuffs +sculk +sculked +sculker +sculkers +sculking +sculks +scull +sculled +sculler +sculleries +scullers +scullery +sculling +scullion +scullions +sculls +sculp +sculped +sculpin +sculping +sculpins +sculps +sculpt +sculpted +sculpting +sculptor +sculptors +sculptress +sculptresses +sculpts +sculptural +sculpturally sculpture +sculptured +sculptures +sculpturesque +sculpturesquely +sculpturing +scum +scumbag +scumbags +scumble +scumbled +scumbles +scumbling +scumlike +scummed +scummer +scummers +scummier +scummiest +scumming +scummy +scums +scungilli +scungillis +scunner +scunnered +scunnering +scunners +scup +scuppaug +scuppaugs +scupper +scuppered +scuppering +scuppernong +scuppernongs +scuppers +scups +scurf +scurfier +scurfiest +scurfs +scurfy +scurried +scurries +scurril +scurrile +scurrilities +scurrility +scurrilous +scurrilously +scurrilousness +scurrilousnesses +scurry +scurrying +scurvier +scurvies +scurviest +scurvily +scurviness +scurvinesses +scurvy +scut +scuta +scutage +scutages +scutate +scutch +scutched +scutcheon +scutcheons +scutcher +scutchers +scutches +scutching +scute +scutella +scutellar +scutellate +scutellated +scutellum +scutes +scuts +scutter +scuttered +scuttering +scutters +scuttle +scuttlebutt +scuttlebutts +scuttled +scuttles +scuttling +scutum +scuzzier +scuzziest +scuzzy +scyphate +scyphi +scyphistoma +scyphistomae +scyphistomas +scyphozoan +scyphozoans +scyphus +scythe +scythed +scythes +scything sea +seabag +seabags +seabeach +seabeaches +seabed +seabeds +seabird +seabirds +seaboard +seaboards +seaboot +seaboots +seaborgium +seaborgiums +seaborne +seacoast +seacoasts +seacock +seacocks +seacraft +seacrafts +seadog +seadogs +seadrome +seadromes +seafarer +seafarers +seafaring +seafarings +seafloor +seafloors +seafood +seafoods +seafowl +seafowls +seafront +seafronts +seagirt +seagoing seagull +seagulls seal +sealable +sealant +sealants +sealed +sealer +sealeries +sealers +sealery +sealing +seallike +seals +sealskin +sealskins +seam +seaman +seamanlike +seamanly +seamanship +seamanships +seamark +seamarks +seamed +seamen +seamer +seamers +seamier +seamiest +seaminess +seaminesses +seaming +seamless +seamlessly +seamlessness +seamlessnesses +seamlike +seamount +seamounts +seams +seamster +seamsters +seamstress +seamstresses +seamy +seance +seances +seapiece +seapieces +seaplane +seaplanes +seaport +seaports +seaquake +seaquakes +sear search +searchable +searched +searcher +searchers +searches +searching +searchingly +searchless +searchlight +searchlights +seared +searer +searest +searing +searingly +searobin +searobins +sears +seas +seascape +seascapes +seascout +seascouts seashell +seashells +seashore +seashores +seasick +seasickness +seasicknesses seaside +seasides season +seasonable +seasonableness +seasonablenesses +seasonably +seasonal +seasonalities +seasonality +seasonally +seasoned +seasoner +seasoners +seasoning +seasonings +seasonless +seasons +seastrand +seastrands seat +seated +seater +seaters +seating +seatings +seatless +seatmate +seatmates +seatrain +seatrains +seats +seatwork +seatworks +seawall +seawalls +seawan +seawans +seawant +seawants +seaward +seawards +seaware +seawares +seawater +seawaters +seaway +seaways seaweed +seaweeds +seaworthiness +seaworthinesses +seaworthy +sebaceous +sebacic +sebasic +seborrhea +seborrheas +seborrheic +sebum +sebums +sec +secalose +secaloses +secant +secantly +secants +secateur +secateurs +secco +seccos +secede +seceded +seceder +seceders +secedes +seceding +secern +secerned +secerning +secerns +secession +secessionism +secessionisms +secessionist +secessionists +secessions +seclude +secluded +secludedly +secludedness +secludednesses +secludes +secluding +seclusion +seclusions +seclusive +seclusively +seclusiveness +seclusivenesses +secobarbital +secobarbitals second +secondaries +secondarily +secondariness +secondarinesses +secondary +seconde +seconded +seconder +seconders +secondes +secondhand +secondi +seconding +secondly +secondo +seconds +secpar +secpars +secrecies +secrecy secret +secretagogue +secretagogues +secretarial +secretariat +secretariats +secretaries secretary +secretaryship +secretaryships +secrete +secreted +secreter +secretes +secretest +secretin +secreting +secretins +secretion +secretionary +secretions +secretive +secretively +secretiveness +secretivenesses +secretly +secretor +secretors +secretory +secrets +secs +sect +sectarian +sectarianism +sectarianisms +sectarianize +sectarianized +sectarianizes +sectarianizing +sectarians +sectaries +sectary +sectile +sectilities +sectility section +sectional +sectionalism +sectionalisms +sectionally +sectionals +sectioned +sectioning +sections +sector +sectoral +sectored +sectorial +sectoring +sectors +sects +secular +secularise +secularised +secularises +secularising +secularism +secularisms +secularist +secularistic +secularists +secularities +secularity +secularization +secularizations +secularize +secularized +secularizer +secularizers +secularizes +secularizing +secularly +seculars +secund +secundly +secundum secure +secured +securely +securement +securements +secureness +securenesses +securer +securers +secures +securest +securing +securities +securitization +securitizations +securitize +securitized +securitizes +securitizing security +sedan +sedans +sedarim +sedate +sedated +sedately +sedateness +sedatenesses +sedater +sedates +sedatest +sedating +sedation +sedations +sedative +sedatives +sedentary +seder +seders +sederunt +sederunts +sedge +sedges +sedgier +sedgiest +sedgy +sedile +sedilia +sedilium +sediment +sedimentable +sedimentary +sedimentation +sedimentations +sedimented +sedimenting +sedimentologic +sedimentological +sedimentologically +sedimentologies +sedimentologist +sedimentologists +sedimentology +sediments +sedition +seditions +seditious +seditiously +seditiousness +seditiousnesses +seduce +seduced +seducement +seducements +seducer +seducers +seduces +seducing +seducive +seduction +seductions +seductive +seductively +seductiveness +seductivenesses +seductress +seductresses +sedulities +sedulity +sedulous +sedulously +sedulousness +sedulousnesses +sedum +sedums see +seeable +seecatch +seecatchie seed +seedbed +seedbeds +seedcake +seedcakes +seedcase +seedcases +seedeater +seedeaters +seeded +seeder +seeders +seedier +seediest +seedily +seediness +seedinesses +seeding +seedless +seedlike +seedling +seedlings +seedman +seedmen +seedpod +seedpods +seeds +seedsman +seedsmen +seedtime +seedtimes +seedy +seeing +seeings seek +seeker +seekers +seeking +seeks +seel +seeled +seeling +seels +seely seem +seemed +seemer +seemers +seeming +seemingly +seemings +seemlier +seemliest +seemliness +seemlinesses +seemly +seems +seen +seep +seepage +seepages +seeped +seepier +seepiest +seeping +seeps +seepy +seer +seeress +seeresses +seers +seersucker +seersuckers +sees +seesaw +seesawed +seesawing +seesaws +seethe +seethed +seethes +seething +seg +segetal +seggar +seggars +segment +segmental +segmentally +segmentary +segmentation +segmentations +segmented +segmenting +segments +segni +segno +segnos +sego +segos +segregant +segregants +segregate +segregated +segregates +segregating +segregation +segregationist +segregationists +segregations +segregative +segs +segue +segued +segueing +segues +seguidilla +seguidillas +sei +seicento +seicentos +seiche +seiches +seidel +seidels +seif +seifs +seigneur +seigneurial +seigneuries +seigneurs +seigneury +seignior +seigniorage +seigniorages +seigniories +seigniors +seigniory +seignorage +seignorages +seignorial +seignories +seignory +seine +seined +seiner +seiners +seines +seining +seis +seisable +seise +seised +seiser +seisers +seises +seisin +seising +seisings +seisins +seism +seismal +seismic +seismically +seismicities +seismicity +seismism +seismisms +seismogram +seismograms +seismograph +seismographer +seismographers +seismographic +seismographies +seismographs +seismography +seismological +seismologies +seismologist +seismologists +seismology +seismometer +seismometers +seismometric +seismometries +seismometry +seisms +seisor +seisors +seisure +seisures +seizable seize +seized +seizer +seizers +seizes +seizin +seizing +seizings +seizins +seizor +seizors +seizure +seizures +sejant +sejeant +sel +selachian +selachians +seladang +seladangs +selaginella +selaginellas +selah +selahs +selamlik +selamliks +selcouth seldom +seldomly select +selectable +selected +selectee +selectees +selecting +selection +selectionist +selectionists +selections +selective +selectively +selectiveness +selectivenesses +selectivities +selectivity +selectly +selectman +selectmen +selectness +selectnesses +selector +selectors +selects +selenate +selenates +selenic +selenide +selenides +seleniferous +selenite +selenites +selenium +seleniums +selenocentric +selenological +selenologies +selenologist +selenologists +selenology +selenous +self +selfdom +selfdoms +selfed +selfheal +selfheals +selfhood +selfhoods +selfing selfish +selfishly +selfishness +selfishnesses +selfless +selflessly +selflessness +selflessnesses +selfness +selfnesses +selfs +selfsame +selfsameness +selfsamenesses +selfward sell +sellable +selle +seller +sellers +selles +selling +sellout +sellouts +sells +sels +selsyn +selsyns +seltzer +seltzers +selva +selvage +selvaged +selvages +selvas +selvedge +selvedged +selvedges +selves +semantic +semantical +semantically +semanticist +semanticists +semantics +semaphore +semaphored +semaphores +semaphoring +semasiological +semasiologies +semasiology +sematic +semblable +semblables +semblably +semblance +semblances +seme +semeiologies +semeiology +semeiotic +semeiotics +sememe +sememes +sememic +semen +semens +semes +semester +semesters +semestral +semestrial +semi +semiabstract +semiabstraction +semiabstractions +semiannual +semiannually +semiaquatic +semiarboreal +semiarid +semiaridities +semiaridity +semiautobiographical +semiautomatic +semiautomatically +semiautomatics +semiautonomous +semibald +semibreve +semibreves +semicentennial +semicentennials semicircle +semicircles +semicircular +semicivilized +semiclassic +semiclassical +semiclassics +semicolon +semicolonial +semicolonialism +semicolonialisms +semicolonies +semicolons +semicolony +semicoma +semicomas +semicommercial +semiconducting +semiconductor +semiconductors +semiconscious +semiconsciousness +semiconsciousnesses +semiconservative +semiconservatively +semicrystalline +semicylindrical +semidarkness +semidarknesses +semideaf +semideified +semideifies +semideify +semideifying +semidesert +semideserts +semidetached +semidiameter +semidiameters +semidiurnal +semidivine +semidocumentaries +semidocumentary +semidome +semidomed +semidomes +semidomesticated +semidomestication +semidomestications +semidominant +semidry +semidrying +semidwarf +semidwarfs +semidwarves +semiempirical +semierect +semievergreen +semifeudal +semifinal +semifinalist +semifinalists +semifinals +semifinished +semifit +semifitted +semiflexible +semifluid +semifluids +semiformal +semigala +semigloss +semigovernmental +semigroup +semigroups +semihard +semihigh +semihobo +semihoboes +semihobos +semilegendary +semilethal +semilethals +semiliquid +semiliquids +semiliterate +semiliterates +semilog +semilogarithmic +semilunar +semilustrous +semimat +semimatt +semimatte +semimetal +semimetallic +semimetals +semimicro +semimoist +semimonastic +semimonthlies +semimonthly +semimute +semimystical +semina +seminal +seminally seminar +seminarian +seminarians +seminaries +seminarist +seminarists +seminars +seminary +seminatural +seminiferous +seminomad +seminomadic +seminomads +seminude +seminudities +seminudity +semiofficial +semiofficially +semiological +semiologically +semiologies +semiologist +semiologists +semiology +semiopaque +semioses +semiosis +semiotic +semiotician +semioticians +semioticist +semioticists +semiotics +semipalmated +semiparasite +semiparasites +semiparasitic +semipermanent +semipermeabilities +semipermeability +semipermeable +semipolitical +semipopular +semiporcelain +semiporcelains +semipornographic +semipornographies +semipornography +semipostal +semipostals +semiprecious +semiprivate +semipro +semiprofessional +semiprofessionally +semiprofessionals +semipros +semipublic +semiquantitative +semiquantitatively +semiquaver +semiquavers +semiraw +semireligious +semiretired +semiretirement +semiretirements +semirigid +semirural +semis +semisacred +semisecret +semisedentary +semises +semishrubby +semiskilled +semisoft +semisolid +semisolids +semisubmersible +semisubmersibles +semisweet +semisynthetic +semiterrestrial +semitist +semitists +semitonal +semitonally +semitone +semitones +semitonic +semitonically +semitrailer +semitrailers +semitranslucent +semitransparent +semitropic +semitropical +semitropics +semivowel +semivowels +semiweeklies +semiweekly +semiwild +semiworks +semiyearly +semolina +semolinas +sempervivum +sempervivums +sempiternal +sempiternally +sempiternities +sempiternity +semple +semplice +sempre +sempstress +sempstresses +sen +senarii +senarius +senary +senate +senates +senator +senatorial +senatorian +senators +senatorship +senatorships send +sendable +sendal +sendals +sended +sender +senders +sending +sendoff +sendoffs +sends +sendup +sendups +sene +seneca +senecas +senecio +senecios +senectitude +senectitudes +senega +senegas +senescence +senescences +senescent +seneschal +seneschals +sengi +senhor +senhora +senhoras +senhores +senhorita +senhoritas +senhors +senile +senilely +seniles +senilities +senility senior +seniorities +seniority +seniors +seniti +senna +sennas +sennet +sennets +sennight +sennights +sennit +sennits +senopia +senopias +senor +senora +senoras +senores +senorita +senoritas +senors +senryu +sensa +sensate +sensated +sensately +sensates +sensating +sensation +sensational +sensationalise +sensationalised +sensationalises +sensationalising +sensationalism +sensationalisms +sensationalist +sensationalistic +sensationalists +sensationalize +sensationalized +sensationalizes +sensationalizing +sensationally +sensations sense +sensed +senseful +senseless +senselessly +senselessness +senselessnesses +senses +sensibilia +sensibilities +sensibility +sensible +sensibleness +sensiblenesses +sensibler +sensibles +sensiblest +sensibly +sensilla +sensillae +sensillum +sensing +sensitisation +sensitisations +sensitise +sensitised +sensitises +sensitising sensitive +sensitively +sensitiveness +sensitivenesses +sensitives +sensitivities +sensitivity +sensitization +sensitizations +sensitize +sensitized +sensitizer +sensitizers +sensitizes +sensitizing +sensitometer +sensitometers +sensitometric +sensitometries +sensitometry +sensor +sensoria +sensorial +sensorially +sensorimotor +sensorineural +sensorium +sensoriums +sensors +sensory +sensual +sensualism +sensualisms +sensualist +sensualistic +sensualists +sensualities +sensuality +sensualization +sensualizations +sensualize +sensualized +sensualizes +sensualizing +sensually +sensum +sensuosities +sensuosity +sensuous +sensuously +sensuousness +sensuousnesses +sent +sente sentence +sentenced +sentences +sentencing +sententia +sententiae +sentential +sententious +sententiously +sententiousness +sententiousnesses +senti +sentience +sentiences +sentient +sentiently +sentients +sentiment +sentimental +sentimentalise +sentimentalised +sentimentalises +sentimentalising +sentimentalism +sentimentalisms +sentimentalist +sentimentalists +sentimentalities +sentimentality +sentimentalization +sentimentalizations +sentimentalize +sentimentalized +sentimentalizes +sentimentalizing +sentimentally +sentiments +sentimo +sentimos +sentinel +sentineled +sentineling +sentinelled +sentinelling +sentinels +sentries +sentry +sepal +sepaled +sepaline +sepalled +sepaloid +sepalous +sepals +separabilities +separability +separable +separableness +separablenesses separate +separated +separately +separateness +separatenesses +separates +separating separation +separationist +separationists +separations +separatism +separatisms +separatist +separatistic +separatists +separative +separator +separators +sepia +sepias +sepic +sepiolite +sepiolites +sepoy +sepoys +seppuku +seppukus +sepses +sepsis +sept +septa +septal +septaria +septarium +septate +septenarii +septenarius +septendecillion +septendecillions +septennial +septennially +septentrion +septentrional +septentrions +septet +septets +septette +septettes +septic +septical +septicemia +septicemias +septicemic +septicidal +septics +septillion +septillions +septime +septimes +septs +septuagenarian +septuagenarians +septum +septums +septuple +septupled +septuples +septupling +sepulcher +sepulchered +sepulchering +sepulchers +sepulchral +sepulchrally +sepulchre +sepulchred +sepulchres +sepulchring +sepulture +sepultures +sequacious +sequaciously +sequacities +sequacity +sequel +sequela +sequelae +sequels +sequence +sequenced +sequencer +sequencers +sequences +sequencies +sequencing +sequency +sequent +sequential +sequentially +sequents +sequester +sequestered +sequestering +sequesters +sequestra +sequestrate +sequestrated +sequestrates +sequestrating +sequestration +sequestrations +sequestrum +sequestrums +sequin +sequined +sequinned +sequins +sequitur +sequiturs +sequoia +sequoias +ser +sera +serac +seracs +seraglio +seraglios +serai +serail +serails +serais +seral +serape +serapes +seraph +seraphic +seraphically +seraphim +seraphims +seraphin +seraphs +serdab +serdabs +sere +sered +serein +sereins +serenade +serenaded +serenader +serenaders +serenades +serenading +serenata +serenatas +serenate +serendipities +serendipitous +serendipitously +serendipity +serene +serenely +sereneness +serenenesses +serener +serenes +serenest +serenities +serenity +serer +seres +serest +serf +serfage +serfages +serfdom +serfdoms +serfhood +serfhoods +serfish +serflike +serfs +serge +sergeancies +sergeancy +sergeant +sergeanties +sergeants +sergeanty +serges +serging +sergings +serial +serialise +serialised +serialises +serialising +serialism +serialisms +serialist +serialists +serialization +serializations +serialize +serialized +serializes +serializing +serially +serials +seriate +seriated +seriately +seriates +seriatim +seriating +sericeous +sericin +sericins +sericultural +sericulture +sericultures +sericulturist +sericulturists +seriema +seriemas +series +serif +serifed +seriffed +serifs +serigraph +serigrapher +serigraphers +serigraphies +serigraphs +serigraphy +serin +serine +serines +sering +seringa +seringas +serins +seriocomic +seriocomically serious +seriously +seriousness +seriousnesses +serjeant +serjeanties +serjeants +serjeanty +sermon +sermonette +sermonettes +sermonic +sermonize +sermonized +sermonizer +sermonizers +sermonizes +sermonizing +sermons +seroconversion +seroconversions +serodiagnoses +serodiagnosis +serodiagnostic +serologic +serological +serologically +serologies +serologist +serologists +serology +seronegative +seronegativities +seronegativity +seropositive +seropositivities +seropositivity +seropurulent +serosa +serosae +serosal +serosas +serosities +serosity +serotinal +serotine +serotines +serotinous +serotonergic +serotonin +serotoninergic +serotonins +serotype +serotypes +serous +serow +serows +serpent +serpentine +serpentinely +serpentines +serpents +serpigines +serpiginous +serpiginously +serpigo +serpigoes +serranid +serranids +serrano +serranos +serrate +serrated +serrates +serrating +serration +serrations +serried +serriedly +serriedness +serriednesses +serries +serry +serrying +sers +serum +serumal +serums +servable +serval +servals servant +servanthood +servanthoods +servantless +servants serve +served +server +servers +serves service +serviceabilities +serviceability +serviceable +serviceableness +serviceablenesses +serviceably +serviceberries +serviceberry +serviced +serviceman +servicemen +servicer +servicers +services +servicewoman +servicewomen +servicing +serviette +serviettes +servile +servilely +servileness +servilenesses +servilities +servility +serving +servings +servitor +servitors +servitude +servitudes +servo +servomechanism +servomechanisms +servomotor +servomotors +servos +sesame +sesames +sesamoid +sesamoids +sesquicarbonate +sesquicarbonates +sesquicentenaries +sesquicentenary +sesquicentennial +sesquicentennials +sesquipedalian +sesquiterpene +sesquiterpenes +sessile session +sessional +sessions +sesspool +sesspools +sesterce +sesterces +sestertia +sestertium +sestet +sestets +sestina +sestinas +sestine +sestines set +seta +setaceous +setae +setal +setback +setbacks +setenant +setenants +setiform +setline +setlines +setoff +setoffs +seton +setons +setose +setous +setout +setouts +sets +setscrew +setscrews +sett +settee +settees +setter +setters +setting +settings settle +settleable +settled settlement +settlements settler +settlers +settles +settling +settlings +settlor +settlors +setts +setulose +setulous +setup +setups +seven +sevenfold +sevens +seventeen +seventeens +seventeenth +seventeenths +seventh +sevenths +seventies +seventieth +seventieths +seventy +sever +severabilities +severability +severable several +severalfold +severally +severals +severalties +severalty +severance +severances +severe +severed +severely +severeness +severenesses +severer +severest +severing +severities +severity +severs +seviche +seviches +sevruga +sevrugas sew +sewabilities +sewability +sewable +sewage +sewages +sewan +sewans +sewar +sewars +sewed +sewer +sewerage +sewerages +sewered +sewering +sewers +sewing +sewings +sewn +sews sex +sexagenarian +sexagenarians +sexagesimal +sexagesimals +sexdecillion +sexdecillions +sexed +sexes +sexier +sexiest +sexily +sexiness +sexinesses +sexing +sexism +sexisms +sexist +sexists +sexless +sexlessly +sexlessness +sexlessnesses +sexologies +sexologist +sexologists +sexology +sexploitation +sexploitations +sexpot +sexpots +sext +sextain +sextains +sextan +sextans +sextant +sextants +sextarii +sextarius +sextet +sextets +sextette +sextettes +sextile +sextiles +sextillion +sextillions +sexto +sextodecimo +sextodecimos +sexton +sextons +sextos +sexts +sextuple +sextupled +sextuples +sextuplet +sextuplets +sextuplicate +sextuplicated +sextuplicates +sextuplicating +sextupling +sextuply +sexual +sexualities +sexuality +sexualization +sexualizations +sexualize +sexualized +sexualizes +sexualizing +sexually +sexy +sferics +sforzandi +sforzando +sforzandos +sforzato +sforzatos +sfumato +sfumatos +sgraffiti +sgraffito +sh +sha +shabbier +shabbiest +shabbily +shabbiness +shabbinesses shabby +shack +shackle +shacklebone +shacklebones +shackled +shackler +shacklers +shackles +shackling +shacko +shackoes +shackos +shacks +shad +shadberries +shadberry +shadblow +shadblows +shadbush +shadbushes +shadchan +shadchanim +shadchans +shaddock +shaddocks shade +shaded +shadeless +shader +shaders +shades +shadflies +shadfly +shadier +shadiest +shadily +shadiness +shadinesses +shading +shadings +shadoof +shadoofs shadow +shadowbox +shadowboxed +shadowboxes +shadowboxing +shadowed +shadower +shadowers +shadowgraph +shadowgraphies +shadowgraphs +shadowgraphy +shadowier +shadowiest +shadowily +shadowiness +shadowinesses +shadowing +shadowless +shadowlike +shadows +shadowy +shadrach +shadrachs +shads +shaduf +shadufs +shady +shaft +shafted +shafting +shaftings +shafts +shag +shagbark +shagbarks +shagged +shaggier +shaggiest +shaggily +shagginess +shagginesses +shagging +shaggy +shaggymane +shaggymanes +shagreen +shagreens +shags +shah +shahdom +shahdoms +shahs +shaird +shairds +shairn +shairns +shaitan +shaitans +shakable shake +shakeable +shakedown +shakedowns +shaken +shakeout +shakeouts +shaker +shakers +shakes +shakeup +shakeups +shakier +shakiest +shakily +shakiness +shakinesses +shaking +shako +shakoes +shakos +shaky +shale +shaled +shales +shaley +shalier +shaliest shall +shalloon +shalloons +shallop +shallops +shallot +shallots shallow +shallowed +shallower +shallowest +shallowing +shallowly +shallowness +shallownesses +shallows +shalom +shaloms +shalt +shaly +sham +shamable +shaman +shamanic +shamanism +shamanisms +shamanist +shamanistic +shamanists +shamans +shamas +shamble +shambled +shambles +shambling +shambolic shame +shamed +shamefaced +shamefacedly +shamefacedness +shamefacednesses +shamefast +shameful +shamefully +shamefulness +shamefulnesses +shameless +shamelessly +shamelessness +shamelessnesses +shames +shaming +shammas +shammash +shammashim +shammasim +shammed +shammer +shammers +shammes +shammied +shammies +shamming +shammos +shammosim +shammy +shammying +shamois +shamos +shamosim +shamoy +shamoyed +shamoying +shamoys +shampoo +shampooed +shampooer +shampooers +shampooing +shampoos +shamrock +shamrocks +shams +shamus +shamuses +shandies +shandy +shandygaff +shandygaffs +shanghai +shanghaied +shanghaier +shanghaiers +shanghaiing +shanghais +shank +shanked +shanking +shankpiece +shankpieces +shanks +shannies +shanny +shantey +shanteys +shanti +shanties +shantih +shantihs +shantis +shantung +shantungs +shanty +shantyman +shantymen +shantytown +shantytowns +shapable shape +shapeable +shaped +shapeless +shapelessly +shapelessness +shapelessnesses +shapelier +shapeliest +shapeliness +shapelinesses +shapely +shapen +shaper +shapers +shapes +shapeup +shapeups +shaping +sharable +shard +shards share +shareabilities +shareability +shareable +sharecrop +sharecropped +sharecropper +sharecroppers +sharecropping +sharecrops +shared +shareholder +shareholders +sharer +sharers +shares +shareware +sharewares +sharif +sharifian +sharifs +sharing shark +sharked +sharker +sharkers +sharking +sharklike +sharks +sharkskin +sharkskins +sharn +sharns +sharny sharp +sharped sharpen +sharpened sharpener +sharpeners +sharpening +sharpens +sharper +sharpers +sharpest +sharpie +sharpies +sharping +sharply +sharpness +sharpnesses +sharps +sharpshooter +sharpshooters +sharpshooting +sharpshootings +sharpy +shashlick +shashlicks +shashlik +shashliks +shaslik +shasliks +shat +shatter +shattered +shattering +shatteringly +shatterproof +shatters +shaugh +shaughs +shaul +shauled +shauling +shauls +shavable shave +shaved +shaveling +shavelings +shaven shaver +shavers +shaves +shavetail +shavetails +shavie +shavies +shaving +shavings +shaw +shawed +shawing +shawl +shawled +shawling +shawls +shawm +shawms +shawn +shaws +shay +shays she +shea +sheaf +sheafed +sheafing +sheaflike +sheafs +sheal +shealing +shealings +sheals +shear +sheared +shearer +shearers +shearing +shearings +shearling +shearlings +shears +shearwater +shearwaters +sheas +sheath +sheathbill +sheathbills +sheathe +sheathed +sheather +sheathers +sheathes +sheathing +sheathings +sheaths +sheave +sheaved +sheaves +sheaving +shebang +shebangs +shebean +shebeans +shebeen +shebeens +shed +shedable +shedded +shedder +shedders +shedding +shedlike +sheds +sheen +sheened +sheeney +sheeneys +sheenful +sheenie +sheenier +sheenies +sheeniest +sheening +sheens +sheeny sheep +sheepberries +sheepberry +sheepcot +sheepcote +sheepcotes +sheepcots +sheepdog +sheepdogs +sheepfold +sheepfolds +sheepherder +sheepherders +sheepherding +sheepherdings +sheepish +sheepishly +sheepishness +sheepishnesses +sheepman +sheepmen +sheepshank +sheepshanks +sheepshead +sheepsheads +sheepshearer +sheepshearers +sheepshearing +sheepshearings +sheepskin +sheepskins +sheer +sheered +sheerer +sheerest +sheering +sheerlegs +sheerly +sheerness +sheernesses +sheers sheet +sheeted +sheeter +sheeters +sheetfed +sheeting +sheetings +sheetlike +sheets +sheeve +sheeves +shegetz +sheik +sheikdom +sheikdoms +sheikh +sheikhdom +sheikhdoms +sheikhs +sheiks +sheila +sheilas +sheitan +sheitans +shekel +shekels +sheldrake +sheldrakes +shelduck +shelducks shelf +shelfful +shelffuls +shelflike +shell +shellac +shellack +shellacked +shellacking +shellackings +shellacks +shellacs +shellback +shellbacks +shellcracker +shellcrackers +shelled +sheller +shellers +shellfire +shellfires +shellfish +shellfisheries +shellfishery +shellfishes +shellier +shelliest +shelling +shellproof +shells +shellshocked +shellwork +shellworks +shelly +shelta +sheltas shelter +shelterbelt +shelterbelts +sheltered +shelterer +shelterers +sheltering +shelterless +shelters +sheltie +shelties +shelty +shelve +shelved +shelver +shelvers +shelves +shelvier +shelviest +shelving +shelvings +shelvy +shenanigan +shenanigans +shend +shending +shends +shent +sheol +sheols +shepherd +shepherded +shepherdess +shepherdesses +shepherding +shepherds +sheqalim +sheqel +sherbert +sherberts +sherbet +sherbets +sherd +sherds +shereef +shereefs +shergottite +shergottites +sherif +sheriff +sheriffdom +sheriffdoms +sheriffs +sherifs +sherlock +sherlocks +sheroot +sheroots +sherpa +sherpas +sherries +sherris +sherrises +sherry +shes +shetland +shetlands +sheuch +sheuchs +sheugh +sheughs +shew +shewbread +shewbreads +shewed +shewer +shewers +shewing +shewn +shews +shh +shiatsu +shiatsus +shiatzu +shiatzus +shibah +shibahs +shibboleth +shibboleths +shicker +shickers +shicksa +shicksas +shied +shiel +shield +shielded +shielder +shielders +shielding +shields +shieling +shielings +shiels +shier +shiers +shies +shiest +shift +shiftable +shifted +shifter +shifters +shiftier +shiftiest +shiftily +shiftiness +shiftinesses +shifting +shiftless +shiftlessly +shiftlessness +shiftlessnesses +shifts +shifty +shigella +shigellae +shigellas +shigelloses +shigellosis +shiitake +shiitakes +shikar +shikaree +shikarees +shikari +shikaris +shikarred +shikarring +shikars +shikker +shikkers +shiksa +shiksas +shikse +shikses +shilingi +shill +shillala +shillalah +shillalahs +shillalas +shilled +shillelagh +shillelaghs +shilling +shillings +shills +shilpit +shily +shim +shimmed +shimmer +shimmered +shimmering +shimmers +shimmery +shimmied +shimmies +shimming +shimmy +shimmying +shims +shin +shinbone +shinbones +shindies +shindig +shindigs +shindy +shindys shine +shined +shiner +shiners +shines +shingle +shingled +shingler +shinglers +shingles +shingling +shingly +shinier +shiniest +shinily +shininess +shininesses +shining +shinleaf +shinleafs +shinleaves +shinned +shinneries +shinnery +shinney +shinneyed +shinneying +shinneys +shinnied +shinnies +shinning +shinny +shinnying +shinplaster +shinplasters +shins +shinsplints +shiny ship +shipboard +shipboards +shipborne +shipbuilder +shipbuilders +shipbuilding +shipbuildings +shipfitter +shipfitters +shiplap +shiplaps +shipload +shiploads +shipman +shipmaster +shipmasters +shipmate +shipmates +shipmen +shipment +shipments +shipowner +shipowners +shippable +shipped +shippen +shippens +shipper +shippers +shipping +shippings +shippon +shippons +ships +shipshape +shipside +shipsides +shipway +shipways +shipworm +shipworms +shipwreck +shipwrecked +shipwrecking +shipwrecks +shipwright +shipwrights +shipyard +shipyards +shire +shires +shirk +shirked +shirker +shirkers +shirking +shirks +shirr +shirred +shirring +shirrings +shirrs shirt +shirtdress +shirtdresses +shirtfront +shirtfronts +shirtier +shirtiest +shirting +shirtings +shirtless +shirtmaker +shirtmakers +shirts +shirtsleeve +shirtsleeved +shirtsleeves +shirttail +shirttails +shirtwaist +shirtwaists +shirty +shist +shists +shit +shitake +shitakes +shithead +shitheads +shits +shittah +shittahs +shitted +shittier +shittiest +shittim +shittims +shittimwood +shittimwoods +shitting +shitty +shiv +shiva +shivah +shivahs +shivaree +shivareed +shivareeing +shivarees +shivas +shive +shiver +shivered +shiverer +shiverers +shivering +shivers +shivery +shives +shivs +shkotzim +shlemiehl +shlemiehls +shlemiel +shlemiels +shlep +shlepp +shlepped +shlepping +shlepps +shleps +shlock +shlocks +shlump +shlumped +shlumping +shlumps +shlumpy +shmaltz +shmaltzes +shmaltzier +shmaltziest +shmaltzy +shmear +shmears +shmo +shmoes +shmooze +shmoozed +shmoozes +shmoozing +shmuck +shmucks +shnaps +shnook +shnooks +shoal +shoaled +shoaler +shoalest +shoalier +shoaliest +shoaling +shoals +shoaly +shoat +shoats shock +shockable +shocked +shocker +shockers +shocking +shockingly +shockproof +shocks +shod +shodden +shoddier +shoddies +shoddiest +shoddily +shoddiness +shoddinesses +shoddy shoe +shoebill +shoebills +shoeblack +shoeblacks +shoed +shoehorn +shoehorned +shoehorning +shoehorns +shoeing +shoelace +shoelaces +shoeless +shoemaker +shoemakers +shoepac +shoepack +shoepacks +shoepacs +shoer +shoers +shoes +shoeshine +shoeshines +shoestring +shoestrings +shoetree +shoetrees +shofar +shofars +shofroth +shog +shogged +shogging +shogs +shogun +shogunal +shogunate +shogunates +shoguns +shoji +shojis +sholom +sholoms +shone +shoo +shooed +shooflies +shoofly +shooing +shook +shooks +shool +shooled +shooling +shools +shoon +shoos shoot +shooter +shooters +shooting +shootings +shootout +shootouts +shoots shop +shopboy +shopboys +shopgirl +shopgirls +shophar +shophars +shophroth shopkeeper +shopkeepers +shoplift +shoplifted +shoplifter +shoplifters +shoplifting +shoplifts +shopman +shopmen +shoppe +shopped +shopper +shoppers +shoppes shopping +shoppings +shops +shoptalk +shoptalks +shopwindow +shopwindows +shopworn +shoran +shorans shore +shorebird +shorebirds +shored +shorefront +shorefronts +shoreline +shorelines +shores +shoreside +shoreward +shorewards +shoring +shorings +shorl +shorls +shorn short +shortage +shortages +shortbread +shortbreads +shortcake +shortcakes +shortchange +shortchanged +shortchanger +shortchangers +shortchanges +shortchanging shortcoming +shortcomings +shortcut +shortcuts +shortcutting +shorted +shorten +shortened +shortener +shorteners +shortening +shortenings +shortens +shorter +shortest +shortfall +shortfalls +shorthair +shorthaired +shorthairs +shorthand +shorthanded +shorthands +shorthorn +shorthorns +shortia +shortias +shortie +shorties +shorting +shortish +shortlist +shortlists shortly +shortness +shortnesses shorts +shortsighted +shortsightedly +shortsightedness +shortsightednesses +shortstop +shortstops +shortwave +shortwaves +shorty shot +shote +shotes +shotgun +shotgunned +shotgunner +shotgunners +shotgunning +shotguns +shots +shott +shotted +shotten +shotting +shotts should shoulder +shouldered +shouldering +shoulders +shouldest +shouldst shout +shouted +shouter +shouters +shouting +shouts +shove +shoved +shovel +shoveled +shoveler +shovelers +shovelful +shovelfuls +shoveling +shovelled +shoveller +shovellers +shovelling +shovelnose +shovelnoses +shovels +shovelsful +shover +shovers +shoves +shoving show +showable +showbiz +showbizzes +showbizzy +showboat +showboated +showboating +showboats +showbread +showbreads +showcase +showcased +showcases +showcasing +showdown +showdowns +showed shower +showered +showerer +showerers +showerhead +showerheads +showering +showerless +showers +showery +showgirl +showgirls +showier +showiest +showily +showiness +showinesses +showing +showings +showman +showmanship +showmanships +showmen +shown +showoff +showoffs +showpiece +showpieces +showplace +showplaces +showring +showrings +showroom +showrooms +shows +showstopper +showstoppers +showstopping +showy +shoyu +shoyus +shrank +shrapnel +shred +shredded +shredder +shredders +shredding +shreds +shrew +shrewd +shrewder +shrewdest +shrewdie +shrewdies +shrewdly +shrewdness +shrewdnesses +shrewed +shrewing +shrewish +shrewishly +shrewishness +shrewishnesses +shrewlike +shrews +shri +shriek +shrieked +shrieker +shriekers +shriekier +shriekiest +shrieking +shrieks +shrieky +shrieval +shrievalties +shrievalty +shrieve +shrieved +shrieves +shrieving +shrift +shrifts +shrike +shrikes +shrill +shrilled +shriller +shrillest +shrilling +shrillness +shrillnesses +shrills +shrilly +shrimp +shrimped +shrimper +shrimpers +shrimpier +shrimpiest +shrimping +shrimplike +shrimps +shrimpy +shrine +shrined +shrines +shrining shrink +shrinkable +shrinkage +shrinkages +shrinker +shrinkers +shrinking +shrinks +shris +shrive +shrived +shrivel +shriveled +shriveling +shrivelled +shrivelling +shrivels +shriven +shriver +shrivers +shrives +shriving +shroff +shroffed +shroffing +shroffs +shroud +shrouded +shrouding +shrouds +shrove +shrub +shrubberies +shrubbery +shrubbier +shrubbiest +shrubby +shrubs +shrug +shrugged +shrugging +shrugs +shrunk +shrunken +shtetel +shtetels +shtetl +shtetlach +shtetls +shtick +shticks +shtik +shtiks +shuck +shucked +shucker +shuckers +shucking +shuckings +shucks +shudder +shuddered +shuddering +shudders +shuddery +shuffle +shuffleboard +shuffleboards +shuffled +shuffler +shufflers +shuffles +shuffling +shul +shuln +shuls +shun +shunned +shunner +shunners +shunning +shunpike +shunpiked +shunpiker +shunpikers +shunpikes +shunpiking +shunpikings +shuns +shunt +shunted +shunter +shunters +shunting +shunts +shush +shushed +shushes +shushing shut +shutdown +shutdowns +shute +shuted +shutes +shuteye +shuteyes +shuting +shutoff +shutoffs +shutout +shutouts +shuts +shutter +shutterbug +shutterbugs +shuttered +shuttering +shutterless +shutters +shutting +shuttle +shuttlecock +shuttlecocked +shuttlecocking +shuttlecocks +shuttled +shuttleless +shuttles +shuttling +shwanpan +shwanpans shy +shyer +shyers +shyest +shying +shylock +shylocked +shylocking +shylocks +shyly +shyness +shynesses +shyster +shysters +si +sial +sialagogue +sialagogues +sialic +sialid +sialidan +sialidans +sialids +sialoid +sials +siamang +siamangs +siamese +siameses +sib +sibb +sibbs +sibilance +sibilances +sibilant +sibilantly +sibilants +sibilate +sibilated +sibilates +sibilating +sibilation +sibilations +sibling +siblings +sibs +sibyl +sibylic +sibyllic +sibylline +sibyls +sic +siccan +sicced +siccing +sice +sices sick +sickbay +sickbays +sickbed +sickbeds +sicked +sickee +sickees +sicken +sickened +sickener +sickeners +sickening +sickeningly +sickens +sicker +sickerly +sickest +sickie +sickies +sicking +sickish +sickishly +sickishness +sickishnesses +sickle +sickled +sicklemia +sicklemias +sickles +sicklied +sicklier +sicklies +sickliest +sicklily +sickliness +sicklinesses +sickling +sickly +sicklying sickness +sicknesses +sicko +sickos +sickout +sickouts +sickroom +sickrooms +sicks +sics +siddur +siddurim +siddurs side -sideroad +sidearm +sideband +sidebands +sidebar +sidebars +sideboard +sideboards +sideburned +sideburns +sidecar +sidecars +sided +sidedness +sidednesses +sidedress +sidedresses +sidehill +sidehills +sidekick +sidekicks +sidelight +sidelights +sideline +sidelined +sideliner +sideliners +sidelines +sideling +sidelining +sidelong +sideman +sidemen +sidepiece +sidepieces +sidereal +siderite +siderites +siderolite +siderolites +sides +sidesaddle +sidesaddles +sideshow +sideshows +sideslip +sideslipped +sideslipping +sideslips +sidespin +sidespins +sidesplitting +sidesplittingly +sidestep +sidestepped +sidestepper +sidesteppers +sidestepping +sidesteps +sidestream +sidestroke +sidestrokes +sideswipe +sideswiped +sideswipes +sideswiping +sidetrack +sidetracked +sidetracking +sidetracks sidewalk +sidewalks +sidewall +sidewalls +sideward +sidewards +sideway sideways +sidewinder +sidewinders +sidewise +siding +sidings +sidle +sidled +sidler +sidlers +sidles +sidling +siege +sieged +sieges +sieging +siemens +sienite +sienites +sienna +siennas +sierozem +sierozems +sierra +sierran +sierras +siesta +siestas +sieur +sieurs +sieve +sieved +sieves +sieving +sifaka +sifakas +siffleur +siffleurs +sift +sifted +sifter +sifters +sifting +siftings +sifts +siganid +siganids sigh +sighed +sigher +sighers +sighing +sighless +sighlike +sighs sight +sighted +sighter +sighters +sighting +sightings +sightless +sightlessly +sightlessness +sightlessnesses +sightlier +sightliest +sightliness +sightlinesses +sightly +sights +sightsaw +sightsee sightseeing +sightseen +sightseer +sightseers +sightsees +sigil +sigils +sigloi +siglos +sigma +sigmas +sigmate +sigmoid +sigmoidal +sigmoidally +sigmoidoscopies +sigmoidoscopy +sigmoids +sign +signage +signages signal +signaled +signaler +signalers +signaling +signalise +signalised +signalises +signalising +signalization +signalizations +signalize +signalized +signalizes +signalizing +signalled +signaller +signallers +signalling +signally +signalman +signalmen +signalment +signalments +signals +signatories +signatory signature +signatures +signboard +signboards +signed +signee +signees +signer +signers +signet +signeted +signeting +signets significance +significances +significancies +significancy +significant +significantly +signification +significations +significative +significs +signified +signifieds +signifier +signifiers +signifies +signify +signifying +signifyings +signing +signior +signiori +signiories +signiors +signiory +signor +signora +signoras +signore +signori +signories +signorina +signorinas +signorine +signors +signory +signpost +signposted +signposting +signposts +signs +sike +siker +sikes +silage +silages +silane +silanes +sild +silds silence +silenced +silencer +silencers +silences +silencing +sileni silent +silenter +silentest +silently +silentness +silentnesses +silents +silenus +silesia +silesias +silex +silexes +silhouette +silhouetted +silhouettes +silhouetting +silhouettist +silhouettists +silica +silicas +silicate +silicates +siliceous +silicic +silicide +silicides +silicification +silicifications +silicified +silicifies +silicify +silicifying +silicious +silicium +siliciums +silicle +silicles +silicon +silicone +silicones +siliconized +silicons +silicoses +silicosis +silicotic +silicotics +silicula +siliculae +siliqua +siliquae +silique +siliques silk +silkaline +silkalines +silked +silken +silkier +silkies +silkiest +silkily +silkiness +silkinesses +silking +silklike +silkoline +silkolines +silks +silkweed +silkweeds +silkworm +silkworms +silky +sill +sillabub +sillabubs +siller +sillers +sillibub +sillibubs +sillier +sillies +silliest +sillily +sillimanite +sillimanites +silliness +sillinesses +sills silly +silo +siloed +siloing +silos +siloxane +siloxanes +silt +siltation +siltations +silted +siltier +siltiest +silting +silts +siltstone +siltstones +silty +silurid +silurids +siluroid +siluroids +silva +silvae +silvan +silvans +silvas silver +silverback +silverbacks +silverberries +silverberry +silvered +silverer +silverers +silverfish +silverfishes +silveriness +silverinesses +silvering +silverly +silvern +silverpoint +silverpoints +silvers +silverside +silversides +silversmith +silversmithing +silversmithings +silversmiths +silverware +silverwares +silverweed +silverweeds +silvery +silvex +silvexes +silvical +silvics +silvicultural +silviculturally +silviculture +silvicultures +silviculturist +silviculturists +sim +sima +simar +simars +simaruba +simarubas +simas +simazine +simazines +simian +simians similar +similarities +similarity +similarly +simile +similes +similitude +similitudes +simioid +simious +simitar +simitars +simlin +simlins +simmer +simmered +simmering +simmers +simnel +simnels +simoleon +simoleons +simoniac +simoniacal +simoniacally +simoniacs +simonies +simonist +simonists +simonize +simonized +simonizes +simonizing +simony +simoom +simooms +simoon +simoons +simp +simpatico +simper +simpered +simperer +simperers +simpering +simpers simple +simpleminded +simplemindedly +simplemindedness +simplemindednesses +simpleness +simplenesses +simpler +simples +simplest +simpleton +simpletons +simplex +simplexes +simplices +simplicia +simplicial +simplicially +simplicities +simplicity +simplification +simplifications +simplified +simplifier +simplifiers +simplifies simplify +simplifying +simplism +simplisms +simplist +simplistic +simplistically +simplists +simply +simps +sims +simulacra +simulacre +simulacres +simulacrum +simulacrums +simulant +simulants +simular +simulars +simulate +simulated +simulates +simulating +simulation +simulations +simulative +simulator +simulators +simulcast +simulcasted +simulcasting +simulcasts +simultaneities +simultaneity +simultaneous +simultaneously +simultaneousness +simultaneousnesses +sin +sinapism +sinapisms since +sincere sincerely +sincereness +sincerenesses +sincerer +sincerest +sincerities +sincerity +sincipita +sincipital +sinciput +sinciputs +sine +sinecure +sinecures +sines +sinew +sinewed +sinewing +sinews +sinewy +sinfonia +sinfonie +sinfonietta +sinfoniettas +sinful +sinfully +sinfulness +sinfulnesses sing +singable +singe +singed +singeing +singer +singers +singes +singing single +singled +singleness +singlenesses +singles +singlestick +singlesticks +singlet +singleton +singletons +singletree +singletrees +singlets +singling +singly +sings +singsong +singsongs +singsongy +singspiel +singspiels +singular +singularities +singularity +singularize +singularized +singularizes +singularizing +singularly +singulars +sinh +sinhs +sinicize +sinicized +sinicizes +sinicizing +sinister +sinisterly +sinisterness +sinisternesses +sinistral +sinistrous sink +sinkable +sinkage +sinkages +sinker +sinkers +sinkhole +sinkholes +sinking +sinks +sinless +sinlessly +sinlessness +sinlessnesses +sinned +sinner +sinners +sinning +sinoatrial +sinological +sinologies +sinologist +sinologists +sinologue +sinologues +sinology +sinopia +sinopias +sinopie +sins +sinsemilla +sinsemillas +sinsyne +sinter +sinterabilities +sinterability +sintered +sintering +sinters +sinuate +sinuated +sinuates +sinuating +sinuosities +sinuosity +sinuous +sinuously +sinuousness +sinuousnesses +sinus +sinuses +sinusitis +sinusitises +sinusoid +sinusoidal +sinusoidally +sinusoids +sip +sipe +siped +sipes +siphon +siphonal +siphoned +siphonic +siphoning +siphonophore +siphonophores +siphonostele +siphonosteles +siphons +siping +sipped +sipper +sippers +sippet +sippets +sipping +sips sir +sirdar +sirdars +sire +sired +siree +sirees +siren +sirenian +sirenians +sirens +sires +siring +sirloin +sirloins +sirocco +siroccos +sirra +sirrah +sirrahs +sirras +sirree +sirrees +sirs +sirup +sirups +sirupy +sirvente +sirventes +sis +sisal +sisals +sises +siskin +siskins +sissier +sissies +sissiest +sissified +sissy +sissyish sister +sistered +sisterhood +sisterhoods +sistering +sisterly +sisters +sistra +sistroid +sistrum +sistrums sit +sitar +sitarist +sitarists +sitars +sitcom +sitcoms +site +sited +sites +sith +sithence +sithens +siting +sitologies +sitology +sitosterol +sitosterols +sits +sitten +sitter +sitters +sitting +sittings +situate +situated +situates +situating situation +situational +situationally +situations +situp +situps +situs +situses +sitzmark +sitzmarks +siver +sivers +six +sixes +sixfold +sixmo +sixmos +sixpence +sixpences +sixpenny +sixte +sixteen +sixteenmo +sixteenmos +sixteens +sixteenth +sixteenths +sixtes +sixth +sixthly +sixths +sixties +sixtieth +sixtieths +sixty +sixtyish +sizable +sizableness +sizablenesses +sizably +sizar +sizars size +sizeable +sizeably +sized +sizer +sizers +sizes +sizier +siziest +siziness +sizinesses +sizing +sizings +sizy +sizzle +sizzled +sizzler +sizzlers +sizzles +sizzling +sjambok +sjamboked +sjamboking +sjamboks +ska +skag +skags +skald +skaldic +skalds +skas +skat skate skateboard +skateboarder +skateboarders +skateboarding +skateboardings +skateboards +skated +skater +skaters +skates +skating +skatings +skatol +skatole +skatoles +skatols +skats +skean +skeane +skeanes +skeans +skedaddle +skedaddled +skedaddler +skedaddlers +skedaddles +skedaddling +skee +skeed +skeeing +skeen +skeens +skees +skeet +skeeter +skeeters +skeets +skeg +skegs +skeigh +skein +skeined +skeining +skeins +skeletal +skeletally +skeleton +skeletonic +skeletonise +skeletonised +skeletonises +skeletonising +skeletonize +skeletonized +skeletonizer +skeletonizers +skeletonizes +skeletonizing +skeletons +skellum +skellums +skelm +skelms +skelp +skelped +skelping +skelpit +skelps +skelter +skeltered +skeltering +skelters +skene +skenes +skep +skeps +skepsis +skepsises +skeptic skeptical +skeptically +skepticism +skepticisms +skeptics +skerries +skerry +sketch +sketchbook +sketchbooks +sketched +sketcher +sketchers +sketches +sketchier +sketchiest +sketchily +sketchiness +sketchinesses +sketching +sketchy +skew +skewback +skewbacks +skewbald +skewbalds +skewed +skewer +skewered +skewering +skewers +skewing +skewness +skewnesses +skews ski +skiable +skiagram +skiagrams +skibob +skibobber +skibobbers +skibobbing +skibobbings +skibobs +skid +skidded +skidder +skidders +skiddier +skiddiest +skidding +skiddoo +skiddooed +skiddooing +skiddoos +skiddy +skidoo +skidooed +skidooing +skidoos +skidproof +skids +skidway +skidways +skied +skier +skiers +skies +skiey +skiff +skiffle +skiffled +skiffles +skiffling +skiffs +skiing +skiings +skijorer +skijorers +skijoring +skijorings skilful skill +skilled +skilless +skillessness +skillessnesses +skillet +skillets +skillful +skillfully +skillfulness +skillfulnesses +skilling +skillings +skills +skim +skimmed +skimmer +skimmers +skimming +skimmings +skimo +skimobile +skimobiles +skimos +skimp +skimped +skimpier +skimpiest +skimpily +skimpiness +skimpinesses +skimping +skimps +skimpy +skims skin +skinflint +skinflints +skinful +skinfuls +skinhead +skinheads +skink +skinked +skinker +skinkers +skinking +skinks +skinless +skinlike +skinned +skinner +skinners +skinnier +skinniest +skinniness +skinninesses +skinning +skinny +skins +skint +skintight +skioring +skiorings skip +skipjack +skipjacks +skiplane +skiplanes +skippable +skipped +skipper +skippered +skippering +skippers +skippet +skippets +skipping +skips +skirl +skirled +skirling +skirls +skirmish +skirmished +skirmisher +skirmishers +skirmishes +skirmishing +skirr +skirred +skirret +skirrets +skirring +skirrs skirt +skirted +skirter +skirters +skirting +skirtings +skirts +skis +skit +skite +skited +skites +skiting +skits +skitter +skittered +skitterier +skitteriest +skittering +skitters +skittery +skittish +skittishly +skittishness +skittishnesses +skittle +skittles +skive +skived +skiver +skivers +skives +skiving +skivvied +skivvies +skivvy +skivvying +skiwear +sklent +sklented +sklenting +sklents +skoal +skoaled +skoaling +skoals +skookum +skosh +skoshes +skreegh +skreeghed +skreeghing +skreeghs +skreigh +skreighed +skreighing +skreighs +skua +skuas +skulduggeries +skulduggery +skulk +skulked +skulker +skulkers +skulking +skulks +skull +skullcap +skullcaps +skullduggeries +skullduggery +skulled +skulls +skunk +skunked +skunking +skunks sky +skyborne +skybox +skyboxes +skycap +skycaps +skydive +skydived +skydiver +skydivers +skydives +skydiving +skydivings +skydove +skyed +skyey +skyhook +skyhooks +skying +skyjack +skyjacked +skyjacker +skyjackers +skyjacking +skyjackings +skyjacks +skylark +skylarked +skylarker +skylarkers +skylarking +skylarks +skylight +skylighted +skylights +skyline +skylines +skylit +skyman +skymen +skyphoi +skyphos +skyrocket +skyrocketed +skyrocketing +skyrockets +skysail +skysails skyscraper +skyscrapers +skywalk +skywalks +skyward +skywards +skyway +skyways +skywrite +skywriter +skywriters +skywrites +skywriting +skywritings +skywritten +skywrote +slab +slabbed +slabber +slabbered +slabbering +slabbers +slabbery +slabbing +slablike +slabs +slack +slacked +slacken +slackened +slackening +slackens +slacker +slackers +slackest +slacking +slackly +slackness +slacknesses +slacks +slag +slagged +slaggier +slaggiest +slagging +slaggy +slags +slain +slainte +slakable +slake +slaked +slaker +slakers +slakes +slaking +slalom +slalomed +slaloming +slaloms +slam +slammed +slammer +slammers +slamming +slams +slander +slandered +slanderer +slanderers +slandering +slanderous +slanderously +slanderousness +slanderousnesses +slanders +slang +slanged +slangier +slangiest +slangily +slanginess +slanginesses +slanging +slangs +slanguage +slanguages +slangy +slank +slant +slanted +slanting +slantingly +slants +slantways +slantwise +slanty +slap +slapdash +slapdashes +slaphappier +slaphappiest +slaphappy +slapjack +slapjacks +slapped +slapper +slappers +slapping +slaps +slapstick +slapsticks +slash +slashed +slasher +slashers +slashes +slashing +slashingly +slashings +slat +slatch +slatches +slate +slated +slatelike +slater +slaters +slates +slatey +slather +slathered +slathering +slathers +slatier +slatiest +slating +slatings +slats +slatted +slattern +slatternliness +slatternlinesses +slatternly +slatterns +slatting +slattings +slaty +slaughter +slaughtered +slaughterer +slaughterers +slaughterhouse +slaughterhouses +slaughtering +slaughterous +slaughterously +slaughters slave +slaved +slaveholder +slaveholders +slaveholding +slaveholdings +slaver +slavered +slaverer +slaverers +slaveries +slavering +slavers slavery +slaves +slavey +slaveys +slaving +slavish +slavishly +slavishness +slavishnesses +slavocracies +slavocracy +slaw +slaws +slay +slayed +slayer +slayers +slaying +slays +sleave +sleaved +sleaves +sleaving +sleaze +sleazebag +sleazebags +sleazeball +sleazeballs +sleazes +sleazier +sleaziest +sleazily +sleaziness +sleazinesses +sleazo +sleazy +sled +sledded +sledder +sledders +sledding +sleddings +sledge +sledged +sledgehammer +sledgehammered +sledgehammering +sledgehammers +sledges +sledging +sleds +sleek +sleeked +sleeken +sleekened +sleekening +sleekens +sleeker +sleekest +sleekier +sleekiest +sleeking +sleekit +sleekly +sleekness +sleeknesses +sleeks +sleeky sleep +sleeper +sleepers +sleepier +sleepiest +sleepily +sleepiness +sleepinesses +sleeping +sleepings +sleepless +sleeplessly +sleeplessness +sleeplessnesses +sleeplike +sleepover +sleepovers +sleeps +sleepwalk +sleepwalked +sleepwalker +sleepwalkers +sleepwalking +sleepwalks +sleepwear sleepy +sleepyhead +sleepyheads +sleet +sleeted +sleetier +sleetiest +sleeting +sleets +sleety sleeve +sleeved +sleeveless +sleevelet +sleevelets +sleeves +sleeving +sleigh +sleighed +sleigher +sleighers +sleighing +sleighs +sleight +sleights +slender +slenderer +slenderest +slenderize +slenderized +slenderizes +slenderizing +slenderly +slenderness +slendernesses +slept +sleuth +sleuthed +sleuthhound +sleuthhounds +sleuthing +sleuths +slew +slewed +slewing +slews slice +sliceable +sliced +slicer +slicers +slices +slicing +slick +slicked +slickenside +slickensides +slicker +slickers +slickest +slicking +slickly +slickness +slicknesses +slickrock +slickrocks +slicks +slid +slidable +slidden slide +slider +sliders +slides +slideway +slideways +sliding +slier +sliest slight +slighted +slighter +slightest +slighting +slightingly +slightly +slightness +slightnesses +slights +slily slim +slime +slimeball +slimeballs +slimed +slimes +slimier +slimiest +slimily +sliminess +sliminesses +sliming +slimly +slimmed +slimmer +slimmers +slimmest +slimming +slimnastics +slimness +slimnesses +slimpsier +slimpsiest +slimpsy +slims +slimsier +slimsiest +slimsy +slimy +sling +slinger +slingers +slinging +slings +slingshot +slingshots +slink +slinked +slinkier +slinkiest +slinkily +slinkiness +slinkinesses +slinking +slinks +slinky slip +slipcase +slipcased +slipcases +slipcover +slipcovers +slipe +sliped +slipes +slipform +slipformed +slipforming +slipforms +sliping +slipknot +slipknots +slipless +slipout +slipouts +slipover +slipovers +slippage +slippages +slipped +slipper +slippered +slipperier +slipperiest +slipperiness +slipperinesses +slippers +slippery +slippier +slippiest +slipping +slippy +slips +slipshod +slipslop +slipslops +slipsole +slipsoles +slipstream +slipstreamed +slipstreaming +slipstreams +slipt +slipup +slipups +slipware +slipwares +slipway +slipways +slit +slither +slithered +slithering +slithers +slithery +slitless +slits +slitted +slitter +slitters +slitting +sliver +slivered +sliverer +sliverers +slivering +slivers +slivovic +slivovices +slivovitz +slivovitzes +slob +slobber +slobbered +slobberer +slobberers +slobbering +slobbers +slobbery +slobbier +slobbiest +slobbish +slobby +slobs +sloe +sloes +slog +slogan +sloganeer +sloganeered +sloganeering +sloganeers +sloganize +sloganized +sloganizes +sloganizing +slogans +slogged +slogger +sloggers +slogging +slogs +sloid +sloids +slojd +slojds +sloop +sloops +slop +slope +sloped +sloper +slopers +slopes +sloping +slopped +sloppier +sloppiest +sloppily +sloppiness +sloppinesses +slopping +sloppy +slops +slopwork +slopworks +slosh +sloshed +sloshes +sloshier +sloshiest +sloshing +sloshy +slot +slotback +slotbacks +sloth +slothful +slothfully +slothfulness +slothfulnesses +sloths +slots +slotted +slotting +slouch +slouched +sloucher +slouchers +slouches +slouchier +slouchiest +slouchily +slouchiness +slouchinesses +slouching +slouchy +slough +sloughed +sloughier +sloughiest +sloughing +sloughs +sloughy +sloven +slovenlier +slovenliest +slovenliness +slovenlinesses +slovenly +slovens slow +slowdown +slowdowns +slowed +slower +slowest +slowing +slowish +slowly +slowness +slownesses +slowpoke +slowpokes +slows +slowworm +slowworms +sloyd +sloyds +slub +slubbed +slubber +slubbered +slubbering +slubbers +slubbing +slubbings +slubs +sludge +sludges +sludgier +sludgiest +sludgy +slue +slued +slues +sluff +sluffed +sluffing +sluffs +slug +slugabed +slugabeds +slugfest +slugfests +sluggard +sluggardly +sluggardness +sluggardnesses +sluggards +slugged +slugger +sluggers +slugging +sluggish +sluggishly +sluggishness +sluggishnesses +slugs +sluice +sluiced +sluices +sluiceway +sluiceways +sluicing +sluicy +sluing +slum +slumber +slumbered +slumberer +slumberers +slumbering +slumberous +slumbers +slumbery +slumbrous +slumgullion +slumgullions +slumgum +slumgums +slumism +slumisms +slumlord +slumlords +slummed +slummer +slummers +slummier +slummiest +slumming +slummy +slump +slumped +slumpflation +slumpflations +slumping +slumps +slums +slung +slungshot +slungshots +slunk +slur +slurb +slurban +slurbs +slurp +slurped +slurping +slurps +slurred +slurried +slurries +slurring +slurry +slurrying +slurs +slush +slushed +slushes +slushier +slushiest +slushily +slushiness +slushinesses +slushing +slushy +slut +sluts +sluttier +sluttiest +sluttish +sluttishly +sluttishness +sluttishnesses +slutty +sly +slyboots +slyer +slyest +slyly +slyness +slynesses +slype +slypes +smack +smacked +smacker +smackers +smacking +smacks small +smallage +smallages +smallclothes +smaller +smallest +smallholder +smallholders +smallholding +smallholdings +smallish +smallmouth +smallmouths +smallness +smallnesses +smallpox +smallpoxes +smalls +smallsword +smallswords +smalt +smalti +smaltine +smaltines +smaltite +smaltites +smalto +smaltos +smalts +smaragd +smaragde +smaragdes +smaragdine +smaragdite +smaragdites +smaragds +smarm +smarmier +smarmiest +smarmily +smarminess +smarminesses +smarms +smarmy smart +smartass +smartasses +smarted +smarten +smartened +smartening +smartens +smarter +smartest +smartie +smarties +smarting +smartly +smartness +smartnesses +smarts +smartweed +smartweeds +smarty +smash +smashed +smasher +smashers +smashes +smashing +smashingly +smashup +smashups +smatter +smattered +smatterer +smatterers +smattering +smatterings +smatters +smaze +smazes +smear +smearcase +smearcases +smeared +smearer +smearers +smearier +smeariest +smearing +smears +smeary +smectic +smectite +smectites +smectitic +smeddum +smeddums +smeek +smeeked +smeeking +smeeks +smegma +smegmas smell +smelled +smeller +smellers +smellier +smelliest +smelling +smells +smelly +smelt +smelted +smelter +smelteries +smelters +smeltery +smelting +smelts +smerk +smerked +smerking +smerks +smew +smews +smidge +smidgen +smidgens +smidgeon +smidgeons +smidges +smidgin +smidgins +smiercase +smiercases +smilax +smilaxes smile +smiled +smileless +smiler +smilers +smiles +smiley +smiling +smilingly +smirch +smirched +smirches +smirching +smirk +smirked +smirker +smirkers +smirkier +smirkiest +smirking +smirks +smirky +smit +smite +smiter +smiters +smites +smith +smithereens +smitheries +smithers +smithery +smithies +smiths +smithsonite +smithsonites +smithy +smiting +smitten +smock +smocked +smocking +smockings +smocks smog +smoggier +smoggiest +smoggy +smogless +smogs +smokable smoke +smokeable +smoked +smokehouse +smokehouses +smokejack +smokejacks +smokeless +smokelike +smokepot +smokepots smoker +smokers +smokes +smokestack +smokestacks +smokey +smokier +smokiest +smokily +smokiness +smokinesses +smoking +smoky +smolder +smoldered +smoldering +smolders +smolt +smolts +smooch +smooched +smooches +smooching +smoochy smooth +smoothbore +smoothbores +smoothed +smoothen +smoothened +smoothening +smoothens +smoother +smoothers +smoothes +smoothest +smoothie +smoothies +smoothing +smoothly +smoothness +smoothnesses +smooths +smoothy +smorgasbord +smorgasbords +smote +smother +smothered +smothering +smothers +smothery +smoulder +smouldered +smouldering +smoulders +smudge +smudged +smudges +smudgier +smudgiest +smudgily +smudginess +smudginesses +smudging +smudgy +smug +smugger +smuggest +smuggle +smuggled +smuggler +smugglers +smuggles +smuggling +smugly +smugness +smugnesses +smut +smutch +smutched +smutches +smutchier +smutchiest +smutching +smutchy +smuts +smutted +smuttier +smuttiest +smuttily +smuttiness +smuttinesses +smutting +smutty +snack +snacked +snacking +snacks +snaffle +snaffled +snaffles +snaffling +snafu +snafued +snafuing +snafus +snag +snagged +snaggier +snaggiest +snagging +snaggleteeth +snaggletooth +snaggletoothed +snaggy +snaglike +snags +snail +snailed +snailing +snaillike +snails snake +snakebird +snakebirds +snakebit +snakebite +snakebites +snakebitten +snaked +snakelike +snakeroot +snakeroots +snakes +snakeskin +snakeskins +snakeweed +snakeweeds +snakey +snakier +snakiest +snakily +snaking +snaky +snap +snapback +snapbacks +snapdragon +snapdragons +snapless +snapped +snapper +snappers +snappier +snappiest +snappily +snappiness +snappinesses +snapping +snappish +snappishly +snappishness +snappishnesses +snappy +snaps +snapshooter +snapshooters +snapshot +snapshots +snapshotted +snapshotting +snapweed +snapweeds +snare +snared +snarer +snarers +snares +snaring +snark +snarkier +snarkiest +snarks +snarky +snarl +snarled +snarler +snarlers +snarlier +snarliest +snarling +snarls +snarly +snash +snashes +snatch +snatched +snatcher +snatchers +snatches +snatchier +snatchiest +snatching +snatchy +snath +snathe +snathes +snaths +snaw +snawed +snawing +snaws +snazzier +snazziest +snazzy +sneak +sneaked sneaker +sneakered +sneakers +sneakier +sneakiest +sneakily +sneakiness +sneakinesses +sneaking +sneakingly +sneaks +sneaky +sneap +sneaped +sneaping +sneaps +sneck +snecks +sned +snedded +snedding +sneds +sneer +sneered +sneerer +sneerers +sneerful +sneering +sneers +sneesh +sneeshes sneeze +sneezed +sneezer +sneezers +sneezes +sneezeweed +sneezeweeds +sneezier +sneeziest +sneezing +sneezy +snell +snelled +sneller +snellest +snelling +snells +snib +snibbed +snibbing +snibs +snick +snicked +snicker +snickered +snickerer +snickerers +snickering +snickers +snickersnee +snickersnees +snickery +snicking +snicks +snide +snidely +snideness +snidenesses +snider +snidest sniff +sniffed +sniffer +sniffers +sniffier +sniffiest +sniffily +sniffiness +sniffinesses +sniffing +sniffish +sniffishly +sniffishness +sniffishnesses +sniffle +sniffled +sniffler +snifflers +sniffles +sniffling +sniffs +sniffy +snifter +snifters +snigger +sniggered +sniggerer +sniggerers +sniggering +sniggers +sniggle +sniggled +sniggler +snigglers +sniggles +sniggling +snip +snipe +sniped +sniper +snipers +sniperscope +sniperscopes +snipes +sniping +snipped +snipper +snippers +snippersnapper +snippersnappers +snippet +snippetier +snippetiest +snippets +snippety +snippier +snippiest +snippily +snipping +snippy +snips +snit +snitch +snitched +snitcher +snitchers +snitches +snitching +snits +snivel +sniveled +sniveler +snivelers +sniveling +snivelled +snivelling +snivels +snob +snobberies +snobbery +snobbier +snobbiest +snobbily +snobbish +snobbishly +snobbishness +snobbishnesses +snobbism +snobbisms +snobby +snobs +snog +snogged +snogging +snogs +snollygoster +snollygosters +snood +snooded +snooding +snoods +snook +snooked +snooker +snookered +snookering +snookers +snooking +snooks +snool +snooled +snooling +snools +snoop +snooped +snooper +snoopers +snoopier +snoopiest +snoopily +snooping +snoops +snoopy +snoot +snooted +snootier +snootiest +snootily +snootiness +snootinesses +snooting +snoots +snooty +snooze +snoozed +snoozer +snoozers +snoozes +snoozier +snooziest +snoozing +snoozle +snoozled +snoozles +snoozling +snoozy +snore +snored +snorer +snorers +snores +snoring +snorkel +snorkeled +snorkeler +snorkelers +snorkeling +snorkels +snort +snorted +snorter +snorters +snorting +snorts +snot +snots +snottier +snottiest +snottily +snottiness +snottinesses +snotty +snout +snouted +snoutier +snoutiest +snouting +snoutish +snouts +snouty snow +snowball +snowballed +snowballing +snowballs +snowbank +snowbanks +snowbell +snowbells +snowbelt +snowbelts +snowberries +snowberry +snowbird +snowbirds +snowblower +snowblowers +snowboard +snowboarder +snowboarders +snowboarding +snowboardings +snowboards +snowbound +snowbrush +snowbrushes +snowbush +snowbushes +snowcap +snowcapped +snowcaps +snowdrift +snowdrifts +snowdrop +snowdrops +snowed +snowfall +snowfalls +snowfield +snowfields +snowflake +snowflakes +snowier +snowiest +snowily +snowiness +snowinesses +snowing +snowland +snowlands +snowless +snowlike +snowmaker +snowmakers +snowmaking +snowman +snowmelt +snowmelts +snowmen +snowmobile +snowmobiler +snowmobilers +snowmobiles +snowmobiling +snowmobilings +snowmobilist +snowmobilists +snowmold +snowmolds +snowpack +snowpacks +snowplow +snowplowed +snowplowing +snowplows +snows +snowscape +snowscapes +snowshed +snowsheds +snowshoe +snowshoed +snowshoeing +snowshoer +snowshoers +snowshoes +snowslide +snowslides +snowstorm +snowstorms +snowsuit +snowsuits snowy +snub +snubbed +snubber +snubbers +snubbier +snubbiest +snubbiness +snubbinesses +snubbing +snubby +snubness +snubnesses +snubs +snuck +snuff +snuffbox +snuffboxes +snuffed +snuffer +snuffers +snuffier +snuffiest +snuffily +snuffing +snuffle +snuffled +snuffler +snufflers +snuffles +snufflier +snuffliest +snuffling +snuffly +snuffs +snuffy +snug +snugged +snugger +snuggeries +snuggery +snuggest +snuggies +snugging +snuggle +snuggled +snuggles +snuggling +snugly +snugness +snugnesses +snugs +snye +snyes so +soak +soakage +soakages +soaked +soaker +soakers +soaking +soaks soap +soapbark +soapbarks +soapberries +soapberry +soapbox +soapboxes +soaped +soaper +soapers +soapier +soapiest +soapily +soapiness +soapinesses +soaping +soapless +soaplike +soaps +soapstone +soapstones +soapsuds +soapwort +soapworts +soapy +soar +soared +soarer +soarers +soaring +soarings +soars +soave +soaves sob +sobbed +sobber +sobbers +sobbing +sobeit +sober +sobered +soberer +soberest +sobering +soberize +soberized +soberizes +soberizing +soberly +soberness +sobernesses +sobers +sobersided +sobersidedness +sobersidednesses +sobersides +sobful +sobrieties +sobriety +sobriquet +sobriquets +sobs +socage +socager +socagers +socages +soccage +soccages soccer +soccers +sociabilities +sociability +sociable +sociableness +sociablenesses +sociables +sociably social +socialise +socialised +socialises +socialising socialism +socialisms socialist +socialistic +socialistically +socialists +socialite +socialites +socialities +sociality +socialization +socializations +socialize +socialized +socializer +socializers +socializes +socializing +socially +socials +societal +societally +societies society +sociobiological +sociobiologies +sociobiologist +sociobiologists +sociobiology +sociocultural +socioculturally +socioeconomic +socioeconomically +sociogram +sociograms +sociohistorical +sociolinguist +sociolinguistic +sociolinguistics +sociolinguists +sociologese +sociologeses +sociologic +sociological +sociologically +sociologies +sociologist +sociologists +sociology +sociometric +sociometries +sociometry +sociopath +sociopathic +sociopaths +sociopolitical +sociopsychological +socioreligious +sociosexual sock +sockdolager +sockdolagers +sockdologer +sockdologers +socked socket +socketed +socketing +sockets +sockeye +sockeyes +socking +sockless +sockman +sockmen +socko +socks +socle +socles +socman +socmen +sod +soda +sodaless +sodalist +sodalists +sodalite +sodalites +sodalities +sodality +sodamide +sodamides +sodas +sodbuster +sodbusters +sodded +sodden +soddened +soddening +soddenly +soddenness +soddennesses +soddens +soddies +sodding +soddy +sodic +sodium +sodiums +sodom +sodomies +sodomist +sodomists +sodomite +sodomites +sodomitic +sodomitical +sodomize +sodomized +sodomizes +sodomizing +sodoms +sodomy +sods +soever sofa +sofar +sofars +sofas +soffit +soffits soft +softa +softas +softback +softbacks +softball +softballer +softballers +softballs +softbound +softcover +softcovers +soften +softened +softener +softeners +softening +softens +softer +softest +softhead +softheaded +softheadedly +softheadedness +softheadednesses +softheads +softhearted +softheartedly +softheartedness +softheartednesses +softie +softies +softish +softly +softness +softnesses +softs +softshell +softshells software +softwares +softwood +softwoods +softy +sogged +soggier +soggiest +soggily +sogginess +sogginesses +soggy +soigne +soignee soil +soilage +soilages +soilborne +soiled +soiling +soilless +soils +soilure +soilures +soiree +soirees +soja +sojas +sojourn +sojourned +sojourner +sojourners +sojourning +sojourns +soke +sokeman +sokemen +sokes +sokol +sokols +sol +sola +solace +solaced +solacement +solacements +solacer +solacers +solaces +solacing +solan +solanaceous +soland +solander +solanders +solands +solanin +solanine +solanines +solanins +solano +solanos +solans +solanum +solanums solar +solaria +solarise +solarised +solarises +solarising +solarism +solarisms +solarium +solariums +solarization +solarizations +solarize +solarized +solarizes +solarizing +solate +solated +solates +solatia +solating +solation +solations +solatium +sold +soldan +soldans +solder +solderabilities +solderability +soldered +solderer +solderers +soldering +solders +soldi soldier +soldiered +soldieries +soldiering +soldierings +soldierly +soldiers +soldiership +soldierships +soldiery +soldo +sole +solecise +solecised +solecises +solecising +solecism +solecisms +solecist +solecistic +solecists +solecize +solecized +solecizes +solecizing +soled +solei +soleless +solely +solemn +solemner +solemnest +solemnified +solemnifies +solemnify +solemnifying +solemnities +solemnity +solemnization +solemnizations +solemnize +solemnized +solemnizes +solemnizing +solemnly +solemnness +solemnnesses +soleness +solenesses +solenoid +solenoidal +solenoids +soleplate +soleplates +soleret +solerets +soles +soleus +solfatara +solfataras +solfege +solfeges +solfeggi +solfeggio +solfeggios +solgel +soli +solicit +solicitant +solicitants +solicitation +solicitations +solicited +soliciting +solicitor +solicitors +solicitorship +solicitorships +solicitous +solicitously +solicitousness +solicitousnesses +solicits +solicitude +solicitudes solid +solidago +solidagos +solidarism +solidarisms +solidarist +solidaristic +solidarists +solidarities +solidarity +solidary +solider +solidest +solidi +solidification +solidifications +solidified +solidifies +solidify +solidifying +solidities +solidity +solidly +solidness +solidnesses +solids +solidus +solifluction +solifluctions +soliloquies +soliloquise +soliloquised +soliloquises +soliloquising +soliloquist +soliloquists +soliloquize +soliloquized +soliloquizer +soliloquizers +soliloquizes +soliloquizing +soliloquy +soling +solion +solions +solipsism +solipsisms +solipsist +solipsistic +solipsistically +solipsists +soliquid +soliquids +solitaire +solitaires +solitaries +solitarily +solitariness +solitarinesses +solitary +soliton +solitons +solitude +solitudes +solitudinarian +solitudinarians +solleret +sollerets +solmization +solmizations +solo +soloed +soloing +soloist +soloists +solon +solonchak +solonchaks +solonets +solonetses +solonetz +solonetzes +solonetzic +solons +solos +sols +solstice +solstices +solstitial +solubilise +solubilised +solubilises +solubilising +solubilities +solubility +solubilization +solubilizations +solubilize +solubilized +solubilizes +solubilizing +soluble +solubles +solubly +solum +solums +solus +solute +solutes +solution +solutions +solvabilities +solvability +solvable +solvate +solvated +solvates +solvating +solvation +solvations +solve +solved +solvencies +solvency +solvent +solventless +solvently +solvents +solver +solvers +solves +solving +solvolyses +solvolysis +solvolytic +soma +somas +somata +somatic +somatically +somatological +somatologies +somatology +somatomedin +somatomedins +somatopleure +somatopleures +somatosensory +somatostatin +somatostatins +somatotrophin +somatotrophins +somatotropin +somatotropins +somatotype +somatotypes +somber +somberly +somberness +sombernesses +sombre +sombrely +sombrero +sombreros +sombrous some +somebodies somebody +someday +somedeal somehow someone +someones +someplace +somersault +somersaulted +somersaulting +somersaults +somerset +somerseted +somerseting +somersets +somersetted +somersetting something +sometime sometimes +someway +someways +somewhat +somewhats +somewhen somewhere +somewheres +somewhither +somewise +somital +somite +somites +somitic +sommelier +sommeliers +somnambulant +somnambulate +somnambulated +somnambulates +somnambulating +somnambulation +somnambulations +somnambulism +somnambulisms +somnambulist +somnambulistic +somnambulistically +somnambulists +somnifacient +somnifacients +somniferous +somnolence +somnolences +somnolent +somnolently son +sonance +sonances +sonant +sonantal +sonantic +sonants +sonar +sonarman +sonarmen +sonars +sonata +sonatas +sonatina +sonatinas +sonatine +sonde +sonder +sonders +sondes +sone +sones song +songbird +songbirds +songbook +songbooks +songfest +songfests +songful +songfully +songfulness +songfulnesses +songless +songlessly +songlike +songs +songsmith +songsmiths +songster +songsters +songstress +songstresses +songwriter +songwriters +songwriting +songwritings +sonhood +sonhoods +sonic +sonically +sonicate +sonicated +sonicates +sonicating +sonication +sonications +sonics +sonless +sonlike +sonly +sonnet +sonneted +sonneteer +sonneteering +sonneteerings +sonneteers +sonneting +sonnets +sonnetted +sonnetting +sonnies +sonny +sonobuoy +sonobuoys +sonogram +sonograms +sonographer +sonographers +sonographies +sonography +sonorant +sonorants +sonorities +sonority +sonorous +sonorously +sonorousness +sonorousnesses +sonovox +sonovoxes +sons +sonship +sonships +sonsie +sonsier +sonsiest +sonsy +soochong +soochongs +sooey +sook +sooks soon +sooner +sooners +soonest +soot +sooted +sooth +soothe +soothed +soother +soothers +soothes +soothest +soothfast +soothing +soothingly +soothingness +soothingnesses +soothly +sooths +soothsaid +soothsay +soothsayer +soothsayers +soothsaying +soothsayings +soothsays +sootier +sootiest +sootily +sootiness +sootinesses +sooting +soots +sooty +sop +sopaipilla +sopaipillas +sopapilla +sopapillas +soph +sophies +sophism +sophisms +sophist +sophistic +sophistical +sophistically +sophisticate +sophisticated +sophisticatedly +sophisticates +sophisticating +sophistication +sophistications +sophistries +sophistry +sophists +sophomore +sophomores +sophomoric +sophs +sophy +sopite +sopited +sopites +sopiting +sopor +soporiferous +soporiferousness +soporiferousnesses +soporific +soporifics +sopors +sopped +soppier +soppiest +soppiness +soppinesses +sopping +soppy +soprani +sopranino +sopraninos +soprano +sopranos +sops +sora +soras +sorb +sorbabilities +sorbability +sorbable +sorbate +sorbates +sorbed +sorbent +sorbents +sorbet +sorbets +sorbic +sorbing +sorbitol +sorbitols +sorbose +sorboses +sorbs +sorcerer +sorcerers +sorceress +sorceresses +sorceries +sorcerous +sorcery +sord +sordid +sordidly +sordidness +sordidnesses +sordine +sordines +sordini +sordino +sordor +sordors +sords +sore +sorehead +soreheaded +soreheads +sorel +sorels +sorely +soreness +sorenesses +sorer +sores +sorest +sorgho +sorghos +sorghum +sorghums +sorgo +sorgos +sori +soricine +soring +sorings +sorites +soritic +sorn +sorned +sorner +sorners +sorning +sorns +soroche +soroches +sororal +sororate +sororates +sororities +sorority +soroses +sorosis +sorosises +sorption +sorptions +sorptive +sorrel +sorrels +sorrier +sorriest +sorrily +sorriness +sorrinesses sorrow +sorrowed +sorrower +sorrowers +sorrowful +sorrowfully +sorrowfulness +sorrowfulnesses +sorrowing +sorrows sorry sort +sortable +sortably +sorted +sorter +sorters +sortie +sortied +sortieing +sorties +sortilege +sortileges +sorting +sortition +sortitions +sorts +sorus +sos +sostenuti +sostenuto +sostenutos +sot +soteriological +soteriologies +soteriology +soth +soths +sotol +sotols +sots +sotted +sottish +sottishly +sottishness +sottishnesses +sou +souari +souaris +soubise +soubises +soubrette +soubrettes +soubriquet +soubriquets +soucar +soucars +souchong +souchongs +soudan +soudans +souffle +souffled +souffleed +souffles +sough +soughed +soughing +soughs +sought +souk +souks soul +souled +soulful +soulfully +soulfulness +soulfulnesses +soulless +soullessly +soullessness +soullessnesses +soullike +souls sound +soundable +soundalike +soundalikes +soundboard +soundboards +soundbox +soundboxes +sounded +sounder +sounders +soundest +sounding +soundingly +soundings +soundless +soundlessly +soundly +soundman +soundmen +soundness +soundnesses +soundproof +soundproofed +soundproofing +soundproofs +sounds +soundstage +soundstages +soundtrack +soundtracks soup +soupcon +soupcons +souped +soupier +soupiest +souping +soups +soupspoon +soupspoons +soupy sour +sourball +sourballs +source +sourcebook +sourcebooks +sourced +sourceless +sources +sourcing +sourdine +sourdines +sourdough +sourdoughs +soured +sourer +sourest +souring +sourish +sourly +sourness +sournesses +sourpuss +sourpusses +sours +soursop +soursops +sourwood +sourwoods +sous +sousaphone +sousaphones +souse +soused +souses +sousing +soutache +soutaches +soutane +soutanes +souter +souters south +southbound southeast +southeaster +southeasterly +southeastern +southeasternmost +southeasters +southeasts +southeastward +southeastwards +southed +souther +southerlies +southerly southern +southerner +southerners +southernmost +southernness +southernnesses +southerns +southernwood +southernwoods +southers +southing +southings +southland +southlands +southpaw +southpaws +southron +southrons +souths +southward +southwards southwest +southwester +southwesterly +southwestern +southwesternmost +southwesters +southwests +southwestward +southwestwards souvenir +souvenirs +souvlaki +souvlakia +souvlakias +souvlakis +sovereign +sovereignly +sovereigns +sovereignties +sovereignty +soviet +sovietism +sovietisms +sovietization +sovietizations +sovietize +sovietized +sovietizes +sovietizing +soviets +sovkhoz +sovkhozes +sovkhozy +sovran +sovranly +sovrans +sovranties +sovranty sow +sowable +sowans +sowar +sowars +sowbellies +sowbelly +sowbread +sowbreads +sowcar +sowcars +sowed +sowens +sower +sowers +sowing +sown +sows +sox +soy +soya +soyas +soybean +soybeans +soymilk +soymilks +soys +soyuz +soyuzes +sozin +sozine +sozines +sozins +sozzled +spa space +spaceband +spacebands +spacecraft +spacecrafts +spaced +spaceflight +spaceflights +spaceless +spaceman +spacemen +spaceport +spaceports +spacer +spacers +spaces spaceship +spaceships +spacesuit +spacesuits +spacewalk +spacewalked +spacewalker +spacewalkers +spacewalking +spacewalks +spaceward +spacey +spacial +spacier +spaciest +spacing +spacings +spacious +spaciously +spaciousness +spaciousnesses +spackle +spackled +spackles +spackling +spacy spade +spaded +spadefish +spadefishes +spadeful +spadefuls +spader +spaders +spades +spadework +spadeworks +spadices +spadille +spadilles +spading +spadix +spadixes +spado +spadones +spae +spaed +spaeing +spaeings +spaes +spaetzle +spaetzles +spaghetti +spaghettilike +spaghettini +spaghettinis +spaghettis +spagyric +spagyrics +spahee +spahees +spahi +spahis +spail +spails +spait +spaits +spake +spale +spales +spall +spallable +spallation +spallations +spalled +spaller +spallers +spalling +spalls +spalpeen +spalpeens +span +spanakopita +spanakopitas +spancel +spanceled +spanceling +spancelled +spancelling +spancels +spandex +spandexes +spandrel +spandrels +spandril +spandrils +spang +spangle +spangled +spangles +spanglier +spangliest +spangling +spangly +spaniel +spaniels +spank +spanked +spanker +spankers +spanking +spankings +spanks +spanless +spanned +spanner +spanners +spanning +spanokopita +spanokopitas +spans +spanworm +spanworms +spar +sparable +sparables spare +spareable +spared +sparely +spareness +sparenesses +sparer +sparerib +spareribs +sparers +spares +sparest +sparge +sparged +sparger +spargers +sparges +sparging +sparid +sparids +sparing +sparingly +spark +sparked +sparker +sparkers +sparkier +sparkiest +sparkily +sparking +sparkish +sparkle +sparkled +sparkler +sparklers +sparkles +sparklier +sparkliest +sparkling +sparkly +sparkplug +sparkplugged +sparkplugging +sparkplugs +sparks +sparky +sparlike +sparling +sparlings +sparoid +sparoids +sparred +sparrier +sparriest +sparring sparrow +sparrowlike +sparrows +sparry +spars +sparse +sparsely +sparseness +sparsenesses +sparser +sparsest +sparsities +sparsity +spartan +sparteine +sparteines +spas +spasm +spasmodic +spasmodically +spasmolytic +spasmolytics +spasms +spastic +spastically +spasticities +spasticity +spastics +spat +spate +spates +spathal +spathe +spathed +spathes +spathic +spathose +spathulate +spatial +spatialities +spatiality +spatially +spatiotemporal +spatiotemporally +spats +spatted +spatter +spatterdock +spatterdocks +spattered +spattering +spatters +spatting +spatula +spatular +spatulas +spatulate +spatzle +spavie +spavies +spaviet +spavin +spavined +spavins +spawn +spawned +spawner +spawners +spawning +spawns +spay +spayed +spaying +spays +spaz +spazzes speak +speakable +speakeasies +speakeasy speaker +speakerphone +speakerphones +speakers +speakership +speakerships +speaking +speakings +speaks +spean +speaned +speaning +speans spear +speared +spearer +spearers +spearfish +spearfished +spearfishes +spearfishing +speargun +spearguns +spearhead +spearheaded +spearheading +spearheads +spearing +spearman +spearmen +spearmint +spearmints +spears +spearwort +spearworts +spec +specced +speccing special +specialer +specialest +specialisation +specialisations +specialise +specialised +specialises +specialising +specialism +specialisms specialist +specialistic +specialists +specialities +speciality +specialization +specializations +specialize +specialized +specializes +specializing +specially +specialness +specialnesses +specials +specialties +specialty +speciate +speciated +speciates +speciating +speciation +speciational +speciations +specie +species +speciesism +speciesisms +specifiable specific +specifically +specification +specifications +specificities +specificity +specifics +specified +specifier +specifiers +specifies +specify +specifying +specimen +specimens +speciosities +speciosity +specious +speciously +speciousness +speciousnesses +speck +specked +specking +speckle +speckled +speckles +speckling +specks +specs +spectacle +spectacled +spectacles +spectacular +spectacularly +spectaculars +spectate +spectated +spectates +spectating +spectator +spectatorial +spectators +spectatorship +spectatorships +specter +specters +spectinomycin +spectinomycins +spectra +spectral +spectrally +spectre +spectres +spectrofluorimeter +spectrofluorimeters +spectrofluorometer +spectrofluorometers +spectrofluorometric +spectrofluorometries +spectrofluorometry +spectrogram +spectrograms +spectrograph +spectrographic +spectrographically +spectrographies +spectrographs +spectrography +spectroheliogram +spectroheliograms +spectroheliograph +spectroheliographies +spectroheliographs +spectroheliography +spectrohelioscope +spectrohelioscopes +spectrometer +spectrometers +spectrometric +spectrometries +spectrometry +spectrophotometer +spectrophotometers +spectrophotometric +spectrophotometrical +spectrophotometrically +spectrophotometries +spectrophotometry +spectroscope +spectroscopes +spectroscopic +spectroscopically +spectroscopies +spectroscopist +spectroscopists +spectroscopy +spectrum +spectrums +specula +specular +specularities +specularity +specularly +speculate +speculated +speculates +speculating +speculation +speculations +speculative +speculatively +speculator +speculators +speculum +speculums +sped speech +speeches +speechified +speechifies +speechify +speechifying +speechless +speechlessly +speechlessness +speechlessnesses +speechwriter +speechwriters speed +speedball +speedballed +speedballing +speedballs +speedboat +speedboating +speedboatings +speedboats +speeded +speeder +speeders +speedier +speediest +speedily +speediness +speedinesses +speeding +speedings +speedo +speedometer +speedometers +speedos +speeds +speedster +speedsters +speedup +speedups +speedway +speedways +speedwell +speedwells +speedy +speel +speeled +speeling +speels +speer +speered +speering +speerings +speers +speil +speiled +speiling +speils +speir +speired +speiring +speirs +speise +speises +speiss +speisses +spelaean +spelean +speleological +speleologies +speleologist +speleologists +speleology spell +spellbind +spellbinder +spellbinders +spellbinding +spellbindingly +spellbinds +spellbound +spelled +speller +spellers spelling +spellings +spells +spelt +spelter +spelters +spelts +speltz +speltzes +spelunk +spelunked +spelunker +spelunkers +spelunking +spelunkings +spelunks +spence +spencer +spencers +spences spend +spendable +spender +spenders +spending +spends +spendthrift +spendthrifts +spense +spenses +spent +sperm +spermaceti +spermacetis +spermagonia +spermagonium +spermaries +spermary +spermatheca +spermathecae +spermathecas +spermatia +spermatial +spermatic +spermatid +spermatids +spermatium +spermatocyte +spermatocytes +spermatogeneses +spermatogenesis +spermatogenic +spermatogonia +spermatogonial +spermatogonium +spermatophore +spermatophores +spermatophyte +spermatophytes +spermatophytic +spermatozoa +spermatozoal +spermatozoan +spermatozoans +spermatozoid +spermatozoids +spermatozoon +spermic +spermicidal +spermicide +spermicides +spermine +spermines +spermiogeneses +spermiogenesis +spermophile +spermophiles +spermous +sperms +sperrylite +sperrylites +spessartine +spessartines +spessartite +spessartites +spew +spewed +spewer +spewers +spewing +spews +sphagnous +sphagnum +sphagnums +sphalerite +sphalerites +sphene +sphenes +sphenic +sphenodon +sphenodons +sphenodont +sphenoid +sphenoidal +sphenoids +sphenopsid +sphenopsids +spheral +sphere +sphered +spheres +spheric +spherical +spherically +sphericities +sphericity +spherics +spherier +spheriest +sphering +spheroid +spheroidal +spheroidally +spheroids +spherometer +spherometers +spheroplast +spheroplasts +spherule +spherules +spherulite +spherulites +spherulitic +sphery +sphincter +sphincteric +sphincters +sphinges +sphingid +sphingids +sphingosine +sphingosines +sphinx +sphinxes +sphinxlike +sphygmic +sphygmograph +sphygmographs +sphygmomanometer +sphygmomanometers +sphygmomanometries +sphygmomanometry +sphygmus +sphygmuses +spic +spica +spicae +spicas +spicate +spicated +spiccato +spiccatos +spice +spicebush +spicebushes +spiced +spiceless +spicer +spiceries +spicers +spicery +spices +spicey +spicier +spiciest +spicily +spiciness +spicinesses +spicing +spick +spicks +spics +spicula +spiculae +spicular +spiculation +spiculations +spicule +spicules +spiculum +spicy +spider +spiderier +spideriest +spiderish +spiderlike +spiders +spiderweb +spiderwebs +spiderwort +spiderworts +spidery +spied +spiegel +spiegeleisen +spiegeleisens +spiegels +spiel +spieled +spieler +spielers +spieling +spiels +spier +spiered +spiering +spiers +spies +spiff +spiffed +spiffier +spiffiest +spiffily +spiffiness +spiffinesses +spiffing +spiffs +spiffy +spigot +spigots +spik +spike +spiked +spikelet +spikelets +spikelike +spikenard +spikenards +spiker +spikers +spikes +spikey +spikier +spikiest +spikily +spikiness +spikinesses +spiking +spiks +spiky +spile +spiled +spiles +spilikin +spilikins +spiling +spilings +spill +spillable +spillage +spillages +spilled +spiller +spillers +spillikin +spillikins +spilling +spillover +spillovers +spills +spillway +spillways +spilt +spilth +spilths spin +spinach +spinaches +spinachlike +spinachy +spinage +spinages +spinal +spinally +spinals +spinate +spindle +spindled +spindler +spindlers +spindles +spindlier +spindliest +spindling +spindly +spindrift +spindrifts +spine +spined +spinel +spineless +spinelessly +spinelessness +spinelessnesses +spinelike +spinelle +spinelles +spinels +spines +spinet +spinets +spinier +spiniest +spinifex +spinifexes +spininess +spininesses +spinless +spinnaker +spinnakers +spinner +spinneret +spinnerets +spinnerette +spinnerettes +spinneries +spinners +spinnery +spinney +spinneys +spinnies +spinning +spinnings +spinny +spinoff +spinoffs +spinor +spinors +spinose +spinosities +spinosity +spinous +spinout +spinouts +spins +spinster +spinsterhood +spinsterhoods +spinsterish +spinsterly +spinsters +spinthariscope +spinthariscopes +spinto +spintos +spinula +spinulae +spinule +spinules +spinulose +spiny +spiracle +spiracles +spiracular +spiraea +spiraeas +spiral +spiraled +spiraling +spiralled +spiralling +spirally +spirals +spirant +spirants +spire +spirea +spireas +spired +spirem +spireme +spiremes +spirems +spires +spirier +spiriest +spirilla +spirillum +spiring spirit +spirited +spiritedly +spiritedness +spiritednesses +spiriting +spiritism +spiritisms +spiritist +spiritistic +spiritists +spiritless +spiritlessly +spiritlessness +spiritlessnesses +spiritoso +spiritous +spirits spiritual +spiritualism +spiritualisms +spiritualist +spiritualistic +spiritualists +spiritualities +spirituality +spiritualization +spiritualizations +spiritualize +spiritualized +spiritualizes +spiritualizing +spiritually +spiritualness +spiritualnesses +spirituals +spiritualties +spiritualty +spirituel +spirituelle +spirituous +spirochaete +spirochaetes +spirochetal +spirochete +spirochetes +spirochetoses +spirochetosis +spirogyra +spirogyras +spiroid +spirometer +spirometers +spirometric +spirometries +spirometry +spirt +spirted +spirting +spirts +spirula +spirulae +spirulas +spiry spit +spital +spitals +spitball +spitballs +spite +spited +spiteful +spitefuller +spitefullest +spitefully +spitefulness +spitefulnesses +spites +spitfire +spitfires +spiting +spits +spitted +spitter +spitters +spitting +spittle +spittlebug +spittlebugs +spittles +spittoon +spittoons +spitz +spitzes +spiv +spivs +splake +splakes +splanchnic +splash +splashboard +splashboards +splashdown +splashdowns +splashed +splasher +splashers +splashes +splashier +splashiest +splashily +splashiness +splashinesses +splashing +splashy +splat +splats +splatted +splatter +splattered +splattering +splatters +splatting +splay +splayed +splayfeet +splayfoot +splayfooted +splaying +splays +spleen +spleenful +spleenier +spleeniest +spleens +spleenwort +spleenworts +spleeny +splendent splendid +splendider +splendidest +splendidly +splendidness +splendidnesses +splendiferous +splendiferously +splendiferousness +splendiferousnesses +splendor +splendorous +splendors +splendour +splendours +splendrous +splenectomies +splenectomize +splenectomized +splenectomizes +splenectomizing +splenectomy +splenetic +splenetically +splenetics +splenia +splenial +splenic +splenii +splenium +splenius +splenomegalies +splenomegaly +splent +splents +spleuchan +spleuchans +splice +spliced +splicer +splicers +splices +splicing +spliff +spliffs +spline +splined +splines +splining +splint +splinted +splinter +splintered +splintering +splinters +splintery +splinting +splints split +splits +splitter +splitters +splitting +splodge +splodged +splodges +splodging +splore +splores +splosh +sploshed +sploshes +sploshing +splotch +splotched +splotches +splotchier +splotchiest +splotching +splotchy +splurge +splurged +splurger +splurgers +splurges +splurgier +splurgiest +splurging +splurgy +splutter +spluttered +splutterer +splutterers +spluttering +splutters +spluttery +spode +spodes +spodumene +spodumenes +spoil +spoilable +spoilage +spoilages +spoiled +spoiler +spoilers +spoiling +spoils +spoilsman +spoilsmen +spoilsport +spoilsports +spoilt +spoke +spoked spoken +spokes +spokeshave +spokeshaves spokesman +spokesmanship +spokesmanships +spokesmen +spokespeople +spokesperson +spokespersons spokeswoman +spokeswomen +spoking +spoliate +spoliated +spoliates +spoliating +spoliation +spoliations +spoliator +spoliators +spondaic +spondaics +spondee +spondees +spondylites +spondylitides +spondylitis +spondylitises +sponge +sponged +sponger +spongers +sponges +spongeware +spongewares +spongier +spongiest +spongily +spongin +sponginess +sponginesses +sponging +spongins +spongy +sponsal +sponsion +sponsions +sponson +sponsons sponsor +sponsored +sponsorial +sponsoring +sponsors +sponsorship +sponsorships +spontaneities +spontaneity +spontaneous +spontaneously +spontaneousness +spontaneousnesses +spontoon +spontoons +spoof +spoofed +spoofer +spooferies +spoofers +spoofery +spoofing +spoofs +spoofy +spook +spooked +spookeries +spookery +spookier +spookiest +spookily +spookiness +spookinesses +spooking +spookish +spooks +spooky +spool +spooled +spooling +spoolings +spools spoon +spoonbill +spoonbills +spooned +spoonerism +spoonerisms +spooney +spooneys spoonful +spoonfuls +spoonier +spoonies +spooniest +spoonily +spooning +spoons +spoonsful +spoony +spoor +spoored +spooring +spoors +sporadic +sporadically +sporal +sporangia +sporangial +sporangiophore +sporangiophores +sporangium +spore +spored +spores +sporicidal +sporicide +sporicides +sporing +sporocarp +sporocarps +sporocyst +sporocysts +sporogeneses +sporogenesis +sporogenic +sporogenous +sporogonia +sporogonic +sporogonies +sporogonium +sporogony +sporoid +sporophore +sporophores +sporophyll +sporophylls +sporophyte +sporophytes +sporophytic +sporopollenin +sporopollenins +sporotrichoses +sporotrichosis +sporotrichosises +sporozoa +sporozoan +sporozoans +sporozoite +sporozoites +sporozoon +sporran +sporrans sport +sported +sporter +sporters +sportfisherman +sportfishermen +sportfishing +sportfishings +sportful +sportfully +sportfulness +sportfulnesses +sportier +sportiest +sportif +sportily +sportiness +sportinesses +sporting +sportingly +sportive +sportively +sportiveness +sportivenesses +sports +sportscast +sportscaster +sportscasters +sportscasting +sportscastings +sportscasts +sportsman +sportsmanlike +sportsmanly +sportsmanship +sportsmanships +sportsmen +sportswear +sportswoman +sportswomen +sportswriter +sportswriters +sportswriting +sportswritings +sporty +sporular +sporulate +sporulated +sporulates +sporulating +sporulation +sporulations +sporulative +sporule +sporules spot +spotless +spotlessly +spotlessness +spotlessnesses +spotlight +spotlighted +spotlighting +spotlights +spotlit +spots +spottable +spotted +spotter +spotters +spottier +spottiest +spottily +spottiness +spottinesses +spotting +spotty +spousal +spousals +spouse +spoused +spouses +spousing +spout +spouted +spouter +spouters +spouting +spouts +sprachgefuhl +sprachgefuhls +spraddle +spraddled +spraddles +spraddling +sprag +sprags +sprain +sprained +spraining +sprains +sprang +sprangs +sprat +sprats +sprattle +sprattled +sprattles +sprattling +sprawl +sprawled +sprawler +sprawlers +sprawlier +sprawliest +sprawling +sprawls +sprawly spray +sprayed +sprayer +sprayers +spraying +sprays spread +spreadabilities +spreadability +spreadable +spreader +spreaders +spreading +spreads +spreadsheet +spreadsheets +spree +sprees +sprent +sprier +spriest +sprig +sprigged +sprigger +spriggers +spriggier +spriggiest +sprigging +spriggy +spright +sprightful +sprightfully +sprightfulness +sprightfulnesses +sprightlier +sprightliest +sprightliness +sprightlinesses +sprightly +sprights +sprigs spring +springal +springald +springalds +springals +springboard +springboards +springbok +springboks +springe +springed +springeing +springer +springers +springes +springhead +springheads +springhouse +springhouses +springier +springiest +springily +springiness +springinesses +springing +springings +springlike +springs +springtail +springtails +springtide +springtides +springtime +springtimes +springwater +springwaters +springwood +springwoods +springy +sprinkle +sprinkled +sprinkler +sprinklered +sprinklers +sprinkles +sprinkling +sprinklings +sprint +sprinted +sprinter +sprinters +sprinting +sprints +sprit +sprite +sprites +sprits +spritsail +spritsails +spritz +spritzed +spritzer +spritzers +spritzes +spritzing +sprocket +sprockets +sprout +sprouted +sprouting +sprouts +spruce +spruced +sprucely +spruceness +sprucenesses +sprucer +spruces +sprucest +sprucier +spruciest +sprucing +sprucy +sprue +sprues +sprug +sprugs +sprung +spry +spryer +spryest +spryly +spryness +sprynesses +spud +spudded +spudder +spudders +spudding +spuds +spue +spued +spues +spuing +spume +spumed +spumes +spumier +spumiest +spuming +spumone +spumones +spumoni +spumonis +spumous +spumy +spun +spunbonded +spunk +spunked +spunkie +spunkier +spunkies +spunkiest +spunkily +spunkiness +spunkinesses +spunking +spunks +spunky +spur +spurgall +spurgalled +spurgalling +spurgalls +spurge +spurges +spurious +spuriously +spuriousness +spuriousnesses +spurn +spurned +spurner +spurners +spurning +spurns +spurred +spurrer +spurrers +spurrey +spurreys +spurrier +spurriers +spurries +spurring +spurry +spurs +spurt +spurted +spurting +spurtle +spurtles +spurts +sputa +sputnik +sputniks +sputter +sputtered +sputterer +sputterers +sputtering +sputters +sputum spy +spyglass +spyglasses +spying +spymaster +spymasters +squab +squabbier +squabbiest +squabble +squabbled +squabbler +squabblers +squabbles +squabbling +squabby +squabs +squad +squadded +squadding +squadron +squadroned +squadroning +squadrons +squads +squalene +squalenes +squalid +squalider +squalidest +squalidly +squalidness +squalidnesses +squall +squalled +squaller +squallers +squallier +squalliest +squalling +squalls +squally +squalor +squalors +squama +squamae +squamate +squamation +squamations +squamosal +squamosals +squamose +squamous +squamulose +squander +squandered +squanderer +squanderers +squandering +squanders square +squared +squarely +squareness +squarenesses +squarer +squarers +squares +squarest +squaring +squarish +squarishly +squarishness +squarishnesses +squash +squashed +squasher +squashers +squashes +squashier +squashiest +squashily +squashiness +squashinesses +squashing +squashy +squat +squatly +squatness +squatnesses +squats +squatted +squatter +squattered +squattering +squatters +squattest +squattier +squattiest +squatting +squatty +squaw +squawfish +squawfishes +squawk +squawked +squawker +squawkers +squawking +squawks +squawroot +squawroots +squaws +squeak +squeaked +squeaker +squeakers +squeakier +squeakiest +squeaking +squeaks +squeaky +squeal +squealed +squealer +squealers +squealing +squeals +squeamish +squeamishly +squeamishness +squeamishnesses +squeegee +squeegeed +squeegeeing +squeegees +squeezabilities +squeezability +squeezable squeeze +squeezed +squeezer +squeezers +squeezes +squeezing +squeg +squegged +squegging +squegs +squelch +squelched +squelcher +squelchers +squelches +squelchier +squelchiest +squelching +squelchy +squeteague +squib +squibbed +squibbing +squibs +squid +squidded +squidding +squids +squiffed +squiffier +squiffiest +squiffy +squiggle +squiggled +squiggles +squigglier +squiggliest +squiggling +squiggly +squilgee +squilgeed +squilgeeing +squilgees +squill +squilla +squillae +squillas +squills +squinch +squinched +squinches +squinching +squinnied +squinnier +squinnies +squinniest +squinny +squinnying +squint +squinted +squinter +squinters +squintest +squintier +squintiest +squinting +squintingly +squints +squinty +squirarchies +squirarchy +squire +squirearchies +squirearchy +squired +squireen +squireens +squires +squiring +squirish +squirm +squirmed +squirmer +squirmers +squirmier +squirmiest +squirming +squirms +squirmy squirrel +squirreled +squirreling +squirrelled +squirrelling +squirrelly +squirrels +squirt +squirted +squirter +squirters +squirting +squirts +squish +squished +squishes +squishier +squishiest +squishiness +squishinesses +squishing +squishy +squoosh +squooshed +squooshes +squooshier +squooshiest +squooshing +squooshy +squush +squushed +squushes +squushing +sraddha +sraddhas +sradha +sradhas +sri +sris +stab +stabbed +stabber +stabbers +stabbing +stabbings +stabile +stabiles +stabilities +stability +stabilization +stabilizations +stabilize +stabilized +stabilizer +stabilizers +stabilizes +stabilizing stable +stabled +stableman +stablemate +stablemates +stablemen +stableness +stablenesses +stabler +stablers +stables +stablest +stabling +stablings +stablish +stablished +stablishes +stablishing +stablishment +stablishments +stably +stabs +staccati +staccato +staccatos +stack +stackable +stacked +stacker +stackers +stacking +stacks +stackup +stackups +stacte +stactes +staddle +staddles +stade +stades +stadia +stadias stadium +stadiums +stadtholder +stadtholderate +stadtholderates +stadtholders +stadtholdership +stadtholderships staff +staffed +staffer +staffers +staffing +staffs +stag stage +stageable +stagecoach +stagecoaches +stagecraft +stagecrafts +staged +stageful +stagefuls +stagehand +stagehands +stagelike +stager +stagers +stages +stagestruck +stagey +stagflation +stagflationary +stagflations +staggard +staggards +staggart +staggarts +stagged +stagger +staggerbush +staggerbushes +staggered +staggerer +staggerers +staggering +staggeringly +staggers +staggery +staggie +staggier +staggies +staggiest +stagging +staggy +staghound +staghounds +stagier +stagiest +stagily +staginess +staginesses +staging +stagings +stagnancies +stagnancy +stagnant +stagnantly +stagnate +stagnated +stagnates +stagnating +stagnation +stagnations +stags +stagy +staid +staider +staidest +staidly +staidness +staidnesses +staig +staigs stain +stainabilities +stainability +stainable +stained +stainer +stainers +staining stainless +stainlesses +stainlessly +stainproof +stains stair +staircase +staircases +stairs +stairway +stairways +stairwell +stairwells +staithe +staithes +stake +staked +stakeholder +stakeholders +stakeout +stakeouts +stakes +staking +stalactite +stalactites +stalactitic +stalag +stalagmite +stalagmites +stalagmitic +stalags +stale +staled +stalely +stalemate +stalemated +stalemates +stalemating +staleness +stalenesses +staler +stales +stalest +staling +stalk +stalked +stalker +stalkers +stalkier +stalkiest +stalkily +stalking +stalkless +stalks +stalky +stall +stalled +stallholder +stallholders +stalling +stallion +stallions +stalls +stalwart +stalwartly +stalwartness +stalwartnesses +stalwarts +stalworth +stalworths +stamen +stamens +stamina +staminal +staminas +staminate +staminodia +staminodium +stammel +stammels +stammer +stammered +stammerer +stammerers +stammering +stammers stamp +stamped +stampede +stampeded +stampeder +stampeders +stampedes +stampeding +stamper +stampers +stamping +stampless +stamps +stance +stances +stanch +stanched +stancher +stanchers +stanches +stanchest +stanching +stanchion +stanchioned +stanchions +stanchly stand standard +standardbred +standardbreds +standardise +standardised +standardises +standardising +standardization +standardizations +standardize +standardized +standardizes +standardizing +standardless +standardly +standards +standaway +standby +standbys +standee +standees +stander +standers +standing +standings +standish +standishes +standoff +standoffish +standoffishly +standoffishness +standoffishnesses +standoffs +standout +standouts +standpat +standpatter +standpatters +standpattism +standpattisms +standpipe +standpipes +standpoint +standpoints +stands +standstill +standstills +standup +stane +staned +stanes +stang +stanged +stanging +stangs +stanhope +stanhopes +stanine +stanines +staning +stank +stanks +stannaries +stannary +stannic +stannite +stannites +stannous +stannum +stannums +stanza +stanzaed +stanzaic +stanzas +stapedectomies +stapedectomy +stapedes +stapedial +stapelia +stapelias +stapes +staph +staphs +staphylinid +staphylinids +staphylococcal +staphylococci +staphylococcic +staphylococcus +staple +stapled +stapler +staplers +staples +stapling star +starboard +starboarded +starboarding +starboards +starch +starched +starches +starchier +starchiest +starchily +starchiness +starchinesses +starching +starchy +stardom +stardoms +stardust +stardusts stare +stared +starer +starers +stares +starets +starfish +starfishes +starflower +starflowers +starfruit +starfruits +stargaze +stargazed +stargazer +stargazers +stargazes +stargazing +stargazings +staring +stark +starker +starkers +starkest +starkly +starkness +starknesses +starless +starlet +starlets +starlight +starlights +starlike +starling +starlings +starlit +starnose +starnoses +starred +starrier +starriest +starring +starry +stars +starship +starships +starstruck start +started +starter +starters +starting +startle +startled +startlement +startlements +startler +startlers +startles +startling +startlingly +starts +startsy +startup +startups starvation +starvations starve +starved +starveling +starvelings +starver +starvers +starves +starving +starwort +starworts +stases +stash +stashed +stashes +stashing +stasima +stasimon +stasis +stat +statable +statal +statant state +stateable +statecraft +statecrafts +stated +statedly +statehood +statehoods +statehouse +statehouses +stateless +statelessness +statelessnesses +statelier +stateliest +stateliness +statelinesses +stately statement +statements +stater +stateroom +staterooms +staters +states +stateside statesman -stateswoman +statesmanlike +statesmanly +statesmanship +statesmanships +statesmen +statewide +static +statical +statically +statice +statices +staticky +statics +stating station +stational +stationary +stationed +stationer +stationeries +stationers +stationery +stationing +stationmaster +stationmasters +stations +statism +statisms +statist +statistic +statistical +statistically +statistician +statisticians statistics +statists +stative +statives +statoblast +statoblasts +statocyst +statocysts +statolith +statoliths +stator +stators +statoscope +statoscopes +stats +statuaries +statuary statue +statued +statues +statuesque +statuesquely +statuette +statuettes +stature +statures status +statuses +statusy +statutable +statute +statutes +statutorily +statutory +staumrel +staumrels +staunch +staunched +stauncher +staunches +staunchest +staunching +staunchly +staunchness +staunchnesses +staurolite +staurolites +staurolitic +stave +staved +staves +stavesacre +stavesacres +staving +staw stay +stayed +stayer +stayers +staying +stays +staysail +staysails +stead +steaded +steadfast +steadfastly +steadfastness +steadfastnesses +steadied +steadier +steadiers +steadies +steadiest +steadily +steadiness +steadinesses +steading +steadings +steads steady +steadying steak +steakhouse +steakhouses +steaks steal +stealable +stealage +stealages +stealer +stealers +stealing +stealings +steals +stealth +stealthier +stealthiest +stealthily +stealthiness +stealthinesses +stealths +stealthy steam +steamboat +steamboats +steamed +steamer +steamered +steamering +steamers +steamfitter +steamfitters +steamier +steamiest +steamily +steaminess +steaminesses +steaming +steamroll +steamrolled +steamroller +steamrollered +steamrollering +steamrollers +steamrolling +steamrolls +steams +steamship +steamships +steamy +steapsin +steapsins +stearate +stearates +stearic +stearin +stearine +stearines +stearins +steatite +steatites +steatitic +steatopygia +steatopygias +steatopygic +steatopygous +steatorrhea +steatorrheas +stedfast +steed +steeds +steek +steeked +steeking +steeks steel +steeled +steelhead +steelheads +steelie +steelier +steelies +steeliest +steeliness +steelinesses +steeling +steelmaker +steelmakers +steelmaking +steelmakings +steels +steelwork +steelworker +steelworkers +steelworks +steely +steelyard +steelyards +steenbok +steenboks steep +steeped +steepen +steepened +steepening +steepens +steeper +steepers +steepest +steeping +steepish +steeple +steeplebush +steeplebushes +steeplechase +steeplechaser +steeplechasers +steeplechases +steeplechasing +steeplechasings +steepled +steeplejack +steeplejacks +steeples +steeply +steepness +steepnesses +steeps +steer +steerable +steerage +steerages +steerageway +steerageways +steered +steerer +steerers +steering +steers +steersman +steersmen +steeve +steeved +steeves +steeving +steevings +stegodon +stegodons +stegosaur +stegosaurs +stegosaurus +stegosauruses +stein +steinbok +steinboks +steins +stela +stelae +stelai +stelar +stele +stelene +steles +stelic +stella +stellar +stellas +stellate +stellified +stellifies +stellify +stellifying +stem +stemless +stemlike +stemma +stemmas +stemmata +stemmatic +stemmed +stemmer +stemmeries +stemmers +stemmery +stemmier +stemmiest +stemming +stemmy +stems +stemson +stemsons +stemware +stemwares +stench +stenches +stenchful +stenchier +stenchiest +stenchy +stencil +stenciled +stenciler +stencilers +stenciling +stencilled +stenciller +stencillers +stencilling +stencils +stengah +stengahs +steno +stenobathic +stenographer +stenographers +stenographic +stenographically +stenographies +stenography +stenohaline +stenokies +stenoky +stenos +stenosed +stenoses +stenosis +stenotherm +stenothermal +stenotherms +stenotic +stenotopic +stenotype +stenotyped +stenotypes +stenotypies +stenotyping +stenotypist +stenotypists +stenotypy +stentor +stentorian +stentors step +stepbrother +stepbrothers +stepchild +stepchildren +stepdame +stepdames +stepdaughter +stepdaughters +stepfamilies +stepfamily +stepfather +stepfathers +stephanotis +stephanotises +stepladder +stepladders +steplike +stepmother +stepmothers +stepparent +stepparenting +stepparentings +stepparents +steppe +stepped +stepper +steppers +steppes +stepping +steps +stepsister +stepsisters +stepson +stepsons +stepwise +stercoraceous +stere +stereo +stereochemical +stereochemistries +stereochemistry +stereoed +stereogram +stereograms +stereograph +stereographed +stereographic +stereographies +stereographing +stereographs +stereography +stereoing +stereoisomer +stereoisomeric +stereoisomerism +stereoisomerisms +stereoisomers +stereological +stereologically +stereologies +stereology +stereomicroscope +stereomicroscopes +stereomicroscopic +stereomicroscopically +stereophonic +stereophonically +stereophonies +stereophony +stereophotographic +stereophotographies +stereophotography +stereopses +stereopsides +stereopsis +stereopticon +stereopticons +stereoregular +stereoregularities +stereoregularity +stereos +stereoscope +stereoscopes +stereoscopic +stereoscopically +stereoscopies +stereoscopy +stereospecific +stereospecifically +stereospecificities +stereospecificity +stereotactic +stereotaxic +stereotaxically +stereotype +stereotyped +stereotyper +stereotypers +stereotypes +stereotypic +stereotypical +stereotypically +stereotypies +stereotyping +stereotypy +steres +steric +sterical +sterically +sterigma +sterigmas +sterigmata +sterilant +sterilants +sterile +sterilely +sterilities +sterility +sterilization +sterilizations +sterilize +sterilized +sterilizer +sterilizers +sterilizes +sterilizing +sterlet +sterlets +sterling +sterlingly +sterlingness +sterlingnesses +sterlings +stern +sterna +sternal +sterner +sternest +sternforemost +sternite +sternites +sternly +sternmost +sternness +sternnesses +sternocostal +sternpost +sternposts +sterns +sternson +sternsons +sternum +sternums +sternutation +sternutations +sternutator +sternutators +sternward +sternwards +sternway +sternways +steroid +steroidal +steroidogeneses +steroidogenesis +steroidogenic +steroids +sterol +sterols +stertor +stertorous +stertorously +stertors +stet +stethoscope +stethoscopes +stethoscopic +stets +stetted +stetting +stevedore +stevedored +stevedores +stevedoring +stew steward +stewarded stewardess +stewardesses +stewarding +stewards +stewardship +stewardships +stewbum +stewbums +stewed +stewing +stewpan +stewpans +stews +stey +sthenia +sthenias +sthenic +stibial +stibine +stibines +stibium +stibiums +stibnite +stibnites +stich +stichic +stichomythia +stichomythias +stichomythic +stichomythies +stichomythy +stichs stick +stickball +stickballs +sticked +sticker +stickers +stickful +stickfuls +stickhandle +stickhandled +stickhandler +stickhandlers +stickhandles +stickhandling +stickier +stickiest +stickily +stickiness +stickinesses +sticking +stickit +stickle +stickleback +sticklebacks +stickled +stickler +sticklers +stickles +sticklike +stickling +stickman +stickmen +stickout +stickouts +stickpin +stickpins +sticks +stickseed +stickseeds +sticktight +sticktights +stickum +stickums +stickup +stickups +stickweed +stickweeds +stickwork +stickworks +sticky +stiction +stictions +stied +sties +stiff +stiffed +stiffen +stiffened +stiffener +stiffeners +stiffening +stiffens +stiffer +stiffest +stiffing +stiffish +stiffly +stiffness +stiffnesses +stiffs +stifle +stifled +stifler +stiflers +stifles +stifling +stiflingly +stigma +stigmal +stigmas +stigmasterol +stigmasterols +stigmata +stigmatic +stigmatically +stigmatics +stigmatist +stigmatists +stigmatization +stigmatizations +stigmatize +stigmatized +stigmatizes +stigmatizing +stilbene +stilbenes +stilbestrol +stilbestrols +stilbite +stilbites +stile +stiles +stiletto +stilettoed +stilettoes +stilettoing +stilettos still +stillbirth +stillbirths +stillborn +stillborns +stilled +stiller +stillest +stillier +stilliest +stilling +stillman +stillmen +stillness +stillnesses +stillroom +stillrooms +stills +stilly +stilt +stilted +stiltedly +stiltedness +stiltednesses +stilting +stilts +stime +stimes +stimied +stimies +stimulant +stimulants +stimulate +stimulated +stimulates +stimulating +stimulation +stimulations +stimulative +stimulator +stimulators +stimulatory +stimuli +stimulus +stimy +stimying +sting +stingaree +stingarees +stinger +stingers +stingier +stingiest +stingily +stinginess +stinginesses +stinging +stingingly +stingless +stingo +stingos +stingray +stingrays +stings +stingy +stink +stinkard +stinkards +stinkbug +stinkbugs +stinker +stinkers +stinkhorn +stinkhorns +stinkier +stinkiest +stinking +stinkingly +stinko +stinkpot +stinkpots +stinks +stinkweed +stinkweeds +stinkwood +stinkwoods +stinky +stint +stinted +stinter +stinters +stinting +stints +stipe +stiped +stipel +stipels +stipend +stipendiaries +stipendiary +stipends +stipes +stipites +stipple +stippled +stippler +stipplers +stipples +stippling +stipular +stipulate +stipulated +stipulates +stipulating +stipulation +stipulations +stipulator +stipulators +stipulatory +stipule +stipuled +stipules +stir +stirabout +stirabouts +stirk +stirks +stirp +stirpes +stirps +stirred +stirrer +stirrers +stirring +stirringly +stirrup +stirrups +stirs +stitch +stitched +stitcher +stitcheries +stitchers +stitchery +stitches +stitching +stitchwort +stitchworts +stithied +stithies +stithy +stithying +stiver +stivers +stoa +stoae +stoai +stoas +stoat +stoats +stob +stobbed +stobbing +stobs +stoccado +stoccados +stoccata +stoccatas +stochastic +stochastically +stock +stockade +stockaded +stockades +stockading +stockbreeder +stockbreeders +stockbroker +stockbrokerage +stockbrokerages +stockbrokers +stockbroking +stockbrokings +stockcar +stockcars +stocked +stocker +stockers +stockfish +stockfishes +stockholder +stockholders +stockier +stockiest +stockily +stockiness +stockinesses +stockinet +stockinets +stockinette +stockinettes stocking +stockinged +stockings +stockish +stockist +stockists +stockjobber +stockjobbers +stockjobbing +stockjobbings +stockkeeper +stockkeepers +stockman +stockmen +stockpile +stockpiled +stockpiler +stockpilers +stockpiles +stockpiling +stockpot +stockpots +stockroom +stockrooms +stocks +stocktaking +stocktakings +stocky +stockyard +stockyards +stodge +stodged +stodges +stodgier +stodgiest +stodgily +stodginess +stodginesses +stodging +stodgy +stogey +stogeys +stogie +stogies +stogy +stoic +stoical +stoically +stoichiometric +stoichiometrically +stoichiometries +stoichiometry +stoicism +stoicisms +stoics +stoke +stoked +stokehold +stokeholds +stoker +stokers +stokes +stokesia +stokesias +stoking +stole +stoled +stolen +stoles +stolid +stolider +stolidest +stolidities +stolidity +stolidly +stollen +stollens +stolon +stolonic +stoloniferous +stolons +stolport +stolports +stoma stomach +stomachache +stomachaches +stomached +stomacher +stomachers +stomachic +stomachics +stomaching +stomachs +stomachy +stomal +stomas +stomata +stomatal +stomate +stomates +stomatic +stomatitides +stomatitis +stomatitises +stomatopod +stomatopods +stomodaea +stomodaeal +stomodaeum +stomodaeums +stomodea +stomodeal +stomodeum +stomodeums +stomp +stomped +stomper +stompers +stomping +stomps +stonable stone +stoneboat +stoneboats +stonechat +stonechats +stonecrop +stonecrops +stonecutter +stonecutters +stonecutting +stonecuttings +stoned +stonefish +stonefishes +stoneflies +stonefly +stonemason +stonemasonries +stonemasonry +stonemasons +stoner +stoners +stones +stonewall +stonewalled +stonewaller +stonewallers +stonewalling +stonewalls +stoneware +stonewares +stonewashed +stonework +stoneworks +stonewort +stoneworts +stoney +stonier +stoniest +stonily +stoniness +stoninesses +stoning +stonish +stonished +stonishes +stonishing +stony +stonyhearted +stood +stooge +stooged +stooges +stooging +stook +stooked +stooker +stookers +stooking +stooks +stool +stooled +stoolie +stoolies +stooling +stools +stoop +stoopball +stoopballs +stooped +stooper +stoopers +stooping +stoops stop +stopbank +stopbanks +stopcock +stopcocks +stope +stoped +stoper +stopers +stopes +stopgap +stopgaps +stoping +stoplight +stoplights +stopover +stopovers +stoppable +stoppage +stoppages +stopped +stopper +stoppered +stoppering +stoppers +stopping +stopple +stoppled +stopples +stoppling +stops +stopt +stopwatch +stopwatches +storable +storables storage +storages +storax +storaxes store +stored +storefront +storefronts +storehouse +storehouses +storekeeper +storekeepers +storeroom +storerooms +stores +storeship +storeships +storewide +storey +storeyed +storeys +storied +stories +storing +stork +storks +storksbill +storksbills storm +stormbound +stormed +stormier +stormiest +stormily +storminess +storminesses +storming +storms +stormy story +storyboard +storyboarded +storyboarding +storyboards +storybook +storybooks +storying +storyteller +storytellers +storytelling +storytellings +stoss +stotinka +stotinki +stound +stounded +stounding +stounds +stoup +stoups +stour +stoure +stoures +stourie +stours +stoury stout +stouten +stoutened +stoutening +stoutens +stouter +stoutest +stouthearted +stoutheartedly +stoutheartedness +stoutheartednesses +stoutish +stoutly +stoutness +stoutnesses +stouts stove +stovepipe +stovepipes +stover +stovers +stoves +stow +stowable +stowage +stowages +stowaway +stowaways +stowed +stowing +stowp +stowps +stows +strabismic +strabismus +strabismuses +straddle +straddled +straddler +straddlers +straddles +straddling +strafe +strafed +strafer +strafers +strafes +strafing +straggle +straggled +straggler +stragglers +straggles +stragglier +straggliest +straggling +straggly straight +straightaway +straightaways +straightbred +straightbreds +straighted +straightedge +straightedges +straighten +straightened +straightener +straighteners +straightening +straightens +straighter +straightest straightforward +straightforwardly +straightforwardness +straightforwardnesses +straightforwards +straighting +straightish +straightjacket +straightjacketed +straightjacketing +straightjackets +straightlaced +straightly +straightness +straightnesses +straights +straightway +strain +strained +strainer +strainers +straining +strains strait +straiten +straitened +straitening +straitens +straiter +straitest +straitjacket +straitjacketed +straitjacketing +straitjackets +straitlaced +straitlacedly +straitlacedness +straitlacednesses +straitly +straitness +straitnesses +straits +strake +straked +strakes +stramash +stramashes +stramonies +stramonium +stramoniums +stramony +strand +stranded +strandedness +strandednesses +strander +stranders +stranding +strandline +strandlines +strands +strang strange +strangely +strangeness +strangenesses stranger +strangered +strangering +strangers +strangest +strangle +strangled +stranglehold +strangleholds +strangler +stranglers +strangles +strangling +strangulate +strangulated +strangulates +strangulating +strangulation +strangulations +stranguries +strangury +strap +straphang +straphanger +straphangers +straphanging +straphangs +straphung +strapless +straplesses +strappado +strappadoes +strappados +strapped +strapper +strappers +strapping +strappings +straps +strass +strasses +strata +stratagem +stratagems +stratal +stratas +strategic +strategical +strategically +strategies +strategist +strategists +strategize +strategized +strategizes +strategizing +strategy +strath +straths +strathspey +strathspeys +strati +stratification +stratifications +stratified +stratifies +stratiform +stratify +stratifying +stratigraphic +stratigraphies +stratigraphy +stratocracies +stratocracy +stratocumuli +stratocumulus +stratosphere +stratospheres +stratospheric +stratous +stratovolcano +stratovolcanoes +stratovolcanos +stratum +stratums +stratus +stravage +stravaged +stravages +stravaging +stravaig +stravaiged +stravaiging +stravaigs straw +strawberries strawberry +strawed +strawflower +strawflowers +strawhat +strawier +strawiest +strawing +straws +strawy +stray +strayed +strayer +strayers +straying +strays +streak +streaked +streaker +streakers +streakier +streakiest +streakiness +streakinesses +streaking +streakings +streaks +streaky stream +streambed +streambeds +streamed +streamer +streamers +streamier +streamiest +streaming +streamings +streamlet +streamlets +streamline +streamlined +streamliner +streamliners +streamlines +streamlining +streams +streamside +streamsides +streamy +streek +streeked +streeker +streekers +streeking +streeks +streel +streeled +streeling +streels street +streetcar +streetcars +streetlamp +streetlamps +streetlight +streetlights +streets +streetscape +streetscapes +streetwalker +streetwalkers +streetwalking +streetwalkings +streetwise strength strengthen +strengthened +strengthener +strengtheners +strengthening +strengthens +strengths +strenuosities +strenuosity +strenuous +strenuously +strenuousness +strenuousnesses +strep +streps +streptobacilli +streptobacillus +streptococcal +streptococci +streptococcic +streptococcus +streptokinase +streptokinases +streptolysin +streptolysins +streptomyces +streptomycete +streptomycetes +streptomycin +streptomycins +streptothricin +streptothricins stress +stressed +stresses +stressful +stressfully +stressing +stressless +stresslessness +stresslessnesses +stressor +stressors +stretch +stretchabilities +stretchability +stretchable +stretched +stretcher +stretchers +stretches +stretchier +stretchiest +stretching +stretchy +stretta +strettas +strette +stretti +stretto +strettos +streusel +streusels +strew +strewed +strewer +strewers +strewing +strewment +strewments +strewn +strews +stria +striae +striate +striated +striates +striating +striation +striations +strick +stricken +strickle +strickled +strickles +strickling +stricks strict +stricter +strictest +strictly +strictness +strictnesses +stricture +strictures +stridden +stride +stridence +stridences +stridencies +stridency +strident +stridently +strider +striders +strides +striding +stridor +stridors +stridulate +stridulated +stridulates +stridulating +stridulation +stridulations +stridulatory +stridulous +stridulously +strife +strifeless +strifes +strigil +strigils +strigose strike +strikebound +strikebreaker +strikebreakers +strikebreaking +strikebreakings +strikeout +strikeouts +strikeover +strikeovers +striker +strikers +strikes +striking +strikingly string +stringcourse +stringcourses +stringed +stringencies +stringency +stringendo +stringent +stringently +stringer +stringers +stringhalt +stringhalted +stringhalts +stringier +stringiest +stringiness +stringinesses +stringing +stringings +stringless +stringpiece +stringpieces +strings +stringy +stringybark +stringybarks +strip +stripe +striped +stripeless +striper +stripers +stripes +stripier +stripiest +striping +stripings +stripling +striplings +strippable +stripped +stripper +strippers +stripping +strips +stript +striptease +stripteaser +stripteasers +stripteases +stripy +strive +strived +striven +striver +strivers +strives +striving +strobe +strobes +strobic +strobil +strobila +strobilae +strobilation +strobilations +strobile +strobiles +strobili +strobils +strobilus +stroboscope +stroboscopes +stroboscopic +stroboscopically +strobotron +strobotrons +strode +stroganoff +stroke +stroked +stroker +strokers +strokes +stroking +stroll +strolled +stroller +strollers +strolling +strolls +stroma +stromal +stromata +stromatolite +stromatolites +stromatolitic strong +strongbox +strongboxes +stronger +strongest +stronghold +strongholds +strongish +strongly +strongman +strongmen +strongyl +strongyle +strongyles +strongyloidiases +strongyloidiasis +strongyloidoses +strongyloidosis +strongyloidosises +strongyls +strontia +strontianite +strontianites +strontias +strontic +strontium +strontiums +strook +strop +strophanthin +strophanthins +strophe +strophes +strophic +stropped +stropper +stroppers +stroppier +stroppiest +stropping +stroppy +strops +stroud +strouding +stroudings +strouds +strove +strow +strowed +strowing +strown +strows +stroy +stroyed +stroyer +stroyers +stroying +stroys +struck +strucken +structural +structuralism +structuralisms +structuralist +structuralists +structuralization +structuralizations +structuralize +structuralized +structuralizes +structuralizing +structurally +structuration +structurations +structure +structured +structureless +structurelessness +structurelessnesses +structures +structuring +strudel +strudels struggle +struggled +struggler +strugglers +struggles +struggling +strum +struma +strumae +strumas +strummed +strummer +strummers +strumming +strumose +strumous +strumpet +strumpets +strums +strung +strunt +strunted +strunting +strunts +strut +struthious +struts +strutted +strutter +strutters +strutting +strychnine +strychnines +stub +stubbed +stubbier +stubbiest +stubbily +stubbing +stubble +stubbled +stubbles +stubblier +stubbliest +stubbly stubborn +stubborner +stubbornest +stubbornly +stubbornness +stubbornnesses +stubby +stubs +stucco +stuccoed +stuccoer +stuccoers +stuccoes +stuccoing +stuccos +stuccowork +stuccoworks +stuck +stud +studbook +studbooks +studded +studdie +studdies +studding +studdings student +students +studentship +studentships +studfish +studfishes +studhorse +studhorses +studied +studiedly +studiedness +studiednesses +studier +studiers +studies studio +studios +studious +studiously +studiousness +studiousnesses +studlier +studliest +studly +studs +studwork +studworks study +studying +stuff +stuffed +stuffer +stuffers +stuffier +stuffiest +stuffily +stuffiness +stuffinesses +stuffing +stuffings +stuffless +stuffs +stuffy +stuiver +stuivers +stull +stulls +stultification +stultifications +stultified +stultifies +stultify +stultifying +stum +stumble +stumblebum +stumblebums +stumbled +stumbler +stumblers +stumbles +stumbling +stumblingly +stummed +stumming +stump +stumpage +stumpages +stumped +stumper +stumpers +stumpier +stumpiest +stumping +stumps +stumpy +stums +stun +stung +stunk +stunned +stunner +stunners +stunning +stunningly +stuns +stunsail +stunsails +stunt +stunted +stuntedness +stuntednesses +stunting +stuntman +stuntmen +stunts +stuntwoman +stuntwomen +stupa +stupas +stupe +stupefaction +stupefactions +stupefied +stupefies +stupefy +stupefying +stupefyingly +stupendous +stupendously +stupendousness +stupendousnesses +stupes stupid +stupider +stupidest +stupidities +stupidity +stupidly +stupidness +stupidnesses +stupids +stupor +stuporous +stupors +sturdied +sturdier +sturdies +sturdiest +sturdily +sturdiness +sturdinesses +sturdy +sturgeon +sturgeons +sturt +sturts +stutter +stuttered +stutterer +stutterers +stuttering +stutters +sty +stye +styed +styes +stygian +stying +stylar +stylate style +stylebook +stylebooks +styled +styleless +stylelessness +stylelessnesses +styler +stylers +styles +stylet +stylets +styli +styliform +styling +stylings +stylise +stylised +styliser +stylisers +stylises +stylish +stylishly +stylishness +stylishnesses +stylising +stylist +stylistic +stylistically +stylistics +stylists +stylite +stylites +stylitic +stylization +stylizations +stylize +stylized +stylizer +stylizers +stylizes +stylizing +stylobate +stylobates +stylographies +stylography +styloid +stylopodia +stylopodium +stylus +styluses +stymie +stymied +stymieing +stymies +stymy +stymying +stypsis +stypsises +styptic +styptics +styrax +styraxes +styrene +styrenes +suabilities +suability +suable +suably +suasion +suasions +suasive +suasively +suasiveness +suasivenesses +suasory +suave +suavely +suaveness +suavenesses +suaver +suavest +suavities +suavity +sub +suba +subabbot +subabbots +subacid +subacidly +subacidness +subacidnesses +subacrid +subacute +subacutely +subadar +subadars +subadolescent +subadolescents +subadult +subadults +subaerial +subaerially +subagencies +subagency +subagent +subagents +subah +subahdar +subahdars +subahs +subalar +suballocation +suballocations +subalpine +subaltern +subalterns +subantarctic +subapical +subaquatic +subaqueous +subarachnoid +subarachnoidal +subarctic +subarctics +subarea +subareas +subarid +subas +subassemblies +subassembly +subatmospheric +subatom +subatomic +subatoms +subaudible +subaudition +subauditions +subaverage +subaxial +subbase +subbasement +subbasements +subbases +subbasin +subbasins +subbass +subbasses +subbed +subbing +subbings +subbituminous +subblock +subblocks +subbranch +subbranches +subbreed +subbreeds +subcabinet +subcapsular +subcaste +subcastes +subcategories +subcategorization +subcategorizations +subcategorize +subcategorized +subcategorizes +subcategorizing +subcategory +subcause +subcauses +subceiling +subceilings +subcell +subcellar +subcellars +subcells +subcellular +subcenter +subcenters +subcentral +subcentrally +subchapter +subchapters +subchaser +subchasers +subchief +subchiefs +subclan +subclans +subclass +subclassed +subclasses +subclassification +subclassifications +subclassified +subclassifies +subclassify +subclassifying +subclassing +subclavian +subclavians +subclerk +subclerks +subclimax +subclimaxes +subclinical +subclinically +subcluster +subclusters +subcode +subcodes +subcollection +subcollections +subcollege +subcolleges +subcollegiate +subcolonies +subcolony +subcommission +subcommissions +subcommittee +subcommittees +subcommunities +subcommunity +subcompact +subcompacts +subcomponent +subcomponents +subconscious +subconsciouses +subconsciously +subconsciousness +subconsciousnesses +subcontinent +subcontinental +subcontinents +subcontract +subcontracted +subcontracting +subcontractor +subcontractors +subcontracts +subcontraoctave +subcontraoctaves +subcontraries +subcontrary +subcool +subcooled +subcooling +subcools +subcordate +subcoriaceous +subcortical +subcounties +subcounty +subcritical +subcrustal +subcult +subcults +subcultural +subculturally +subculture +subcultured +subcultures +subculturing +subcurative +subcuratives +subcutaneous +subcutaneously +subcutes +subcutis +subcutises +subdeacon +subdeacons +subdean +subdeans +subdeb +subdebs +subdebutante +subdebutantes +subdecision +subdecisions +subdepartment +subdepartments +subdepot +subdepots +subdermal +subdermally +subdevelopment +subdevelopments +subdialect +subdialects +subdirector +subdirectors +subdiscipline +subdisciplines +subdistrict +subdistricted +subdistricting +subdistricts +subdividable +subdivide +subdivided +subdivider +subdividers +subdivides +subdividing +subdivision +subdivisions +subdominant +subdominants +subdual +subduals +subduce +subduced +subduces +subducing +subduct +subducted +subducting +subduction +subductions +subducts +subdue +subdued +subduedly +subduer +subduers +subdues +subduing +subdural +subecho +subechoes +subeconomies +subeconomy +subedit +subedited +subediting +subeditor +subeditorial +subeditors +subedits +subemployed +subemployment +subemployments +subentries +subentry +subepidermal +subepoch +subepochs +suber +suberect +suberic +suberin +suberins +suberise +suberised +suberises +suberising +suberization +suberizations +suberize +suberized +suberizes +suberizing +suberose +suberous +subers +subfamilies +subfamily +subfield +subfields +subfile +subfiles +subfix +subfixes +subfloor +subfloors +subfluid +subfossil +subfossils +subframe +subframes +subfreezing +subfusc +subgenera +subgeneration +subgenerations +subgenre +subgenres +subgenus +subgenuses +subglacial +subglacially +subgoal +subgoals +subgovernment +subgovernments +subgrade +subgrades +subgraph +subgraphs +subgroup +subgroups +subgum +subgums +subhead +subheading +subheadings +subheads +subhuman +subhumans +subhumid +subidea +subideas +subindex +subindexes +subindices +subindustries +subindustry +subinfeudate +subinfeudated +subinfeudates +subinfeudating +subinfeudation +subinfeudations +subinhibitory +subinterval +subintervals +subirrigate +subirrigated +subirrigates +subirrigating +subirrigation +subirrigations +subitem +subitems +subito +subjacencies +subjacency +subjacent +subjacently subject +subjected +subjecting +subjection +subjections subjective +subjectively +subjectiveness +subjectivenesses +subjectives +subjectivise +subjectivised +subjectivises +subjectivising +subjectivism +subjectivisms +subjectivist +subjectivistic +subjectivists +subjectivities +subjectivity +subjectivization +subjectivizations +subjectivize +subjectivized +subjectivizes +subjectivizing +subjectless +subjects +subjoin +subjoined +subjoining +subjoins +subjugate +subjugated +subjugates +subjugating +subjugation +subjugations +subjugator +subjugators +subjunction +subjunctions +subjunctive +subjunctives +subkingdom +subkingdoms +sublanguage +sublanguages +sublate +sublated +sublates +sublating +sublation +sublations +sublease +subleased +subleases +subleasing +sublet +sublethal +sublethally +sublets +subletting +sublevel +sublevels +sublibrarian +sublibrarians +sublicense +sublicensed +sublicenses +sublicensing +sublieutenant +sublieutenants +sublimable +sublimate +sublimated +sublimates +sublimating +sublimation +sublimations +sublime +sublimed +sublimely +sublimeness +sublimenesses +sublimer +sublimers +sublimes +sublimest +subliminal +subliminally +subliming +sublimities +sublimity +subline +sublines +sublingual +subliteracies +subliteracy +subliterary +subliterate +subliterature +subliteratures +sublittoral +sublittorals +sublot +sublots +sublunar +sublunary +subluxation +subluxations +submanager +submanagers +submandibular +submandibulars +submarginal +submarine +submarined +submariner +submariners +submarines +submarining +submarket +submarkets +submaxillaries +submaxillary +submaximal +submediant +submediants +submenu +submenus +submerge +submerged +submergence +submergences +submerges +submergible +submerging +submerse +submersed +submerses +submersible +submersibles +submersing +submersion +submersions +submetacentric +submetacentrics +submicrogram +submicron +submicroscopic +submicroscopically +submillimeter +subminiature +subminimal +subminister +subministers +submiss +submission +submissions +submissive +submissively +submissiveness +submissivenesses submit +submitochondrial +submits +submittal +submittals +submitted +submitting +submucosa +submucosae +submucosal +submucosas +submultiple +submultiples +submunition +submunitions +subnasal +subnational +subnet +subnets +subnetwork +subnetworks +subniche +subniches +subnodal +subnormal +subnormalities +subnormality +subnormally +subnuclear +suboceanic +suboptic +suboptimal +suboptimization +suboptimizations +suboptimize +suboptimized +suboptimizes +suboptimizing +suboptimum +suboral +suborbicular +suborbital +suborder +suborders +subordinate +subordinated +subordinately +subordinateness +subordinatenesses +subordinates +subordinating +subordination +subordinations +subordinative +subordinator +subordinators +suborganization +suborganizations +suborn +subornation +subornations +suborned +suborner +suborners +suborning +suborns +suboval +subovate +suboxide +suboxides +subpanel +subpanels +subpar +subparagraph +subparagraphs +subparallel +subpart +subparts +subpena +subpenaed +subpenaing +subpenas +subperiod +subperiods +subphase +subphases +subphyla +subphylum +subplot +subplots +subpoena +subpoenaed +subpoenaing +subpoenas +subpolar +subpopulation +subpopulations +subpotencies +subpotency +subpotent +subprimate +subprimates +subprincipal +subprincipals +subproblem +subproblems +subprocess +subprocesses +subproduct +subproducts +subprofessional +subprofessionals +subprogram +subprograms +subproject +subprojects +subproletariat +subproletariats +subpubic +subrace +subraces +subrational +subregion +subregional +subregions +subrent +subrents +subreption +subreptions +subreptitious +subreptitiously +subring +subrings +subrogate +subrogated +subrogates +subrogating +subrogation +subrogations +subroutine +subroutines +subrule +subrules +subs +subsale +subsales +subsample +subsampled +subsamples +subsampling +subsatellite +subsatellites +subsaturated +subsaturation +subsaturations +subscale +subscales +subscience +subsciences subscribe +subscribed +subscriber +subscribers +subscribes +subscribing +subscript +subscription +subscriptions +subscripts +subsea +subsecretaries +subsecretary +subsect +subsection +subsections +subsector +subsectors +subsects +subsegment +subsegments +subseizure +subseizures +subsense +subsenses +subsentence +subsentences +subsequence +subsequences +subsequent +subsequently +subsequents +subsere +subseres +subseries +subserve +subserved +subserves +subservience +subserviences +subserviencies +subserviency +subservient +subserviently +subserving +subset +subsets +subshaft +subshafts +subshell +subshells +subshrub +subshrubs +subside +subsided +subsidence +subsidences +subsider +subsiders +subsides +subsidiaries +subsidiarily +subsidiarities +subsidiarity +subsidiary +subsidies +subsiding +subsidise +subsidised +subsidises +subsidising +subsidization +subsidizations +subsidize +subsidized +subsidizer +subsidizers +subsidizes +subsidizing +subsidy +subsist +subsisted +subsistence +subsistences +subsistent +subsisting +subsists +subsite +subsites +subskill +subskills +subsocial +subsocieties +subsociety +subsoil +subsoiled +subsoiler +subsoilers +subsoiling +subsoils +subsolar +subsonic +subsonically +subspace +subspaces +subspecialist +subspecialists +subspecialize +subspecialized +subspecializes +subspecializing +subspecialties +subspecialty +subspecies +subspecific +substage +substages +substance +substanceless +substances +substandard +substantial +substantialities +substantiality +substantially +substantialness +substantialnesses +substantials +substantiate +substantiated +substantiates +substantiating +substantiation +substantiations +substantiative +substantival +substantivally +substantive +substantively +substantiveness +substantivenesses +substantives +substantivize +substantivized +substantivizes +substantivizing +substate +substates +substation +substations +substituent +substituents +substitutabilities +substitutability +substitutable substitute +substituted +substitutes +substituting +substitution +substitutional +substitutionally +substitutionary +substitutions +substitutive +substitutively +substrata +substrate +substrates +substratum +substructural +substructure +substructures +subsumable +subsume +subsumed +subsumes +subsuming +subsumption +subsumptions +subsurface +subsurfaces +subsystem +subsystems +subtask +subtasks +subtaxa +subtaxon +subtaxons +subteen +subteens +subtemperate +subtenancies +subtenancy +subtenant +subtenants +subtend +subtended +subtending +subtends +subterfuge +subterfuges +subterminal +subterranean +subterraneanly +subterraneous +subterraneously +subtest +subtests +subtext +subtexts +subtextual +subtheme +subthemes +subtherapeutic +subthreshold +subtile +subtilely +subtileness +subtilenesses +subtiler +subtilest +subtilin +subtilins +subtilisin +subtilisins +subtilization +subtilizations +subtilize +subtilized +subtilizes +subtilizing +subtilties +subtilty +subtitle +subtitled +subtitles +subtitling +subtle +subtleness +subtlenesses +subtler +subtlest +subtleties +subtlety +subtly +subtone +subtones +subtonic +subtonics +subtopia +subtopias +subtopic +subtopics +subtotal +subtotaled +subtotaling +subtotalled +subtotalling +subtotally +subtotals +subtract +subtracted +subtracter +subtracters +subtracting +subtraction +subtractions +subtractive +subtracts +subtrahend +subtrahends +subtreasuries +subtreasury +subtrend +subtrends +subtribe +subtribes +subtropic +subtropical +subtropics +subtunic +subtunics +subtype +subtypes +subulate +subumbrella +subumbrellas +subunit +subunits +suburb +suburban +suburbanise +suburbanised +suburbanises +suburbanising +suburbanite +suburbanites +suburbanization +suburbanizations +suburbanize +suburbanized +suburbanizes +suburbanizing +suburbans +suburbed +suburbia +suburbias +suburbs +subvarieties +subvariety +subvassal +subvassals +subvene +subvened +subvenes +subvening +subvention +subventionary +subventions +subversion +subversionary +subversions +subversive +subversively +subversiveness +subversivenesses +subversives +subvert +subverted +subverter +subverters +subverting +subverts +subvicar +subvicars +subviral +subvisible +subvisual +subvocal +subvocalization +subvocalizations +subvocalize +subvocalized +subvocalizes +subvocalizing +subvocally +subway +subwayed +subwaying +subways +subworld +subworlds +subwriter +subwriters +subzero +subzone +subzones +succah +succahs +succedanea +succedaneous +succedaneum +succedaneums +succedent succeed +succeeded +succeeder +succeeders +succeeding +succeeds success +successes successful +successfully +successfulness +successfulnesses +succession +successional +successionally +successions +successive +successively +successiveness +successivenesses +successor +successors +succinate +succinates +succinct +succincter +succinctest +succinctly +succinctness +succinctnesses +succinic +succinyl +succinylcholine +succinylcholines +succinyls +succor +succored +succorer +succorers +succories +succoring +succors +succory +succotash +succotashes +succoth +succour +succoured +succouring +succours +succuba +succubae +succubi +succubus +succubuses +succulence +succulences +succulent +succulently +succulents +succumb +succumbed +succumbing +succumbs +succuss +succussed +succusses +succussing such +suchlike +suchness +suchnesses suck +sucked +sucker +suckered +suckering +suckers +suckfish +suckfishes +sucking +suckle +suckled +suckler +sucklers +suckles +suckless +suckling +sucklings +sucks +sucrase +sucrases +sucre +sucres +sucrose +sucroses +suction +suctional +suctioned +suctioning +suctions +suctorial +suctorian +suctorians +sudaria +sudaries +sudarium +sudary +sudation +sudations +sudatoria +sudatories +sudatorium +sudatoriums +sudatory +sudd sudden +suddenly +suddenness +suddennesses +suddens +sudds +sudor +sudoral +sudoriferous +sudorific +sudorifics +sudors +suds +sudsed +sudser +sudsers +sudses +sudsier +sudsiest +sudsing +sudsless +sudsy +sue +sued +suede +sueded +suedes +sueding +suer +suers +sues +suet +suets +suety +suffari +suffaris suffer +sufferable +sufferableness +sufferablenesses +sufferably +sufferance +sufferances +suffered +sufferer +sufferers suffering +sufferings +suffers +suffice +sufficed +sufficer +sufficers +suffices +sufficiencies +sufficiency +sufficient +sufficiently +sufficing +suffix +suffixal +suffixation +suffixations +suffixed +suffixes +suffixing +sufflate +sufflated +sufflates +sufflating +suffocate +suffocated +suffocates +suffocating +suffocatingly +suffocation +suffocations +suffocative +suffragan +suffragans +suffrage +suffrages +suffragette +suffragettes +suffragist +suffragists +suffuse +suffused +suffuses +suffusing +suffusion +suffusions +suffusive sugar +sugarberries +sugarberry +sugarcane +sugarcanes +sugarcoat +sugarcoated +sugarcoating +sugarcoats +sugared +sugarhouse +sugarhouses +sugarier +sugariest +sugaring +sugarless +sugarloaf +sugarloaves +sugarplum +sugarplums +sugars +sugary suggest +suggested +suggester +suggesters +suggestibilities +suggestibility +suggestible +suggesting suggestion +suggestions +suggestive +suggestively +suggestiveness +suggestivenesses +suggests +sugh +sughed +sughing +sughs +suicidal +suicidally +suicide +suicided +suicides +suiciding +suing +suint +suints suit +suitabilities +suitability suitable +suitableness +suitablenesses +suitably suitcase +suitcases suite +suited +suiter +suiters +suites +suiting +suitings +suitlike +suitor +suitors +suits +sukiyaki +sukiyakis +sukkah +sukkahs +sukkot +sukkoth +sulcal +sulcate +sulcated +sulci +sulcus +suldan +suldans +sulfa +sulfadiazine +sulfadiazines +sulfanilamide +sulfanilamides +sulfas +sulfatase +sulfatases +sulfate +sulfated +sulfates +sulfating +sulfhydryl +sulfhydryls +sulfid +sulfide +sulfides +sulfids +sulfinpyrazone +sulfinpyrazones +sulfinyl +sulfinyls +sulfite +sulfites +sulfitic +sulfo +sulfonamide +sulfonamides +sulfonate +sulfonated +sulfonates +sulfonating +sulfonation +sulfonations +sulfone +sulfones +sulfonic +sulfonium +sulfoniums +sulfonyl +sulfonyls +sulfonylurea +sulfonylureas +sulfoxide +sulfoxides +sulfur +sulfured +sulfuret +sulfureted +sulfureting +sulfurets +sulfuretted +sulfuretting +sulfuric +sulfuring +sulfurize +sulfurized +sulfurizes +sulfurizing +sulfurous +sulfurously +sulfurousness +sulfurousnesses +sulfurs +sulfury +sulfuryl +sulfuryls +sulk +sulked +sulker +sulkers +sulkier +sulkies +sulkiest +sulkily +sulkiness +sulkinesses +sulking +sulks +sulky +sullage +sullages +sullen +sullener +sullenest +sullenly +sullenness +sullennesses +sullied +sullies +sully +sullying +sulpha +sulphas +sulphate +sulphated +sulphates +sulphating +sulphid +sulphide +sulphides +sulphids +sulphite +sulphites +sulphone +sulphones +sulphur +sulphured +sulphureous +sulphuring +sulphurise +sulphurised +sulphurises +sulphurising +sulphurous +sulphurs +sulphury +sultan +sultana +sultanas +sultanate +sultanates +sultaness +sultanesses +sultanic +sultans +sultrier +sultriest +sultrily +sultriness +sultrinesses +sultry +sulu +sulus +sum +sumac +sumach +sumachs +sumacs +sumless +summa +summabilities +summability +summable +summae +summand +summands +summaries +summarily +summarise +summarised +summarises +summarising +summarizable +summarization +summarizations +summarize +summarized +summarizer +summarizers +summarizes +summarizing summary +summas +summate +summated +summates +summating +summation +summational +summations +summative +summed summer +summered +summerhouse +summerhouses +summerier +summeriest +summering +summerlike +summerlong +summerly +summers +summersault +summersaulted +summersaulting +summersaults +summertime +summertimes +summerwood +summerwoods +summery +summing +summit +summital +summited +summiteer +summiteers +summiting +summitries +summitry +summits +summon +summonable +summoned +summoner +summoners +summoning +summons +summonsed +summonses +summonsing +sumo +sumos +sump +sumps +sumpter +sumpters +sumptuary +sumptuous +sumptuously +sumptuousness +sumptuousnesses +sumpweed +sumpweeds +sums sun +sunback +sunbaked +sunbath +sunbathe +sunbathed +sunbather +sunbathers +sunbathes +sunbathing +sunbaths +sunbeam +sunbeams +sunbeamy +sunbelt +sunbelts +sunbird +sunbirds +sunblock +sunblocks +sunbonnet +sunbonnets +sunbow +sunbows +sunburn +sunburned +sunburning +sunburns sunburnt +sunburst +sunbursts +sunchoke +sunchokes +sundae +sundaes +sundeck +sundecks +sunder +sundered +sunderer +sunderers +sundering +sunders +sundew +sundews +sundial +sundials +sundog +sundogs +sundown +sundowner +sundowners +sundowns +sundress +sundresses +sundries +sundrops +sundry +sunfast +sunfish +sunfishes +sunflower +sunflowers +sung +sunglass +sunglasses +sunglow +sunglows +sunk +sunken +sunket +sunkets +sunlamp +sunlamps +sunland +sunlands +sunless sunlight +sunlights +sunlike +sunlit +sunn +sunna +sunnah +sunnahs +sunnas +sunned +sunnier +sunniest +sunnily +sunniness +sunninesses +sunning +sunns sunny +sunporch +sunporches +sunproof +sunrise +sunrises +sunroof +sunroofs +sunroom +sunrooms +suns +sunscald +sunscalds +sunscreen +sunscreening +sunscreens +sunseeker +sunseekers +sunset +sunsets +sunshade +sunshades sunshine +sunshines +sunshiny +sunspot +sunspots +sunstone +sunstones +sunstroke +sunstrokes +sunstruck +sunsuit +sunsuits +suntan +suntanned +suntans +sunup +sunups +sunward +sunwards +sunwise +sup +supe super +superable +superableness +superablenesses +superably +superabound +superabounded +superabounding +superabounds +superabsorbent +superabsorbents +superabundance +superabundances +superabundant +superabundantly +superachiever +superachievers +superactivities +superactivity +superadd +superadded +superadding +superaddition +superadditions +superadds +superadministrator +superadministrators +superagencies +superagency +superagent +superagents +superalloy +superalloys +superaltern +superalterns +superambitious +superannuate +superannuated +superannuates +superannuating +superannuation +superannuations +superathlete +superathletes superb +superbad +superbank +superbanks +superber +superbest +superbillionaire +superbillionaires +superbitch +superbitches +superblock +superblocks +superbly +superbness +superbnesses +superboard +superboards +superbomb +superbomber +superbombers +superbombs +superbright +superbureaucrat +superbureaucrats +supercabinet +supercabinets +supercalender +supercalendered +supercalendering +supercalenders +supercar +supercargo +supercargoes +supercargos +supercarrier +supercarriers +supercars +supercautious +supercede +superceded +supercedes +superceding +supercenter +supercenters +supercharge +supercharged +supercharger +superchargers +supercharges +supercharging +superchic +superchurch +superchurches +superciliary +supercilious +superciliously +superciliousness +superciliousnesses +supercities +supercity +supercivilization +supercivilizations +supercivilized +superclass +superclasses +superclean +superclub +superclubs +supercluster +superclusters +supercoil +supercoiled +supercoiling +supercoils +supercollider +supercolliders +supercolossal +supercomfortable +supercompetitive +supercomputer +supercomputers +superconduct +superconducted +superconducting +superconductive +superconductivities +superconductivity +superconductor +superconductors +superconducts +superconfident +superconglomerate +superconglomerates +superconservative +supercontinent +supercontinents +superconvenient +supercool +supercooled +supercooling +supercools +supercop +supercops +supercorporation +supercorporations +supercriminal +supercriminals +supercritical +supercurrent +supercurrents +supercute +superdeluxe +superdiplomat +superdiplomats +supered +supereffective +superefficiencies +superefficiency +superefficient +superego +superegoist +superegoists +superegos +superelevate +superelevated +superelevates +superelevating +superelevation +superelevations +superelite +superelites +supereminence +supereminences +supereminent +supereminently +superencipher +superenciphered +superenciphering +superenciphers +supererogation +supererogations +supererogatory +superette +superettes +superexpensive +superexpress +superexpresses +superfamilies +superfamily +superfan +superfans +superfarm +superfarms +superfast +superfatted +superfecundation +superfecundations +superfetation +superfetations +superficial +superficialities +superficiality +superficially +superficies +superfine +superfirm +superfirms +superfix +superfixes +superflack +superflacks +superfluid +superfluidities +superfluidity +superfluids +superfluities +superfluity +superfluous +superfluously +superfluousness +superfluousnesses +superfund +superfunds +supergene +supergenes +supergiant +supergiants +superglue +superglues +supergood +supergovernment +supergovernments +supergraphics +supergravities +supergravity +supergroup +supergroups +supergrowth +supergrowths +superharden +superhardened +superhardening +superhardens +superheat +superheated +superheater +superheaters +superheating +superheats +superheavy +superheavyweight +superheavyweights +superhelical +superhelices +superhelix +superhelixes +superhero +superheroes +superheroine +superheroines +superheterodyne +superheterodynes +superhighway +superhighways +superhit +superhits +superhot +superhuman +superhumanities +superhumanity +superhumanly +superhumanness +superhumannesses +superhype +superhyped +superhypes +superhyping +superimposable +superimpose +superimposed +superimposes +superimposing +superimposition +superimpositions +superincumbent +superincumbently +superindividual +superinduce +superinduced +superinduces +superinducing +superinduction +superinductions +superinfect +superinfected +superinfecting +superinfection +superinfections +superinfects +supering +superinsulated +superintellectual +superintellectuals +superintelligence +superintelligences +superintelligent +superintend +superintended +superintendence +superintendences +superintendencies +superintendency +superintendent +superintendents +superintending +superintends +superintensities +superintensity superior +superiorities +superiority +superiorly +superiors +superjacent +superjet +superjets +superjock +superjocks +superjumbo +superlain +superlarge +superlative +superlatively +superlativeness +superlativenesses +superlatives +superlawyer +superlawyers +superlay +superlie +superlies +superlight +superliner +superliners +superlobbyist +superlobbyists +superloyalist +superloyalists +superlunar +superlunary +superluxuries +superluxurious +superluxury +superlying +supermacho +supermachos +supermajorities +supermajority +supermale +supermales +superman supermarket +supermarkets +supermasculine +supermassive +supermen +supermicro +supermicros +supermilitant +supermillionaire +supermillionaires +supermind +superminds +supermini +superminicomputer +superminicomputers +superminis +superminister +superministers +supermodel +supermodels +supermodern +supermom +supermoms +supernal +supernally +supernatant +supernatants +supernation +supernational +supernations +supernatural +supernaturalism +supernaturalisms +supernaturalist +supernaturalistic +supernaturalists +supernaturally +supernaturalness +supernaturalnesses +supernaturals +supernature +supernatures +supernormal +supernormalities +supernormality +supernormally +supernova +supernovae +supernovas +supernumeraries +supernumerary +supernutrition +supernutritions +superorder +superorders +superordinate +superorganic +superorganism +superorganisms +superorgasm +superorgasms +superovulate +superovulated +superovulates +superovulating +superovulation +superovulations +superoxide +superoxides +superparasitism +superparasitisms +superpatriot +superpatriotic +superpatriotism +superpatriotisms +superpatriots +superperson +superpersonal +superpersons +superphenomena +superphenomenon +superphosphate +superphosphates +superphysical +superpimp +superpimps +superplane +superplanes +superplastic +superplasticities +superplasticity +superplayer +superplayers +superpolite +superport +superports +superposable +superpose +superposed +superposes +superposing +superposition +superpositions +superpower +superpowered +superpowerful +superpowers +superpremium +superpremiums +superpro +superprofit +superprofits +superpros +superqualities +superquality +superrace +superraces +superreal +superrealism +superrealisms +superregenerative +superregional +superrich +superroad +superroads +superromantic +superromanticism +superromanticisms +supers +supersafe +supersale +supersales +supersalesman +supersalesmen +supersaturate +supersaturated +supersaturates +supersaturating +supersaturation +supersaturations +superscale +superscales +superschool +superschools +superscout +superscouts +superscribe +superscribed +superscribes +superscribing +superscript +superscription +superscriptions +superscripts +supersecrecies +supersecrecy +supersecret +supersecrets +supersede +supersedeas +superseded +superseder +superseders +supersedes +superseding +supersedure +supersedures +supersell +superseller +supersellers +supersells +supersensible +supersensitive +supersensitively +supersensitivities +supersensitivity +supersensory +superserviceable +supersession +supersessions +supersex +supersexes +supersexualities +supersexuality +supersharp +supershow +supershows +supersinger +supersingers +supersize +supersized +supersleuth +supersleuths +superslick +supersmart +supersmooth +supersoft +supersonic +supersonically +supersonics +supersophisticated +superspecial +superspecialist +superspecialists +superspecialization +superspecializations +superspecialized +superspecials +superspectacle +superspectacles +superspectacular +superspectaculars +superspeculation +superspeculations +superspies +superspy +superstar +superstardom +superstardoms +superstars +superstate +superstates +superstation +superstations +superstimulate +superstimulated +superstimulates +superstimulating +superstition +superstitions +superstitious +superstitiously +superstock +superstocks +superstore +superstores +superstrata +superstratum +superstrength +superstrengths +superstrike +superstrikes +superstring +superstrings +superstrong +superstructural +superstructure +superstructures +superstud +superstuds +supersubstantial +supersubtle +supersubtleties +supersubtlety +supersurgeon +supersurgeons +supersweet +supersymmetric +supersymmetries +supersymmetry +supersystem +supersystems +supertanker +supertankers +supertax +supertaxes +superterrific +superthick +superthin +superthriller +superthrillers +supertight +supertonic +supertonics +supervene +supervened +supervenes +supervenient +supervening +supervention +superventions +supervirile +supervirtuosi +supervirtuoso +supervirtuosos +supervise +supervised +supervises +supervising +supervision +supervisions +supervisor +supervisors +supervisory +superwave +superwaves +superweapon +superweapons +superwide +superwife +superwives +superwoman +superwomen +supes +supinate +supinated +supinates +supinating +supination +supinations +supinator +supinators +supine +supinely +supineness +supinenesses +supines +supped supper +suppers +suppertime +suppertimes +supping +supplant +supplantation +supplantations +supplanted +supplanter +supplanters +supplanting +supplants +supple +suppled +supplejack +supplejacks +supplely +supplement +supplemental +supplementals +supplementary +supplementation +supplementations +supplemented +supplementer +supplementers +supplementing +supplements +suppleness +supplenesses +suppler +supples +supplest +suppletion +suppletions +suppletive +suppletory +suppliance +suppliances +suppliant +suppliantly +suppliants +supplicant +supplicants +supplicate +supplicated +supplicates +supplicating +supplication +supplications +supplicatory +supplied +supplier +suppliers +supplies +suppling supply +supplying support +supportabilities +supportability +supportable +supported +supporter +supporters +supporting +supportive +supportiveness +supportivenesses +supports +supposable +supposably +supposal +supposals suppose +supposed +supposedly +supposer +supposers +supposes +supposing +supposition +suppositional +suppositions +suppositious +supposititious +supposititiously +suppositories +suppository +suppress +suppressant +suppressants +suppressed +suppresses +suppressibilities +suppressibility +suppressible +suppressing +suppression +suppressions +suppressive +suppressiveness +suppressivenesses +suppressor +suppressors +suppurate +suppurated +suppurates +suppurating +suppuration +suppurations +suppurative +supra +supraliminal +supramolecular +supranational +supranationalism +supranationalisms +supranationalist +supranationalists +supranationalities +supranationality +supraoptic +supraorbital +suprarational +suprarenal +suprarenals +suprasegmental +supraventricular +supravital +supravitally +supremacies +supremacist +supremacists +supremacy +suprematism +suprematisms +suprematist +suprematists supreme +supremely +supremeness +supremenesses +supremer +supremest +supremo +supremos +sups +suq +suqs +sura +surah +surahs +sural +suras +surbase +surbased +surbases +surcease +surceased +surceases +surceasing +surcharge +surcharged +surcharges +surcharging +surcingle +surcingles +surcoat +surcoats +surd +surds sure +surefire +surefooted +surefootedly +surefootedness +surefootednesses +surely +sureness +surenesses +surer +surest +sureties +surety +suretyship +suretyships +surf +surfable surface +surfaced +surfacer +surfacers +surfaces +surfacing +surfacings +surfactant +surfactants +surfbird +surfbirds +surfboard +surfboarded +surfboarder +surfboarders +surfboarding +surfboards +surfboat +surfboats +surfed +surfeit +surfeited +surfeiter +surfeiters +surfeiting +surfeits +surfer +surfers +surffish +surffishes +surficial +surfier +surfiest +surfing +surfings +surflike +surfperch +surfperches +surfs +surfy +surge +surged surgeon +surgeonfish +surgeonfishes +surgeons +surger +surgeries +surgers +surgery +surges +surgical +surgically +surging +surgy +suricate +suricates +surimi +surjection +surjections +surjective +surlier +surliest +surlily +surliness +surlinesses +surly +surmise +surmised +surmiser +surmisers +surmises +surmising +surmount +surmountable +surmounted +surmounting +surmounts +surname +surnamed +surnamer +surnamers +surnames +surnaming +surpass +surpassable +surpassed +surpasses +surpassing +surpassingly +surplice +surplices surplus +surplusage +surplusages +surpluses +surprint +surprinted +surprinting +surprints +surprisal +surprisals surprise +surprised +surpriser +surprisers +surprises +surprising +surprisingly +surprize +surprized +surprizes +surprizing +surra +surras +surreal +surrealism +surrealisms +surrealist +surrealistic +surrealistically +surrealists +surreally +surrebutter +surrebutters +surrejoinder +surrejoinders +surrender +surrendered +surrendering +surrenders +surreptitious +surreptitiously +surrey +surreys +surrogacies +surrogacy +surrogate +surrogated +surrogates +surrogating surround +surrounded surrounding +surroundings +surrounds +surroyal +surroyals +surtax +surtaxed +surtaxes +surtaxing +surtout +surtouts +surveil +surveillance +surveillances +surveillant +surveillants +surveilled +surveilling +surveils +survey +surveyed +surveying +surveyings +surveyor +surveyors +surveys +survivabilities +survivability +survivable survival +survivalist +survivalists +survivals +survivance +survivances survive +survived +surviver +survivers +survives +surviving +survivor +survivors +survivorship +survivorships +susceptibilities +susceptibility +susceptible +susceptibleness +susceptiblenesses +susceptibly +susceptive +susceptiveness +susceptivenesses +susceptivities +susceptivity +sushi +sushis +suslik +susliks suspect +suspected +suspecting +suspects +suspend +suspended +suspender +suspendered +suspenders +suspending +suspends +suspense +suspenseful +suspensefully +suspensefulness +suspensefulnesses +suspenseless +suspenser +suspensers +suspenses suspension +suspensions +suspensive +suspensively +suspensor +suspensories +suspensors +suspensory +suspicion +suspicioned +suspicioning +suspicions +suspicious +suspiciously +suspiciousness +suspiciousnesses +suspiration +suspirations +suspire +suspired +suspires +suspiring +suss +sussed +susses +sussing +sustain +sustainabilities +sustainability +sustainable +sustained +sustainedly +sustainer +sustainers +sustaining +sustains +sustenance +sustenances +sustentation +sustentations +sustentative +susurrant +susurration +susurrations +susurrous +susurrus +susurruses +sutler +sutlers +sutra +sutras +sutta +suttas +suttee +suttees +sutural +suturally +suture +sutured +sutures +suturing +suzerain +suzerains +suzerainties +suzerainty +svaraj +svarajes +svedberg +svedbergs +svelte +sveltely +svelteness +sveltenesses +svelter +sveltest +swab +swabbed +swabber +swabbers +swabbie +swabbies +swabbing +swabby +swabs +swacked +swaddle +swaddled +swaddles +swaddling +swag +swage +swaged +swager +swagers +swages +swagged +swagger +swaggered +swaggerer +swaggerers +swaggering +swaggeringly +swaggers +swaggie +swaggies +swagging +swaging +swagman +swagmen +swags +swail +swails +swain +swainish +swainishness +swainishnesses +swains +swale +swales swallow +swallowable +swallowed +swallower +swallowers +swallowing +swallows +swallowtail +swallowtails +swam +swami +swamies +swamis +swamp +swamped +swamper +swampers +swampier +swampiest +swampiness +swampinesses +swamping +swampish +swampland +swamplands +swamps +swampy +swamy +swan +swang +swanherd +swanherds +swank +swanked +swanker +swankest +swankier +swankiest +swankily +swankiness +swankinesses +swanking +swanks +swanky +swanlike +swanned +swanneries +swannery +swanning +swanpan +swanpans +swans +swansdown +swansdowns +swanskin +swanskins swap +swapped +swapper +swappers +swapping +swaps +swaraj +swarajes +swarajist +swarajists +sward +swarded +swarding +swards +sware +swarf +swarfs +swarm +swarmed +swarmer +swarmers +swarming +swarms +swart +swarth +swarthier +swarthiest +swarthiness +swarthinesses +swarths +swarthy +swartness +swartnesses +swarty +swash +swashbuckle +swashbuckled +swashbuckler +swashbucklers +swashbuckles +swashbuckling +swashed +swasher +swashers +swashes +swashing +swastica +swasticas +swastika +swastikas +swat +swatch +swatches +swath +swathe +swathed +swather +swathers +swathes +swathing +swaths +swats +swatted +swatter +swatters +swatting +sway +swayable +swayback +swaybacked +swaybacks +swayed +swayer +swayers +swayful +swaying +sways swear +swearer +swearers +swearing +swears +swearword +swearwords sweat +sweatband +sweatbands +sweatbox +sweatboxes +sweated sweater +sweaterdress +sweaterdresses +sweaters +sweatier +sweatiest +sweatily +sweatiness +sweatinesses +sweating +sweatpants +sweats +sweatshirt +sweatshirts +sweatshop +sweatshops +sweaty +swede +swedes +sweenies +sweeny sweep +sweepback +sweepbacks +sweeper +sweepers +sweepier +sweepiest +sweeping +sweepingly +sweepingness +sweepingnesses +sweepings +sweeps +sweepstakes +sweepy +sweer sweet +sweetbread +sweetbreads +sweetbriar +sweetbriars +sweetbrier +sweetbriers +sweeten +sweetened +sweetener +sweeteners +sweetening +sweetenings +sweetens +sweeter +sweetest +sweetheart +sweethearts +sweetie +sweeties +sweeting +sweetings +sweetish +sweetishly +sweetly +sweetmeat +sweetmeats +sweetness +sweetnesses +sweets +sweetshop +sweetshops +sweetsop +sweetsops swell +swelled +sweller +swellest +swellfish +swellfishes +swellhead +swellheaded +swellheadedness +swellheadednesses +swellheads +swelling +swellings +swells +swelter +sweltered +sweltering +swelteringly +swelters +sweltrier +sweltriest +sweltry +swept +swerve +swerved +swerver +swervers +swerves +swerving +sweven +swevens +swidden +swiddens swift +swifter +swifters +swiftest +swiftlet +swiftlets +swiftly +swiftness +swiftnesses +swifts +swig +swigged +swigger +swiggers +swigging +swigs +swill +swilled +swiller +swillers +swilling +swills swim +swimmable +swimmer +swimmeret +swimmerets +swimmers +swimmier +swimmiest +swimmily +swimming +swimmingly +swimmings +swimmy +swims +swimsuit +swimsuits +swimwear +swindle +swindled +swindler +swindlers +swindles +swindling +swine +swineherd +swineherds +swinepox +swinepoxes swing +swingby +swingbys +swinge +swinged +swingeing +swinger +swingers +swinges +swingier +swingiest +swinging +swingingest +swingingly +swingings +swingle +swingled +swingles +swingletree +swingletrees +swingling +swingman +swingmen +swings +swingy +swinish +swinishly +swinishness +swinishnesses +swink +swinked +swinking +swinks +swinney +swinneys +swipe +swiped +swipes +swiping +swiple +swiples +swipple +swipples +swirl +swirled +swirlier +swirliest +swirling +swirlingly +swirls +swirly +swish +swished +swisher +swishers +swishes +swishier +swishiest +swishing +swishingly +swishy +swiss +swisses switch +switchable +switchback +switchbacked +switchbacking +switchbacks +switchblade +switchblades +switchboard +switchboards +switched +switcher +switcheroo +switcheroos +switchers +switches +switchgrass +switchgrasses +switching +switchman +switchmen +switchyard +switchyards +swith +swithe +swither +swithered +swithering +swithers +swithly +swive +swived +swivel +swiveled +swiveling +swivelled +swivelling +swivels +swives +swivet +swivets +swiving +swizzle +swizzled +swizzler +swizzlers +swizzles +swizzling +swob +swobbed +swobber +swobbers +swobbing +swobs +swollen +swoon +swooned +swooner +swooners +swooning +swooningly +swoons +swoop +swooped +swooper +swoopers +swooping +swoops +swoopstake +swoosh +swooshed +swooshes +swooshing +swop +swopped +swopping +swops sword +swordfish +swordfishes +swordlike +swordman +swordmen +swordplay +swordplayer +swordplayers +swordplays +swords +swordsman +swordsmanship +swordsmanships +swordsmen +swordtail +swordtails +swore +sworn +swot +swots +swotted +swotter +swotters +swotting +swoun +swound +swounded +swounding +swounds +swouned +swouning +swouns +swum +swung +sybarite +sybarites +sybaritic +sybaritically +sybaritism +sybaritisms +sybo +syboes +sycamine +sycamines +sycamore +sycamores +syce +sycee +sycees +syces +sycomore +sycomores +syconia +syconium +sycophancies +sycophancy +sycophant +sycophantic +sycophantically +sycophantish +sycophantishly +sycophantism +sycophantisms +sycophantly +sycophants +sycoses +sycosis +syenite +syenites +syenitic +syke +sykes +syli +sylis +syllabaries +syllabary +syllabi +syllabic +syllabically +syllabicate +syllabicated +syllabicates +syllabicating +syllabication +syllabications +syllabicities +syllabicity +syllabics +syllabification +syllabifications +syllabified +syllabifies +syllabify +syllabifying +syllable +syllabled +syllables +syllabling +syllabub +syllabubs +syllabus +syllabuses +syllepses +syllepsis +sylleptic +syllogism +syllogisms +syllogist +syllogistic +syllogistically +syllogists +syllogize +syllogized +syllogizes +syllogizing +sylph +sylphic +sylphid +sylphids +sylphish +sylphlike +sylphs +sylphy +sylva +sylvae +sylvan +sylvanite +sylvanites +sylvans +sylvas +sylvatic +sylviculture +sylvicultures +sylvin +sylvine +sylvines +sylvins +sylvite +sylvites +symbion +symbions +symbiont +symbionts +symbioses +symbiosis +symbiot +symbiote +symbiotes +symbiotic +symbiotically +symbiots symbol +symboled +symbolic +symbolical +symbolically +symboling +symbolise +symbolised +symbolises +symbolising +symbolism +symbolisms +symbolist +symbolistic +symbolists +symbolization +symbolizations +symbolize +symbolized +symbolizer +symbolizers +symbolizes +symbolizing +symbolled +symbolling +symbologies +symbology +symbols +symmetallism +symmetallisms +symmetric +symmetrical +symmetrically +symmetricalness +symmetricalnesses +symmetries +symmetrization +symmetrizations +symmetrize +symmetrized +symmetrizes +symmetrizing +symmetry +sympathectomies +sympathectomized +sympathectomy +sympathetic +sympathetically +sympathetics +sympathies +sympathin +sympathins +sympathise +sympathised +sympathises +sympathising +sympathize +sympathized +sympathizer +sympathizers +sympathizes +sympathizing +sympatholytic +sympatholytics +sympathomimetic +sympathomimetics sympathy +sympatric +sympatrically +sympatries +sympatry +sympetalies +sympetalous +sympetaly +symphonic +symphonically +symphonies +symphonious +symphoniously +symphonist +symphonists symphony +symphyseal +symphyses +symphysial +symphysis +sympodia +sympodial +sympodium +symposia +symposiarch +symposiarchs +symposiast +symposiasts +symposium +symposiums symptom +symptomatic +symptomatically +symptomatologic +symptomatological +symptomatologically +symptomatologies +symptomatology +symptomless +symptoms +syn +synaereses +synaeresis +synaestheses +synaesthesia +synaesthesias +synaesthesis +synagog +synagogal +synagogs +synagogue +synagogues +synalepha +synalephas +synaloepha +synaloephas +synanon +synanons +synapse +synapsed +synapses +synapsid +synapsids +synapsing +synapsis +synaptic +synaptically +synaptosomal +synaptosome +synaptosomes +synarthrodial +synarthroses +synarthrosis +sync +syncarp +syncarpies +syncarpous +syncarps +syncarpy +syncategorematic +syncategorematically +synced +synch +synched +synching +synchro +synchrocyclotron +synchrocyclotrons +synchromesh +synchromeshes +synchronal +synchroneities +synchroneity +synchronic +synchronical +synchronically +synchronicities +synchronicity +synchronies +synchronisation +synchronisations +synchronise +synchronised +synchronises +synchronising +synchronism +synchronisms +synchronistic +synchronization +synchronizations +synchronize +synchronized +synchronizer +synchronizers +synchronizes +synchronizing +synchronous +synchronously +synchronousness +synchronousnesses +synchrony +synchros +synchroscope +synchroscopes +synchrotron +synchrotrons +synchs +syncing +synclinal +syncline +synclines +syncom +syncoms +syncopal +syncopate +syncopated +syncopates +syncopating +syncopation +syncopations +syncopative +syncopator +syncopators +syncope +syncopes +syncopic +syncretic +syncretise +syncretised +syncretises +syncretising +syncretism +syncretisms +syncretist +syncretistic +syncretists +syncretize +syncretized +syncretizes +syncretizing +syncs +syncytia +syncytial +syncytium +syndactylies +syndactylism +syndactylisms +syndactyly +syndeses +syndesis +syndesises +syndesmoses +syndesmosis +syndet +syndetic +syndetically +syndets +syndic +syndical +syndicalism +syndicalisms +syndicalist +syndicalists +syndicate +syndicated +syndicates +syndicating +syndication +syndications +syndicator +syndicators +syndics +syndrome +syndromes +syne +synecdoche +synecdoches +synecdochic +synecdochical +synecdochically +synecological +synecologies +synecology +synectic +synereses +syneresis +synergetic +synergia +synergias +synergic +synergically +synergid +synergids +synergies +synergism +synergisms +synergist +synergistic +synergistically +synergists +synergy +synesis +synesises +synesthesia +synesthesias +synesthetic +synfuel +synfuels +syngamic +syngamies +syngamy +syngas +syngases +syngasses +syngeneic +synizeses +synizesis +synkaryon +synkaryons +synod +synodal +synodic +synodical +synods +synonym +synonyme +synonymes +synonymic +synonymical +synonymies +synonymist +synonymists +synonymities +synonymity +synonymize +synonymized +synonymizes +synonymizing +synonymous +synonymously +synonyms +synonymy +synopses +synopsis +synopsize +synopsized +synopsizes +synopsizing +synoptic +synoptical +synoptically +synostoses +synostosis +synovia +synovial +synovias +synovitis +synovitises +syntactic +syntactical +syntactically +syntactics +syntagma +syntagmas +syntagmata +syntagmatic +syntax +syntaxes +synth +syntheses +synthesis +synthesist +synthesists +synthesize +synthesized +synthesizer +synthesizers +synthesizes +synthesizing +synthetase +synthetases +synthetic +synthetically +synthetics +synths +syntonic +syntonies +syntony +synura +synurae +syph +sypher +syphered +syphering +syphers +syphilis +syphilises +syphilitic +syphilitics +syphon +syphoned +syphoning +syphons +syphs +syren +syrens +syringa +syringas +syringe +syringed +syringes +syringing +syringomyelia +syringomyelias +syringomyelic +syrinx +syrinxes +syrphian +syrphians +syrphid +syrphids +syrup +syrups +syrupy +sysop +sysops +systaltic system systematic +systematically +systematicness +systematicnesses +systematics +systematise +systematised +systematises +systematising +systematism +systematisms +systematist +systematists +systematization +systematizations +systematize +systematized +systematizer +systematizers +systematizes +systematizing +systemic +systemically +systemics +systemization +systemizations +systemize +systemized +systemizes +systemizing +systemless +systems +systole +systoles +systolic +syzygal +syzygial +syzygies +syzygy +ta +tab +tabanid +tabanids +tabard +tabarded +tabards +tabaret +tabarets +tabbed +tabbied +tabbies +tabbing +tabbis +tabbises +tabbouleh +tabboulehs +tabby +tabbying +taber +tabered +tabering +tabernacle +tabernacled +tabernacles +tabernacling +tabernacular +tabers +tabes +tabetic +tabetics +tabid +tabla +tablas +tablature +tablatures table +tableau +tableaus +tableaux +tablecloth +tablecloths +tabled +tableful +tablefuls +tableland +tablelands +tablemate +tablemates +tables +tablesful +tablespoon +tablespoonful +tablespoonfuls +tablespoons +tablespoonsful tablet +tableted +tableting +tabletop +tabletops +tablets +tabletted +tabletting +tableware +tablewares +tabling +tabloid +tabloids +taboo +tabooed +tabooing +tabooley +tabooleys +taboos +tabor +tabored +taborer +taborers +taboret +taborets +taborin +taborine +taborines +taboring +taborins +tabors +tabouli +taboulis +tabour +taboured +tabourer +tabourers +tabouret +tabourets +tabouring +tabours +tabs +tabu +tabued +tabuing +tabular +tabulate +tabulated +tabulates +tabulating +tabulation +tabulations +tabulator +tabulators +tabuli +tabulis +tabun +tabuns +tabus +tacamahac +tacamahacs +tace +taces +tacet +tach +tache +taches +tachinid +tachinids +tachism +tachisme +tachismes +tachisms +tachist +tachiste +tachistes +tachistoscope +tachistoscopes +tachistoscopic +tachistoscopically +tachists +tachometer +tachometers +tachs +tachyarrhythmia +tachyarrhythmias +tachycardia +tachycardias +tachyon +tachyons +tacit +tacitly +tacitness +tacitnesses +taciturn +taciturnities +taciturnity +tack +tackboard +tackboards +tacked +tacker +tackers +tacket +tackets +tackey +tackier +tackiest +tackified +tackifier +tackifiers +tackifies +tackify +tackifying +tackily +tackiness +tackinesses +tacking +tackle +tackled +tackler +tacklers +tackles +tackless +tackling +tacklings +tacks +tacky +tacnode +tacnodes +taco +taconite +taconites +tacos +tact +tactful +tactfully +tactfulness +tactfulnesses +tactic +tactical +tactically +tactician +tacticians +tactics +tactile +tactilely +tactilities +tactility +taction +tactions +tactless +tactlessly +tactlessness +tactlessnesses +tacts +tactual +tactually +tad +tadpole +tadpoles +tads +tae +tael +taels +taenia +taeniae +taenias +taeniases +taeniasis +taffarel +taffarels +tafferel +tafferels +taffeta +taffetas +taffetized +taffia +taffias +taffies +taffrail +taffrails +taffy +tafia +tafias +tag +tagalong +tagalongs +tagboard +tagboards +tagged +tagger +taggers +tagging +tagliatelle +tagliatelles +taglike +tagmeme +tagmemes +tagmemic +tagrag +tagrags +tags +tahini +tahinis +tahr +tahrs +tahsil +tahsils +taiga +taigas +taiglach tail +tailback +tailbacks +tailboard +tailboards +tailbone +tailbones +tailcoat +tailcoated +tailcoats +tailed +tailender +tailenders +tailer +tailers +tailfan +tailfans +tailgate +tailgated +tailgater +tailgaters +tailgates +tailgating +tailing +tailings +taillamp +taillamps +taille +tailles +tailless +tailleur +tailleurs +taillight +taillights +taillike tailor +tailorbird +tailorbirds +tailored +tailoring +tailorings +tailors +tailpiece +tailpieces +tailpipe +tailpipes +tailplane +tailplanes +tailrace +tailraces +tails +tailskid +tailskids +tailslide +tailslides +tailspin +tailspins +tailwater +tailwaters +tailwind +tailwinds +tain +tains +taint +tainted +tainting +taintless +taints +taipan +taipans +taj +tajes +taka +takable +takahe +takahes take +takeable +takeaway +takedown +takedowns +taken +takeoff +takeoffs +takeout +takeouts +takeover +takeovers +taker +takers +takes +takeup +takeups +takin +taking +takingly +takings +takins +tala +talapoin +talapoins +talar +talaria +talars +talas +talc +talced +talcing +talcked +talcking +talcky +talcose +talcous +talcs +talcum +talcums tale +talebearer +talebearers +talebearing +talebearings talent +talented +talentless +talents +taler +talers +tales +talesman +talesmen +taleysim +tali +talion +talions +taliped +talipeds +talipes +talipot +talipots +talisman +talismanic +talismanically +talismans talk +talkable +talkathon +talkathons +talkative +talkatively +talkativeness +talkativenesses +talked +talker +talkers +talkfests +talkie +talkier +talkies +talkiest +talkiness +talkinesses +talking +talkings +talks +talky tall +tallage +tallaged +tallages +tallaging +tallaisim +tallboy +tallboys +taller +tallest +tallied +tallier +talliers +tallies +tallis +tallish +tallisim +tallit +tallith +tallithes +tallithim +tallitim +tallitoth +tallness +tallnesses +tallol +tallols +tallow +tallowed +tallowing +tallows +tallowy +tally +tallyho +tallyhoed +tallyhoing +tallyhos +tallying +tallyman +tallymen +talmudic +talmudism +talmudisms +talon +taloned +talons +talooka +talookas +taluk +taluka +talukas +taluks +talus +taluses +tam +tamable +tamal +tamale +tamales +tamals +tamandu +tamandua +tamanduas +tamandus +tamarack +tamaracks +tamarao +tamaraos +tamarau +tamaraus +tamari +tamarillo +tamarillos +tamarin +tamarind +tamarinds +tamarins +tamaris +tamarisk +tamarisks +tamasha +tamashas +tambac +tambacs +tambak +tambaks +tambala +tambalas +tambour +tamboura +tambouras +tamboured +tambourer +tambourers +tambourine +tambourines +tambouring +tambours +tambur +tambura +tamburas +tamburs +tame +tameable +tamed +tamein +tameins +tameless +tamely +tameness +tamenesses +tamer +tamers +tames +tamest +taming +tamis +tamises +tammie +tammies +tammy +tamoxifen +tamoxifens +tamp +tampala +tampalas +tampan +tampans +tamped +tamper +tampered +tamperer +tamperers +tampering +tamperproof +tampers +tamping +tampion +tampions +tampon +tamponed +tamponing +tampons +tamps +tams +tan +tanager +tanagers +tanbark +tanbarks +tandem +tandems +tandoor +tandoori +tang +tanged +tangelo +tangelos +tangence +tangences +tangencies +tangency +tangent +tangential +tangentially +tangents +tangerine +tangerines +tangibilities +tangibility +tangible +tangibleness +tangiblenesses +tangibles +tangibly +tangier +tangiest +tanging +tangle +tangled +tanglement +tanglements +tangler +tanglers +tangles +tanglier +tangliest +tangling +tangly +tango +tangoed +tangoing +tangos +tangram +tangrams +tangs +tangy +tanist +tanistries +tanistry +tanists tank +tanka +tankage +tankages +tankard +tankards +tankas +tanked +tanker +tankers +tankful +tankfuls +tanking +tanklike +tanks +tankship +tankships +tannable +tannage +tannages +tannate +tannates +tanned +tanner +tanneries +tanners +tannery +tannest +tannic +tannin +tanning +tannings +tannins +tannish +tanrec +tanrecs +tans +tansies +tansy +tantalate +tantalates +tantalic +tantalise +tantalised +tantalises +tantalising +tantalite +tantalites +tantalize +tantalized +tantalizer +tantalizers +tantalizes +tantalizing +tantalizingly +tantalum +tantalums +tantalus +tantaluses +tantamount +tantara +tantaras +tantivies +tantivy +tanto +tantra +tantras +tantric +tantrum +tantrums +tanuki +tanukis +tanyard +tanyards +tanzanite +tanzanites +tao +taos tap +tapa +tapadera +tapaderas +tapadero +tapaderos +tapalo +tapalos +tapas tape +taped +tapeless +tapelike +tapeline +tapelines +taper +tapered +taperer +taperers +tapering +tapers +taperstick +tapersticks +tapes +tapestried +tapestries +tapestry +tapestrying +tapeta +tapetal +tapetum +tapeworm +tapeworms +taphole +tapholes +taphonomic +taphonomies +taphonomist +taphonomists +taphonomy +taphouse +taphouses +taping +tapioca +tapiocas +tapir +tapirs +tapis +tapises +tapped +tapper +tappers +tappet +tappets +tapping +tappings +taproom +taprooms +taproot +taproots +taps +tapster +tapsters +tar +taradiddle +taradiddles +tarama +taramas +tarantas +tarantases +tarantella +tarantellas +tarantism +tarantisms +tarantula +tarantulae +tarantulas +tarboosh +tarbooshes +tarbush +tarbushes +tardier +tardies +tardiest +tardigrade +tardigrades +tardily +tardiness +tardinesses +tardo +tardy +tardyon +tardyons +tare +tared +tares +targe +targes target +targetable +targeted +targeting +targets +tariff +tariffed +tariffing +tariffs +taring +tarlatan +tarlatans +tarletan +tarletans +tarmac +tarmacadam +tarmacadams +tarmacs +tarn +tarnal +tarnally +tarnation +tarnations +tarnish +tarnishable +tarnished +tarnishes +tarnishing +tarns +taro +taroc +tarocs +tarok +taroks +taros +tarot +tarots +tarp +tarpan +tarpans +tarpaper +tarpapers +tarpaulin +tarpaulins +tarpon +tarpons +tarps +tarradiddle +tarradiddles +tarragon +tarragons +tarre +tarred +tarres +tarriance +tarriances +tarried +tarrier +tarriers +tarries +tarriest +tarring +tarry +tarrying +tars +tarsal +tarsals +tarsi +tarsia +tarsias +tarsier +tarsiers +tarsometatarsi +tarsometatarsus +tarsus +tart +tartan +tartana +tartanas +tartans +tartar +tartaric +tartars +tarted +tarter +tartest +tarting +tartish +tartlet +tartlets +tartly +tartness +tartnesses +tartrate +tartrates +tarts +tartufe +tartufes +tartuffe +tartuffes +tarty +tarweed +tarweeds +tarzan +tarzans +tas task +tasked +tasking +taskmaster +taskmasters +taskmistress +taskmistresses +tasks +taskwork +taskworks +tass +tasse +tassel +tasseled +tasseling +tasselled +tasselling +tassels +tasses +tasset +tassets +tassie +tassies +tastable taste +tasted +tasteful +tastefully +tastefulness +tastefulnesses tasteless +tastelessly +tastelessness +tastelessnesses +tastemaker +tastemakers +taster +tasters +tastes +tastier +tastiest +tastily +tastiness +tastinesses +tasting tasty +tat +tatami +tatamis +tatar +tatars +tate +tater +taters +tates +tatouay +tatouays +tats +tatted +tatter +tatterdemalion +tatterdemalions +tattered +tattering +tatters +tattersall +tattersalls +tattie +tattier +tatties +tattiest +tattily +tattiness +tattinesses +tatting +tattings +tattle +tattled +tattler +tattlers +tattles +tattletale +tattletales +tattling +tattoo +tattooed +tattooer +tattooers +tattooing +tattooist +tattooists +tattoos +tatty +tau +taught +taunt +taunted +taunter +taunters +taunting +tauntingly +taunts +taupe +taupes +taurine +taurines +taus +taut +tautaug +tautaugs +tauted +tauten +tautened +tautening +tautens +tauter +tautest +tauting +tautly +tautness +tautnesses +tautog +tautogs +tautological +tautologically +tautologies +tautologous +tautologously +tautology +tautomer +tautomeric +tautomerism +tautomerisms +tautomers +tautonym +tautonymies +tautonyms +tautonymy +tauts +tav +tavern +taverna +tavernas +taverner +taverners +taverns +tavs +taw +tawdrier +tawdries +tawdriest +tawdrily +tawdriness +tawdrinesses +tawdry +tawed +tawer +tawers +tawie +tawing +tawney +tawneys +tawnier +tawnies +tawniest +tawnily +tawniness +tawninesses +tawny +tawpie +tawpies +taws +tawse +tawsed +tawses +tawsing tax +taxa +taxable +taxables +taxably +taxation +taxations +taxed +taxeme +taxemes +taxemic +taxer +taxers +taxes taxi +taxicab +taxicabs +taxidermic +taxidermies +taxidermist +taxidermists +taxidermy +taxied +taxies +taxiing +taximan +taximen +taximeter +taximeters +taxing +taxingly +taxis +taxite +taxites +taxitic +taxiway +taxiways +taxless +taxman +taxmen +taxon +taxonomic +taxonomically +taxonomies +taxonomist +taxonomists +taxonomy +taxons +taxpaid taxpayer +taxpayers +taxpaying +taxus +taxwise +taxying +tazza +tazzas +tazze +tchotchke +tchotchkes tea +teaberries +teaberry +teaboard +teaboards +teabowl +teabowls +teabox +teaboxes +teacake +teacakes +teacart +teacarts teach +teachable +teachableness +teachablenesses +teachably teacher +teacherly +teachers +teaches +teaching +teachings +teacup +teacupful +teacupfuls +teacups +teacupsful +teahouse +teahouses +teak +teakettle +teakettles +teaks +teakwood +teakwoods +teal +tealike +teals team +teamaker +teamakers +teamed +teaming +teammate +teammates +teams +teamster +teamsters teamwork +teamworks teapot +teapots +teapoy +teapoys tear +tearable +tearaway +tearaways +teardown +teardowns +teardrop +teardrops +teared +tearer +tearers +tearful +tearfully +tearfulness +tearfulnesses +teargas +teargases +teargassed +teargasses +teargassing +tearier +teariest +tearily +tearing +tearjerker +tearjerkers +tearless +tearoom +tearooms +tears +tearstain +tearstained +tearstains +teary +teas tease +teased +teasel +teaseled +teaseler +teaselers +teaseling +teaselled +teaselling +teasels +teaser +teasers +teases +teashop +teashops +teasing +teasingly +teaspoon +teaspoonful +teaspoonfuls +teaspoons +teaspoonsful +teat +teated +teatime +teatimes +teats +teaware +teawares +teazel +teazeled +teazeling +teazelled +teazelling +teazels +teazle +teazled +teazles +teazling +teched +techie +techier +techies +techiest +techily +technetium +technetiums +technetronic +technic technical +technicalities +technicality +technicalization +technicalizations +technicalize +technicalized +technicalizes +technicalizing +technically +technicals +technician +technicians +technics technique +techniques +technobabble +technobabbles +technocracies +technocracy +technocrat +technocratic +technocrats +technologic +technological +technologically +technologies +technologist +technologists +technologize +technologized +technologizes +technologizing technology +technophile +technophiles +technophobe +technophobes +technophobia +technophobias +technophobic +technostructure +technostructures +techy +tecta +tectal +tectite +tectites +tectonic +tectonically +tectonics +tectonism +tectonisms +tectrices +tectrix +tectum +ted +tedded +tedder +tedders +teddies +tedding +teddy +tedious +tediously +tediousness +tediousnesses +tedium +tediums +teds +tee +teed +teeing +teel +teels +teem +teemed +teemer +teemers +teeming +teemingly +teemingness +teemingnesses +teems +teen +teenage +teenaged teenager +teenagers +teener +teeners +teenful +teenier +teeniest +teens +teensier +teensiest +teensy +teentsier +teentsiest +teentsy +teeny +teenybop +teenybopper +teenyboppers +teepee +teepees +tees +teeter +teeterboard +teeterboards +teetered +teetering +teeters +teeth +teethe +teethed +teether +teethers +teethes +teething +teethings +teethridge +teethridges +teetotal +teetotaled +teetotaler +teetotalers +teetotaling +teetotalism +teetotalisms +teetotalist +teetotalists +teetotalled +teetotaller +teetotallers +teetotalling +teetotally +teetotals +teetotum +teetotums +teff +teffs +tefillin +teg +tegmen +tegmenta +tegmental +tegmentum +tegmina +tegminal +tegs +tegua +teguas +tegular +tegumen +tegument +teguments +tegumina +teiglach +teiid +teiids +teind +teinds +tektite +tektites +tektitic +tel +tela +telae +telamon +telamones +telangiectases +telangiectasia +telangiectasias +telangiectasis +telangiectatic +tele +telecast +telecasted +telecaster +telecasters +telecasting +telecasts +telecommunication +telecommunications +telecommute +telecommuted +telecommuter +telecommuters +telecommutes +telecommuting +teleconference +teleconferenced +teleconferences +teleconferencing +teleconferencings +telecourse +telecourses +teledu +teledus +telefacsimile +telefacsimiles +telefilm +telefilms +telega +telegas +telegenic +telegonies +telegony +telegram +telegrammed +telegramming +telegrams +telegraph +telegraphed +telegrapher +telegraphers +telegraphese +telegrapheses +telegraphic +telegraphically +telegraphies +telegraphing +telegraphist +telegraphists +telegraphs +telegraphy +telekineses +telekinesis +telekinetic +telekinetically +teleman +telemark +telemarketer +telemarketers +telemarketing +telemarketings +telemarks +telemen +telemeter +telemetered +telemetering +telemeters +telemetric +telemetrically +telemetries +telemetry +telencephala +telencephalic +telencephalon +telencephalons +teleologic +teleological +teleologically +teleologies +teleologist +teleologists +teleology +teleonomic +teleonomies +teleonomy +teleost +teleostean +teleosts +telepath +telepathic +telepathically +telepathies +telepaths +telepathy telephone +telephoned +telephoner +telephoners +telephones +telephonic +telephonically +telephonies +telephoning +telephonist +telephonists +telephony +telephoto +telephotographies +telephotography +telephotos +teleplay +teleplays +teleport +teleportation +teleportations +teleported +teleporting +teleports +teleprinter +teleprinters +teleprocessing +teleprocessings +teleran +telerans +teles telescope +telescoped +telescopes +telescopic +telescopically +telescoping +teleses +telesis +telestic +telestics +teletext +teletexts +telethon +telethons +teletypewriter +teletypewriters +teleutospore +teleutospores +televangelism +televangelisms +televangelist +televangelists +teleview +televiewed +televiewer +televiewers +televiewing +televiews +televise +televised +televises +televising television +televisions +televisual +telex +telexed +telexes +telexing +telfer +telfered +telfering +telfers +telford +telfords +telia +telial +telic +telically +teliospore +teliospores +telium tell +tellable +teller +tellers +tellies +telling +tellingly +tells +telltale +telltales +telluric +telluride +tellurides +tellurium +telluriums +tellurometer +tellurometers +telly +tellys +telocentric +telocentrics +teloi +telome +telomere +telomeres +telomes +telomic +telophase +telophases +telos +telotaxes +telotaxis +telpher +telphered +telphering +telphers +tels +telson +telsonic +telsons +temblor +temblores +temblors +temerarious +temerariously +temerariousness +temerariousnesses +temerities +temerity +temp +temped +tempeh +tempehs +temper +tempera +temperable +temperament +temperamental +temperamentally +temperaments +temperance +temperances +temperas +temperate +temperately +temperateness +temperatenesses temperature +temperatures +tempered +temperer +temperers +tempering +tempers +tempest +tempested +tempesting +tempests +tempestuous +tempestuously +tempestuousness +tempestuousnesses +tempi +temping +templar +templars +template +templates temple +templed +temples +templet +templets +tempo +temporal +temporalities +temporality +temporalize +temporalized +temporalizes +temporalizing +temporally +temporals +temporaries +temporarily +temporariness +temporarinesses temporary +temporise +temporised +temporises +temporising +temporization +temporizations +temporize +temporized +temporizer +temporizers +temporizes +temporizing +temporomandibular +tempos +temps +tempt +temptable +temptation +temptations +tempted +tempter +tempters +tempting +temptingly +temptress +temptresses +tempts +tempura +tempuras +ten +tenabilities +tenability +tenable +tenableness +tenablenesses +tenably +tenace +tenaces +tenacious +tenaciously +tenaciousness +tenaciousnesses +tenacities +tenacity +tenacula +tenaculum +tenaculums +tenail +tenaille +tenailles +tenails +tenancies +tenancy +tenant +tenantable +tenanted +tenanting +tenantless +tenantries +tenantry +tenants +tench +tenches tend +tendance +tendances +tended +tendence +tendences +tendencies +tendencious tendency +tendentious +tendentiously +tendentiousness +tendentiousnesses +tender +tendered +tenderer +tenderers +tenderest +tenderfeet +tenderfoot +tenderfoots +tenderhearted +tenderheartedly +tenderheartedness +tenderheartednesses +tendering +tenderization +tenderizations +tenderize +tenderized +tenderizer +tenderizers +tenderizes +tenderizing +tenderloin +tenderloins +tenderly +tenderness +tendernesses +tenderometer +tenderometers +tenders +tending +tendinites +tendinitides +tendinitis +tendinitises +tendinous +tendon +tendonites +tendonitides +tendonitis +tendonitises +tendons +tendresse +tendresses +tendril +tendriled +tendrilled +tendrilous +tendrils +tends +tenebrae +tenebrific +tenebrionid +tenebrionids +tenebrious +tenebrism +tenebrisms +tenebrist +tenebrists +tenebrous +tenement +tenements +tenesmic +tenesmus +tenesmuses +tenet +tenets +tenfold +tenfolds +tenia +teniae +tenias +teniases +teniasis +tenner +tenners +tennies tennis +tennises +tennist +tennists +tenon +tenoned +tenoner +tenoners +tenoning +tenons +tenor +tenorist +tenorists +tenorite +tenorites +tenors +tenosynovitis +tenosynovitises +tenotomies +tenotomy +tenour +tenours +tenpence +tenpences +tenpenny +tenpin +tenpins +tenpounder +tenpounders +tenrec +tenrecs +tens tense +tensed +tensely +tenseness +tensenesses +tenser +tenses +tensest +tensible +tensibly +tensile +tensilities +tensility +tensing +tensiometer +tensiometers +tensiometric +tensiometries +tensiometry tension +tensional +tensioned +tensioner +tensioners +tensioning +tensionless +tensions +tensities +tensity +tensive +tensor +tensors tent +tentacle +tentacled +tentacles +tentacular +tentage +tentages tentative +tentatively +tentativeness +tentativenesses +tentatives +tented +tenter +tentered +tenterhook +tenterhooks +tentering +tenters +tenth +tenthly +tenths +tentie +tentier +tentiest +tenting +tentless +tentlike +tents +tenty +tenues +tenuis +tenuities +tenuity +tenuous +tenuously +tenuousness +tenuousnesses +tenurable +tenure +tenured +tenures +tenurial +tenurially +tenuti +tenuto +tenutos +teocalli +teocallis +teopan +teopans +teosinte +teosintes +tepa +tepal +tepals +tepas +tepee +tepees +tepefied +tepefies +tepefy +tepefying +tephra +tephras +tephrite +tephrites +tepid +tepidities +tepidity +tepidly +tepidness +tepidnesses +tepoy +tepoys +tequila +tequilas +terai +terais +teraohm +teraohms +teraph +teraphim +teratism +teratisms +teratocarcinoma +teratocarcinomas +teratocarcinomata +teratogen +teratogeneses +teratogenesis +teratogenic +teratogenicities +teratogenicity +teratogens +teratoid +teratologic +teratological +teratologies +teratologist +teratologists +teratology +teratoma +teratomas +teratomata +terawatt +terawatts +terbia +terbias +terbic +terbium +terbiums +terce +tercel +tercelet +tercelets +tercels +tercentenaries +tercentenary +tercentennial +tercentennials +terces +tercet +tercets +terebene +terebenes +terebic +terebinth +terebinths +teredines +teredo +teredos +terefah +terephthalate +terephthalates +terete +terga +tergal +tergite +tergites +tergiversate +tergiversated +tergiversates +tergiversating +tergiversation +tergiversations +tergiversator +tergiversators +tergum +teriyaki +teriyakis term +termagant +termagants +termed +termer +termers +terminable +terminableness +terminablenesses +terminably terminal +terminally +terminals +terminate +terminated +terminates +terminating +termination +terminational +terminations +terminative +terminatively +terminator +terminators +terming +termini +terminological +terminologically +terminologies +terminology +terminus +terminuses +termitaria +termitaries +termitarium +termitary +termite +termites +termitic +termless +termly +termor +termors +terms +termtime +termtimes +tern +ternaries +ternary +ternate +ternately +terne +terneplate +terneplates +ternes +ternion +ternions +terns +terpene +terpeneless +terpenes +terpenic +terpenoid +terpenoids +terpineol +terpineols +terpinol +terpinols +terpolymer +terpolymers +terpsichorean +terra +terrace +terraced +terraces +terracing +terrae +terraform +terraformed +terraforming +terraforms +terrain +terrains +terrane +terranes +terrapin +terrapins +terraqueous +terraria +terrarium +terrariums +terras +terrases +terrazzo +terrazzos +terreen +terreens +terrella +terrellas +terrene +terrenes +terreplein +terrepleins +terrestrial +terrestrially +terrestrials +terret +terrets terrible +terribleness +terriblenesses +terribly +terricolous +terrier +terriers +terries +terrific +terrifically +terrified +terrifies terrify +terrifying +terrifyingly +terrigenous +terrine +terrines +territ +territorial +territorialism +territorialisms +territorialist +territorialists +territorialities +territoriality +territorialization +territorializations +territorialize +territorialized +territorializes +territorializing +territorially +territorials +territories +territory +territs terror +terrorise +terrorised +terrorises +terrorising +terrorism +terrorisms +terrorist +terroristic +terrorists +terrorization +terrorizations +terrorize +terrorized +terrorizes +terrorizing +terrorless +terrors +terry +terse +tersely +terseness +tersenesses +terser +tersest +tertial +tertials +tertian +tertians +tertiaries +tertiary +tervalent +tesla +teslas +tessellate +tessellated +tessellates +tessellating +tessellation +tessellations +tessera +tesseract +tesseracts +tesserae +tessitura +tessituras test +testa +testabilities +testability +testable +testaceous +testacies +testacy +testae +testament +testamentary +testaments +testate +testates +testator +testators +testatrices +testatrix +testcross +testcrossed +testcrosses +testcrossing +tested +testee +testees +tester +testers +testes +testicle +testicles +testicular +testier +testiest +testified +testifier +testifiers +testifies +testify +testifying +testily +testimonial +testimonials +testimonies +testimony +testiness +testinesses +testing +testis +teston +testons +testoon +testoons +testosterone +testosterones +tests +testudines +testudo +testudos +testy +tet +tetanal +tetanic +tetanically +tetanics +tetanies +tetanise +tetanised +tetanises +tetanising +tetanization +tetanizations +tetanize +tetanized +tetanizes +tetanizing +tetanoid +tetanus +tetanuses +tetany +tetartohedral +tetched +tetchier +tetchiest +tetchily +tetchiness +tetchinesses +tetchy +teth +tether +tetherball +tetherballs +tethered +tethering +tethers +teths +tetotum +tetotums +tetra +tetracaine +tetracaines +tetrachloride +tetrachlorides +tetrachord +tetrachords +tetracid +tetracids +tetracycline +tetracyclines +tetrad +tetradic +tetradrachm +tetradrachms +tetrads +tetradynamous +tetrafluoride +tetrafluorides +tetragon +tetragonal +tetragonally +tetragons +tetragrammaton +tetragrammatons +tetrahedra +tetrahedral +tetrahedrally +tetrahedrite +tetrahedrites +tetrahedron +tetrahedrons +tetrahydrocannabinol +tetrahydrocannabinols +tetrahydrofuran +tetrahydrofurans +tetrahymena +tetrahymenas +tetralogies +tetralogy +tetramer +tetrameric +tetramerous +tetramers +tetrameter +tetrameters +tetramethyllead +tetramethylleads +tetraploid +tetraploidies +tetraploids +tetraploidy +tetrapod +tetrapods +tetrapyrrole +tetrapyrroles +tetrarch +tetrarchic +tetrarchies +tetrarchs +tetrarchy +tetras +tetraspore +tetraspores +tetrasporic +tetravalent +tetrazolium +tetrazoliums +tetrazzini +tetrode +tetrodes +tetrodotoxin +tetrodotoxins +tetroxid +tetroxide +tetroxides +tetroxids +tetryl +tetryls +tets +tetter +tetters +teuch +teugh +teughly +teutonize +teutonized +teutonizes +teutonizing +tew +tewed +tewing +tews +texas +texases text textbook +textbookish +textbooks +textile +textiles +textless +texts +textual +textually +textuaries +textuary +textural +texturally +texture +textured +textureless +textures +texturing +texturize +texturized +texturizes +texturizing +thack +thacked +thacking +thacks +thae +thairm +thairms +thalami +thalamic +thalamus +thalassaemia +thalassaemias +thalassemia +thalassemias +thalassemic +thalassemics +thalassic +thalassocracies +thalassocracy +thalassocrat +thalassocrats +thaler +thalers +thalidomide +thalidomides +thalli +thallic +thallium +thalliums +thalloid +thallophyte +thallophytes +thallophytic +thallous +thallus +thalluses than +thanage +thanages +thanatological +thanatologies +thanatologist +thanatologists +thanatology +thanatos +thanatoses +thane +thanes +thaneship +thaneships thank +thanked +thanker +thankers thankful +thankfuller +thankfullest +thankfully +thankfulness +thankfulnesses +thanking +thankless +thanklessly +thanklessness +thanklessnesses +thanks +thanksgiving +thanksgivings +thankworthy +tharm +tharms that +thataway +thatch +thatched +thatcher +thatchers +thatches +thatchier +thatchiest +thatching +thatchy +thaumaturge +thaumaturges +thaumaturgic +thaumaturgies +thaumaturgist +thaumaturgists +thaumaturgy +thaw +thawed +thawer +thawers +thawing +thawless +thaws the +thearchies +thearchy theater +theatergoer +theatergoers +theatergoing +theatergoings +theaters theatre +theatres +theatric +theatrical +theatricalism +theatricalisms +theatricalities +theatricality +theatricalization +theatricalizations +theatricalize +theatricalized +theatricalizes +theatricalizing +theatrically +theatricals +theatrics +thebaine +thebaines +thebe +theca +thecae +thecal +thecate +thecodont +thecodonts +thee +theelin +theelins +theelol +theelols theft +thefts +thegn +thegnly +thegns +thein +theine +theines +theins their theirs +theirselves +theism +theisms +theist +theistic +theistical +theistically +theists +thelitis +thelitises them +thematic +thematically +thematics theme +themed +themes +theming themselves then +thenage +thenages +thenal +thenar +thenars +thence +thenceforth +thenceforward +thenceforwards +thens +theobromine +theobromines +theocentric +theocentricities +theocentricity +theocentrism +theocentrisms +theocracies +theocracy +theocrat +theocratic +theocratical +theocratically +theocrats +theodicies +theodicy +theodolite +theodolites +theogonic +theogonies +theogony +theolog +theologian +theologians +theologic +theological +theologically +theologies +theologise +theologised +theologises +theologising +theologize +theologized +theologizer +theologizers +theologizes +theologizing +theologs +theologue +theologues +theology +theonomies +theonomous +theonomy +theophanic +theophanies +theophany +theophylline +theophyllines +theorbo +theorbos +theorem +theorematic +theorems +theoretic theoretical +theoretically +theoretician +theoreticians +theories +theorise +theorised +theorises +theorising +theorist +theorists +theorization +theorizations +theorize +theorized +theorizer +theorizers +theorizes +theorizing theory +theosophical +theosophically +theosophies +theosophist +theosophists +theosophy +therapeuses +therapeusis +therapeutic +therapeutically +therapeutics +therapies +therapist +therapists +therapsid +therapsids +therapy there +thereabout +thereabouts +thereafter +thereat +thereby +therefor therefore +therefrom +therein +thereinafter +thereinto +theremin +theremins +thereof +thereon +theres +thereto +theretofore +thereunder +thereunto +thereupon +therewith +therewithal +theriac +theriaca +theriacal +theriacas +theriacs +theriomorphic +therm +thermae +thermal +thermalization +thermalizations +thermalize +thermalized +thermalizes +thermalizing +thermally +thermals +therme +thermel +thermels +thermes +thermic +thermically +thermion +thermionic +thermionics +thermions +thermistor +thermistors +thermite +thermites +thermochemical +thermochemist +thermochemistries +thermochemistry +thermochemists +thermocline +thermoclines +thermocouple +thermocouples +thermoduric +thermodynamic +thermodynamical +thermodynamically +thermodynamicist +thermodynamicists +thermodynamics +thermoelectric +thermoelectricities +thermoelectricity +thermoelement +thermoelements +thermoform +thermoformable +thermoformed +thermoforming +thermoforms +thermogram +thermograms +thermograph +thermographic +thermographically +thermographies +thermographs +thermography +thermohaline +thermojunction +thermojunctions +thermolabile +thermolabilities +thermolability +thermoluminescence +thermoluminescences +thermoluminescent +thermomagnetic +thermometer +thermometers +thermometric +thermometrically +thermometries +thermometry +thermonuclear +thermoperiodicities +thermoperiodicity +thermoperiodism +thermoperiodisms +thermophile +thermophiles +thermophilic +thermophilous +thermopile +thermopiles +thermoplastic +thermoplasticities +thermoplasticity +thermoplastics +thermoreceptor +thermoreceptors +thermoregulate +thermoregulated +thermoregulates +thermoregulating +thermoregulation +thermoregulations +thermoregulator +thermoregulators +thermoregulatory +thermoremanence +thermoremanences +thermoremanent thermos +thermoscope +thermoscopes +thermoses +thermoset +thermosets +thermosetting +thermosphere +thermospheres +thermospheric +thermostabilities +thermostability +thermostable +thermostat +thermostated +thermostatic +thermostatically +thermostating +thermostats +thermostatted +thermostatting +thermotactic +thermotaxes +thermotaxis +thermotropic +thermotropism +thermotropisms +therms +theroid +theropod +theropods +thesaural +thesauri +thesaurus +thesauruses these +theses +thesis +thespian +thespians +theta +thetas +thetic +thetical +thetically +theurgic +theurgical +theurgies +theurgist +theurgists +theurgy +thew +thewier +thewiest +thewless +thews +thewy they +thiabendazole +thiabendazoles +thiamin +thiaminase +thiaminases +thiamine +thiamines +thiamins +thiazide +thiazides +thiazin +thiazine +thiazines +thiazins +thiazol +thiazole +thiazoles +thiazols thick +thicken +thickened +thickener +thickeners +thickening +thickenings +thickens +thicker +thickest +thicket +thicketed +thickets +thickety +thickhead +thickheaded +thickheads +thickish +thickly +thickness +thicknesses +thicks +thickset +thicksets thief +thieve +thieved +thieveries +thievery +thieves +thieving +thievish +thievishly +thievishness +thievishnesses +thigh +thighbone +thighbones +thighed +thighs +thigmotaxes +thigmotaxis +thigmotropism +thigmotropisms +thill +thills +thimble +thimbleberries +thimbleberry +thimbleful +thimblefuls +thimblerig +thimblerigged +thimblerigger +thimbleriggers +thimblerigging +thimblerigs +thimbles +thimbleweed +thimbleweeds +thimerosal +thimerosals thin +thinclad +thinclads +thindown +thindowns +thine thing +thingamabob +thingamabobs +thingamajig +thingamajigs +thingness +thingnesses +things +thingumajig +thingumajigs +thingummies +thingummy think +thinkable +thinkableness +thinkablenesses +thinkably +thinker +thinkers thinking +thinkingly +thinkingness +thinkingnesses +thinkings +thinks +thinly +thinned +thinner +thinners +thinness +thinnesses +thinnest +thinning +thinnish +thins +thio +thiocyanate +thiocyanates +thiol +thiolic +thiols +thionate +thionates +thionic +thionin +thionine +thionines +thionins +thionyl +thionyls +thiopental +thiopentals +thiophen +thiophene +thiophenes +thiophens +thioridazine +thioridazines +thiosulfate +thiosulfates +thiotepa +thiotepas +thiouracil +thiouracils +thiourea +thioureas +thir +thiram +thirams +third +thirdhand +thirdly +thirds +thirl +thirlage +thirlages +thirled +thirling +thirls thirst +thirsted +thirster +thirsters +thirstier +thirstiest +thirstily +thirstiness +thirstinesses +thirsting +thirsts +thirsty +thirteen +thirteens +thirteenth +thirteenths +thirties +thirtieth +thirtieths +thirty +thirtyish this +thistle +thistledown +thistledowns +thistles +thistlier +thistliest +thistly +thither +thitherto +thitherward +thitherwards +thixotropic +thixotropies +thixotropy +tho +thole +tholed +tholeiite +tholeiites +tholeiitic +tholepin +tholepins +tholes +tholing +tholoi +tholos +thong +thonged +thongs +thoracal +thoraces +thoracic +thoracically +thoracotomies +thoracotomy +thorax +thoraxes +thoria +thorianite +thorianites +thorias +thoric +thorite +thorites +thorium +thoriums +thorn +thornback +thornbacks +thornbush +thornbushes +thorned +thornier +thorniest +thornily +thorniness +thorninesses +thorning +thornless +thornlike +thorns +thorny +thoro +thoron +thorons thorough +thoroughbass +thoroughbasses +thoroughbrace +thoroughbraces +thoroughbred +thoroughbreds +thorougher +thoroughest +thoroughfare +thoroughfares +thoroughgoing +thoroughly +thoroughness +thoroughnesses +thoroughpin +thoroughpins +thoroughwort +thoroughworts +thorp +thorpe +thorpes +thorps those +thou +thoued though thought +thoughtful +thoughtfully +thoughtfulness +thoughtfulnesses +thoughtless +thoughtlessly +thoughtlessness +thoughtlessnesses +thoughts +thoughtway +thoughtways +thouing +thous +thousand +thousandfold +thousands +thousandth +thousandths +thowless +thraldom +thraldoms +thrall +thralldom +thralldoms +thralled +thralling +thralls +thrash +thrashed +thrasher +thrashers +thrashes +thrashing +thrashings +thrasonical +thrasonically +thrave +thraves +thraw +thrawart +thrawed +thrawing +thrawn +thrawnly +thraws thread +threadbare +threadbareness +threadbarenesses +threaded +threader +threaders +threadfin +threadfins +threadier +threadiest +threadiness +threadinesses +threading +threadless +threadlike +threads +threadworm +threadworms +thready +threap +threaped +threaper +threapers +threaping +threaps +threat +threated +threaten +threatened +threatener +threateners +threatening +threateningly +threatens +threating +threats +three +threefold +threep +threeped +threepence +threepences +threepenny +threeping +threeps +threes +threescore +threesome +threesomes +threnode +threnodes +threnodic +threnodies +threnodist +threnodists +threnody +threonine +threonines +thresh +threshed +thresher +threshers +threshes +threshing +threshold +thresholds +threw +thrice +thrift +thriftier +thriftiest +thriftily +thriftiness +thriftinesses +thriftless +thriftlessly +thriftlessness +thriftlessnesses +thrifts +thrifty thrill +thrilled thriller +thrillers +thrilling +thrillingly +thrills +thrip +thrips +thrive +thrived +thriven +thriver +thrivers +thrives +thriving +thrivingly +thro throat +throated +throatier +throatiest +throatily +throatiness +throatinesses +throating +throatlatch +throatlatches +throats +throaty +throb +throbbed +throbber +throbbers +throbbing +throbs +throe +throes +thrombi +thrombin +thrombins +thrombocyte +thrombocytes +thrombocytic +thrombocytopenia +thrombocytopenias +thrombocytopenic +thromboembolic +thromboembolism +thromboembolisms +thrombokinase +thrombokinases +thrombolytic +thrombophlebitides +thrombophlebitis +thromboplastic +thromboplastin +thromboplastins +thromboses +thrombosis +thrombotic +thromboxane +thromboxanes +thrombus +throne +throned +thrones +throng +thronged +thronging +throngs +throning +throstle +throstles +throttle +throttleable +throttled +throttlehold +throttleholds +throttler +throttlers +throttles +throttling through +throughither +throughly +throughother throughout +throughput +throughputs +throughway +throughways +throve throw +throwaway +throwaways +throwback +throwbacks +thrower +throwers +throwing +thrown +throws +throwster +throwsters +thru +thrum +thrummed +thrummer +thrummers +thrummier +thrummiest +thrumming +thrummy +thrums +thruput +thruputs +thrush +thrushes +thrust +thrusted +thruster +thrusters +thrustful +thrusting +thrustor +thrustors +thrusts +thruway +thruways +thud +thudded +thudding +thuds +thug +thuggee +thuggees +thuggeries +thuggery +thuggish +thugs +thuja +thujas +thulia +thulias +thulium +thuliums +thumb +thumbed +thumbhole +thumbholes +thumbing +thumbkin +thumbkins +thumbnail +thumbnails +thumbnut +thumbnuts +thumbprint +thumbprints +thumbs +thumbscrew +thumbscrews +thumbtack +thumbtacked +thumbtacking +thumbtacks +thumbwheel +thumbwheels +thump +thumped +thumper +thumpers +thumping +thumps thunder +thunderbird +thunderbirds +thunderbolt +thunderbolts +thunderclap +thunderclaps +thundercloud +thunderclouds +thundered +thunderer +thunderers +thunderhead +thunderheads +thundering +thunderingly +thunderous +thunderously +thunders +thundershower +thundershowers +thunderstone +thunderstones thunderstorm +thunderstorms +thunderstricken +thunderstrike +thunderstrikes +thunderstriking +thunderstroke +thunderstrokes +thunderstruck +thundery +thunk +thunked +thunking +thunks +thurible +thuribles +thurifer +thurifers +thurl +thurls thus +thusly +thuya +thuyas +thwack +thwacked +thwacker +thwackers +thwacking +thwacks +thwart +thwarted +thwarter +thwarters +thwarting +thwartly +thwarts +thwartwise +thy +thylacine +thylacines +thylakoid +thylakoids +thyme +thymectomies +thymectomize +thymectomized +thymectomizes +thymectomizing +thymectomy +thymes +thymey +thymi +thymic +thymidine +thymidines +thymier +thymiest +thymine +thymines +thymocyte +thymocytes +thymol +thymols +thymosin +thymosins +thymus +thymuses +thymy +thyratron +thyratrons +thyreoid +thyristor +thyristors +thyrocalcitonin +thyrocalcitonins +thyroglobulin +thyroglobulins +thyroid +thyroidal +thyroidectomies +thyroidectomized +thyroidectomy +thyroidites +thyroiditides +thyroiditis +thyroiditises +thyroids +thyrotoxicoses +thyrotoxicosis +thyrotrophic +thyrotrophin +thyrotrophins +thyrotropic +thyrotropin +thyrotropins +thyroxin +thyroxine +thyroxines +thyroxins +thyrse +thyrses +thyrsi +thyrsoid +thyrsus +thysanuran +thysanurans +thyself +ti +tiara +tiaraed +tiaras +tibia +tibiae +tibial +tibias +tibiofibula +tibiofibulae +tibiofibulas +tic +tical +ticals tick +ticked +ticker +tickers ticket +ticketed +ticketing +ticketless +tickets +ticking +tickings +tickle +tickled +tickler +ticklers +tickles +tickling +ticklish +ticklishly +ticklishness +ticklishnesses +ticks +tickseed +tickseeds +ticktack +ticktacked +ticktacking +ticktacks +ticktacktoe +ticktacktoes +ticktock +ticktocked +ticktocking +ticktocks +tics +tictac +tictacked +tictacking +tictacs +tictoc +tictocked +tictocking +tictocs +tidal +tidally +tidbit +tidbits +tiddledywinks +tiddler +tiddlers +tiddly +tiddlywinks +tide +tided +tideland +tidelands +tideless +tidelike +tidemark +tidemarks +tiderip +tiderips +tides +tidewater +tidewaters +tideway +tideways +tidied +tidier +tidiers +tidies +tidiest +tidily +tidiness +tidinesses +tiding +tidings tidy +tidying +tidytips tie +tieback +tiebacks +tiebreaker +tiebreakers +tieclasp +tieclasps +tied +tieing +tieless +tiemannite +tiemannites +tiepin +tiepins +tier +tierce +tierced +tiercel +tiercels +tierces +tiered +tiering +tiers +ties +tiff +tiffanies +tiffany +tiffed +tiffin +tiffined +tiffing +tiffining +tiffins +tiffs tiger +tigereye +tigereyes +tigerish +tigerishly +tigerishness +tigerishnesses +tigerlike +tigers tight +tighten +tightened +tightener +tighteners +tightening +tightens +tighter +tightest +tightfisted +tightfistedness +tightfistednesses +tightly +tightness +tightnesses +tightrope +tightropes +tights +tightwad +tightwads +tightwire +tightwires +tiglon +tiglons +tigon +tigons +tigress +tigresses +tigrish +tike +tikes +tiki +tikis +til +tilak +tilaks +tilapia +tilapias +tilburies +tilbury +tilde +tildes +tile +tiled +tilefish +tilefishes +tilelike +tiler +tilers +tiles +tiling +tilings till +tillable +tillage +tillages +tillandsia +tillandsias +tilled +tiller +tillered +tillering +tillerman +tillermen +tillers +tilling +tillite +tillites +tills +tils +tilt +tiltable +tilted +tilter +tilters +tilth +tilths +tilting +tiltmeter +tiltmeters +tilts +tiltyard +tiltyards +timarau +timaraus +timbal +timbale +timbales +timbals +timber +timberdoodle +timberdoodles +timbered +timberhead +timberheads +timbering +timberings +timberland +timberlands +timberline +timberlines +timberman +timbermen +timbers +timberwork +timberworks +timbral +timbre +timbrel +timbrelled +timbrels +timbres time +timecard +timecards +timed +timekeeper +timekeepers +timekeeping +timekeepings +timeless +timelessly +timelessness +timelessnesses +timelier +timeliest +timeline +timelines +timeliness +timelinesses +timely +timeous +timeously +timeout +timeouts +timepiece +timepieces +timepleaser +timepleasers +timer +timers +times +timesaver +timesavers +timesaving +timescale +timescales +timeserver +timeservers +timeserving +timeservings timetable +timetables +timework +timeworker +timeworkers +timeworks +timeworn +timid +timider +timidest +timidities +timidity +timidly +timidness +timidnesses +timing +timings +timocracies +timocracy +timocratic +timocratical +timolol +timolols +timorous +timorously +timorousness +timorousnesses +timothies +timothy +timpana +timpani +timpanist +timpanists +timpano +timpanum +timpanums tin +tinamou +tinamous +tincal +tincals +tinct +tincted +tincting +tinctorial +tinctorially +tincts +tincture +tinctured +tinctures +tincturing +tinder +tinderbox +tinderboxes +tinders +tindery +tine +tinea +tineal +tineas +tined +tineid +tineids +tines +tinfoil +tinfoils +tinful +tinfuls +ting +tinge +tinged +tingeing +tinges +tinging +tingle +tingled +tingler +tinglers +tingles +tinglier +tingliest +tingling +tinglingly +tingly +tings +tinhorn +tinhorns +tinier +tiniest +tinily +tininess +tininesses +tining +tinker +tinkered +tinkerer +tinkerers +tinkering +tinkers +tinkle +tinkled +tinkler +tinklers +tinkles +tinklier +tinkliest +tinkling +tinklings +tinkly +tinlike +tinman +tinmen +tinned +tinner +tinners +tinnier +tinniest +tinnily +tinniness +tinninesses +tinning +tinnitus +tinnituses +tinny +tinplate +tinplates +tins +tinsel +tinseled +tinseling +tinselled +tinselling +tinselly +tinsels +tinsmith +tinsmithing +tinsmithings +tinsmiths +tinstone +tinstones +tint +tinted +tinter +tinters +tinting +tintings +tintinnabulary +tintinnabulation +tintinnabulations +tintless +tints +tintype +tintypes +tinware +tinwares +tinwork +tinworks tiny tip +tipcart +tipcarts +tipcat +tipcats +tipi +tipis +tipless +tipoff +tipoffs +tippable +tipped +tipper +tippers +tippet +tippets +tippier +tippiest +tipping +tipple +tippled +tippler +tipplers +tipples +tippling +tippy +tippytoe +tippytoed +tippytoeing +tippytoes +tips +tipsier +tipsiest +tipsily +tipsiness +tipsinesses +tipstaff +tipstaffs +tipstaves +tipster +tipsters +tipstock +tipstocks +tipsy +tiptoe +tiptoed +tiptoeing +tiptoes +tiptop +tiptops +tirade +tirades +tiramisu +tiramisus tire tired +tireder +tiredest +tiredly +tiredness +tirednesses +tireless +tirelessly +tirelessness +tirelessnesses +tires tiresome +tiresomely +tiresomeness +tiresomenesses +tiring +tirl +tirled +tirling +tirls +tiro +tiros +tirrivee +tirrivees +tis +tisane +tisanes +tissual tissue +tissued +tissues +tissuey +tissuing +tissular +tit +titan +titanate +titanates +titaness +titanesses +titania +titanias +titanic +titanically +titaniferous +titanism +titanisms +titanite +titanites +titanium +titaniums +titanous +titans +titbit +titbits +titer +titers +titfer +titfers +tithable +tithe +tithed +tither +tithers +tithes +tithing +tithings +tithonia +tithonias +titi +titian +titians +titillate +titillated +titillates +titillating +titillatingly +titillation +titillations +titillative +titis +titivate +titivated +titivates +titivating +titivation +titivations +titlark +titlarks title +titled +titleholder +titleholders +titles +titling +titlist +titlists +titman +titmen +titmice +titmouse +titrable +titrant +titrants +titratable +titrate +titrated +titrates +titrating +titration +titrations +titrator +titrators +titre +titres +titrimetric +tits +titter +tittered +titterer +titterers +tittering +titters +tittie +titties +tittivate +tittivated +tittivates +tittivating +tittle +tittles +tittup +tittuped +tittuping +tittupped +tittupping +tittuppy +tittups +titty +titular +titularies +titularly +titulars +titulary +tivy +tizzies +tizzy +tmeses +tmesis to +toad +toadeater +toadeaters +toadfish +toadfishes +toadflax +toadflaxes +toadied +toadies +toadish +toadless +toadlike +toads +toadstone +toadstones +toadstool +toadstools +toady +toadying +toadyish +toadyism +toadyisms toast +toasted +toaster +toasters +toastier +toastiest +toasting +toastmaster +toastmasters +toastmistress +toastmistresses +toasts +toasty tobacco +tobaccoes +tobacconist +tobacconists +tobaccos +tobies +toboggan +tobogganed +tobogganer +tobogganers +tobogganing +tobogganings +tobogganist +tobogganists +toboggans +toby +toccata +toccatas +toccate +tocher +tochered +tochering +tochers +tocologies +tocology +tocopherol +tocopherols +tocsin +tocsins +tod today +todays +toddies +toddle +toddled +toddler +toddlerhood +toddlerhoods +toddlers +toddles +toddling +toddy +todies +tods +tody +toe +toea +toecap +toecaps +toed +toehold +toeholds +toeing +toeless +toelike +toenail +toenailed +toenailing +toenails +toepiece +toepieces +toeplate +toeplates +toes +toeshoe +toeshoes +toff +toffee +toffees +toffies +toffs +toffy +toft +tofts +tofu +tofus +tog +toga +togae +togaed +togas +togate +togated together +togetherness +togethernesses +togged +toggeries +toggery +togging +toggle +toggled +toggler +togglers +toggles +toggling +togs +togue +togues +toil +toile +toiled +toiler +toilers +toiles toilet +toileted +toileting +toiletries +toiletry +toilets +toilette +toilettes +toilful +toilfully +toiling +toils +toilsome +toilsomely +toilsomeness +toilsomenesses +toilworn +toit +toited +toiting +toits +tokamak +tokamaks +tokay +tokays +toke +toked +token +tokened +tokening +tokenism +tokenisms +tokens +toker +tokers +tokes +toking +tokologies +tokology +tokomak +tokomaks +tokonoma +tokonomas +tola +tolan +tolane +tolanes +tolans +tolas +tolbooth +tolbooths +tolbutamide +tolbutamides +told +tole +toled +toledo +toledos +tolerabilities +tolerability +tolerable +tolerably +tolerance +tolerances +tolerant +tolerantly tolerate +tolerated +tolerates +tolerating +toleration +tolerations +tolerative +tolerator +tolerators +toles +tolidin +tolidine +tolidines +tolidins +toling +toll +tollage +tollages +tollbar +tollbars +tollbooth +tollbooths +tolled +toller +tollers +tollgate +tollgates +tollhouse +tollhouses +tolling +tollman +tollmen +tolls +tollway +tollways +tolu +toluate +toluates +toluene +toluenes +toluic +toluid +toluide +toluides +toluidin +toluidine +toluidines +toluidins +toluids +toluol +toluole +toluoles +toluols +tolus +toluyl +toluyls +tolyl +tolyls +tom +tomahawk +tomahawked +tomahawking +tomahawks +tomalley +tomalleys +toman +tomans +tomatillo +tomatillos tomato +tomatoes +tomatoey tomb +tombac +tomback +tombacks +tombacs +tombak +tombaks +tombal +tombed +tombing +tombless +tomblike +tombola +tombolas +tombolo +tombolos +tomboy +tomboyish +tomboyishness +tomboyishnesses +tomboys +tombs +tombstone +tombstones +tomcat +tomcats +tomcatted +tomcatting +tomcod +tomcods +tome +tomenta +tomentose +tomentum +tomes +tomfool +tomfooleries +tomfoolery +tomfools +tommed +tommies +tomming +tommy +tommyrot +tommyrots +tomogram +tomograms +tomographic +tomographies +tomography tomorrow +tomorrows +tompion +tompions +toms +tomtit +tomtits ton +tonal +tonalities +tonality +tonally +tondi +tondo +tondos +tone +tonearm +tonearms +toned +toneless +tonelessly +tonelessness +tonelessnesses +toneme +tonemes +tonemic +toner +toners +tones +tonetic +tonetically +tonetics +tonette +tonettes +toney +tong +tonga +tongas +tonged +tonger +tongers +tonging +tongman +tongmen +tongs tongue +tongued +tongueless +tonguelike +tongues +tonguing +tonguings +tonic +tonically +tonicities +tonicity +tonics +tonier +toniest tonight +tonights +toning +tonish +tonishly +tonlet +tonlets +tonnage +tonnages +tonne +tonneau +tonneaus +tonneaux +tonner +tonners +tonnes +tonnish +tonometer +tonometers +tonometries +tonometry +tonoplast +tonoplasts +tons +tonsil +tonsilar +tonsillar +tonsillectomies +tonsillectomy +tonsillites +tonsillitides +tonsillitis +tonsillitises +tonsils +tonsorial +tonsure +tonsured +tonsures +tonsuring +tontine +tontines +tonus +tonuses +tony too +took tool +toolbox +toolboxes +tooled +tooler +toolers +toolhead +toolheads +toolholder +toolholders +toolhouse +toolhouses +tooling +toolings +toolless +toolmaker +toolmakers +toolmaking +toolmakings +toolroom +toolrooms +tools +toolshed +toolsheds +toom +toon +toons +toot +tooted +tooter +tooters tooth toothache +toothaches toothbrush +toothbrushes +toothbrushing +toothbrushings +toothed +toothier +toothiest +toothily +toothing +toothless +toothlike toothpaste +toothpastes +toothpick +toothpicks +tooths +toothsome +toothsomely +toothsomeness +toothsomenesses +toothwort +toothworts +toothy +tooting +tootle +tootled +tootler +tootlers +tootles +tootling +toots +tootses +tootsie +tootsies +tootsy top +topaz +topazes +topazine +topcoat +topcoats +topcross +topcrosses +topdressing +topdressings +tope +toped +topee +topees +toper +topers +topes +topflight +topful +topfull +topgallant +topgallants +toph +tophe +tophes +tophi +tophs +tophus +topi +topiaries +topiary topic +topical +topicalities +topicality +topically +topics +toping +topis +topkick +topkicks +topknot +topknots +topless +toplessness +toplessnesses +topline +toplines +toploftical +toploftier +toploftiest +toploftily +toploftiness +toploftinesses +toplofty +topmast +topmasts +topminnow +topminnows +topmost +topnotch +topnotcher +topnotchers +topocentric +topographer +topographers +topographic +topographical +topographically +topographies +topography +topoi +topological +topologically +topologies +topologist +topologists +topology +toponym +toponymic +toponymical +toponymies +toponymist +toponymists +toponyms +toponymy +topos +topotype +topotypes +topped +topper +toppers +topping +toppings +topple +toppled +topples +toppling +tops +topsail +topsails +topside +topsider +topsiders +topsides +topsoil +topsoiled +topsoiling +topsoils +topspin +topspins +topstitch +topstitched +topstitches +topstitching +topstone +topstones +topwork +topworked +topworking +topworks +toque +toques +toquet +toquets +tor +tora +torah +torahs +toras +torc +torch +torchbearer +torchbearers +torched +torchere +torcheres +torches +torchier +torchiers +torchiest +torching +torchlight +torchlights +torchon +torchons +torchwood +torchwoods +torchy +torcs +tore +toreador +toreadors +torero +toreros +tores +toreutic +toreutics +tori +toric +tories +torii +torment +tormented +tormenter +tormenters +tormentil +tormentils +tormenting +tormentor +tormentors +torments +torn +tornadic +tornado +tornadoes +tornados +tornillo +tornillos +toro +toroid +toroidal +toroidally +toroids +toros +torose +torosities +torosity +torot +toroth +torous +torpedo +torpedoed +torpedoes +torpedoing +torpedos +torpid +torpidities +torpidity +torpidly +torpids +torpor +torpors +torquate +torque +torqued +torquer +torquers +torques +torqueses +torquing +torr +torrefied +torrefies +torrefy +torrefying +torrent +torrential +torrentially +torrents +torrid +torrider +torridest +torridities +torridity +torridly +torridness +torridnesses +torrified +torrifies +torrify +torrifying +tors +torsade +torsades +torse +torses +torsi +torsion +torsional +torsionally +torsions +torsk +torsks +torso +torsos +tort +torte +tortellini +tortellinis +torten +tortes +torticollis +torticollises +tortile +tortilla +tortillas +tortious +tortiously tortoise +tortoises +tortoiseshell +tortoiseshells +tortoni +tortonis +tortricid +tortricids +tortrix +tortrixes +torts +tortuosities +tortuosity +tortuous +tortuously +tortuousness +tortuousnesses +torture +tortured +torturer +torturers +tortures +torturing +torturous +torturously +torula +torulae +torulas +torus +tory +tosh +toshes +toss +tossed +tosser +tossers +tosses +tossing +tosspot +tosspots +tossup +tossups +tost +tostada +tostadas +tostado +tostados +tot +totable total +totaled +totaling +totalisator +totalisators +totalise +totalised +totalises +totalising +totalism +totalisms +totalist +totalistic +totalists +totalitarian +totalitarianism +totalitarianisms +totalitarianize +totalitarianized +totalitarianizes +totalitarianizing +totalitarians +totalities +totality +totalizator +totalizators +totalize +totalized +totalizer +totalizers +totalizes +totalizing +totalled +totalling +totally +totals +tote +toted +totem +totemic +totemism +totemisms +totemist +totemistic +totemists +totemite +totemites +totems +toter +toters +totes +tother +toting +totipotencies +totipotency +totipotent +tots +totted +totter +tottered +totterer +totterers +tottering +totteringly +totters +tottery +totting +toucan +toucans touch +touchable +touchback +touchbacks +touchdown +touchdowns +touche +touched +toucher +touchers +touches +touchhole +touchholes +touchier +touchiest +touchily +touchiness +touchinesses +touching +touchingly +touchline +touchlines +touchmark +touchmarks +touchstone +touchstones +touchup +touchups +touchwood +touchwoods +touchy tough +toughed +toughen +toughened +toughening +toughens +tougher +toughest +toughie +toughies +toughing +toughish +toughly +toughness +toughnesses +toughs +toughy +toupee +toupees tour +touraco +touracos +tourbillion +tourbillions +tourbillon +tourbillons +toured +tourer +tourers +touring +tourings tourism +tourisms tourist +touristic +touristically +tourists +touristy +tourmaline +tourmalines tournament +tournaments +tournedos +tourney +tourneyed +tourneying +tourneys +tourniquet +tourniquets +tours +touse +toused +touses +tousing +tousle +tousled +tousles +tousling +tout +touted +touter +touters +touting +touts +touzle +touzled +touzles +touzling +tovarich +tovariches +tovarish +tovarishes +tow +towage +towages toward +towardliness +towardlinesses +towardly towards +towaway +towaways +towboat +towboats +towed towel +toweled +towelette +towelettes +toweling +towelings +towelled +towelling +towellings +towels tower +towered +towerier +toweriest +towering +toweringly +towerlike +towers +towery +towhead +towheaded +towheads +towhee +towhees +towie +towies +towing +towline +towlines +towmond +towmonds +towmont +towmonts town +townee +townees +townfolk +townhome +townhomes +townhouse +townhouses +townie +townies +townish +townless +townlet +townlets +towns +townscape +townscapes +townsfolk +township +townships +townsman +townsmen +townspeople +townswoman +townswomen +townwear +towny +towpath +towpaths +towrope +towropes +tows +towy +toxaemia +toxaemias +toxaemic +toxaphene +toxaphenes +toxemia +toxemias +toxemic +toxic +toxical +toxicant +toxicants +toxicities +toxicity +toxicologic +toxicological +toxicologically +toxicologies +toxicologist +toxicologists +toxicology +toxicoses +toxicosis +toxics +toxigenic +toxigenicities +toxigenicity +toxin +toxine +toxines +toxins +toxoid +toxoids +toxophilies +toxophilite +toxophilites +toxophily +toxoplasma +toxoplasmas +toxoplasmic +toxoplasmoses +toxoplasmosis toy +toyed +toyer +toyers +toying +toyish +toyless +toylike +toyo +toyon +toyons +toyos +toys +toyshop +toyshops +trabeate +trabeated +trabeation +trabeations +trabecula +trabeculae +trabecular +trabeculas +trabeculate +trace +traceabilities +traceability +traceable +traced +traceless +tracer +traceried +traceries +tracers +tracery +traces +trachea +tracheae +tracheal +tracheary +tracheas +tracheate +tracheated +tracheid +tracheids +tracheites +tracheitides +tracheitis +tracheitises +tracheobronchial +tracheolar +tracheole +tracheoles +tracheophyte +tracheophytes +tracheostomies +tracheostomy +tracheotomies +tracheotomy +trachle +trachled +trachles +trachling +trachoma +trachomas +trachyte +trachytes +trachytic +tracing +tracings track +trackage +trackages +trackball +trackballs +tracked +tracker +trackers +tracking +trackings +tracklayer +tracklayers +tracklaying +tracklayings +trackless +trackman +trackmen +tracks +trackside +tracksides +tracksuit +tracksuits +trackwalker +trackwalkers +trackway +trackways +tract +tractabilities +tractability +tractable +tractableness +tractablenesses +tractably +tractate +tractates +tractile +traction +tractional +tractions +tractive tractor +tractors +tracts +trad +tradable trade +tradeable +tradecraft +tradecrafts +traded +trademark +trademarked +trademarking +trademarks +tradeoff +tradeoffs +trader +traders +trades +tradescantia +tradescantias +tradesman +tradesmen +tradespeople +trading tradition traditional +traditionalism +traditionalisms +traditionalist +traditionalistic +traditionalists +traditionalize +traditionalized +traditionalizes +traditionalizing +traditionally +traditionary +traditionless +traditions +traditor +traditores +traduce +traduced +traducement +traducements +traducer +traducers +traduces +traducing traffic +trafficabilities +trafficability +trafficable +trafficked +trafficker +traffickers +trafficking +traffics +tragacanth +tragacanths +tragedian +tragedians +tragedienne +tragediennes +tragedies +tragedy +tragi +tragic +tragical +tragically +tragicomedies +tragicomedy +tragicomic +tragicomical +tragics +tragopan +tragopans +tragus +traik +traiked +traiking +traiks +trail +trailblazer +trailblazers +trailblazing +trailbreaker +trailbreakers +trailed +trailer +trailerable +trailered +trailering +trailerings +trailerist +trailerists +trailerite +trailerites +trailers +trailhead +trailheads +trailing +trailless +trails +trailside train +trainabilities +trainability +trainable +trainband +trainbands +trainbearer +trainbearers +trained +trainee +trainees +traineeship +traineeships +trainer +trainers +trainful +trainfuls training +trainings +trainload +trainloads +trainman +trainmen +trains +trainway +trainways +traipse +traipsed +traipses +traipsing +trait +traitor +traitoress +traitoresses +traitorous +traitorously +traitors +traitress +traitresses +traits +traject +trajected +trajecting +trajection +trajections +trajectories +trajectory +trajects tram +tramcar +tramcars +tramel +trameled +trameling +tramell +tramelled +tramelling +tramells +tramels +tramless +tramline +tramlines +trammed +trammel +trammeled +trammeling +trammelled +trammelling +trammels +tramming +tramontane +tramontanes +tramp +tramped +tramper +trampers +tramping +trampish +trample +trampled +trampler +tramplers +tramples +trampling +trampoline +trampoliner +trampoliners +trampolines +trampolining +trampolinings +trampolinist +trampolinists +tramps +tramroad +tramroads +trams +tramway +tramways +trance +tranced +trancelike +trances +tranche +tranches +trancing +trangam +trangams +trank +tranks +tranq +tranqs +tranquil +tranquiler +tranquilest +tranquilities +tranquility +tranquilize +tranquilized +tranquilizer +tranquilizers +tranquilizes +tranquilizing +tranquiller +tranquillest +tranquillities +tranquillity +tranquillize +tranquillized +tranquillizer +tranquillizers +tranquillizes +tranquillizing +tranquilly +tranquilness +tranquilnesses +trans +transact +transacted +transacting +transactinide +transaction +transactional +transactions +transactor +transactors +transacts +transalpine +transaminase +transaminases +transamination +transaminations +transatlantic +transaxle +transaxles +transceiver +transceivers +transcend +transcended +transcendence +transcendences +transcendencies +transcendency +transcendent +transcendental +transcendentalism +transcendentalisms +transcendentalist +transcendentalists +transcendentally +transcendently +transcending +transcends +transcontinental +transcribe +transcribed +transcriber +transcribers +transcribes +transcribing +transcript +transcriptase +transcriptases +transcription +transcriptional +transcriptionally +transcriptionist +transcriptionists +transcriptions +transcripts +transcultural +transcutaneous +transdermal +transdisciplinary +transduce +transduced +transducer +transducers +transduces +transducing +transductant +transductants +transduction +transductional +transductions +transect +transected +transecting +transection +transections +transects +transept +transeptal +transepts +transfect +transfected +transfecting +transfection +transfections +transfects +transfer +transferabilities +transferability +transferable +transferal +transferals +transferase +transferases +transferee +transferees +transference +transferences +transferential +transferor +transferors +transferrable +transferred +transferrer +transferrers +transferrin +transferring +transferrins +transfers +transfiguration +transfigurations +transfigure +transfigured +transfigures +transfiguring +transfinite +transfix +transfixed +transfixes +transfixing +transfixion +transfixions +transfixt transform +transformable +transformation +transformational +transformationalist +transformationalists +transformationally +transformations +transformative +transformed +transformer +transformers +transforming +transforms +transfusable +transfuse +transfused +transfuses +transfusible +transfusing +transfusion +transfusional +transfusions +transgenerational +transgenic +transgress +transgressed +transgresses +transgressing +transgression +transgressions +transgressive +transgressor +transgressors +tranship +transhipped +transhipping +tranships +transhistorical +transhumance +transhumances +transhumant +transhumants +transience +transiences +transiencies +transiency +transient +transiently +transients +transilluminate +transilluminated +transilluminates +transilluminating +transillumination +transilluminations +transilluminator +transilluminators +transistor +transistorise +transistorised +transistorises +transistorising +transistorization +transistorizations +transistorize +transistorized +transistorizes +transistorizing +transistors +transit +transited +transiting +transition +transitional +transitionally +transitions +transitive +transitively +transitiveness +transitivenesses +transitivities +transitivity +transitorily +transitoriness +transitorinesses +transitory +transits +translatabilities +translatability +translatable translate +translated +translates +translating translation +translational +translations +translative translator +translators +translatory +transliterate +transliterated +transliterates +transliterating +transliteration +transliterations +translocate +translocated +translocates +translocating +translocation +translocations +translucence +translucences +translucencies +translucency +translucent +translucently +transmarine +transmembrane +transmigrate +transmigrated +transmigrates +transmigrating +transmigration +transmigrations +transmigrator +transmigrators +transmigratory +transmissibilities +transmissibility +transmissible +transmission +transmissions +transmissive +transmissivities +transmissivity +transmissometer +transmissometers +transmit +transmits +transmittable +transmittal +transmittals +transmittance +transmittances +transmitted +transmitter +transmitters +transmitting +transmogrification +transmogrifications +transmogrified +transmogrifies +transmogrify +transmogrifying +transmontane +transmountain +transmutable +transmutation +transmutations +transmutative +transmute +transmuted +transmutes +transmuting +transnational +transnationalism +transnationalisms +transnatural +transoceanic +transom +transoms +transonic +transpacific +transparence +transparences +transparencies +transparency transparent +transparentize +transparentized +transparentizes +transparentizing +transparently +transparentness +transparentnesses +transpersonal +transpicuous +transpierce +transpierced +transpierces +transpiercing +transpiration +transpirational +transpirations +transpire +transpired +transpires +transpiring +transplacental +transplacentally +transplant +transplantabilities +transplantability +transplantable +transplantation +transplantations +transplanted +transplanter +transplanters +transplanting +transplants +transpolar +transponder +transponders +transpontine transport +transportabilities +transportability +transportable +transportation +transportational +transportations +transported +transportee +transportees +transporter +transporters +transporting +transports +transposable +transpose +transposed +transposes +transposing +transposition +transpositional +transpositions +transposon +transposons +transsexual +transsexualism +transsexualisms +transsexualities +transsexuality +transsexuals +transshape +transshaped +transshapes +transshaping +transship +transshipment +transshipments +transshipped +transshipping +transships +transsonic +transthoracic +transthoracically +transubstantial +transubstantiate +transubstantiated +transubstantiates +transubstantiating +transubstantiation +transubstantiations +transudate +transudates +transudation +transudations +transude +transuded +transudes +transuding +transuranic +transuranics +transuranium +transvaluate +transvaluated +transvaluates +transvaluating +transvaluation +transvaluations +transvalue +transvalued +transvalues +transvaluing +transversal +transversals +transverse +transversely +transverses +transvestism +transvestisms +transvestite +transvestites trap +trapan +trapanned +trapanning +trapans +trapball +trapballs +trapdoor +trapdoors +trapes +trapesed +trapeses +trapesing +trapeze +trapezes +trapezia +trapezii +trapezist +trapezists +trapezium +trapezius +trapeziuses +trapezohedra +trapezohedron +trapezohedrons +trapezoid +trapezoidal +trapezoids +traplike +trapline +traplines +trapnest +trapnested +trapnesting +trapnests +trappean +trapped +trapper +trappers +trapping +trappings +trappose +trappous +traprock +traprocks +traps +trapshooter +trapshooters +trapshooting +trapshootings +trapt +trapunto +trapuntos +trash +trashed +trashes +trashier +trashiest +trashily +trashiness +trashinesses +trashing +trashman +trashmen +trashy +trass +trasses +trattoria +trattorias +trattorie +trauchle +trauchled +trauchles +trauchling +trauma +traumas +traumata +traumatic +traumatically +traumatise +traumatised +traumatises +traumatising +traumatism +traumatisms +traumatization +traumatizations +traumatize +traumatized +traumatizes +traumatizing +travail +travailed +travailing +travails +trave travel +traveled traveler +travelers +traveling +travelled traveller +travellers +travelling +travelog +travelogs +travelogue +travelogues +travels +traversable +traversal +traversals +traverse +traversed +traverser +traversers +traverses +traversing +travertine +travertines +traves +travestied +travesties +travesty +travestying +travois +travoise +travoises +trawl +trawled +trawler +trawlerman +trawlermen +trawlers +trawley +trawleys +trawling +trawlnet +trawlnets +trawls +tray +trayful +trayfuls +trays +treacheries +treacherous +treacherously +treacherousness +treacherousnesses +treachery +treacle +treacles +treacly +tread +treaded +treader +treaders +treading +treadle +treadled +treadler +treadlers +treadles +treadless +treadling +treadmill +treadmills +treads +treason +treasonable +treasonably +treasonous +treasons +treasurable treasure +treasured +treasurer +treasurers +treasurership +treasurerships +treasures +treasuries +treasuring +treasury treat +treatabilities +treatability +treatable +treated +treater +treaters +treaties +treating +treatise +treatises treatment +treatments +treats +treaty +treble +trebled +trebles +trebling +trebly +trebuchet +trebuchets +trebucket +trebuckets +trecento +trecentos +treddle +treddled +treddles +treddling +tredecillion +tredecillions tree +treed +treehopper +treehoppers +treeing +treelawn +treelawns +treeless +treelike +treen +treenail +treenails +treens +treenware +treenwares +trees +treetop +treetops +tref +trefah +trefoil +trefoils +trehala +trehalas +trehalose +trehaloses +treillage +treillages +trek +trekked +trekker +trekkers +trekking +treks +trellis +trellised +trellises +trellising +trelliswork +trellisworks +trematode +trematodes tremble +trembled +trembler +tremblers +trembles +tremblier +trembliest +trembling +trembly +tremendous +tremendously +tremendousness +tremendousnesses +tremolite +tremolites +tremolitic +tremolo +tremolos +tremor +tremors +tremulant +tremulous +tremulously +tremulousness +tremulousnesses +trenail +trenails +trench +trenchancies +trenchancy +trenchant +trenchantly +trenched +trencher +trencherman +trenchermen +trenchers +trenches +trenching trend +trended +trendier +trendies +trendiest +trendily +trendiness +trendinesses +trending +trends +trendsetter +trendsetters +trendsetting +trendy +trepan +trepanation +trepanations +trepang +trepangs +trepanned +trepanning +trepans +trephination +trephinations +trephine +trephined +trephines +trephining +trepid +trepidant +trepidation +trepidations +treponema +treponemal +treponemas +treponemata +treponematoses +treponematosis +treponeme +treponemes +trespass +trespassed +trespasser +trespassers +trespasses +trespassing +tress +tressed +tressel +tressels +tresses +tressier +tressiest +tressour +tressours +tressure +tressures +tressy +trestle +trestles +trestlework +trestleworks +tret +tretinoin +tretinoins +trets +trevet +trevets +trews +trey +treys +triable +triac +triacetate +triacetates +triacid +triacids +triacs +triad +triadic +triadically +triadics +triadism +triadisms +triads +triage +triaged +triages +triaging trial +trialogue +trialogues +trials +triamcinolone +triamcinolones triangle +triangles +triangular +triangularities +triangularity +triangularly +triangulate +triangulated +triangulates +triangulating +triangulation +triangulations +triarchies +triarchy +triathlete +triathletes +triathlon +triathlons +triatomic +triaxial +triaxialities +triaxiality +triazin +triazine +triazines +triazins +triazole +triazoles +tribade +tribades +tribadic +tribal +tribalism +tribalisms +tribally +tribasic +tribe +tribes +tribesman +tribesmen +tribespeople +triboelectric +triboelectricities +triboelectricity +tribological +tribologies +tribologist +tribologists +tribology +triboluminescence +triboluminescences +triboluminescent +tribrach +tribrachic +tribrachs +tribulate +tribulated +tribulates +tribulating +tribulation +tribulations +tribunal +tribunals +tribunate +tribunates +tribune +tribunes +tribuneship +tribuneships +tributaries +tributary +tribute +tributes +tricarboxylic +trice +triced +triceps +tricepses +triceratops +triceratopses +trices +trichiases +trichiasis +trichina +trichinae +trichinal +trichinas +trichinize +trichinized +trichinizes +trichinizing +trichinoses +trichinosis +trichinosises +trichinous +trichite +trichites +trichlorfon +trichlorfons +trichloroethylene +trichloroethylenes +trichlorphon +trichlorphons +trichocyst +trichocysts +trichogyne +trichogynes +trichoid +trichologies +trichologist +trichologists +trichology +trichome +trichomes +trichomonacidal +trichomonacide +trichomonacides +trichomonad +trichomonads +trichomonal +trichomoniases +trichomoniasis +trichopteran +trichopterans +trichothecene +trichothecenes +trichotomies +trichotomous +trichotomously +trichotomy +trichromat +trichromatic +trichromatism +trichromatisms +trichromats +tricing trick +tricked +tricker +trickeries +trickers +trickery +trickie +trickier +trickiest +trickily +trickiness +trickinesses +tricking +trickish +trickishly +trickishness +trickishnesses +trickle +trickled +trickles +tricklier +trickliest +trickling +trickly +tricks +tricksier +tricksiest +tricksiness +tricksinesses +trickster +tricksters +tricksy +tricky +triclad +triclads +triclinia +triclinic +triclinium +tricolette +tricolettes +tricolor +tricolored +tricolors +tricorn +tricorne +tricornered +tricornes +tricorns +tricot +tricotine +tricotines +tricots +trictrac +trictracs +tricuspid +tricuspids +tricycle +tricycles +tricyclic +tricyclics +trident +tridents +tridimensional +tridimensionalities +tridimensionality +triduum +triduums +tried +triene +trienes +triennia +triennial +triennially +triennials +triennium +trienniums +triens +trientes +trier +trierarch +trierarchies +trierarchs +trierarchy +triers +tries +triethyl +trifecta +trifectas +trifid +trifle +trifled +trifler +triflers +trifles +trifling +triflings +trifluoperazine +trifluoperazines +trifluralin +trifluralins +trifocal +trifocals +trifold +trifoliate +trifoliolate +trifolium +trifoliums +triforia +triforium +triform +trifurcate +trifurcated +trifurcates +trifurcating +trifurcation +trifurcations +trig +trigeminal +trigeminals +trigged +trigger +triggered +triggerfish +triggerfishes +triggering +triggerman +triggermen +triggers +triggest +trigging +trigly +triglyceride +triglycerides +triglyph +triglyphic +triglyphical +triglyphs +trigness +trignesses +trigo +trigon +trigonal +trigonally +trigonometric +trigonometrical +trigonometrically +trigonometries +trigonometry +trigons +trigos +trigram +trigrams +trigraph +trigraphic +trigraphs +trigs +trihalomethane +trihalomethanes +trihedra +trihedral +trihedrals +trihedron +trihedrons +trihybrid +trihybrids +trihydroxy +triiodothyronine +triiodothyronines +trijet +trijets +trike +trikes +trilateral +trilbies +trilby +trilinear +trilingual +trilingually +triliteral +triliteralism +triliteralisms +triliterals +trill +trilled +triller +trillers +trilling +trillion +trillions +trillionth +trillionths +trillium +trilliums +trills +trilobal +trilobate +trilobed +trilobite +trilobites +trilogies +trilogy +trim +trimaran +trimarans +trimer +trimeric +trimerous +trimers +trimester +trimesters +trimeter +trimeters +trimethoprim +trimethoprims +trimetrogon +trimetrogons +trimly +trimmed +trimmer +trimmers +trimmest +trimming +trimmings +trimness +trimnesses +trimonthly +trimorph +trimorphic +trimorphs +trimotor +trimotors +trims +trinal +trinary +trindle +trindled +trindles +trindling +trine +trined +trines +trining +trinitarian +trinities +trinitrotoluene +trinitrotoluenes +trinity +trinket +trinketed +trinketer +trinketers +trinketing +trinketries +trinketry +trinkets +trinkums +trinocular +trinodal +trinomial +trinomials +trinucleotide +trinucleotides +trio +triode +triodes +triol +triolet +triolets +triols +trios +triose +trioses +trioxid +trioxide +trioxides +trioxids trip +tripack +tripacks +tripart +tripartite +tripe +tripedal +tripes +triphase +triphenylmethane +triphenylmethanes +triphosphate +triphosphates +triphthong +triphthongal +triphthongs +tripinnate +tripinnately +triplane +triplanes +triple +tripled +triples +triplet +tripletail +tripletails +triplets +triplex +triplexes +triplicate +triplicated +triplicates +triplicating +triplication +triplications +triplicities +triplicity +tripling +triplite +triplites +triploblastic +triploid +triploidies +triploids +triploidy +triply +tripod +tripodal +tripodic +tripodies +tripods +tripody +tripoli +tripolis +tripos +triposes +tripped +tripper +trippers +trippet +trippets +trippier +trippiest +tripping +trippingly +trippings +trippy +trips +triptane +triptanes +triptyca +triptycas +triptych +triptychs +tripwire +tripwires +triquetrous +triradiate +trireme +triremes +trisaccharide +trisaccharides +triscele +trisceles +trisect +trisected +trisecting +trisection +trisections +trisector +trisectors +trisects +triseme +trisemes +trisemic +trishaw +trishaws +triskaidekaphobia +triskaidekaphobias +triskele +triskeles +triskelion +triskelions +trismic +trismus +trismuses +trisoctahedra +trisoctahedron +trisoctahedrons +trisome +trisomes +trisomic +trisomics +trisomies +trisomy +tristate +triste +tristearin +tristearins +tristeza +tristezas +tristful +tristfully +tristfulness +tristfulnesses +tristich +tristichs +tristimulus +trisubstituted +trisulfide +trisulfides +trisyllabic +trisyllable +trisyllables +trite +tritely +triteness +tritenesses +triter +tritest +tritheism +tritheisms +tritheist +tritheistic +tritheistical +tritheists +trithing +trithings +tritiated +triticale +triticales +triticum +triticums +tritium +tritiums +tritoma +tritomas +triton +tritone +tritones +tritons +triturable +triturate +triturated +triturates +triturating +trituration +triturations +triturator +triturators +triumph +triumphal +triumphalism +triumphalisms +triumphalist +triumphalists +triumphant +triumphantly +triumphed +triumphing +triumphs +triumvir +triumvirate +triumvirates +triumviri +triumvirs +triune +triunes +triunities +triunity +trivalent +trivalve +trivalves +trivet +trivets +trivia +trivial +trivialise +trivialised +trivialises +trivialising +trivialist +trivialists +trivialities +triviality +trivialization +trivializations +trivialize +trivialized +trivializes +trivializing +trivially +trivium +triweeklies +triweekly +troak +troaked +troaking +troaks +trocar +trocars +trochaic +trochaics +trochal +trochanter +trochanteral +trochanteric +trochanters +trochar +trochars +troche +trochee +trochees +troches +trochil +trochili +trochils +trochilus +trochlea +trochleae +trochlear +trochlears +trochleas +trochoid +trochoidal +trochoids +trochophore +trochophores +trock +trocked +trocking +trocks +trod +trodden +trode +troffer +troffers +troglodyte +troglodytes +troglodytic +trogon +trogons +troika +troikas +troilism +troilisms +troilite +troilites +troilus +troiluses +trois +troke +troked +trokes +troking +troland +trolands +troll +trolled +troller +trollers +trolley trolleybus +trolleybuses +trolleybusses +trolleyed +trolleying +trolleys +trollied +trollies +trolling +trollings +trollop +trollops +trollopy +trolls +trolly +trollying +trombone +trombones +trombonist +trombonists +trommel +trommels +tromp +trompe +tromped +trompes +tromping +tromps +trona +tronas +trone +trones troop +trooped +trooper +troopers +troopial +troopials +trooping +troops +troopship +troopships +trooz +trop +trope +tropes +trophallaxes +trophallaxis +trophic +trophically +trophied +trophies +trophoblast +trophoblastic +trophoblasts +trophozoite +trophozoites +trophy +trophying +tropic +tropical +tropicalize +tropicalized +tropicalizes +tropicalizing +tropically +tropics +tropin +tropine +tropines +tropins +tropism +tropisms +tropistic +tropocollagen +tropocollagens +tropologic +tropological +tropologically +tropomyosin +tropomyosins +troponin +troponins +tropopause +tropopauses +troposphere +tropospheres +tropospheric +tropotaxes +tropotaxis +trot +troth +trothed +trothing +trothplight +trothplighted +trothplighting +trothplights +troths +trotline +trotlines +trots +trotted +trotter +trotters +trotting +trotyl +trotyls +troubadour +troubadours trouble +troubled +troublemaker +troublemakers +troublemaking +troublemakings +troubler +troublers +troubles +troubleshoot +troubleshooter +troubleshooters +troubleshooting +troubleshoots +troubleshot troublesome +troublesomely +troublesomeness +troublesomenesses +troubling +troublous +troublously +troublousness +troublousnesses +trough +troughs +trounce +trounced +trouncer +trouncers +trounces +trouncing +troupe +trouped +trouper +troupers +troupes +troupial +troupials +trouping +trouser trousers +trousseau +trousseaus +trousseaux +trout +troutier +troutiest +trouts +trouty +trouvere +trouveres +trouveur +trouveurs +trove +trover +trovers +troves +trow +trowed +trowel +troweled +troweler +trowelers +troweling +trowelled +trowelling +trowels +trowing +trows +trowsers +trowth +trowths +troy +troys +truancies +truancy +truant +truanted +truanting +truantries +truantry +truants +truce +truced +truces +trucing truck +truckage +truckages +trucked +trucker +truckers +truckful +truckfuls +trucking +truckings +truckle +truckled +truckler +trucklers +truckles +truckline +trucklines +truckling +truckload +truckloads +truckman +truckmaster +truckmasters +truckmen +trucks +truculence +truculences +truculencies +truculency +truculent +truculently +trudge +trudged +trudgen +trudgens +trudgeon +trudgeons +trudger +trudgers +trudges +trudging true +trueblue +trueblues +trueborn +truebred +trued +truehearted +trueheartedness +trueheartednesses +trueing +truelove +trueloves +trueness +truenesses +truepennies +truepenny +truer +trues +truest +truffe +truffes +truffle +truffled +truffles +trug +trugs +truing +truism +truisms +truistic +trull +trulls truly +trumeau +trumeaux +trump +trumped +trumperies +trumpery +trumpet +trumpeted +trumpeter +trumpeters +trumpeting +trumpetlike +trumpets +trumping +trumps +truncate +truncated +truncates +truncating +truncation +truncations +truncheon +truncheoned +truncheoning +truncheons +trundle +trundled +trundler +trundlers +trundles +trundling trunk +trunked +trunkfish +trunkfishes +trunkful +trunkfuls +trunks +trunksful +trunnel +trunnels +trunnion +trunnions +truss +trussed +trusser +trussers +trusses +trussing +trussings trust +trustabilities +trustability +trustable +trustbuster +trustbusters +trusted +trustee +trusteed +trusteeing +trustees +trusteeship +trusteeships +truster +trusters +trustful +trustfully +trustfulness +trustfulnesses +trustier +trusties +trustiest +trustily +trustiness +trustinesses +trusting +trustingly +trustingness +trustingnesses +trustless +trustor +trustors +trusts +trustworthily +trustworthiness +trustworthinesses +trustworthy +trusty truth +truthful +truthfully +truthfulness +truthfulnesses +truths try -tshirt +trying +tryingly +tryma +trymata +tryout +tryouts +trypanosome +trypanosomes +trypanosomiases +trypanosomiasis +trypsin +trypsinogen +trypsinogens +trypsins +tryptamine +tryptamines +tryptic +tryptophan +tryptophane +tryptophanes +tryptophans +trysail +trysails +tryst +tryste +trysted +tryster +trysters +trystes +trysting +trysts +tryworks +tsade +tsades +tsadi +tsadis +tsar +tsardom +tsardoms +tsarevna +tsarevnas +tsarina +tsarinas +tsarism +tsarisms +tsarist +tsarists +tsaritza +tsaritzas +tsars +tsetse +tsetses +tsimmes +tsimmeses +tsk +tsked +tsking +tsks +tsktsk +tsktsked +tsktsking +tsktsks +tsooris +tsores +tsoris +tsorriss +tsuba +tsunami +tsunamic +tsunamis +tsuris +tsutsugamushi +tuatara +tuataras +tuatera +tuateras +tub +tuba +tubae +tubaist +tubaists +tubal +tubas +tubate +tubbable +tubbed +tubber +tubbers +tubbier +tubbiest +tubbing +tubby tube +tubed +tubeless +tubelike +tubenose +tubenoses +tuber +tubercle +tubercles +tubercular +tuberculars +tuberculate +tuberculated +tuberculin +tuberculins +tuberculoid +tuberculoses +tuberculosis +tuberculous +tuberoid +tuberose +tuberoses +tuberosities +tuberosity +tuberous +tubers +tubes +tubework +tubeworks +tubful +tubfuls +tubifex +tubifexes +tubificid +tubificids +tubiform +tubing +tubings +tubist +tubists +tublike +tubocurarine +tubocurarines +tubs +tubular +tubulate +tubulated +tubulates +tubulating +tubule +tubules +tubulin +tubulins +tubulose +tubulous +tubulure +tubulures +tuchun +tuchuns +tuck +tuckahoe +tuckahoes +tucked +tucker +tuckered +tuckering +tuckers +tucket +tuckets +tucking +tucks +tuckshop +tuckshops +tufa +tufaceous +tufas +tuff +tuffaceous +tuffet +tuffets +tuffs +tufoli +tuft +tufted +tufter +tufters +tuftier +tuftiest +tuftily +tufting +tufts +tufty +tug +tugboat +tugboats +tugged +tugger +tuggers +tugging +tughrik +tughriks +tugless +tugrik +tugriks +tugs +tui +tuille +tuilles +tuis +tuition +tuitional +tuitions +tuladi +tuladis +tularemia +tularemias +tularemic +tule +tules +tulip +tulips +tulipwood +tulipwoods +tulle +tulles +tullibee +tullibees +tumble +tumblebug +tumblebugs +tumbled +tumbledown +tumbler +tumblerful +tumblerfuls +tumblers +tumbles +tumbleweed +tumbleweeds +tumbling +tumblings +tumbrel +tumbrels +tumbril +tumbrils +tumefaction +tumefactions +tumefied +tumefies +tumefy +tumefying +tumescence +tumescences +tumescent +tumid +tumidities +tumidity +tumidly +tummies +tummler +tummlers +tummy +tumor +tumoral +tumorigeneses +tumorigenesis +tumorigenic +tumorigenicities +tumorigenicity +tumorlike +tumorous +tumors +tumour +tumours +tump +tumped +tumping +tumpline +tumplines +tumps +tumular +tumuli +tumulose +tumulous +tumult +tumults +tumultuary +tumultuous +tumultuously +tumultuousness +tumultuousnesses +tumulus +tumuluses +tun +tuna +tunabilities +tunability +tunable +tunableness +tunablenesses +tunably +tunas +tundish +tundishes +tundra +tundras tune +tuneable +tuneably +tuned +tuneful +tunefully +tunefulness +tunefulnesses +tuneless +tunelessly +tuner +tuners +tunes +tunesmith +tunesmiths +tuneup +tuneups +tung +tungs +tungstate +tungstates +tungsten +tungstens +tungstic +tunic +tunica +tunicae +tunicate +tunicated +tunicates +tunicle +tunicles +tunics +tuning +tunnage +tunnages +tunned +tunnel +tunneled +tunneler +tunnelers +tunneling +tunnelled +tunnellike +tunnelling +tunnels +tunnies +tunning +tunny +tuns +tup +tupelo +tupelos +tupik +tupiks +tupped +tuppence +tuppences +tuppenny +tupping +tups +tuque +tuques +turaco +turacos +turacou +turacous +turban +turbaned +turbanned +turbans +turbaries +turbary +turbellarian +turbellarians +turbeth +turbeths +turbid +turbidimeter +turbidimeters +turbidimetric +turbidimetrically +turbidimetries +turbidimetry +turbidite +turbidites +turbidities +turbidity +turbidly +turbidness +turbidnesses +turbinal +turbinals +turbinate +turbinated +turbinates +turbine +turbines +turbit +turbith +turbiths +turbits +turbo +turbocar +turbocars +turbocharged +turbocharger +turbochargers +turboelectric +turbofan +turbofans +turbogenerator +turbogenerators +turbojet +turbojets +turbomachineries +turbomachinery +turboprop +turboprops +turbos +turboshaft +turboshafts +turbot +turbots +turbulence +turbulences +turbulencies +turbulency +turbulent +turbulently +turd +turdine +turds +tureen +tureens +turf +turfed +turfier +turfiest +turfing +turfless +turflike +turfman +turfmen +turfs +turfski +turfskiing +turfskiings +turfskis +turfy +turgencies +turgency +turgent +turgescence +turgescences +turgescent +turgid +turgidities +turgidity +turgidly +turgidness +turgidnesses +turgite +turgites +turgor +turgors +turista +turistas +turk turkey +turkeys +turkois +turkoises +turks +turmeric +turmerics +turmoil +turmoiled +turmoiling +turmoils turn +turnable +turnabout +turnabouts +turnaround +turnarounds +turnbuckle +turnbuckles +turncoat +turncoats +turndown +turndowns +turned +turner +turneries +turners +turnery +turnhall +turnhalls turning +turnings +turnip +turnips +turnkey +turnkeys +turnoff +turnoffs +turnout +turnouts +turnover +turnovers +turnpike +turnpikes +turns +turnsole +turnsoles +turnspit +turnspits +turnstile +turnstiles +turnstone +turnstones +turntable +turntables +turnup +turnups +turnverein +turnvereins +turophile +turophiles +turpentine +turpentined +turpentines +turpentining +turpeth +turpeths +turpitude +turpitudes +turps +turquois +turquoise +turquoises +turret +turreted +turrets +turrical +turtle +turtleback +turtlebacks +turtled +turtledove +turtledoves +turtlehead +turtleheads +turtleneck +turtlenecked +turtlenecks +turtler +turtlers +turtles +turtling +turtlings +turves +tusche +tusches +tush +tushed +tushes +tushie +tushies +tushing +tushy +tusk +tusked +tusker +tuskers +tusking +tuskless +tusklike +tusks +tussah +tussahs +tussal +tussar +tussars +tusseh +tussehs +tusser +tussers +tussis +tussises +tussive +tussle +tussled +tussles +tussling +tussock +tussocks +tussocky +tussor +tussore +tussores +tussors +tussuck +tussucks +tussur +tussurs +tut +tutee +tutees +tutelage +tutelages +tutelar +tutelaries +tutelars +tutelary tutor -tv +tutorage +tutorages +tutored +tutoress +tutoresses +tutorial +tutorials +tutoring +tutors +tutorship +tutorships +tutoyed +tutoyer +tutoyered +tutoyering +tutoyers +tuts +tutted +tutti +tutties +tutting +tuttis +tutty +tutu +tutus +tux +tuxedo +tuxedoed +tuxedoes +tuxedos +tuxes +tuyer +tuyere +tuyeres +tuyers +twa +twaddle +twaddled +twaddler +twaddlers +twaddles +twaddling +twae +twaes +twain +twains +twang +twanged +twanger +twangers +twangier +twangiest +twanging +twangle +twangled +twangler +twanglers +twangles +twangling +twangs +twangy +twankies +twanky +twas +twasome +twasomes +twat +twats +twattle +twattled +twattles +twattling +twayblade +twayblades +tweak +tweaked +tweakier +tweakiest +tweaking +tweaks +tweaky +twee +tweed +tweedier +tweediest +tweediness +tweedinesses +tweedle +tweedled +tweedles +tweedling +tweeds +tweedy +tween +tweenies +tweeny +tweet +tweeted +tweeter +tweeters +tweeting +tweets +tweeze +tweezed +tweezer +tweezers +tweezes +tweezing +twelfth +twelfths +twelve +twelvemo +twelvemonth +twelvemonths +twelvemos +twelves +twenties +twentieth +twentieths +twenty +twerp +twerps +twibil +twibill +twibills +twibils twice +twiddle +twiddled +twiddler +twiddlers +twiddles +twiddlier +twiddliest +twiddling +twiddly +twier +twiers +twig +twigged +twiggen +twiggier +twiggiest +twigging +twiggy +twigless +twiglike +twigs +twilight +twilights +twilit +twill +twilled +twilling +twillings +twills twin +twinberries +twinberry +twinborn +twine +twined +twiner +twiners +twines +twinflower +twinflowers +twinge +twinged +twingeing +twinges +twinging +twinier +twiniest +twinight +twining +twinjet +twinjets +twinkle +twinkled +twinkler +twinklers +twinkles +twinkling +twinklings +twinkly +twinned +twinning +twinnings +twins +twinset +twinsets +twinship +twinships +twiny +twirl +twirled +twirler +twirlers +twirlier +twirliest +twirling +twirls +twirly +twirp +twirps twist +twisted +twister +twisters +twistier +twistiest +twisting +twistings +twists +twisty +twit +twitch +twitched +twitcher +twitchers +twitches +twitchier +twitchiest +twitchily +twitching +twitchy +twits +twitted +twitter +twittered +twittering +twitters +twittery +twitting +twixt +two +twofer +twofers +twofold +twofolds +twopence +twopences +twopenny +twos +twosome +twosomes +twyer +twyers +tycoon +tycoons +tye +tyee +tyees +tyer +tyers +tyes +tying +tyke +tykes +tylosin +tylosins +tymbal +tymbals +tympan +tympana +tympanal +tympani +tympanic +tympanies +tympanist +tympanists +tympanites +tympaniteses +tympanitic +tympano +tympans +tympanum +tympanums +tympany +tyne +tyned +tynes +tyning +typable +typal type +typeable +typebar +typebars +typecase +typecases +typecast +typecasting +typecasts +typed +typeface +typefaces +typefounder +typefounders +typefounding +typefoundings +types +typescript +typescripts +typeset +typesets +typesetter +typesetters +typesetting +typesettings +typestyle +typestyles +typewrite typewriter +typewriters +typewrites +typewriting +typewritings +typewritten +typewrote +typey +typhlosole +typhlosoles +typhoid +typhoids +typhon +typhonic +typhons typhoon +typhoons +typhose +typhous +typhus +typhuses +typic typical +typicalities +typicality +typically +typicalness +typicalnesses +typier +typiest +typification +typifications +typified +typifier +typifiers +typifies +typify +typifying +typing typist +typists +typo +typograph +typographed +typographer +typographers +typographic +typographical +typographically +typographies +typographing +typographs +typography +typological +typologically +typologies +typologist +typologists +typology +typos +typp +typps +typy +tyramine +tyramines +tyrannic +tyrannical +tyrannically +tyrannicalness +tyrannicalnesses +tyrannicide +tyrannicides +tyrannies +tyrannise +tyrannised +tyrannises +tyrannising +tyrannize +tyrannized +tyrannizer +tyrannizers +tyrannizes +tyrannizing +tyrannosaur +tyrannosaurs +tyrannosaurus +tyrannosauruses +tyrannous +tyrannously +tyranny +tyrant +tyrants tyre +tyred +tyres +tyring +tyro +tyrocidin +tyrocidine +tyrocidines +tyrocidins +tyronic +tyros +tyrosinase +tyrosinases +tyrosine +tyrosines +tyrothricin +tyrothricins +tythe +tythed +tythes +tything +tzaddik +tzaddikim +tzar +tzardom +tzardoms +tzarevna +tzarevnas +tzarina +tzarinas +tzarism +tzarisms +tzarist +tzarists +tzaritza +tzaritzas +tzars +tzetze +tzetzes +tzigane +tziganes +tzimmes +tzimmeses +tzitzis +tzitzit +tzitzith +tzuris +ubieties +ubiety +ubique +ubiquinone +ubiquinones +ubiquities +ubiquitous +ubiquitously +ubiquitousness +ubiquitousnesses +ubiquity +udder +udders +udo +udometer +udometers +udometries +udometry +udos +ufological +ufologies +ufologist +ufologists +ufology +ugh +ughs +uglier +uglies +ugliest +uglification +uglifications +uglified +uglifier +uglifiers +uglifies +uglify +uglifying +uglily +ugliness +uglinesses ugly +ugsome +uh +uhlan +uhlans +uintahite +uintahites +uintaite +uintaites +ukase +ukases +uke +ukelele +ukeleles +ukes +ukulele +ukuleles +ulama +ulamas +ulan +ulans +ulcer +ulcerate +ulcerated +ulcerates +ulcerating +ulceration +ulcerations +ulcerative +ulcered +ulcering +ulcerogenic +ulcerous +ulcers +ulema +ulemas +ulexite +ulexites +ullage +ullaged +ullages +ulna +ulnad +ulnae +ulnar +ulnas +ulpan +ulpanim +ulster +ulsters +ulterior +ulteriorly +ultima +ultimacies +ultimacy +ultimas +ultimata +ultimate +ultimated +ultimately +ultimateness +ultimatenesses +ultimates +ultimating +ultimatum +ultimatums +ultimo +ultimogeniture +ultimogenitures +ultra +ultrabasic +ultrabasics +ultracareful +ultracasual +ultracautious +ultracentrifugal +ultracentrifugally +ultracentrifugation +ultracentrifugations +ultracentrifuge +ultracentrifuged +ultracentrifuges +ultracentrifuging +ultrachic +ultracivilized +ultraclean +ultracold +ultracommercial +ultracompact +ultracompetent +ultraconservatism +ultraconservatisms +ultraconservative +ultraconservatives +ultracontemporaries +ultracontemporary +ultraconvenient +ultracool +ultracritical +ultrademocratic +ultradense +ultradistance +ultradistances +ultradistant +ultradry +ultraefficient +ultraenergetic +ultraexclusive +ultrafamiliar +ultrafast +ultrafastidious +ultrafeminine +ultrafiche +ultrafiches +ultrafiltrate +ultrafiltrates +ultrafiltration +ultrafiltrations +ultrafine +ultraglamorous +ultrahazardous +ultraheat +ultraheated +ultraheating +ultraheats +ultraheavy +ultrahigh +ultrahip +ultrahot +ultrahuman +ultraism +ultraisms +ultraist +ultraistic +ultraists +ultraleft +ultraleftism +ultraleftisms +ultraleftist +ultraleftists +ultraliberal +ultraliberalism +ultraliberalisms +ultraliberals +ultralight +ultralights +ultralightweight +ultralow +ultramafic +ultramarathon +ultramarathoner +ultramarathoners +ultramarathons +ultramarine +ultramarines +ultramasculine +ultramicro +ultramicroscope +ultramicroscopes +ultramicroscopic +ultramicroscopical +ultramicroscopically +ultramicrotome +ultramicrotomes +ultramicrotomies +ultramicrotomy +ultramilitant +ultraminiature +ultraminiaturized +ultramodern +ultramodernist +ultramodernists +ultramontane +ultramontanes +ultramontanism +ultramontanisms +ultranationalism +ultranationalisms +ultranationalist +ultranationalistic +ultranationalists +ultraorthodox +ultraparadoxical +ultrapatriotic +ultraphysical +ultrapowerful +ultrapractical +ultraprecise +ultraprecision +ultraprecisions +ultraprofessional +ultraprogressive +ultraprogressives +ultrapure +ultraquiet +ultraradical +ultraradicals +ultrarapid +ultrarare +ultrararefied +ultrarational +ultrarealism +ultrarealisms +ultrarealist +ultrarealistic +ultrarealists +ultrared +ultrareds +ultrarefined +ultrareliable +ultrarespectable +ultrarevolutionaries +ultrarevolutionary +ultrarich +ultraright +ultrarightist +ultrarightists +ultraromantic +ultraroyalist +ultraroyalists +ultras +ultrasafe +ultrasecret +ultrasegregationist +ultrasegregationists +ultrasensitive +ultraserious +ultrasharp +ultrashort +ultrasimple +ultraslick +ultraslow +ultrasmall +ultrasmart +ultrasmooth +ultrasoft +ultrasonic +ultrasonically +ultrasonics +ultrasonographer +ultrasonographers +ultrasonographic +ultrasonographies +ultrasonography +ultrasophisticated +ultrasound +ultrasounds +ultrastructural +ultrastructurally +ultrastructure +ultrastructures +ultrathin +ultravacua +ultravacuum +ultravacuums +ultraviolence +ultraviolences +ultraviolent +ultraviolet +ultraviolets +ultravirile +ultravirilities +ultravirility +ultrawide +ulu +ululant +ululate +ululated +ululates +ululating +ululation +ululations +ulus +ulva +ulvas +um +umangite +umangites +umbel +umbeled +umbellar +umbellate +umbelled +umbellet +umbellets +umbellifer +umbelliferous +umbellifers +umbels +umber +umbered +umbering +umbers +umbilical +umbilicals +umbilicate +umbilicated +umbilication +umbilications +umbilici +umbilicus +umbilicuses +umbles +umbo +umbonal +umbonate +umbones +umbonic +umbos +umbra +umbrae +umbrage +umbrageous +umbrageously +umbrageousness +umbrageousnesses +umbrages +umbral +umbras umbrella +umbrellaed +umbrellaing +umbrellas +umbrette +umbrettes +umiac +umiack +umiacks +umiacs +umiak +umiaks +umiaq +umiaqs +umlaut +umlauted +umlauting +umlauts +umm +ump +umped +umping +umpirage +umpirages +umpire +umpired +umpires +umpiring +umps +umpteen +umpteenth +umteenth +un +unabashed +unabashedly +unabated +unabatedly unable +unabraded +unabridged +unabsorbed +unabsorbent +unabused +unacademic +unacademically +unaccented +unacceptabilities +unacceptability +unacceptable +unacceptably +unaccepted +unacclimated +unacclimatized +unaccommodated +unaccommodating +unaccompanied +unaccountabilities +unaccountability +unaccountable +unaccountably +unaccounted +unaccredited +unacculturated +unaccustomed +unaccustomedly +unachieved +unacknowledged +unacquainted +unactable +unacted +unactorish +unadaptable +unadapted +unaddressed +unadjudicated +unadjusted +unadmired +unadmitted +unadoptable +unadorned +unadult +unadulterated +unadulteratedly +unadventurous +unadvertised +unadvised +unadvisedly +unaesthetic +unaffected +unaffectedly +unaffectedness +unaffectednesses +unaffecting +unaffectionate +unaffectionately +unaffiliated +unaffluent +unaffordable +unafraid +unaged +unageing +unaggressive +unagile +unaging +unai +unaided +unaimed +unaired +unais +unakin +unakite +unakites +unalienable +unalienated +unaligned +unalike +unalleviated +unallied +unallocated +unalloyed +unalluring +unalterabilities +unalterability +unalterable +unalterableness +unalterablenesses +unalterably +unaltered +unambiguous +unambiguously +unambitious +unambivalent +unambivalently +unamenable +unamended +unamiable +unamortized +unamplified +unamused +unamusing +unanalyzable +unanalyzed +unanchor +unanchored +unanchoring +unanchors +unaneled +unanesthetized +unanimities +unanimity +unanimous +unanimously +unannotated +unannounced +unanswerabilities +unanswerability +unanswerable +unanswerably +unanswered +unanticipated +unanticipatedly +unapologetic +unapologetically +unapologizing +unapparent +unappealable +unappealing +unappealingly +unappeasable +unappeasably +unappeased +unappetizing +unappetizingly +unappreciated +unappreciation +unappreciations +unappreciative +unapproachabilities +unapproachability +unapproachable +unapproachably +unappropriated +unapproved +unapt +unaptly +unaptness +unaptnesses +unarguable +unarguably +unargued +unarm +unarmed +unarming +unarmored +unarms +unarrogant +unartful +unarticulated +unartistic +unary +unashamed +unashamedly +unasked +unaspirated +unassailabilities +unassailability +unassailable +unassailableness +unassailablenesses +unassailably +unassailed +unassembled +unassertive +unassertively +unassigned +unassimilable +unassimilated +unassisted +unassociated +unassuageable +unassuaged +unassuming +unassumingness +unassumingnesses +unathletic +unatoned +unattached +unattainable +unattended +unattenuated +unattested +unattractive +unattractively +unattractiveness +unattractivenesses +unattributable +unattributed +unattuned +unau +unaudited +unaus +unauthentic +unauthorized +unautomated +unavailabilities +unavailability +unavailable +unavailing +unavailingly +unavailingness +unavailingnesses +unaverage +unavoidable +unavoidably +unavowed +unawaked +unawakened +unawarded +unaware +unawarely +unawareness +unawarenesses +unawares +unawed +unawesome +unbacked +unbaked +unbalance +unbalanced +unbalances +unbalancing +unballasted +unban +unbandage +unbandaged +unbandages +unbandaging +unbanned +unbanning +unbans +unbaptized +unbar +unbarbed +unbarbered +unbarred +unbarricaded +unbarring +unbars +unbased +unbated +unbathed +unbe +unbear unbearable +unbearably +unbeared +unbearing +unbears +unbeatable +unbeatably +unbeaten +unbeautiful +unbeautifully +unbecoming +unbecomingly +unbecomingness +unbecomingnesses +unbeholden +unbeknown +unbeknownst +unbelief +unbeliefs unbelievable +unbelievably +unbeliever +unbelievers +unbelieving +unbelievingly +unbelligerent +unbeloved +unbelt +unbelted +unbelting +unbelts +unbemused +unbend +unbendable +unbended +unbending +unbends +unbenign +unbent +unbeseeming +unbiased +unbiasedness +unbiasednesses +unbiblical +unbid +unbidden +unbilled +unbind +unbinding +unbinds +unbitted +unbitten +unbitter +unblamed +unbleached +unblemished +unblenched +unblended +unblessed +unblest +unblinded +unblinking +unblinkingly +unblock +unblocked +unblocking +unblocks +unblooded +unbloodied +unbloody +unblushing +unblushingly +unbodied +unbolt +unbolted +unbolting +unbolts +unboned +unbonnet +unbonneted +unbonneting +unbonnets +unbookish +unborn +unbosom +unbosomed +unbosoming +unbosoms +unbought +unbouncy +unbound +unbounded +unboundedness +unboundednesses +unbowdlerized +unbowed +unbox +unboxed +unboxes +unboxing +unbrace +unbraced +unbraces +unbracing +unbracketed +unbraid +unbraided +unbraiding +unbraids +unbrake +unbraked +unbrakes +unbraking +unbranched +unbranded +unbreachable +unbreakable +unbreathable +unbred +unbreech +unbreeched +unbreeches +unbreeching +unbridgeable +unbridged +unbridle +unbridled +unbridles +unbridling +unbriefed +unbright +unbrilliant +unbroke +unbroken +unbruised +unbrushed +unbuckle +unbuckled +unbuckles +unbuckling +unbudgeable +unbudgeably +unbudgeted +unbudging +unbudgingly +unbuffered +unbuild +unbuildable +unbuilding +unbuilds +unbuilt +unbulky +unbundle +unbundled +unbundles +unbundling +unburden +unburdened +unburdening +unburdens +unbureaucratic +unburied +unburnable +unburned +unburnt +unbusinesslike +unbusted +unbusy +unbuttered +unbutton +unbuttoned +unbuttoning +unbuttons +uncage +uncaged +uncages +uncaging +uncake +uncaked +uncakes +uncaking +uncalcified +uncalcined +uncalculated +uncalculating +uncalibrated +uncalled +uncalloused +uncanceled +uncandid +uncandidly +uncannier +uncanniest +uncannily +uncanniness +uncanninesses +uncanny +uncanonical +uncap +uncapitalized +uncapped +uncapping +uncaps +uncaptioned +uncapturable +uncaring +uncarpeted +uncase +uncased +uncases +uncashed +uncasing +uncasked +uncastrated +uncataloged +uncatchable +uncatchy +uncategorizable +uncaught +uncaused +unceasing +unceasingly +uncelebrated +uncensored +uncensorious +uncensured +unceremonious +unceremoniously +unceremoniousness +unceremoniousnesses uncertain +uncertainly +uncertainness +uncertainnesses +uncertainties +uncertainty +uncertified +unchain +unchained +unchaining +unchains +unchallengeable +unchallenged +unchallenging +unchancy +unchangeabilities +unchangeability +unchangeable +unchangeableness +unchangeablenesses +unchangeably +unchanged +unchanging +unchangingly +unchangingness +unchangingnesses +unchanneled +unchaperoned +uncharacteristic +uncharacteristically +uncharge +uncharged +uncharges +uncharging +uncharismatic +uncharitable +uncharitableness +uncharitablenesses +uncharitably +uncharming +uncharted +unchartered +unchary +unchaste +unchastely +unchasteness +unchastenesses +unchastities +unchastity +unchauvinistic +uncheckable +unchecked +unchewable +unchewed +unchic +unchicly +unchildlike +unchivalrous +unchivalrously +unchlorinated +unchoke +unchoked +unchokes +unchoking +unchoreographed +unchosen +unchristened +unchristian +unchronicled +unchronological +unchurch +unchurched +unchurches +unchurching +unchurchly +unci +uncia +unciae +uncial +uncially +uncials +unciform +unciforms +unciliated +uncinal +uncinariases +uncinariasis +uncinate +uncinematic +uncini +uncinus +uncirculated +uncircumcised +uncircumcision +uncircumcisions +uncivil +uncivilized +uncivilly +unclad +unclaimed +unclamp +unclamped +unclamping +unclamps +unclarified +unclarities +unclarity +unclasp +unclasped +unclasping +unclasps +unclassical +unclassifiable +unclassified uncle +unclean +uncleaned +uncleaner +uncleanest +uncleanliness +uncleanlinesses +uncleanly +uncleanness +uncleannesses +unclear +unclearer +unclearest +unclench +unclenched +unclenches +unclenching +uncles +uncliched +unclimbable +unclimbableness +unclimbablenesses +unclinch +unclinched +unclinches +unclinching +unclip +unclipped +unclipping +unclips +uncloak +uncloaked +uncloaking +uncloaks +unclog +unclogged +unclogging +unclogs +unclose +unclosed +uncloses +unclosing +unclothe +unclothed +unclothes +unclothing +uncloud +unclouded +uncloudedly +unclouding +unclouds +uncloyed +uncloying +unclubbable +unclutter +uncluttered +uncluttering +unclutters +unco +uncoalesce +uncoalesced +uncoalesces +uncoalescing +uncoated +uncoating +uncock +uncocked +uncocking +uncocks +uncoded +uncodified +uncoerced +uncoercive +uncoercively +uncoffin +uncoffined +uncoffining +uncoffins +uncoil +uncoiled +uncoiling +uncoils +uncoined +uncollected +uncollectible +uncollectibles +uncolored +uncombative +uncombed +uncombined +uncomely uncomfortable +uncomfortably +uncomic +uncommercial +uncommercialized +uncommitted +uncommon +uncommoner +uncommonest +uncommonly +uncommonness +uncommonnesses +uncommunicable +uncommunicative +uncompassionate +uncompelling +uncompensated +uncompetitive +uncompetitiveness +uncompetitivenesses +uncomplacent +uncomplaining +uncomplainingly +uncompleted +uncomplicated +uncomplimentary +uncompounded +uncomprehended +uncomprehending +uncomprehendingly +uncompromisable +uncompromising +uncompromisingly +uncompromisingness +uncompromisingnesses +uncomputerized +unconcealed +unconceivable +unconcern +unconcerned +unconcernedly +unconcernedness +unconcernednesses +unconcerns unconditional +unconditionally +unconditioned +unconfessed +unconfined +unconfirmed +unconformable +unconformably +unconformities +unconformity +unconfounded +unconfuse +unconfused +unconfuses +unconfusing +uncongenial +uncongenialities +uncongeniality +unconjugated +unconnected +unconquerable +unconquerably +unconquered +unconscionabilities +unconscionability +unconscionable +unconscionableness +unconscionablenesses +unconscionably unconscious +unconsciouses +unconsciously +unconsciousness +unconsciousnesses +unconsecrated +unconsidered +unconsolidated +unconstitutional +unconstitutionalities +unconstitutionality +unconstitutionally +unconstrained +unconstraint +unconstraints +unconstricted +unconstructed +unconstructive +unconsumed +unconsummated +uncontainable +uncontaminated +uncontemplated +uncontemporary +uncontentious +uncontested +uncontracted +uncontradicted +uncontrived +uncontrollabilities +uncontrollability +uncontrollable +uncontrollably +uncontrolled +uncontroversial +uncontroversially +unconventional +unconventionalities +unconventionality +unconventionally +unconverted +unconvinced +unconvincing +unconvincingly +unconvincingness +unconvincingnesses +unconvoyed +uncooked +uncool +uncooled +uncooperative +uncoordinated +uncopyrightable +uncork +uncorked +uncorking +uncorks +uncorrectable +uncorrected +uncorrelated +uncorroborated +uncorrupt +uncorseted +uncos +uncountable +uncounted +uncouple +uncoupled +uncoupler +uncouplers +uncouples +uncoupling +uncourageous +uncouth +uncouthly +uncouthness +uncouthnesses +uncovenanted +uncover +uncovered +uncovering +uncovers +uncoy +uncracked +uncrate +uncrated +uncrates +uncrating +uncrazy +uncreate +uncreated +uncreates +uncreating +uncreative +uncredentialed +uncredited +uncrippled +uncritical +uncritically +uncropped +uncross +uncrossable +uncrossed +uncrosses +uncrossing +uncrowded +uncrown +uncrowned +uncrowning +uncrowns +uncrumple +uncrumpled +uncrumples +uncrumpling +uncrushable +uncrystallized +unction +unctions +unctuous +unctuously +unctuousness +unctuousnesses +uncuff +uncuffed +uncuffing +uncuffs +uncultivable +uncultivated +uncultured +uncurb +uncurbed +uncurbing +uncurbs +uncured +uncurious +uncurl +uncurled +uncurling +uncurls +uncurrent +uncursed +uncurtained +uncus +uncustomarily +uncustomary +uncut +uncute +uncynical +uncynically +undamaged +undamped +undanceable +undaring +undated +undauntable +undaunted +undauntedly +unde +undead +undebatable +undebatably +undecadent +undeceive +undeceived +undeceives +undeceiving +undecidabilities +undecidability +undecidable +undecided +undecideds +undecillion +undecillions +undecipherable +undeciphered +undecked +undeclared +undecomposed +undecorated +undedicated +undee +undefeated +undefended +undefiled +undefinable +undefined +undefoliated +undeformed +undelegated +undeliverable +undelivered +undeluded +undemanding +undemocratic +undemocratically +undemonstrative +undemonstratively +undemonstrativeness +undemonstrativenesses +undeniable +undeniableness +undeniablenesses +undeniably +undenied +undenominational +undependable under +underachieve +underachieved +underachievement +underachievements +underachiever +underachievers +underachieves +underachieving +underact +underacted +underacting +underactive +underactivities +underactivity +underacts +underage +underages +underappreciated +underarm +underarms +underate +underbellies +underbelly +underbid +underbidder +underbidders +underbidding +underbids +underbodies +underbody +underboss +underbosses +underbought +underbred +underbrim +underbrims +underbrush +underbrushes +underbud +underbudded +underbudding +underbudgeted +underbuds +underbuy +underbuying +underbuys +undercapitalized +undercard +undercards +undercarriage +undercarriages +undercharge +undercharged +undercharges +undercharging +underclass +underclasses +underclassman +underclassmen +underclothes +underclothing +underclothings +undercoat +undercoating +undercoatings +undercoats +undercool +undercooled +undercooling +undercools +undercount +undercounted +undercounting +undercounts +undercover +undercroft +undercrofts +undercurrent +undercurrents +undercut +undercuts +undercutting +underdeveloped +underdevelopment +underdevelopments +underdid +underdo +underdoes +underdog +underdogs +underdoing +underdone +underdrawers +undereat +undereaten +undereating +undereats +undereducated +underemphases +underemphasis +underemphasize +underemphasized +underemphasizes +underemphasizing +underemployed +underemployment +underemployments +underestimate +underestimated +underestimates +underestimating +underestimation +underestimations +underexpose +underexposed +underexposes +underexposing +underexposure +underexposures +underfed +underfeed +underfeeding +underfeeds +underfinanced +underfoot +underfund +underfunded +underfunding +underfunds +underfur +underfurs +undergarment +undergarments +undergird +undergirded +undergirding +undergirds +undergirt +underglaze +underglazes +undergo +undergod +undergods +undergoes +undergoing +undergone +undergrad +undergrads +undergraduate +undergraduates underground +undergrounder +undergrounders +undergrounds +undergrowth +undergrowths +underhand +underhanded +underhandedly +underhandedness +underhandednesses +underinflated +underinflation +underinflations +underinsured +underinvestment +underinvestments +underjaw +underjaws +underlaid +underlain +underlap +underlapped +underlapping +underlaps +underlay +underlaying +underlayment +underlayments +underlays +underlet +underlets +underletting +underlie +underlies underline +underlined +underlines +underling +underlings +underlining +underlip +underlips +underlit +underlying +underlyingly +undermanned +undermine +undermined +undermines +undermining +undermost +underneath +undernourished +undernourishment +undernourishments +undernutrition +undernutritions +underpaid +underpainting +underpaintings +underpants +underpart +underparts +underpass +underpasses +underpay +underpaying +underpayment +underpayments +underpays +underpin +underpinned +underpinning +underpinnings +underpins +underplay +underplayed +underplaying +underplays +underplot +underplots +underpopulated +underpowered +underprepared +underprice +underpriced +underprices +underpricing +underprivileged +underproduction +underproductions +underproof +underpublicized +underqualified +underran +underrate +underrated +underrates +underrating +underreact +underreacted +underreacting +underreacts +underreport +underreported +underreporting +underreports +underrepresentation +underrepresentations +underrepresented +underrun +underrunning +underruns +undersaturated +underscore +underscored +underscores +underscoring +undersea +underseas +undersecretaries +undersecretary +undersell +underselling +undersells +underserved +underset +undersets +undersexed +undersheriff +undersheriffs +undershirt +undershirted +undershirts +undershoot +undershooting +undershoots +undershorts +undershot +undershrub +undershrubs +underside +undersides +undersigned +undersize +undersized +underskirt +underskirts +underslung +undersold +underspin +underspins +understaffed +understaffing +understaffings understand +understandabilities +understandability +understandable +understandably +understanding +understandingly +understandings +understands +understate +understated +understatedly +understatement +understatements +understates +understating +understeer +understeered +understeering +understeers +understood +understories +understory +understrapper +understrappers +understrength +understudied +understudies +understudy +understudying +undersupplies +undersupply +undersurface +undersurfaces undertake +undertaken +undertaker +undertakers +undertakes +undertaking +undertakings +undertax +undertaxed +undertaxes +undertaxing +undertenant +undertenants +underthrust +underthrusting +underthrusts +undertone +undertones +undertook +undertow +undertows +undertrick +undertricks +underused +underutilization +underutilizations +underutilize +underutilized +underutilizes +underutilizing +undervaluation +undervaluations +undervalue +undervalued +undervalues +undervaluing +underwater +underway underwear +underweight +underweights +underwent +underwhelm +underwhelmed +underwhelming +underwhelms +underwing +underwings +underwood +underwoods +underwool +underwools +underworld +underworlds +underwrite +underwriter +underwriters +underwrites +underwriting +underwritten +underwrote +undescended +undescribable +undeserved +undeserving +undesignated +undesigning +undesirabilities +undesirability +undesirable +undesirableness +undesirablenesses +undesirables +undesirably +undesired +undetectable +undetected +undeterminable +undetermined +undeterred +undeveloped +undeviating +undeviatingly +undevout +undiagnosable +undiagnosed +undialectical +undid +undidactic +undies +undifferentiated +undigested +undigestible +undignified +undiluted +undiminished +undimmed +undine +undines +undiplomatic +undiplomatically +undirected +undischarged +undisciplined +undisclosed +undiscouraged +undiscoverable +undiscovered +undiscriminating +undiscussed +undisguised +undisguisedly +undismayed +undisputable +undisputed +undissociated +undissolved +undistinguished +undistorted +undistracted +undistributed +undisturbed +undivided +undo +undoable +undocile +undock +undocked +undocking +undocks +undoctored +undoctrinaire +undocumented +undoer +undoers +undoes +undogmatic +undogmatically +undoing +undoings +undomestic +undomesticated +undone +undotted +undouble +undoubled +undoubles +undoubling +undoubtable +undoubted +undoubtedly +undoubting +undrained +undramatic +undramatically +undramatized +undrape +undraped +undrapes +undraping +undraw +undrawing +undrawn +undraws +undreamed +undreamt +undress +undressed +undresses +undressing +undrest +undrew +undried +undrilled +undrinkable +undrunk +undubbed +undue +undulant +undular +undulate +undulated +undulates +undulating +undulation +undulations +undulatory +undulled +unduly +unduplicated +undutiful +undutifully +undutifulness +undutifulnesses +undy +undyed +undying +undynamic +uneager +unearmarked +unearned +unearth +unearthed +unearthing +unearthliness +unearthlinesses +unearthly +unearths +unease +uneases +uneasier +uneasiest +uneasily +uneasiness +uneasinesses +uneasy +uneatable +uneaten +uneccentric +unecological +uneconomic +uneconomical +unedible +unedifying +unedited +uneducable +uneducated +unelaborate +unelectable +unelected +unelectrified +unembarrassed +unembellished +unembittered +unemotional +unemotionally +unemphatic +unemphatically +unempirical +unemployabilities +unemployability +unemployable +unemployables +unemployed +unemployeds unemployment +unemployments +unenchanted +unenclosed +unencouraging +unencumbered +unendearing +unended +unending +unendingly +unendurable +unendurableness +unendurablenesses +unendurably +unenforceable +unenforced +unenlarged +unenlightened +unenlightening +unenriched +unenterprising +unenthusiastic +unenthusiastically +unenviable +unenvied +unenvious +unequal +unequaled +unequalled +unequally +unequals +unequipped +unequivocably +unequivocal +unequivocally +unerased +unerotic +unerring +unerringly +unescapable +unessential +unestablished +unethical +unevaded +unevaluated +uneven +unevener +unevenest +unevenly +unevenness +unevennesses +uneventful +uneventfully +uneventfulness +uneventfulnesses +unevolved +unexamined +unexampled +unexcelled +unexceptionable +unexceptionableness +unexceptionablenesses +unexceptionably +unexceptional +unexcitable +unexcited +unexciting +unexcused +unexercised +unexotic +unexpected +unexpectedly +unexpectedness +unexpectednesses +unexpended +unexpert +unexpired +unexplainable +unexplained +unexploded +unexploited +unexplored +unexposed +unexpressed +unexpressive +unexpurgated +unextraordinary +unfaded +unfading +unfadingly +unfailing +unfailingly unfair +unfairer +unfairest +unfairly +unfairness +unfairnesses +unfaith +unfaithful +unfaithfully +unfaithfulness +unfaithfulnesses +unfaiths +unfaked +unfallen +unfalsifiable +unfaltering +unfalteringly +unfamiliar +unfamiliarities +unfamiliarity +unfamiliarly +unfamous +unfancy +unfashionable +unfashionableness +unfashionablenesses +unfashionably +unfasten +unfastened +unfastening +unfastens +unfastidious +unfathered +unfathomable +unfavorable +unfavorableness +unfavorablenesses +unfavorably +unfavorite +unfazed +unfeared +unfeasible +unfed +unfeeling +unfeelingly +unfeelingness +unfeelingnesses +unfeigned +unfeignedly +unfelt +unfeminine +unfence +unfenced +unfences +unfencing +unfermented +unfertile +unfertilized +unfetter +unfettered +unfettering +unfetters +unfilial +unfilially +unfilled +unfilmed +unfiltered +unfindable +unfinished +unfired +unfished unfit +unfitly +unfitness +unfitnesses +unfits +unfitted +unfitting +unfix +unfixed +unfixes +unfixing +unfixt +unflagging +unflaggingly +unflamboyant +unflappabilities +unflappability +unflappable +unflappably +unflashy +unflattering +unflatteringly +unfledged +unflexed +unflinching +unflinchingly +unflyable +unfocused +unfocussed +unfoiled +unfold +unfolded +unfolder +unfolders +unfolding +unfoldment +unfoldments +unfolds +unfond +unforced +unforeseeable +unforeseen +unforested +unforged +unforgettable +unforgettably +unforgivable +unforgiving +unforgivingness +unforgivingnesses +unforgot +unforked +unformed +unformulated +unforthcoming +unfortified unfortunate +unfortunately +unfortunates +unfossiliferous +unfought +unfound +unfounded +unframed +unfree +unfreed +unfreedom +unfreedoms +unfreeing +unfrees +unfreeze +unfreezes +unfreezing +unfrequented +unfriended +unfriendlier +unfriendliest +unfriendliness +unfriendlinesses +unfriendly +unfrivolous +unfrock +unfrocked +unfrocking +unfrocks +unfroze +unfrozen +unfruitful +unfruitfully +unfruitfulness +unfruitfulnesses +unfulfillable +unfulfilled +unfunded +unfunny +unfurl +unfurled +unfurling +unfurls +unfurnished +unfused +unfussily +unfussy +ungainlier +ungainliest +ungainliness +ungainlinesses +ungainly +ungallant +ungallantly +ungalled +ungarnished +ungenerosities +ungenerosity +ungenerous +ungenerously +ungenial +ungenteel +ungentle +ungentlemanly +ungently +ungentrified +ungerminated +ungifted +ungimmicky +ungird +ungirded +ungirding +ungirds +ungirt +unglamorized +unglamorous +unglazed +unglove +ungloved +ungloves +ungloving +unglue +unglued +unglues +ungluing +ungodlier +ungodliest +ungodliness +ungodlinesses +ungodly +ungot +ungotten +ungovernable +ungowned +ungraced +ungraceful +ungracefully +ungracious +ungraciously +ungraciousness +ungraciousnesses +ungraded +ungrammatical +ungrammaticalities +ungrammaticality +ungraspable +ungrateful +ungratefully +ungratefulness +ungratefulnesses +ungreedy +unground +ungrounded +ungrouped +ungrudging +ungual +unguard +unguarded +unguardedly +unguardedness +unguardednesses +unguarding +unguards +unguent +unguenta +unguents +unguentum +ungues +unguessable +unguided +unguis +ungula +ungulae +ungular +ungulate +ungulates +unhackneyed +unhailed +unhair +unhaired +unhairing +unhairs +unhallow +unhallowed +unhallowing +unhallows +unhalved +unhampered +unhand +unhanded +unhandicapped +unhandier +unhandiest +unhandily +unhandiness +unhandinesses +unhanding +unhands +unhandsome +unhandsomely +unhandy +unhang +unhanged +unhanging +unhangs +unhappier +unhappiest +unhappily +unhappiness +unhappinesses +unhappy +unharmed +unharness +unharnessed +unharnesses +unharnessing +unharvested +unhasty +unhat +unhatched +unhats +unhatted +unhatting +unhealed +unhealthful +unhealthier +unhealthiest +unhealthily +unhealthiness +unhealthinesses +unhealthy +unheard +unheated +unhedged +unheeded +unheeding +unhelm +unhelmed +unhelming +unhelms +unhelped +unhelpful +unhelpfully +unheralded +unheroic +unhesitating +unhesitatingly +unhewn +unhindered +unhinge +unhinged +unhinges +unhinging +unhip +unhired +unhistorical +unhitch +unhitched +unhitches +unhitching +unholier +unholiest +unholily +unholiness +unholinesses +unholy +unhomogenized +unhonored +unhood +unhooded +unhooding +unhoods +unhook +unhooked +unhooking +unhooks +unhoped +unhopeful +unhorse +unhorsed +unhorses +unhorsing +unhouse +unhoused +unhouseled +unhouses +unhousing +unhuman +unhumorous +unhung +unhurried +unhurriedly +unhurt +unhusk +unhusked +unhusking +unhusks +unhydrolyzed +unhygienic +unhyphenated +unhysterical +unhysterically +unialgal +uniaxial +unicameral +unicamerally +unicellular +unicolor +unicorn +unicorns +unicycle +unicycles +unicyclist +unicyclists +unideaed +unideal +unidentifiable +unidentified +unideological +unidimensional +unidimensionalities +unidimensionality +unidiomatic +unidirectional +unidirectionally +uniface +unifaces +unifiable +unific +unification +unifications +unified +unifier +unifiers +unifies +unifilar +unifoliate +unifoliolate uniform +uniformed +uniformer +uniformest +uniforming +uniformitarian +uniformitarianism +uniformitarianisms +uniformitarians +uniformities +uniformity +uniformly +uniformness +uniformnesses +uniforms +unify +unifying +unignorable +unilateral +unilaterally +unilineal +unilinear +unilingual +unilluminating +unillusioned +unilobed +unilocular +unimaginable +unimaginably +unimaginative +unimaginatively +unimbued +unimmunized +unimpaired +unimpassioned +unimpeachable +unimpeachably +unimpeded +unimplemented +unimportance +unimportances +unimportant +unimposing +unimpressed +unimpressive +unimproved +unincorporated +unindexed +unindicted +unindustrialized +uninfected +uninflated +uninflected +uninfluenced +uninformative +uninformatively +uninformed +uningratiating +uninhabitable +uninhabited +uninhibited +uninhibitedly +uninhibitedness +uninhibitednesses +uninitiate +uninitiated +uninitiates +uninjured +uninoculated +uninspected +uninspired +uninspiring +uninstructed +uninstructive +uninsulated +uninsurable +uninsured +unintegrated +unintellectual +unintelligent +unintelligently +unintelligibilities +unintelligibility +unintelligible +unintelligibleness +unintelligiblenesses +unintelligibly +unintended +unintentional +unintentionally +uninterest +uninterested +uninteresting +uninterests +uninterrupted +uninterruptedly +unintimidated +uninucleate +uninventive +uninvited +uninviting +uninvolved union +unionisation +unionisations +unionise +unionised +unionises +unionising +unionism +unionisms +unionist +unionists +unionization +unionizations +unionize +unionized +unionizes +unionizing +unions +uniparental +uniparentally +unipod +unipods +unipolar unique +uniquely +uniqueness +uniquenesses +uniquer +uniques +uniquest +unironed +unironically +unirradiated +unirrigated +unisex +unisexes +unisexual +unisexualities +unisexuality +unison +unisonal +unisons +unissued unit +unitage +unitages +unitard +unitards +unitarian +unitarianism +unitarianisms +unitarians +unitarily +unitary unite +united +unitedly +uniter +uniters +unites +unities +uniting +unitive +unitization +unitizations +unitize +unitized +unitizer +unitizers +unitizes +unitizing +unitrust +unitrusts +units +unity +univalent +univalents +univalve +univalves +univariate universal +universalism +universalisms +universalist +universalistic +universalists +universalities +universality +universalization +universalizations +universalize +universalized +universalizes +universalizing +universally +universalness +universalnesses +universals universe +universes +universities university +univocal +univocally +univocals +unjaded +unjoined +unjoint +unjointed +unjointing +unjoints +unjoyful +unjudged +unjust +unjustifiable +unjustifiably +unjustified +unjustly +unjustness +unjustnesses +unkempt +unkend +unkenned +unkennel +unkenneled +unkenneling +unkennelled +unkennelling +unkennels +unkent +unkept +unkind +unkinder +unkindest +unkindlier +unkindliest +unkindliness +unkindlinesses +unkindly +unkindness +unkindnesses +unkingly +unkink +unkinked +unkinking +unkinks +unkissed +unknit +unknits +unknitted +unknitting +unknot +unknots +unknotted +unknotting +unknowabilities +unknowability +unknowable +unknowing +unknowingly +unknowings +unknowledgeable +unknown +unknowns +unkosher +unlabeled +unlace +unlaced +unlaces +unlacing +unlade +unladed +unladen +unlades +unlading +unladylike +unlaid +unlamented +unlash +unlashed +unlashes +unlashing +unlatch +unlatched +unlatches +unlatching +unlaundered +unlawful +unlawfully +unlawfulness +unlawfulnesses +unlay +unlaying +unlays +unlead +unleaded +unleading +unleads +unlearn +unlearnable +unlearned +unlearning +unlearns +unlearnt +unleased +unleash +unleashed +unleashes +unleashing +unleavened +unled unless +unlet +unlethal +unletted +unlettered +unlevel +unleveled +unleveling +unlevelled +unlevelling +unlevels +unlevied +unliberated +unlicensed +unlicked +unlikable unlike +unlikelier +unlikeliest +unlikelihood +unlikelihoods +unlikeliness +unlikelinesses +unlikely +unlikeness +unlikenesses +unlimber +unlimbered +unlimbering +unlimbers +unlimited +unlimitedly +unlined +unlink +unlinked +unlinking +unlinks +unlisted +unlistenable +unlit +unliterary +unlivable +unlive +unlived +unlively +unlives +unliving +unload +unloaded +unloader +unloaders +unloading +unloads +unlobed +unlocalized +unlock +unlocked +unlocking +unlocks +unloose +unloosed +unloosen +unloosened +unloosening +unloosens +unlooses +unloosing +unlovable +unloved +unlovelier +unloveliest +unloveliness +unlovelinesses +unlovely +unloving +unluckier +unluckiest +unluckily +unluckiness +unluckinesses +unlucky +unlyrical +unmacho +unmade +unmagnified +unmake +unmaker +unmakers +unmakes +unmaking +unmalicious +unmaliciously +unman +unmanageable +unmanageably +unmanaged +unmanful +unmanipulated +unmanlier +unmanliest +unmanliness +unmanlinesses +unmanly +unmanned +unmannered +unmanneredly +unmannerliness +unmannerlinesses +unmannerly +unmanning +unmans +unmapped +unmarked +unmarketable +unmarred +unmarried +unmarrieds +unmasculine +unmask +unmasked +unmasker +unmaskers +unmasking +unmasks +unmatchable +unmatched +unmated +unmatted +unmeaning +unmeant +unmeasurable +unmeasured +unmechanized +unmediated +unmedicated +unmeet +unmeetly +unmellow +unmelodious +unmelodiousness +unmelodiousnesses +unmelted +unmemorable +unmemorably +unmended +unmentionable +unmentionables +unmentioned +unmerciful +unmercifully +unmerited +unmerry +unmesh +unmeshed +unmeshes +unmeshing +unmet +unmetabolized +unmew +unmewed +unmewing +unmews +unmilitary +unmilled +unmindful +unmined +unmingle +unmingled +unmingles +unmingling +unmistakable +unmistakably +unmiter +unmitered +unmitering +unmiters +unmitigated +unmitigatedly +unmitigatedness +unmitigatednesses +unmitre +unmitred +unmitres +unmitring +unmix +unmixable +unmixed +unmixes +unmixing +unmixt +unmodernized +unmodified +unmodish +unmold +unmolded +unmolding +unmolds +unmolested +unmolten +unmonitored +unmoor +unmoored +unmooring +unmoors +unmoral +unmoralities +unmorality +unmotivated +unmounted +unmovable +unmoved +unmoving +unmown +unmuffle +unmuffled +unmuffles +unmuffling +unmusical +unmuzzle +unmuzzled +unmuzzles +unmuzzling +unmyelinated +unnail +unnailed +unnailing +unnails +unnameable +unnamed +unnatural +unnaturally +unnaturalness +unnaturalnesses +unnecessarily +unnecessary +unneeded +unnegotiable +unnerve +unnerved +unnerves +unnerving +unnervingly +unneurotic +unnewsworthy +unnilhexium +unnilhexiums +unnilpentium +unnilpentiums +unnilquadium +unnilquadiums +unnoisy +unnoted +unnoticeable +unnoticed +unnourishing +unnumbered +unobjectionable +unobservable +unobservant +unobserved +unobstructed +unobtainable +unobtrusive +unobtrusively +unobtrusiveness +unobtrusivenesses +unoccupied +unofficial +unofficially +unoiled +unopen +unopenable +unopened +unopposed +unordered +unorganized +unoriginal +unornamented +unornate +unorthodox +unorthodoxies +unorthodoxly +unorthodoxy +unostentatious +unostentatiously +unowned +unoxygenated +unpack +unpacked +unpacker +unpackers +unpacking +unpacks +unpaged +unpaid +unpainted +unpaired +unpalatabilities +unpalatability +unpalatable +unparalleled +unparasitized +unpardonable +unparented +unparliamentary +unparted +unpassable +unpasteurized +unpastoral +unpatentable +unpatriotic +unpaved +unpaying +unpedantic +unpeeled +unpeg +unpegged +unpegging +unpegs +unpen +unpenned +unpenning +unpens +unpent +unpeople +unpeopled +unpeoples +unpeopling +unperceived +unperceptive +unperfect +unperformable +unperformed +unperson +unpersons +unpersuaded +unpersuasive +unperturbed +unpick +unpicked +unpicking +unpicks +unpicturesque +unpile +unpiled +unpiles +unpiling +unpin +unpinned +unpinning +unpins +unpitied +unplaced +unplait +unplaited +unplaiting +unplaits +unplanned +unplausible +unplayable +unplayed +unpleasant +unpleasantly +unpleasantness +unpleasantnesses +unpleased +unpleasing +unpliant +unplowed +unplug +unplugged +unplugging +unplugs +unplumbed +unpoetic +unpoised +unpolarized +unpoliced +unpolished +unpolite +unpolitical +unpolled +unpolluted +unpopular +unpopularities +unpopularity +unposed +unposted +unpotted +unpractical +unprecedented +unprecedentedly +unpredictabilities +unpredictability +unpredictable +unpredictables +unpredictably +unpregnant +unprejudiced +unpremeditated +unprepared +unpreparedness +unpreparednesses +unprepossessing +unpressed +unpressured +unpressurized +unpretending +unpretentious +unpretentiously +unpretentiousness +unpretentiousnesses +unpretty +unpriced +unprimed +unprincipled +unprincipledness +unprinciplednesses +unprintable +unprivileged +unprized +unprobed +unproblematic +unprocessed +unproduced +unproductive +unprofessed +unprofessional +unprofessionally +unprofessionals +unprofitable +unprofitableness +unprofitablenesses +unprofitably +unprogrammable +unprogrammed +unprogressive +unpromising +unpromisingly +unprompted +unpronounceable +unpronounced +unpropitious +unprosperous +unprotected +unprovable +unproved +unproven +unprovoked +unpruned +unpublicized +unpublishable +unpublished +unpucker +unpuckered +unpuckering +unpuckers +unpunctual +unpunctualities +unpunctuality +unpunctuated +unpunished +unpure +unpurged +unpuzzle +unpuzzled +unpuzzles +unpuzzling +unqualified +unqualifiedly +unquantifiable +unquenchable +unquestionable +unquestionably +unquestioned +unquestioning +unquestioningly +unquiet +unquieter +unquietest +unquietly +unquietness +unquietnesses +unquiets +unquote +unquoted +unquotes +unquoting +unraised +unraked +unranked +unrated +unravel +unraveled +unraveling +unravelled +unravelling +unravels +unravished +unrazed +unreachable +unreached +unread +unreadable +unreadier +unreadiest +unreadiness +unreadinesses +unready +unreal +unrealistic +unrealistically +unrealities +unreality +unrealizable +unrealized +unreally +unreason +unreasonable +unreasonableness +unreasonablenesses +unreasonably +unreasoned +unreasoning +unreasoningly +unreasons +unreceptive +unreclaimable +unreclaimed +unrecognizable +unrecognizably +unrecognized +unreconcilable +unreconciled +unreconstructed +unrecorded +unrecoverable +unrecovered +unrecyclable +unredeemable +unredeemed +unredressed +unreel +unreeled +unreeler +unreelers +unreeling +unreels +unreeve +unreeved +unreeves +unreeving +unrefined +unreflective +unreformed +unrefrigerated +unregenerate +unregenerately +unregistered +unregulated +unrehearsed +unreinforced +unrelated +unrelaxed +unrelenting +unrelentingly +unreliabilities +unreliability +unreliable +unrelieved +unrelievedly +unreligious +unreluctant +unremarkable +unremarkably +unremarked +unremembered +unreminiscent +unremitting +unremittingly +unremorseful +unremovable +unrent +unrented +unrepaid +unrepair +unrepairs +unrepeatable +unrepentant +unrepentantly +unreported +unrepresentative +unrepresentativeness +unrepresentativenesses +unrepresented +unrepressed +unrequited +unreserve +unreserved +unreservedly +unreservedness +unreservednesses +unreserves +unresistant +unresisting +unresolvable +unresolved +unrespectable +unresponsive +unresponsively +unresponsiveness +unresponsivenesses unrest +unrested +unrestful +unrestored +unrestrained +unrestrainedly +unrestrainedness +unrestrainednesses +unrestraint +unrestraints +unrestricted +unrests +unretouched +unreturnable +unrevealed +unreviewable +unreviewed +unrevised +unrevolutionary +unrewarded +unrewarding +unrhetorical +unrhymed +unrhythmic +unridable +unriddle +unriddled +unriddles +unriddling +unrifled +unrig +unrigged +unrigging +unrighteous +unrighteously +unrighteousness +unrighteousnesses +unrigs +unrimed +unrinsed +unrip +unripe +unripely +unripened +unripeness +unripenesses +unriper +unripest +unripped +unripping +unrips +unrisen +unrivaled +unrivalled +unrobe +unrobed +unrobes +unrobing +unroll +unrolled +unrolling +unrolls +unromantic +unromantically +unromanticized +unroof +unroofed +unroofing +unroofs +unroot +unrooted +unrooting +unroots +unroped +unrough +unround +unrounded +unrounding +unrounds +unrove +unroven +unruffled +unruled +unrulier +unruliest +unruliness +unrulinesses +unruly +unrushed +unrusted +uns +unsaddle +unsaddled +unsaddles +unsaddling +unsafe +unsafely +unsafeties +unsafety +unsaid +unsalable +unsalaried +unsalted +unsalvageable +unsanctioned +unsanitary +unsated +unsatisfactorily +unsatisfactoriness +unsatisfactorinesses +unsatisfactory +unsatisfied +unsatisfying +unsaturate +unsaturated +unsaturates +unsaved +unsavory +unsawed +unsawn +unsay +unsayable +unsaying +unsays +unscalable +unscaled +unscarred +unscathed +unscented +unscheduled +unscholarly +unschooled +unscientific +unscientifically +unscramble +unscrambled +unscrambler +unscramblers +unscrambles +unscrambling +unscreened +unscrew +unscrewed +unscrewing +unscrews +unscripted +unscriptural +unscrupulous +unscrupulously +unscrupulousness +unscrupulousnesses +unseal +unsealed +unsealing +unseals +unseam +unseamed +unseaming +unseams +unsearchable +unsearchably +unseared +unseasonable +unseasonableness +unseasonablenesses +unseasonably +unseasoned +unseat +unseated +unseating +unseats +unseaworthy +unsecured +unseeded +unseeing +unseemlier +unseemliest +unseemliness +unseemlinesses +unseemly +unseen +unsegmented +unsegregated +unseized +unselected +unselective +unselectively +unselfish +unselfishly +unselfishness +unselfishnesses +unsell +unsellable +unselling +unsells +unsensational +unsensitized +unsent +unsentimental +unseparated +unserious +unseriousness +unseriousnesses +unserved +unserviceable +unset +unsets +unsetting +unsettle +unsettled +unsettledness +unsettlednesses +unsettlement +unsettlements +unsettles +unsettling +unsettlingly +unsew +unsewed +unsewing +unsewn +unsews +unsex +unsexed +unsexes +unsexing +unsexual +unsexy +unshackle +unshackled +unshackles +unshackling +unshaded +unshakable +unshakably +unshaken +unshamed +unshaped +unshapely +unshapen +unshared +unsharp +unshaved +unshaven +unsheathe +unsheathed +unsheathes +unsheathing +unshed +unshell +unshelled +unshelling +unshells +unshift +unshifted +unshifting +unshifts +unship +unshipped +unshipping +unships +unshockable +unshod +unshorn +unshowy +unshrunk +unshut +unsicker +unsifted +unsight +unsighted +unsighting +unsightlier +unsightliest +unsightliness +unsightlinesses +unsightly +unsights +unsigned +unsilent +unsinful +unsinkable +unsized +unskilled +unskillful +unskillfully +unskillfulness +unskillfulnesses +unslakable +unslaked +unsliced +unsling +unslinging +unslings +unslung +unsmart +unsmiling +unsmoked +unsmoothed +unsnap +unsnapped +unsnapping +unsnaps +unsnarl +unsnarled +unsnarling +unsnarls +unsoaked +unsober +unsociabilities +unsociability +unsociable +unsociableness +unsociablenesses +unsociably +unsocial +unsocialized +unsocially +unsoiled +unsold +unsolder +unsoldered +unsoldering +unsolders +unsoldierly +unsolicited +unsolid +unsolvable +unsolved +unsoncy +unsonsie +unsonsy +unsophisticated +unsophistication +unsophistications +unsorted +unsought +unsound +unsounded +unsounder +unsoundest +unsoundly +unsoundness +unsoundnesses +unsoured +unsowed +unsown +unsparing +unsparingly +unspeak +unspeakable +unspeakably +unspeaking +unspeaks +unspecialized +unspecifiable +unspecific +unspecified +unspectacular +unspent +unsphere +unsphered +unspheres +unsphering +unspilt +unspiritual +unsplit +unspoiled +unspoilt +unspoke +unspoken +unsportsmanlike +unspotted +unsprayed +unsprung +unspun +unstable +unstableness +unstablenesses +unstabler +unstablest +unstably +unstack +unstacked +unstacking +unstacks +unstained +unstandardized +unstartling +unstate +unstated +unstates +unstating +unstayed +unsteadied +unsteadier +unsteadies +unsteadiest +unsteadily +unsteadiness +unsteadinesses +unsteady +unsteadying +unsteel +unsteeled +unsteeling +unsteels +unstep +unstepped +unstepping +unsteps +unsterile +unsterilized +unstick +unsticking +unsticks +unstinted +unstinting +unstintingly +unstitch +unstitched +unstitches +unstitching +unstoned +unstop +unstoppable +unstoppably +unstopped +unstopper +unstoppered +unstoppering +unstoppers +unstopping +unstops +unstrained +unstrap +unstrapped +unstrapping +unstraps +unstratified +unstress +unstressed +unstresses +unstring +unstringing +unstrings +unstructured +unstrung +unstuck +unstudied +unstuffy +unstung +unstylish +unsubdued +unsubsidized +unsubstantial +unsubstantialities +unsubstantiality +unsubstantially +unsubstantiated +unsubtle +unsubtly +unsuccess +unsuccesses +unsuccessful +unsuccessfully +unsuitabilities +unsuitability +unsuitable +unsuitably +unsuited +unsullied +unsung +unsunk +unsupervised +unsupportable +unsupported +unsure +unsurely +unsurpassable +unsurpassed +unsurprised +unsurprising +unsurprisingly +unsusceptible +unsuspected +unsuspecting +unsuspectingly +unsuspicious +unsustainable +unswathe +unswathed +unswathes +unswathing +unswayed +unswear +unswearing +unswears +unsweetened +unswept +unswerving +unswore +unsworn +unsymmetrical +unsymmetrically +unsympathetic +unsympathetically +unsymptomatic +unsynchronized +unsystematic +unsystematically +unsystematized +untack +untacked +untacking +untacks +untactful +untagged +untainted +untaken +untalented +untamable +untame +untamed +untangle +untangled +untangles +untangling +untanned +untapped +untarnished +untasted +untaught +untaxed +unteach +unteachable +unteaches +unteaching +untechnical +untempered +untenabilities +untenability +untenable +untenanted +untended +untented +untenured +untestable +untested +untether +untethered +untethering +untethers +unthawed +untheoretical +unthink +unthinkabilities +unthinkability +unthinkable +unthinkably +unthinking +unthinkingly +unthinks +unthought +unthread +unthreaded +unthreading +unthreads +unthreatening +unthrifty +unthrone +unthroned +unthrones +unthroning +untidied +untidier +untidies +untidiest +untidily +untidiness +untidinesses +untidy +untidying +untie +untied +unties until +untillable +untilled +untilted +untimelier +untimeliest +untimeliness +untimelinesses +untimely +untimeous +untinged +untipped +untired +untiring +untiringly +untitled +unto +untogether +untold +untorn +untouchabilities +untouchability +untouchable +untouchables +untouched +untoward +untowardly +untowardness +untowardnesses +untraceable +untraced +untraditional +untraditionally +untrained +untrammeled +untransformed +untranslatabilities +untranslatability +untranslatable +untranslated +untraveled +untraversed +untread +untreading +untreads +untreated +untrendy +untried +untrim +untrimmed +untrimming +untrims +untrod +untrodden +untroubled +untrue +untruer +untruest +untruly +untruss +untrussed +untrusses +untrussing +untrusting +untrustworthy +untrusty +untruth +untruthful +untruthfully +untruthfulness +untruthfulnesses +untruths +untuck +untucked +untucking +untucks +untufted +untune +untuned +untunes +untuning +unturned +untutored +untwine +untwined +untwines +untwining +untwist +untwisted +untwisting +untwists +untying +untypical +untypically +ununderstandable +ununited +unurged +unusable +unused unusual +unusually +unusualness +unusualnesses +unutilized +unutterable +unutterably +unvaccinated +unvalued +unvanquished +unvaried +unvarnished +unvarying +unveil +unveiled +unveiling +unveils +unveined +unventilated +unverbalized +unverifiable +unverified +unversed +unvexed +unvext +unviable +unvisited +unvocal +unvoice +unvoiced +unvoices +unvoicing +unwalled +unwaning +unwanted +unwarier +unwariest +unwarily +unwariness +unwarinesses +unwarlike +unwarmed +unwarned +unwarped +unwarrantable +unwarrantably +unwarranted +unwary +unwashed +unwashedness +unwashednesses +unwasheds +unwasted +unwatchable +unwavering +unwaveringly +unwaxed +unweaned +unwearable +unwearied +unweariedly +unweary +unweathered +unweave +unweaves +unweaving +unwed +unwedded +unweeded +unweeting +unweetingly +unweight +unweighted +unweighting +unweights +unwelcome +unwelded +unwell +unwept +unwetted +unwhite +unwholesome +unwholesomely +unwieldier +unwieldiest +unwieldily +unwieldiness +unwieldinesses +unwieldy +unwifely +unwilled unwilling +unwillingly +unwillingness +unwillingnesses +unwind +unwinder +unwinders +unwinding +unwinds +unwinnable +unwisdom +unwisdoms +unwise +unwisely +unwiser +unwisest +unwish +unwished +unwishes +unwishing +unwit +unwits +unwitted +unwitting +unwittingly +unwomanly +unwon +unwonted +unwontedly +unwontedness +unwontednesses +unwooded +unwooed +unworkabilities +unworkability +unworkable +unworkables +unworked +unworldliness +unworldlinesses +unworldly +unworn +unworried +unworthier +unworthies +unworthiest +unworthily +unworthiness +unworthinesses +unworthy +unwound +unwounded +unwove +unwoven +unwrap +unwrapped +unwrapping +unwraps +unwreathe +unwreathed +unwreathes +unwreathing +unwritten +unwrung +unyeaned +unyielding +unyieldingly +unyoke +unyoked +unyokes +unyoking +unyoung +unzip +unzipped +unzipping +unzips +unzoned up +upas +upases +upbear +upbearer +upbearers +upbearing +upbears +upbeat +upbeats +upbind +upbinding +upbinds +upboil +upboiled +upboiling +upboils +upbore +upborne +upbound +upbow +upbows +upbraid +upbraided +upbraider +upbraiders +upbraiding +upbraids +upbringing +upbringings +upbuild +upbuilding +upbuilds +upbuilt +upby +upbye +upcast +upcasting +upcasts +upchuck +upchucked +upchucking +upchucks +upclimb +upclimbed +upclimbing +upclimbs +upcoast +upcoil +upcoiled +upcoiling +upcoils +upcoming +upcountry +upcurl +upcurled +upcurling +upcurls +upcurve +upcurved +upcurves +upcurving +updart +updarted +updarting +updarts update +updated +updater +updaters +updates +updating +updive +updived +updives +updiving +updo +updos +updove +updraft +updrafts +updried +updries +updry +updrying +upend +upended +upending +upends +upfield +upfling +upflinging +upflings +upflow +upflowed +upflowing +upflows +upflung +upfold +upfolded +upfolding +upfolds +upfront +upgather +upgathered +upgathering +upgathers +upgaze +upgazed +upgazes +upgazing +upgird +upgirded +upgirding +upgirds +upgirt +upgoing +upgradabilities +upgradability +upgradable +upgrade +upgradeabilities +upgradeability +upgradeable +upgraded +upgrades +upgrading +upgrew +upgrow +upgrowing +upgrown +upgrows +upgrowth +upgrowths +upheap +upheaped +upheaping +upheaps +upheaval +upheavals +upheave +upheaved +upheaver +upheavers +upheaves +upheaving +upheld +uphill +uphills +uphoard +uphoarded +uphoarding +uphoards +uphold +upholder +upholders +upholding +upholds +upholster +upholstered +upholsterer +upholsterers +upholsteries +upholstering +upholsters +upholstery +uphove +uphroe +uphroes +upkeep +upkeeps +upland +uplander +uplanders +uplands +upleap +upleaped +upleaping +upleaps +upleapt +uplift +uplifted +uplifter +uplifters +uplifting +uplifts +uplight +uplighted +uplighting +uplights +uplink +uplinks +uplit +upload +uploaded +uploading +uploads +upmanship +upmanships +upmarket +upmost +upo upon +upped upper +uppercase +uppercased +uppercases +uppercasing +upperclassman +upperclassmen +uppercut +uppercuts +uppercutting +uppermost +upperpart +upperparts +uppers +uppile +uppiled +uppiles +uppiling +upping +uppings +uppish +uppishly +uppishness +uppishnesses +uppitiness +uppitinesses +uppity +uppityness +uppitynesses +upprop +uppropped +uppropping +upprops +upraise +upraised +upraiser +upraisers +upraises +upraising +uprate +uprated +uprates +uprating +upreach +upreached +upreaches +upreaching +uprear +upreared +uprearing +uprears +upright +uprighted +uprighting +uprightly +uprightness +uprightnesses +uprights +uprise +uprisen +upriser +uprisers +uprises +uprising +uprisings +upriver +uprivers +uproar +uproarious +uproariously +uproariousness +uproariousnesses +uproars +uproot +uprootal +uprootals +uprooted +uprootedness +uprootednesses +uprooter +uprooters +uprooting +uproots +uprose +uprouse +uproused +uprouses +uprousing +uprush +uprushed +uprushes +uprushing +ups +upscale +upscaled +upscales +upscaling +upsend +upsending +upsends +upsent upset +upsets +upsetter +upsetters +upsetting +upshift +upshifted +upshifting +upshifts +upshoot +upshooting +upshoots +upshot +upshots +upside +upsides +upsilon +upsilons +upsoar +upsoared +upsoaring +upsoars +upsprang +upspring +upspringing +upsprings +upsprung +upstage +upstaged +upstages +upstaging +upstair upstairs +upstand +upstanding +upstandingness +upstandingnesses +upstands +upstare +upstared +upstares +upstaring +upstart +upstarted +upstarting +upstarts +upstate +upstater +upstaters +upstates +upstep +upstepped +upstepping +upsteps +upstir +upstirred +upstirring +upstirs +upstood +upstream +upstroke +upstrokes +upsurge +upsurged +upsurges +upsurging +upsweep +upsweeping +upsweeps +upswell +upswelled +upswelling +upswells +upswept +upswing +upswinging +upswings +upswollen +upswung +uptake +uptakes +uptear +uptearing +uptears +upthrew +upthrow +upthrowing +upthrown +upthrows +upthrust +upthrusting +upthrusts +uptick +upticks +uptight +uptightness +uptightnesses +uptilt +uptilted +uptilting +uptilts +uptime +uptimes +uptore +uptorn +uptoss +uptossed +uptosses +uptossing +uptown +uptowner +uptowners +uptowns +uptrend +uptrends +upturn +upturned +upturning +upturns +upwaft +upwafted +upwafting +upwafts upward +upwardly +upwardness +upwardnesses upwards +upwell +upwelled +upwelling +upwellings +upwells +upwind +upwinds +uracil +uracils +uraei +uraemia +uraemias +uraemic +uraeus +uraeuses +uralite +uralites +uralitic +urania +uranias +uranic +uranide +uranides +uraninite +uraninites +uranism +uranisms +uranite +uranites +uranitic +uranium +uraniums +uranographies +uranography +uranous +uranyl +uranylic +uranyls +urare +urares +urari +uraris +urase +urases +urate +urates +uratic +urb urban +urbane +urbanely +urbaner +urbanest +urbanisation +urbanisations +urbanise +urbanised +urbanises +urbanising +urbanism +urbanisms +urbanist +urbanistic +urbanistically +urbanists +urbanite +urbanites +urbanities +urbanity +urbanization +urbanizations +urbanize +urbanized +urbanizes +urbanizing +urbanologies +urbanologist +urbanologists +urbanology +urbia +urbias +urbs +urceolate +urchin +urchins +urd +urds +urea +ureal +ureas +urease +ureases +uredia +uredial +uredinia +uredinial +urediniospore +urediniospores +uredinium +urediospore +urediospores +uredium +uredo +uredos +uredospore +uredospores +ureic +ureide +ureides +uremia +uremias +uremic +ureotelic +ureotelism +ureotelisms +ureter +ureteral +ureteric +ureters +urethan +urethane +urethanes +urethans +urethra +urethrae +urethral +urethras +urethrites +urethritides +urethritis +urethritises +urethroscope +urethroscopes +uretic urge +urged +urgencies +urgency urgent +urgently +urger +urgers +urges +urging +urgingly +urial +urials +uric +uricosuric +uricotelic +uricotelism +uricotelisms +uridine +uridines +urinal +urinals +urinalyses +urinalysis +urinaries +urinary +urinate +urinated +urinates +urinating +urination +urinations +urine +urinemia +urinemias +urinemic +urines +urinogenital +urinometer +urinometers +urinose +urinous +urn +urnlike +urns +urochord +urochordate +urochordates +urochords +urochrome +urochromes +urodele +urodeles +urogenital +urokinase +urokinases +urolith +urolithiases +urolithiasis +uroliths +urologic +urological +urologies +urologist +urologists +urology +uropod +uropodal +uropods +uropygia +uropygium +uropygiums +uroscopies +uroscopy +urostyle +urostyles +ursa +ursae +ursiform +ursine +urtext +urtexts +urticant +urticants +urticaria +urticarial +urticarias +urticate +urticated +urticates +urticating +urtication +urtications +urus +uruses +urushiol +urushiols +us +usabilities +usability +usable +usableness +usablenesses +usably +usage +usages +usance +usances +usaunce +usaunces use +useable +useably used useful +usefully +usefulness +usefulnesses useless +uselessly +uselessness +uselessnesses user +users +uses +usher +ushered +usherette +usherettes +ushering +ushers +using +usnea +usneas +usquabae +usquabaes +usque +usquebae +usquebaes +usquebaugh +usquebaughs +usques +ustulate usual +usually +usualness +usualnesses +usuals +usufruct +usufructs +usufructuaries +usufructuary +usurer +usurers +usuries +usurious +usuriously +usuriousness +usuriousnesses +usurp +usurpation +usurpations +usurped +usurper +usurpers +usurping +usurps +usury +ut +uta +utas +utensil +utensils +uteri +uterine +uterus +uteruses +utile +utilidor +utilidors +utilise +utilised +utiliser +utilisers +utilises +utilising +utilitarian +utilitarianism +utilitarianisms +utilitarians +utilities +utility +utilizable +utilization +utilizations +utilize +utilized +utilizer +utilizers +utilizes +utilizing +utmost +utmosts +utopia +utopian +utopianism +utopianisms +utopians +utopias +utopism +utopisms +utopist +utopistic +utopists +utricle +utricles +utricular +utriculi +utriculus +uts +utter +utterable +utterance +utterances +uttered +utterer +utterers +uttering +utterly +uttermost +uttermosts +utters +uvarovite +uvarovites +uvea +uveal +uveas +uveitic +uveitis +uveitises +uveous +uvula +uvulae +uvular +uvularly +uvulars +uvulas +uvulitis +uvulitises +uxorial +uxoricide +uxoricides +uxorious +uxoriously +uxoriousness +uxoriousnesses +vac +vacancies +vacancy vacant +vacantly +vacantness +vacantnesses +vacate +vacated +vacates +vacating vacation +vacationed +vacationer +vacationers +vacationing +vacationist +vacationists +vacationland +vacationlands +vacations +vaccina +vaccinal +vaccinas +vaccinate +vaccinated +vaccinates +vaccinating +vaccination +vaccinations +vaccinator +vaccinators +vaccine +vaccinee +vaccinees +vaccines +vaccinia +vaccinial +vaccinias +vacillate +vacillated +vacillates +vacillating +vacillatingly +vacillation +vacillations +vacillator +vacillators +vacs +vacua +vacuities +vacuity +vacuolar +vacuolate +vacuolated +vacuolation +vacuolations +vacuole +vacuoles +vacuous +vacuously +vacuousness +vacuousnesses +vacuum +vacuumed +vacuuming +vacuums +vadose +vagabond +vagabondage +vagabondages +vagabonded +vagabonding +vagabondish +vagabondism +vagabondisms +vagabonds +vagal +vagally +vagaries +vagarious +vagariously +vagary +vagi +vagile +vagilities +vagility +vagina +vaginae +vaginal +vaginally +vaginas +vaginate +vaginismus +vaginismuses +vaginitis +vaginitises +vagotomies +vagotomy +vagotonia +vagotonias +vagotonic +vagrancies +vagrancy +vagrant +vagrantly +vagrants +vagrom vague +vaguely +vagueness +vaguenesses +vaguer +vaguest +vagus +vahine +vahines +vail +vailed +vailing +vails vain +vainer +vainest +vainglories +vainglorious +vaingloriously +vaingloriousness +vaingloriousnesses +vainglory +vainly +vainness +vainnesses +vair +vairs +vakeel +vakeels +vakil +vakils +valance +valanced +valances +valancing +vale +valediction +valedictions +valedictorian +valedictorians +valedictories +valedictory +valence +valences +valencia +valencias +valencies +valency +valentine +valentines +valerate +valerates +valerian +valerians +valeric +vales +valet +valeted +valeting +valets +valetudinarian +valetudinarianism +valetudinarianisms +valetudinarians +valetudinaries +valetudinary +valgoid +valgus +valguses +valiance +valiances +valiancies +valiancy +valiant +valiantly +valiantness +valiantnesses +valiants valid +validate +validated +validates +validating +validation +validations +validities +validity +validly +valine +valines +valise +valises +valkyr +valkyrie +valkyries +valkyrs +vallate +vallecula +valleculae +vallecular valley +valleys +valonia +valonias +valor +valorise +valorised +valorises +valorising +valorization +valorizations +valorize +valorized +valorizes +valorizing +valorous +valorously +valors +valour +valours +valpolicella +valpolicellas +valse +valses valuable +valuableness +valuablenesses +valuables +valuably +valuate +valuated +valuates +valuating +valuation +valuational +valuationally +valuations +valuator +valuators value +valued +valueless +valuelessness +valuelessnesses +valuer +valuers +values +valuing +valuta +valutas +valval +valvar +valvate +valve +valved +valveless +valvelet +valvelets +valves +valving +valvula +valvulae +valvular +valvule +valvules +valvulites +valvulitides +valvulitis +valvulitises +vambrace +vambraces +vamoose +vamoosed +vamooses +vamoosing +vamose +vamosed +vamoses +vamosing +vamp +vamped +vamper +vampers +vamping +vampire +vampires +vampiric +vampirish +vampirism +vampirisms +vampish +vamps +van +vanadate +vanadates +vanadic +vanadium +vanadiums +vanadous +vanaspati +vanaspatis +vanda +vandal +vandalic +vandalise +vandalised +vandalises +vandalising +vandalism +vandalisms +vandalistic +vandalization +vandalizations +vandalize +vandalized +vandalizes +vandalizing +vandals +vandas +vandyke +vandyked +vandykes +vane +vaned +vanes +vang +vangs +vanguard +vanguardism +vanguardisms +vanguardist +vanguardists +vanguards +vanilla +vanillas +vanillic +vanillin +vanillins +vanish +vanished +vanisher +vanishers +vanishes +vanishing +vanishingly +vanitied +vanities +vanitories +vanitory +vanity +vanman +vanmen +vanned +vanner +vanners +vanning +vanpool +vanpooling +vanpoolings +vanpools +vanquish +vanquishable +vanquished +vanquisher +vanquishers +vanquishes +vanquishing +vans +vantage +vantages +vanward +vapid +vapidities +vapidity +vapidly +vapidness +vapidnesses +vapor +vapored +vaporer +vaporers +vaporetti +vaporetto +vaporettos +vaporing +vaporings +vaporise +vaporised +vaporises +vaporish +vaporishness +vaporishnesses +vaporising +vaporizable +vaporization +vaporizations +vaporize +vaporized +vaporizer +vaporizers +vaporizes +vaporizing +vaporous +vaporously +vaporousness +vaporousnesses +vapors +vaporware +vaporwares +vapory +vapour +vapoured +vapourer +vapourers +vapouring +vapours +vapoury +vaquero +vaqueros +var +vara +varactor +varactors +varas +varia +variabilities +variability +variable +variableness +variablenesses +variables +variably +variance +variances +variant +variants +variate +variated +variates +variating +variation +variational +variationally +variations +varicella +varicellas +varices +varicocele +varicoceles +varicolored +varicose +varicosed +varicosities +varicosity +varied +variedly +variegate +variegated +variegates +variegating +variegation +variegations +variegator +variegators +varier +variers +varies +varietal +varietals +varieties variety +variform +variola +variolar +variolas +variole +varioles +variometer +variometers +variorum +variorums various +variously +variousness +variousnesses +varisized +varistor +varistors +varix +varlet +varletries +varletry +varlets +varment +varments +varmint +varmints +varna +varnas +varnish +varnished +varnisher +varnishers +varnishes +varnishing +varnishy +varoom +varoomed +varooming +varooms +vars +varsities +varsity +varus +varuses +varve +varved +varves +vary +varying +varyingly +vas +vasa +vasal +vascula +vascular +vascularities +vascularity +vascularization +vascularizations +vasculature +vasculatures +vasculitides +vasculitis +vasculum +vasculums vase +vasectomies +vasectomize +vasectomized +vasectomizes +vasectomizing +vasectomy +vaselike +vases +vasiform +vasoactive +vasoactivities +vasoactivity +vasoconstriction +vasoconstrictions +vasoconstrictive +vasoconstrictor +vasoconstrictors +vasodilatation +vasodilatations +vasodilation +vasodilations +vasodilator +vasodilators +vasomotor +vasopressin +vasopressins +vasopressor +vasopressors +vasospasm +vasospasms +vasospastic +vasotocin +vasotocins +vasotomies +vasotomy +vasovagal +vassal +vassalage +vassalages +vassals vast -vcd +vaster +vastest +vastier +vastiest +vastities +vastitude +vastitudes +vastity +vastly +vastness +vastnesses +vasts +vasty +vat +vatful +vatfuls +vatic +vatical +vaticide +vaticides +vaticinal +vaticinate +vaticinated +vaticinates +vaticinating +vaticination +vaticinations +vaticinator +vaticinators +vats +vatted +vatting +vatu +vatus +vau +vaudeville +vaudevilles +vaudevillian +vaudevillians +vault +vaulted +vaulter +vaulters +vaultier +vaultiest +vaulting +vaultingly +vaultings +vaults +vaulty +vaunt +vaunted +vaunter +vaunters +vauntful +vauntie +vaunting +vauntingly +vaunts +vaunty +vaus +vav +vavasor +vavasors +vavasour +vavasours +vavassor +vavassors +vavs +vaw +vaward +vawards +vawntie +vaws +veal +vealed +vealer +vealers +vealier +vealiest +vealing +veals +vealy +vector +vectored +vectorial +vectorially +vectoring +vectors +vedalia +vedalias +vedette +vedettes +vee +veejay +veejays +veena +veenas +veep +veepee +veepees +veeps +veer +veered +veeries +veering +veeringly +veers +veery +vees +veg +vegan +veganism +veganisms +vegans vegetable +vegetables +vegetably +vegetal +vegetant +vegetarian +vegetarianism +vegetarianisms +vegetarians +vegetate +vegetated +vegetates +vegetating +vegetation +vegetational +vegetations +vegetative +vegetatively +vegetativeness +vegetativenesses +vegete +vegetist +vegetists +vegetive +veggie +veggies +vegie +vegies +vehemence +vehemences +vehement +vehemently vehicle +vehicles +vehicular +veil +veiled +veiledly +veiler +veilers +veiling +veilings +veillike +veils +vein +veinal +veined +veiner +veiners +veinier +veiniest +veining +veinings +veinless +veinlet +veinlets +veinlike +veins +veinule +veinules +veinulet +veinulets +veiny +vela +velamen +velamina +velar +velaria +velarium +velarization +velarizations +velarize +velarized +velarizes +velarizing +velars +velate +veld +velds +veldt +veldts +veliger +veligers +velites +velleities +velleity +vellum +vellums +veloce +velocimeter +velocimeters +velocipede +velocipedes +velocities +velocity +velodrome +velodromes +velour +velours +veloute +veloutes +velum +velure +velured +velures +veluring +velveret +velverets +velvet +velveted +velveteen +velveteens +velvetlike +velvets +velvety +vena +venae +venal +venalities +venality +venally +venatic +venation +venations +vend +vendable +vendables +vendace +vendaces +vended +vendee +vendees +vender +venders +vendetta +vendettas +vendeuse +vendeuses +vendibilities +vendibility +vendible +vendibles +vendibly +vending +vendor +vendors +vends +vendue +vendues +veneer +veneered +veneerer +veneerers +veneering +veneerings +veneers +venenate +venenated +venenates +venenating +venenose +venerabilities +venerability +venerable +venerableness +venerablenesses +venerably +venerate +venerated +venerates +venerating +veneration +venerations +venerator +venerators +venereal +veneries +venery +venesection +venesections +venetian +venetians +venge +vengeance +vengeances +venged +vengeful +vengefully +vengefulness +vengefulnesses +venges +venging +venial +venially +venialness +venialnesses +venin +venine +venines +venins +venipuncture +venipunctures +venire +venireman +veniremen +venires +venison +venisons +venogram +venograms +venographies +venography +venom +venomed +venomer +venomers +venoming +venomous +venomously +venomousness +venomousnesses +venoms +venose +venosities +venosity +venous +venously +vent +ventage +ventages +ventail +ventails +vented +venter +venters +ventifact +ventifacts +ventilate +ventilated +ventilates +ventilating +ventilation +ventilations +ventilator +ventilators +ventilatory +venting +ventless +ventral +ventrally +ventrals +ventricle +ventricles +ventricose +ventricular +ventriculi +ventriculus +ventriloquial +ventriloquially +ventriloquies +ventriloquism +ventriloquisms +ventriloquist +ventriloquistic +ventriloquists +ventriloquize +ventriloquized +ventriloquizes +ventriloquizing +ventriloquy +ventrolateral +ventromedial +vents +venture +ventured +venturer +venturers +ventures +venturesome +venturesomely +venturesomeness +venturesomenesses +venturi +venturing +venturis +venturous +venturously +venturousness +venturousnesses +venue +venues +venular +venule +venules +venulose +venulous +vera +veracious +veraciously +veraciousness +veraciousnesses +veracities +veracity +veranda +verandaed +verandah +verandahed +verandahs +verandas +verapamil +verapamils +veratria +veratrias +veratridine +veratridines +veratrin +veratrine +veratrines +veratrins +veratrum +veratrums +verb +verbal +verbalism +verbalisms +verbalist +verbalistic +verbalists +verbalization +verbalizations +verbalize +verbalized +verbalizer +verbalizers +verbalizes +verbalizing +verbally +verbals +verbatim +verbena +verbenas +verbiage +verbiages +verbicide +verbicides +verbid +verbids +verbified +verbifies +verbify +verbifying +verbigeration +verbigerations +verbile +verbiles +verbless +verbose +verbosely +verboseness +verbosenesses +verbosities +verbosity +verboten +verbs +verdancies +verdancy +verdant +verdantly +verderer +verderers +verderor +verderors +verdict +verdicts +verdigris +verdigrises +verdin +verdins +verditer +verditers +verdure +verdured +verdures +verdurous +verecund +verge +verged +vergence +vergences +verger +vergers +verges +verging +verglas +verglases +veridic +veridical +veridicalities +veridicality +veridically +verier +veriest +verifiabilities +verifiability +verifiable +verifiableness +verifiablenesses +verification +verifications +verified +verifier +verifiers +verifies +verify +verifying +verily +verisimilar +verisimilarly +verisimilitude +verisimilitudes +verisimilitudinous +verism +verismo +verismos +verisms +verist +veristic +verists +veritable +veritableness +veritablenesses +veritably +veritas +veritates +verite +verites +verities +verity +verjuice +verjuices +vermeil +vermeils +vermes +vermian +vermicelli +vermicellis +vermicide +vermicides +vermicular +vermiculate +vermiculated +vermiculation +vermiculations +vermiculite +vermiculites +vermiform +vermifuge +vermifuges +vermilion +vermilions +vermillion +vermillions +vermin +verminous +vermis +vermoulu +vermouth +vermouths +vermuth +vermuths +vernacle +vernacles +vernacular +vernacularism +vernacularisms +vernacularly +vernaculars +vernal +vernalization +vernalizations +vernalize +vernalized +vernalizes +vernalizing +vernally +vernation +vernations +vernicle +vernicles +vernier +verniers +vernissage +vernissages +vernix +vernixes +veronica +veronicas +verruca +verrucae +verrucose +versal +versant +versants +versatile +versatilely +versatileness +versatilenesses +versatilities +versatility +verse +versed +verseman +versemen +verser +versers +verses +verset +versets +versicle +versicles +versicular +versification +versifications +versified +versifier +versifiers +versifies +versify +versifying +versine +versines +versing version +versional +versions +verso +versos +verst +verste +verstes +versts +versus +vert +vertebra +vertebrae +vertebral +vertebras +vertebrate +vertebrates +vertex +vertexes vertical +verticalities +verticality +vertically +verticalness +verticalnesses +verticals +vertices +verticil +verticillate +verticils +vertigines +vertiginous +vertiginously +vertigo +vertigoes +vertigos +verts +vertu +vertus +vervain +vervains +verve +verves +vervet +vervets very +vesica +vesicae +vesical +vesicant +vesicants +vesicate +vesicated +vesicates +vesicating +vesicle +vesicles +vesicula +vesiculae +vesicular +vesicularities +vesicularity +vesiculate +vesiculated +vesiculates +vesiculating +vesiculation +vesiculations +vesper +vesperal +vesperals +vespers +vespertilian +vespertine +vespiaries +vespiary +vespid +vespids +vespine +vessel +vesseled +vessels vest +vesta +vestal +vestally +vestals +vestas +vested +vestee +vestees +vestiaries +vestiary +vestibular +vestibule +vestibuled +vestibules +vestige +vestiges +vestigia +vestigial +vestigially +vestigium +vesting +vestings +vestless +vestlike +vestment +vestmental +vestments +vestral +vestries +vestry +vestryman +vestrymen +vests +vestural +vesture +vestured +vestures +vesturing +vesuvian +vesuvianite +vesuvianites +vesuvians +vet +vetch +vetches +vetchling +vetchlings +veteran +veterans +veterinarian +veterinarians +veterinaries +veterinary +vetiver +vetivers +vetivert +vetiverts +veto +vetoed +vetoer +vetoers +vetoes +vetoing +vets +vetted +vetting +vex +vexation +vexations +vexatious +vexatiously +vexatiousness +vexatiousnesses +vexed +vexedly +vexer +vexers +vexes +vexil +vexilla +vexillar +vexillologic +vexillological +vexillologies +vexillologist +vexillologists +vexillology +vexillum +vexils +vexing +vexingly +vext via +viabilities +viability +viable +viably +viaduct +viaducts +vial +vialed +vialing +vialled +vialling +vials +viand +viands +viatic +viatica +viatical +viaticum +viaticums +viator +viatores +viators +vibe +vibes +vibist +vibists +vibraharp +vibraharpist +vibraharpists +vibraharps +vibrance +vibrances +vibrancies +vibrancy +vibrant +vibrantly +vibrants +vibraphone +vibraphones +vibraphonist +vibraphonists +vibrate +vibrated +vibrates +vibratile +vibrating +vibration +vibrational +vibrationless +vibrations +vibrato +vibratoless +vibrator +vibrators +vibratory +vibratos +vibrio +vibrioid +vibrion +vibrionic +vibrions +vibrios +vibrioses +vibriosis +vibrissa +vibrissae +vibronic +viburnum +viburnums +vicar +vicarage +vicarages +vicarate +vicarates +vicarial +vicariance +vicariances +vicariant +vicariants +vicariate +vicariates +vicarious +vicariously +vicariousness +vicariousnesses +vicarly +vicars +vicarship +vicarships vice +viced +vicegerencies +vicegerency +vicegerent +vicegerents +viceless +vicenary +vicennial +viceregal +viceregally +vicereine +vicereines +viceroy +viceroyalties +viceroyalty +viceroys +viceroyship +viceroyships +vices +vichies +vichy +vichyssoise +vichyssoises +vicinage +vicinages +vicinal +vicing +vicinities +vicinity +vicious +viciously +viciousness +viciousnesses +vicissitude +vicissitudes +vicissitudinous +vicomte +vicomtes victim +victimhood +victimhoods +victimise +victimised +victimises +victimising +victimization +victimizations +victimize +victimized +victimizer +victimizers +victimizes +victimizing +victimless +victimologies +victimologist +victimologists +victimology +victims +victor +victoria +victorias +victories +victorious +victoriously +victoriousness +victoriousnesses +victors victory +victress +victresses +victual +victualed +victualer +victualers +victualing +victualled +victualler +victuallers +victualling +victuals +vicugna +vicugnas +vicuna +vicunas +vide +videlicet video +videocassette +videocassettes +videoconference +videoconferences +videoconferencing +videoconferencings +videodisc +videodiscs +videodisk +videodisks +videographer +videographers +videographies +videography +videoland +videolands +videophile +videophiles videophone +videophones +videos +videotape +videotaped +videotapes +videotaping +videotex +videotexes +videotext +videotexts +vidette +videttes +vidicon +vidicons +viduities +viduity +vie +vied +vier +viers +vies view +viewable +viewdata +viewdatas +viewed +viewer +viewers +viewership +viewerships +viewfinder +viewfinders +viewier +viewiest +viewing +viewings +viewless +viewlessly +viewpoint +viewpoints +views +viewy +vig +viga +vigas +vigesimal +vigil +vigilance +vigilances +vigilant +vigilante +vigilantes +vigilantism +vigilantisms +vigilantly +vigils +vigintillion +vigintillions +vigneron +vignerons +vignette +vignetted +vignetter +vignetters +vignettes +vignetting +vignettist +vignettists +vigor +vigorish +vigorishes +vigoroso +vigorous +vigorously +vigorousness +vigorousnesses +vigors +vigour +vigours +vigs +viking +vikings +vilayet +vilayets +vile +vilely +vileness +vilenesses +viler +vilest +vilification +vilifications +vilified +vilifier +vilifiers +vilifies +vilify +vilifying +vilipend +vilipended +vilipending +vilipends +vill +villa +villadom +villadoms +villae village villager +villageries +villagers +villagery +villages +villain +villainess +villainesses +villainies +villainous +villainously +villainousness +villainousnesses +villains +villainy +villanella +villanelle +villanelles +villas +villatic +villein +villeins +villenage +villenages +villi +villiform +villose +villosities +villosity +villous +vills +villus +vim +vimen +vimina +viminal +vims +vina +vinaceous +vinaigrette +vinaigrettes +vinal +vinals +vinas +vinasse +vinasses +vinblastine +vinblastines +vinca +vincas +vincible +vincibly +vincristine +vincristines +vincula +vinculum +vinculums +vindaloo +vindaloos +vindicable +vindicate +vindicated +vindicates +vindicating +vindication +vindications +vindicative +vindicator +vindicators +vindicatory +vindictive +vindictively +vindictiveness +vindictivenesses +vine +vineal +vined +vinedresser +vinedressers vinegar +vinegared +vinegarish +vinegars +vinegary +vineries +vinery +vines +vineyard +vineyardist +vineyardists +vineyards +vinic +viniculture +vinicultures +vinier +viniest +vinifera +viniferas +vinification +vinifications +vinified +vinifies +vinify +vinifying +vining +vino +vinos +vinosities +vinosity +vinous +vinously +vintage +vintager +vintagers +vintages +vintner +vintners +viny +vinyl +vinylic +vinylidene +vinylidenes +vinyls +viol +viola +violabilities +violability +violable +violableness +violablenesses +violably +violaceous +violas violate +violated +violater +violaters +violates +violating +violation +violations +violative +violator +violators violence +violences violent +violently +violet +violets violin violinist +violinistic +violinists +violins +violist +violists +violoncelli +violoncellist +violoncellists +violoncello +violoncellos +violone +violones +viols +viomycin +viomycins +viper +viperine +viperish +viperous +viperously +vipers +viraginous +virago +viragoes +viragos +viral +virally +virelai +virelais +virelay +virelays +viremia +viremias +viremic +vireo +vireos +vires +virescence +virescences +virescent +virga +virgas +virgate +virgates +virgin +virginal +virginalist +virginalists +virginally +virginals +virginities +virginity +virgins +virgule +virgules +viricidal +viricide +viricides +virid +viridescent +viridian +viridians +viridities +viridity +virile +virilely +virilism +virilisms +virilities +virility +virion +virions +virl +virls +viroid +viroids +virologic +virological +virologically +virologies +virologist +virologists +virology +viroses +virosis +virtu +virtual +virtualities +virtuality +virtually virtue +virtueless +virtues +virtuosa +virtuosas +virtuose +virtuosi +virtuosic +virtuosities +virtuosity +virtuoso +virtuosos +virtuous +virtuously +virtuousness +virtuousnesses +virtus +virucidal +virucide +virucides +virulence +virulences +virulencies +virulency +virulent +virulently +viruliferous virus +viruses +vis visa +visaed +visage +visaged +visages +visaing +visard +visards +visas +viscacha +viscachas +viscera +visceral +viscerally +viscid +viscidities +viscidity +viscidly +viscoelastic +viscoelasticities +viscoelasticity +viscoid +viscometer +viscometers +viscometric +viscometries +viscometry +viscose +viscoses +viscosimeter +viscosimeters +viscosimetric +viscosities +viscosity +viscount +viscountcies +viscountcy +viscountess +viscountesses +viscounties +viscounts +viscounty +viscous +viscously +viscousness +viscousnesses +viscus +vise +vised +viseed +viseing +viselike +vises +visibilities +visibility +visible +visibleness +visiblenesses +visibly +vising +vision +visional +visionally +visionaries +visionariness +visionarinesses +visionary +visioned +visioning +visionless +visions visit +visitable +visitant +visitants +visitation +visitations +visitatorial +visited +visiter +visiters +visiting visitor +visitors +visits +visive +visor +visored +visoring +visorless +visors +vista +vistaed +vistas visual +visualise +visualised +visualises +visualising +visualization +visualizations +visualize +visualized +visualizer +visualizers +visualizes +visualizing +visually +visuals +vita +vitae vital +vitalise +vitalised +vitalises +vitalising +vitalism +vitalisms +vitalist +vitalistic +vitalists +vitalities +vitality +vitalization +vitalizations +vitalize +vitalized +vitalizes +vitalizing +vitally +vitals +vitamer +vitamers +vitamin +vitamine +vitamines +vitamins +vitellin +vitelline +vitellins +vitellogeneses +vitellogenesis +vitellus +vitelluses +vitesse +vitesses +vitiable +vitiate +vitiated +vitiates +vitiating +vitiation +vitiations +vitiator +vitiators +viticultural +viticulturally +viticulture +viticultures +viticulturist +viticulturists +vitiligo +vitiligos +vitrain +vitrains +vitrectomies +vitrectomy +vitreous +vitreouses +vitric +vitrics +vitrifiable +vitrification +vitrifications +vitrified +vitrifies +vitrify +vitrifying +vitrine +vitrines +vitriol +vitrioled +vitriolic +vitrioling +vitriolled +vitriolling +vitriols +vitta +vittae +vittate +vittle +vittled +vittles +vittling +vituline +vituperate +vituperated +vituperates +vituperating +vituperation +vituperations +vituperative +vituperatively +vituperator +vituperators +vituperatory +viva +vivace +vivaces +vivacious +vivaciously +vivaciousness +vivaciousnesses +vivacities +vivacity +vivandiere +vivandieres +vivaria +vivaries +vivarium +vivariums +vivary +vivas +vive +viverrid +viverrids +vivers vivid +vivider +vividest +vividly +vividness +vividnesses +vivific +vivification +vivifications +vivified +vivifier +vivifiers +vivifies +vivify +vivifying +vivipara +viviparities +viviparity +viviparous +viviparously +vivisect +vivisected +vivisecting +vivisection +vivisectional +vivisectionist +vivisectionists +vivisections +vivisector +vivisectors +vivisects +vixen +vixenish +vixenly +vixens +vizard +vizarded +vizards +vizcacha +vizcachas +vizier +vizierate +vizierates +vizierial +viziers +viziership +vizierships +vizir +vizirate +vizirates +vizirial +vizirs +vizor +vizored +vizoring +vizors +vizsla +vizslas +vocable +vocables +vocably +vocabular +vocabularies vocabulary +vocal +vocalic +vocalically +vocalics +vocalise +vocalised +vocalises +vocalising +vocalism +vocalisms +vocalist +vocalists +vocalities +vocality +vocalization +vocalizations +vocalize +vocalized +vocalizer +vocalizers +vocalizes +vocalizing +vocally +vocals +vocation +vocational +vocationalism +vocationalisms +vocationalist +vocationalists +vocationally +vocations +vocative +vocatively +vocatives +voces +vociferant +vociferate +vociferated +vociferates +vociferating +vociferation +vociferations +vociferator +vociferators +vociferous +vociferously +vociferousness +vociferousnesses +vocoder +vocoders +vodka +vodkas +vodoun +vodouns +vodun +voduns +voe +voes +vogie +vogue +vogued +vogueing +voguer +voguers +vogues +voguing +voguish +voguishness +voguishnesses voice +voiced +voiceful +voicefulness +voicefulnesses +voiceless +voicelessly +voicelessness +voicelessnesses +voiceprint +voiceprints +voicer +voicers +voices +voicing +void +voidable +voidableness +voidablenesses +voidance +voidances +voided +voider +voiders +voiding +voidness +voidnesses +voids +voila +voile +voiles +volant +volante +volar +volatile +volatileness +volatilenesses +volatiles +volatilise +volatilised +volatilises +volatilising +volatilities +volatility +volatilizable +volatilization +volatilizations +volatilize +volatilized +volatilizes +volatilizing +volcanic +volcanically +volcanicities +volcanicity +volcanics +volcanism +volcanisms volcano +volcanoes +volcanologic +volcanological +volcanologies +volcanologist +volcanologists +volcanology +volcanos +vole +voled +voleries +volery +voles +voling +volitant +volition +volitional +volitions +volitive +volkslied +volkslieder +volley volleyball +volleyballs +volleyed +volleyer +volleyers +volleying +volleys +volost +volosts +volplane +volplaned +volplanes +volplaning +volt +volta +voltage +voltages +voltaic +voltaism +voltaisms +volte +voltes +volti +voltmeter +voltmeters +volts +volubilities +volubility +voluble +volubleness +volublenesses +volubly +volume +volumed +volumes +volumeter +volumeters +volumetric +volumetrically +voluming +voluminosities +voluminosity +voluminous +voluminously +voluminousness +voluminousnesses +voluntaries +voluntarily +voluntariness +voluntarinesses +voluntarism +voluntarisms +voluntarist +voluntaristic +voluntarists voluntary +voluntaryism +voluntaryisms +voluntaryist +voluntaryists volunteer +volunteered +volunteering +volunteerism +volunteerisms +volunteers +voluptuaries +voluptuary +voluptuous +voluptuously +voluptuousness +voluptuousnesses +volute +voluted +volutes +volutin +volutins +volution +volutions +volva +volvas +volvate +volvox +volvoxes +volvuli +volvulus +volvuluses +vomer +vomerine +vomers +vomica +vomicae +vomit +vomited +vomiter +vomiters +vomiting +vomitive +vomitives +vomito +vomitories +vomitory +vomitos +vomitous +vomits +vomitus +vomituses +voodoo +voodooed +voodooing +voodooism +voodooisms +voodooist +voodooistic +voodooists +voodoos +voracious +voraciously +voraciousness +voraciousnesses +voracities +voracity +vorlage +vorlages +vortex +vortexes +vortical +vortically +vorticella +vorticellae +vorticellas +vortices +vorticism +vorticisms +vorticist +vorticists +vorticities +vorticity +vorticose +votable +votaress +votaresses +votaries +votarist +votarists +votary vote +voteable +voted +voteless +voter +voters +votes +voting +votive +votively +votiveness +votivenesses +votress +votresses +vouch +vouched +vouchee +vouchees +voucher +vouchered +vouchering +vouchers +vouches +vouching +vouchsafe +vouchsafed +vouchsafement +vouchsafements +vouchsafes +vouchsafing +voussoir +voussoirs +vouvray +vouvrays +vow +vowed +vowel +vowelize +vowelized +vowelizes +vowelizing +vowels +vower +vowers +vowing +vowless +vows +vox voyage +voyaged +voyager +voyagers +voyages +voyageur +voyageurs +voyaging +voyeur +voyeurism +voyeurisms +voyeuristic +voyeuristically +voyeurs +vroom +vroomed +vrooming +vrooms +vrouw +vrouws +vrow +vrows +vug +vugg +vuggier +vuggiest +vuggs +vuggy +vugh +vughs +vugs +vulcanian +vulcanic +vulcanicities +vulcanicity +vulcanisate +vulcanisates +vulcanisation +vulcanisations +vulcanise +vulcanised +vulcanises +vulcanising +vulcanism +vulcanisms +vulcanizate +vulcanizates +vulcanization +vulcanizations +vulcanize +vulcanized +vulcanizer +vulcanizers +vulcanizes +vulcanizing +vulcanologies +vulcanologist +vulcanologists +vulcanology +vulgar +vulgarer +vulgarest +vulgarian +vulgarians +vulgarise +vulgarised +vulgarises +vulgarising +vulgarism +vulgarisms +vulgarities +vulgarity +vulgarization +vulgarizations +vulgarize +vulgarized +vulgarizer +vulgarizers +vulgarizes +vulgarizing +vulgarly +vulgars +vulgate +vulgates +vulgo +vulgus +vulguses +vulnerabilities +vulnerability +vulnerable +vulnerableness +vulnerablenesses +vulnerably +vulneraries +vulnerary +vulpine +vulture +vultures +vulturine +vulturish +vulturous +vulva +vulvae +vulval +vulvar +vulvas +vulvate +vulvitis +vulvitises +vulvovaginitis +vulvovaginitises +vying +vyingly +wab +wabble +wabbled +wabbler +wabblers +wabbles +wabblier +wabbliest +wabbling +wabbly +wabs +wack +wacke +wackes +wackier +wackiest +wackily +wackiness +wackinesses +wacko +wackos +wacks +wacky +wad +wadable +wadded +wadder +wadders +waddie +waddied +waddies +wadding +waddings +waddle +waddled +waddler +waddlers +waddles +waddling +waddly +waddy +waddying +wade +wadeable +waded +wader +waders +wades +wadi +wadies +wading +wadis +wadmaal +wadmaals +wadmal +wadmals +wadmel +wadmels +wadmol +wadmoll +wadmolls +wadmols +wads +wadset +wadsets +wadsetted +wadsetting +wady +wae +waeful +waeness +waenesses +waes +waesuck +waesucks +wafer +wafered +wafering +wafers +wafery +waff +waffed +waffie +waffies +waffing +waffle +waffled +waffler +wafflers +waffles +wafflestomper +wafflestompers +waffling +wafflings +waffs +waft +waftage +waftages +wafted +wafter +wafters +wafting +wafts +wafture +waftures wag wage +waged +wageless +wager +wagered +wagerer +wagerers +wagering +wagers +wages +wageworker +wageworkers +wagged +wagger +waggeries +waggers +waggery +wagging +waggish +waggishly +waggishness +waggishnesses +waggle +waggled +waggles +waggling +waggly +waggon +waggoned +waggoner +waggoners +waggoning +waggons +waging +wagon +wagonage +wagonages +wagoned +wagoner +wagoners +wagonette +wagonettes +wagoning +wagons +wags +wagsome +wagtail +wagtails +wahconda +wahcondas +wahine +wahines +wahoo +wahoos +waif +waifed +waifing +waiflike +waifs +wail +wailed +wailer +wailers +wailful +wailfully +wailing +wails +wailsome +wain +wains +wainscot +wainscoted +wainscoting +wainscotings +wainscots +wainscotted +wainscotting +wainscottings +wainwright +wainwrights +wair +waired +wairing +wairs waist +waistband +waistbands +waistcoat +waistcoated +waistcoats +waisted +waister +waisters +waisting +waistings +waistline +waistlines +waists wait +waited waiter -waitingroom +waiters +waiting +waitings +waitperson +waitpersons waitress +waitressed +waitresses +waitressing +waits +waive +waived +waiver +waivers +waives +waiving +wakanda +wakandas wake +waked +wakeful +wakefully +wakefulness +wakefulnesses +wakeless +waken +wakened +wakener +wakeners +wakening +wakenings +wakens +waker +wakerife +wakers +wakes +wakiki +wakikis +waking +wale +waled +waler +walers +wales +walies +waling walk +walkable +walkabout +walkabouts +walkathon +walkathons +walkaway +walkaways +walked +walker +walkers +walking +walkings +walkingstick +walkingsticks +walkout +walkouts +walkover +walkovers +walks +walkup +walkups +walkway +walkways +walkyrie +walkyries wall +walla +wallabies +wallaby +wallah +wallahs +wallaroo +wallaroos +wallas +wallboard +wallboards +walled wallet +wallets +walleye +walleyed +walleyes +wallflower +wallflowers +wallie +wallies +walling +wallop +walloped +walloper +wallopers +walloping +wallops +wallow +wallowed +wallower +wallowers +wallowing +wallows +wallpaper +wallpapered +wallpapering +wallpapers +walls +wally +wallydraigle +wallydraigles walnut +walnuts +walrus +walruses +waltz +waltzed +waltzer +waltzers +waltzes +waltzing +waly +wamble +wambled +wambles +wamblier +wambliest +wambling +wambly +wame +wamefou +wamefous +wameful +wamefuls +wames +wammus +wammuses +wampish +wampished +wampishes +wampishing +wampum +wampumpeag +wampumpeags +wampums +wampus +wampuses +wamus +wamuses +wan +wand wander +wandered +wanderer +wanderers +wandering +wanderings +wanderlust +wanderlusts +wanderoo +wanderoos +wanders +wandle +wands +wane +waned +wanes +waney +wangan +wangans +wangle +wangled +wangler +wanglers +wangles +wangling +wangun +wanguns +wanier +waniest +wanigan +wanigans +waning +wanion +wanions +wanly +wanned +wanner +wanness +wannesses +wannest +wannigan +wannigans +wanning +wans want +wantage +wantages +wanted +wanter +wanters +wanting +wanton +wantoned +wantoner +wantoners +wantoning +wantonly +wantonness +wantonnesses +wantons +wants +wany +wap +wapentake +wapentakes +wapiti +wapitis +wapped +wappenschawing +wappenschawings +wapping +waps war +warble +warbled +warbler +warblers +warbles +warbling +warbonnet +warbonnets +warcraft +warcrafts ward +warded +warden +wardenries +wardenry +wardens +wardenship +wardenships +warder +warders +warding +wardress +wardresses +wardrobe +wardrobes +wardroom +wardrooms +wards +wardship +wardships +ware +wared warehouse +warehoused +warehouseman +warehousemen +warehouser +warehousers +warehouses +warehousing +wareroom +warerooms +wares +warfare +warfares +warfarin +warfarins +warhead +warheads +warhorse +warhorses +warier +wariest +warily +wariness +warinesses +waring +warison +warisons +wark +warked +warking +warks +warless +warlike +warlock +warlocks +warlord +warlordism +warlordisms +warlords warm +warmaker +warmakers +warmblooded +warmed +warmer +warmers +warmest +warmhearted +warmheartedness +warmheartednesses +warming +warmish +warmly +warmness +warmnesses +warmonger +warmongering +warmongerings +warmongers +warmouth +warmouths +warms warmth +warmths +warmup +warmups warn +warned +warner +warners +warning +warningly +warnings +warns +warp +warpage +warpages +warpath +warpaths +warped +warper +warpers +warping +warplane +warplanes +warpower +warpowers +warps +warpwise +warragal +warragals +warrant +warrantable +warrantableness +warrantablenesses +warrantably +warranted +warrantee +warrantees +warranter +warranters +warranties +warranting +warrantless +warrantor +warrantors +warrants +warranty +warred +warren +warrener +warreners +warrens +warrigal +warrigals +warring +warrior +warriors +wars +warsaw +warsaws +warship +warships +warsle +warsled +warsler +warslers +warsles +warsling +warstle +warstled +warstler +warstlers +warstles +warstling +wart +warted +warthog +warthogs +wartier +wartiest +wartime +wartimes +wartless +wartlike +warts +warty +warwork +warworks +warworn +wary +was +wasabi +wasabis wash +washabilities +washability +washable +washables +washateria +washaterias +washbasin +washbasins +washboard +washboards +washbowl +washbowls +washcloth +washcloths +washday +washdays +washed +washer +washerman +washermen +washers +washerwoman +washerwomen +washes +washeteria +washeterias +washhouse +washhouses +washier +washiest +washing +washings +washout +washouts +washrag +washrags washroom +washrooms +washstand +washstands +washtub +washtubs +washup +washups +washwoman +washwomen +washy +wasp +waspier +waspiest +waspily +waspish +waspishly +waspishness +waspishnesses +wasplike +wasps +waspy +wassail +wassailed +wassailer +wassailers +wassailing +wassails +wast +wastable +wastage +wastages waste +wastebasket +wastebaskets +wasted +wasteful +wastefully +wastefulness +wastefulnesses +wasteland +wastelands +wastelot +wastelots +wastepaper +wastepapers +waster +wasterie +wasteries +wasters +wastery +wastes +wastewater +wastewaters +wasteway +wasteways +wasting +wastrel +wastrels +wastrie +wastries +wastry +wasts +wat +watap +watape +watapes +wataps watch +watchable +watchables +watchband +watchbands +watchcase +watchcases +watchcries +watchcry +watchdog +watchdogged +watchdogging +watchdogs +watched +watcher +watchers +watches +watcheye +watcheyes +watchful +watchfully +watchfulness +watchfulnesses +watching +watchmaker +watchmakers +watchmaking +watchmakings +watchman +watchmen +watchout +watchouts +watchtower +watchtowers +watchword +watchwords water +waterage +waterages +waterbed +waterbeds +waterbird +waterbirds +waterborne +waterbuck +waterbucks +watercolor +watercolorist +watercolorists +watercolors +watercooler +watercoolers +watercourse +watercourses +watercraft +watercrafts +watercress +watercresses +waterdog +waterdogs +watered +waterer +waterers +waterfall +waterfalls +waterflood +waterflooded +waterflooding +waterfloods +waterfowl +waterfowler +waterfowlers +waterfowling +waterfowlings +waterfowls +waterfront +waterfronts +waterier +wateriest +waterily +wateriness +waterinesses +watering +waterings +waterish +waterishness +waterishnesses +waterleaf +waterleafs +waterless +waterlessness +waterlessnesses +waterline +waterlines +waterlog +waterlogged +waterlogging +waterlogs +waterloo +waterloos +waterman +watermanship +watermanships +watermark +watermarked +watermarking +watermarks watermelon +watermelons +watermen +waterpower +waterpowers +waterproof +waterproofed +waterproofer +waterproofers +waterproofing +waterproofings +waterproofness +waterproofnesses +waterproofs +waters +waterscape +waterscapes +watershed +watersheds +waterside +watersides +waterskiing +waterskiings +waterspout +waterspouts +waterthrush +waterthrushes +watertight +watertightness +watertightnesses +waterway +waterways +waterweed +waterweeds +waterwheel +waterwheels +waterworks +waterworn +watery +waterzooi +waterzoois +wats +watt +wattage +wattages +wattape +wattapes +watter +wattest +watthour +watthours +wattle +wattlebird +wattlebirds +wattled +wattles +wattless +wattling +wattmeter +wattmeters +watts +waucht +wauchted +wauchting +wauchts +waugh +waught +waughted +waughting +waughts +wauk +wauked +wauking +wauks +waul +wauled +wauling +wauls +waur wave +waveband +wavebands +waved +waveform +waveforms +waveguide +waveguides +wavelength +wavelengths +waveless +wavelessly +wavelet +wavelets +wavelike +waveoff +waveoffs +waver +wavered +waverer +waverers +wavering +waveringly +wavers +wavery +waves +waveshape +waveshapes +wavey +waveys +wavier +wavies +waviest +wavily +waviness +wavinesses +waving +wavy +waw +wawl +wawled +wawling +wawls +waws wax +waxberries +waxberry +waxbill +waxbills +waxed +waxen +waxer +waxers +waxes +waxier +waxiest +waxily +waxiness +waxinesses +waxing +waxings +waxlike +waxplant +waxplants +waxweed +waxweeds +waxwing +waxwings +waxwork +waxworks +waxworm +waxworms +waxy way +waybill +waybills +wayfarer +wayfarers +wayfaring +waygoing +waygoings +waylaid +waylay +waylayer +waylayers +waylaying +waylays +wayless +ways +wayside +waysides +wayward +waywardly +waywardness +waywardnesses +wayworn we weak +weaken +weakened +weakener +weakeners +weakening +weakens +weaker +weakest +weakfish +weakfishes +weakhearted +weakish +weaklier +weakliest +weakliness +weaklinesses +weakling +weaklings +weakly weakness +weaknesses +weakside +weaksides +weal +weald +wealds +weals wealth +wealthier +wealthiest +wealthily +wealthiness +wealthinesses +wealths wealthy +wean +weaned +weaner +weaners +weaning +weanling +weanlings +weans +weapon +weaponed +weaponing +weaponless +weaponries +weaponry +weapons wear +wearabilities +wearability +wearable +wearables +wearer +wearers +wearied +wearier +wearies +weariest +weariful +wearifully +wearifulness +wearifulnesses +weariless +wearilessly +wearily +weariness +wearinesses +wearing +wearingly +wearish +wearisome +wearisomely +wearisomeness +wearisomenesses +wears +weary +wearying +weasand +weasands +weasel +weaseled +weaseling +weaselled +weaselling +weaselly +weasels +weasely +weason +weasons weather +weatherabilities +weatherability +weatherboard +weatherboarded +weatherboarding +weatherboardings +weatherboards +weathercast +weathercaster +weathercasters +weathercasts +weathercock +weathercocks +weathered +weatherglass +weatherglasses +weathering +weatherings +weatherization +weatherizations +weatherize +weatherized +weatherizes +weatherizing +weatherly +weatherman +weathermen +weatherperson +weatherpersons +weatherproof +weatherproofed +weatherproofing +weatherproofness +weatherproofnesses +weatherproofs +weathers +weatherworn +weave +weaved +weaver +weaverbird +weaverbirds +weavers +weaves +weaving +weazand +weazands web -website +webbed +webbier +webbiest +webbing +webbings +webby +weber +webers +webfed +webfeet +webfoot +webless +weblike +webs +webster +websters +webwork +webworks +webworm +webworms +wecht +wechts +wed +wedded +wedder +wedders wedding +weddings +wedel +wedeled +wedeling +wedeln +wedelns +wedels +wedge +wedged +wedges +wedgie +wedgier +wedgies +wedgiest +wedging +wedgy +wedlock +wedlocks +weds +wee weed +weeded +weeder +weeders +weedier +weediest +weedily +weediness +weedinesses +weeding +weedless +weedlike +weeds +weedy week weekday +weekdays weekend +weekended +weekender +weekenders +weekending +weekends +weeklies +weeklong weekly +weeknight +weeknights +weeks +weel +ween +weened +weenie +weenier +weenies +weeniest +weening +weens +weensier +weensiest +weensy +weeny weep +weeper +weepers +weepie +weepier +weepies +weepiest +weeping +weepings +weeps +weepy +weer +wees +weest +weet +weeted +weeting +weets +weever +weevers +weevil +weeviled +weevilly +weevils +weevily +weewee +weeweed +weeweeing +weewees +weft +wefts +weftwise +weigela +weigelas +weigelia +weigelias weigh +weighable +weighed +weigher +weighers +weighing +weighman +weighmen +weighs weight +weighted +weighter +weighters +weightier +weightiest +weightily +weightiness +weightinesses +weighting +weightless +weightlessly +weightlessness +weightlessnesses +weightlifter +weightlifters +weightlifting +weightliftings +weights +weighty +weimaraner +weimaraners +weiner +weiners +weir +weird +weirder +weirdest +weirdie +weirdies +weirdly +weirdness +weirdnesses +weirdo +weirdoes +weirdos +weirds +weirdy +weirs +weisenheimer +weisenheimers +weka +wekas +welch +welched +welcher +welchers +welches +welching welcome +welcomed +welcomely +welcomeness +welcomenesses +welcomer +welcomers +welcomes +welcoming +weld +weldable +welded +welder +welders +welding +weldless +weldment +weldments +weldor +weldors +welds welfare +welfares +welfarism +welfarisms +welfarist +welfarists +welkin +welkins well +welladay +welladays +wellaway +wellaways +wellborn +wellcurb +wellcurbs +welldoer +welldoers +welled +wellhead +wellheads +wellhole +wellholes +wellie +wellies +welling +wellness +wellnesses +wells +wellsite +wellsites +wellspring +wellsprings +welly +welsh +welshed +welsher +welshers +welshes +welshing +welt +weltanschauung +weltanschauungen +weltanschauungs +welted +welter +weltered +weltering +welters +welterweight +welterweights +welting +weltings +welts +weltschmerz +weltschmerzes +wen +wench +wenched +wencher +wenchers +wenches +wenching +wend +wended +wendigo +wendigos +wending +wends +wennier +wenniest +wennish +wenny +wens +went +wentletrap +wentletraps +wept +were +weregild +weregilds +werewolf +werewolves +wergeld +wergelds +wergelt +wergelts +wergild +wergilds +wert +werwolf +werwolves +weskit +weskits +wessand +wessands west +westbound +wester +westered +westering +westerlies +westerly western +westerner +westerners +westernisation +westernisations +westernise +westernised +westernises +westernising +westernization +westernizations +westernize +westernized +westernizes +westernizing +westernmost +westerns +westers +westing +westings +westmost +wests westward westwards wet +wetback +wetbacks +wether +wethers +wetland +wetlands +wetly +wetness +wetnesses +wetproof +wets +wettabilities +wettability +wettable +wetted +wetter +wetters +wettest +wetting +wettings +wettish +wha +whack +whacked +whacker +whackers +whackier +whackiest +whacking +whacko +whackos +whacks +whacky whale +whaleback +whalebacks +whaleboat +whaleboats +whalebone +whalebones +whaled +whalelike +whaleman +whalemen +whaler +whalers +whales +whaling +whalings +wham +whammed +whammies +whamming +whammo +whammy +whamo +whams +whang +whanged +whangee +whangees +whanging +whangs +whap +whapped +whapper +whappers +whapping +whaps +wharf +wharfage +wharfages +wharfed +wharfing +wharfinger +wharfingers +wharfmaster +wharfmasters +wharfs +wharve +wharves what +whatchamacallit +whatchamacallits whatever +whatness +whatnesses +whatnot +whatnots +whats +whatsis +whatsises +whatsit +whatsits +whatsoever +whaup +whaups +wheal +wheals wheat +wheatear +wheatears +wheaten +wheatens +wheats +whee +wheedle +wheedled +wheedler +wheedlers +wheedles +wheedling wheel +wheelbarrow +wheelbarrowed +wheelbarrowing +wheelbarrows +wheelbase +wheelbases +wheelchair +wheelchairs +wheeled +wheeler +wheelers +wheelhorse +wheelhorses +wheelhouse +wheelhouses +wheelie +wheelies +wheeling +wheelings +wheelless +wheelman +wheelmen +wheels +wheelsman +wheelsmen +wheelwork +wheelworks +wheelwright +wheelwrights +wheen +wheens +wheep +wheeped +wheeping +wheeple +wheepled +wheeples +wheepling +wheeps +wheeze +wheezed +wheezer +wheezers +wheezes +wheezier +wheeziest +wheezily +wheeziness +wheezinesses +wheezing +wheezy +whelk +whelkier +whelkiest +whelks +whelky +whelm +whelmed +whelming +whelms +whelp +whelped +whelping +whelps when +whenas +whence +whencesoever whenever +whens +whensoever where +whereabout +whereabouts +whereas +whereases +whereat +whereby +wherefore +wherefores +wherefrom +wherein +whereinto +whereof +whereon +wheres +wheresoever +wherethrough +whereto +whereunto +whereupon wherever +wherewith +wherewithal +wherewithals +wherried +wherries +wherry +wherrying +wherve +wherves +whet whether +whets +whetstone +whetstones +whetted +whetter +whetters +whetting +whew +whews +whey +wheyey +wheyface +wheyfaces +wheyish +wheylike +wheys which whichever +whichsoever +whicker +whickered +whickering +whickers +whid +whidah +whidahs +whidded +whidding +whids +whiff +whiffed +whiffer +whiffers +whiffet +whiffets +whiffing +whiffle +whiffled +whiffler +whifflers +whiffles +whiffletree +whiffletrees +whiffling +whiffs +whig +whigmaleerie +whigmaleeries +whigs while +whiled +whiles +whiling +whilom +whilst +whim +whimbrel +whimbrels +whimper +whimpered +whimpering +whimpers +whims +whimsey +whimseys +whimsical +whimsicalities +whimsicality +whimsically +whimsicalness +whimsicalnesses +whimsied +whimsies +whimsy +whin +whinchat +whinchats +whine +whined +whiner +whiners +whines +whiney +whinge +whinged +whingeing +whinges +whinging +whinier +whiniest +whining +whiningly +whinnied +whinnier +whinnies +whinniest +whinny +whinnying +whins +whinstone +whinstones +whiny +whip +whipcord +whipcords +whiplash +whiplashes +whiplike +whipped +whipper +whippers +whippersnapper +whippersnappers +whippet +whippets +whippier +whippiest +whipping +whippings +whippletree +whippletrees +whippoorwill +whippoorwills +whippy +whipray +whiprays +whips +whipsaw +whipsawed +whipsawing +whipsawn +whipsaws +whipstitch +whipstitched +whipstitches +whipstitching +whipstock +whipstocks +whipt +whiptail +whiptails +whipworm +whipworms +whir +whirl +whirled +whirler +whirlers +whirlier +whirlies +whirliest +whirligig +whirligigs +whirling +whirlpool +whirlpools +whirls +whirlwind +whirlwinds +whirly +whirlybird +whirlybirds +whirr +whirred +whirried +whirries +whirring +whirrs +whirry +whirrying +whirs +whish +whished +whishes +whishing +whisht +whishted +whishting +whishts +whisk +whisked +whisker +whiskered +whiskers +whiskery +whiskey +whiskeys +whiskies +whisking +whisks +whisky whisper +whispered +whisperer +whisperers +whispering +whisperingly +whisperings +whispers +whispery +whist +whisted +whisting whistle +whistleable +whistleblower +whistleblowers +whistleblowing +whistleblowings +whistled +whistler +whistlers +whistles +whistling +whistlings +whists +whit white +whitebait +whitebaits +whitebeard +whitebeards +whitecap +whitecaps +whited +whiteface +whitefaces +whitefish +whitefishes +whiteflies +whitefly +whitehead +whiteheads +whitely +whiten +whitened +whitener +whiteners +whiteness +whitenesses +whitening +whitenings +whitens +whiteout +whiteouts +whiter +whites +whitesmith +whitesmiths +whitest +whitetail +whitetails +whitethroat +whitethroats +whitewall +whitewalls +whitewash +whitewashed +whitewasher +whitewashers +whitewashes +whitewashing +whitewashings +whitewing +whitewings +whitewood +whitewoods +whitey +whiteys +whither +whithersoever +whitherward +whitier +whities +whitiest +whiting +whitings +whitish +whitlow +whitlows +whitrack +whitracks +whits +whitter +whitters +whittle +whittled +whittler +whittlers +whittles +whittling +whittlings +whittret +whittrets +whity +whiz +whizbang +whizbangs +whizz +whizzbang +whizzbangs +whizzed +whizzer +whizzers +whizzes +whizzing who +whoa +whodunit +whodunits +whodunnit +whodunnits +whoever whole +wholehearted +wholeheartedly +wholeness +wholenesses +wholes +wholesale +wholesaled +wholesaler +wholesalers +wholesales +wholesaling +wholesome +wholesomely +wholesomeness +wholesomenesses +wholism +wholisms +wholistic +wholly whom +whomever +whomp +whomped +whomping +whomps +whomso +whomsoever +whoof +whoofed +whoofing +whoofs +whoop +whooped +whoopee +whoopees +whooper +whoopers +whooping +whoopla +whooplas +whoops +whoosh +whooshed +whooshes +whooshing +whoosis +whoosises +whop +whopped +whopper +whoppers +whopping +whops +whore +whored +whoredom +whoredoms +whorehouse +whorehouses +whoremaster +whoremasters +whoremonger +whoremongers +whores +whoreson +whoresons +whoring +whorish +whorl +whorled +whorls +whort +whortle +whortleberries +whortleberry +whortles +whorts whose +whosesoever +whosever +whosis +whosises +whoso +whosoever +whump +whumped +whumping +whumps why +whydah +whydahs +whys +wich +wiches +wick +wickape +wickapes +wicked +wickeder +wickedest +wickedly +wickedness +wickednesses +wicker +wickers +wickerwork +wickerworks +wicket +wickets +wicking +wickings +wickiup +wickiups +wicks +wickyup +wickyups +wicopies +wicopy +widder +widders +widdershins +widdie +widdies +widdle +widdled +widdles +widdling +widdy wide +wideawake +wideawakes +wideband +widely +widemouthed +widen +widened +widener +wideners +wideness +widenesses +widening +widens +wideout +wideouts +wider +wides widespread +widest +widgeon +widgeons +widget +widgets +widish widow +widowed +widower +widowerhood +widowerhoods +widowers +widowhood +widowhoods +widowing +widows +width +widths +widthway +wield +wielded +wielder +wielders +wieldier +wieldiest +wielding +wields +wieldy +wiener +wieners +wienerwurst +wienerwursts +wienie +wienies wife +wifed +wifedom +wifedoms +wifehood +wifehoods +wifeless +wifelier +wifeliest +wifelike +wifeliness +wifelinesses +wifely +wifes +wifing +wiftier +wiftiest +wifty +wig +wigan +wigans +wigeon +wigeons +wigged +wiggeries +wiggery +wiggier +wiggiest +wigging +wiggings +wiggle +wiggled +wiggler +wigglers +wiggles +wigglier +wiggliest +wiggling +wiggly +wiggy +wight +wights +wigless +wiglet +wiglets +wiglike +wigmaker +wigmakers +wigs +wigwag +wigwagged +wigwagging +wigwags +wigwam +wigwams +wikiup +wikiups +wilco wild +wildcat +wildcats +wildcatted +wildcatter +wildcatters +wildcatting +wildebeest +wildebeests +wilder +wildered +wildering +wilderment +wilderments +wilderness +wildernesses +wilders +wildest +wildfire +wildfires +wildflower +wildflowers +wildfowl +wildfowler +wildfowlers +wildfowling +wildfowlings +wildfowls +wilding +wildings +wildish +wildland +wildlands wildlife +wildling +wildlings +wildly +wildness +wildnesses +wilds +wildwood +wildwoods +wile +wiled +wiles +wilful +wilfully +wilier +wiliest +wilily +wiliness +wilinesses +wiling will +willable +willed +willemite +willemites +willer +willers +willet +willets +willful +willfully +willfulness +willfulnesses +willied +willies willing +willinger +willingest +willingly +willingness +willingnesses +williwau +williwaus +williwaw +williwaws +willow +willowed +willower +willowers +willowier +willowiest +willowing +willowlike +willows +willowware +willowwares +willowy +willpower +willpowers +wills +willy +willyard +willyart +willying +willywaw +willywaws +wilt +wilted +wilting +wilts +wily +wimble +wimbled +wimbles +wimbling +wimp +wimpier +wimpiest +wimpiness +wimpinesses +wimpish +wimpishness +wimpishnesses +wimple +wimpled +wimples +wimpling +wimps +wimpy win +wince +winced +wincer +wincers +winces +wincey +winceys +winch +winched +wincher +winchers +winches +winching +wincing wind +windable +windage +windages +windbag +windbags +windblast +windblasts +windblown +windbreak +windbreaker +windbreakers +windbreaks +windburn +windburned +windburning +windburns +windburnt +windchill +windchills +winded +winder +winders +windfall +windfalls +windflaw +windflaws +windflower +windflowers +windgall +windgalls +windhover +windhovers +windier +windiest +windigo +windigos +windily +windiness +windinesses +winding +windings +windjammer +windjammers +windjamming +windjammings +windlass +windlassed +windlasses +windlassing +windle +windled +windles +windless +windlessly +windlestraw +windlestraws +windling +windlings +windmill +windmilled +windmilling +windmills window +windowed +windowing +windowless +windowpane +windowpanes +windows +windowsill +windowsills +windpipe +windpipes +windproof +windrow +windrowed +windrowing +windrows +winds +windscreen +windscreens +windshield +windshields +windsock +windsocks +windstorm +windstorms +windsurf +windsurfed +windsurfing +windsurfings +windsurfs +windswept +windthrow +windthrows +windup +windups +windward +windwards +windway +windways windy wine +wined +wineglass +wineglasses +winegrower +winegrowers +wineless +winemaker +winemakers +winemaking +winemakings +winepress +winepresses +wineries +winery +wines +wineshop +wineshops +wineskin +wineskins +winesop +winesops +winey wing +wingback +wingbacks +wingbow +wingbows +wingding +wingdings +winged +wingedly +winger +wingers +wingier +wingiest +winging +wingless +winglessness +winglessnesses +winglet +winglets +winglike +wingman +wingmen +wingover +wingovers +wings +wingspan +wingspans +wingspread +wingspreads +wingtip +wingtips +wingy +winier +winiest +wining +winish +wink +winked +winker +winkers +winking +winkle +winkled +winkles +winkling +winks +winless +winnable +winned winner +winners +winning +winningly +winnings +winnock +winnocks +winnow +winnowed +winnower +winnowers +winnowing +winnows +wino +winoes +winos +wins +winsome +winsomely +winsomeness +winsomenesses +winsomer +winsomest winter +winterberries +winterberry +wintered +winterer +winterers +wintergreen +wintergreens +winterier +winteriest +wintering +winterization +winterizations +winterize +winterized +winterizes +winterizing +winterkill +winterkills +winterly +winters +wintertide +wintertides +wintertime +wintertimes +wintery +wintle +wintled +wintles +wintling +wintrier +wintriest +wintrily +wintriness +wintrinesses +wintry +winy +winze +winzes wipe +wiped +wipeout +wipeouts +wiper +wipers +wipes +wiping +wirable wire +wired +wiredraw +wiredrawer +wiredrawers +wiredrawing +wiredrawn +wiredraws +wiredrew +wirehair +wirehaired +wirehairs +wireless +wirelessed +wirelesses +wirelessing +wirelike +wireman +wiremen +wirephoto +wirephotos +wirer +wirers +wires +wiretap +wiretapped +wiretapper +wiretappers +wiretapping +wiretaps +wireway +wireways +wirework +wireworks +wireworm +wireworms +wirier +wiriest +wirily +wiriness +wirinesses +wiring +wirings +wirra +wiry +wis wisdom +wisdoms wise +wiseacre +wiseacres +wiseass +wiseasses +wisecrack +wisecracked +wisecracker +wisecrackers +wisecracking +wisecracks +wised +wiselier +wiseliest +wisely +wiseness +wisenesses +wisenheimer +wisenheimers +wisent +wisents +wiser +wises +wisest +wisewoman +wisewomen wish +wisha +wishbone +wishbones +wished +wisher +wishers +wishes +wishful +wishfully +wishfulness +wishfulnesses +wishing +wishless +wising +wisp +wisped +wispier +wispiest +wispily +wispiness +wispinesses +wisping +wispish +wisplike +wisps +wispy +wiss +wissed +wisses +wissing +wist +wistaria +wistarias +wisted +wisteria +wisterias +wistful +wistfully +wistfulness +wistfulnesses +wisting +wists +wit +witan +witch +witchcraft +witchcrafts +witched +witcheries +witchery +witches +witchgrass +witchgrasses +witchier +witchiest +witching +witchings +witchlike +witchweed +witchweeds +witchy +wite +wited +witenagemot +witenagemote +witenagemotes +witenagemots +wites with +withal withdraw +withdrawable +withdrawal +withdrawals +withdrawing +withdrawn +withdrawnness +withdrawnnesses +withdraws +withdrew +withe +withed +wither +withered +witherer +witherers +withering +witheringly +witherite +witherites +withers +withershins +withes +withheld +withhold +withholder +withholders +withholding +withholds +withier +withies +withiest within +withindoors +withing +withins without +withoutdoors +withouts +withstand +withstanding +withstands +withstood +withy +witing +witless +witlessly +witlessness +witlessnesses +witling +witlings +witloof +witloofs witness +witnessed +witnesses +witnessing +witney +witneys +wits +witted +witticism +witticisms +wittier +wittiest +wittily +wittiness +wittinesses +witting +wittingly +wittings +wittol +wittols +witty +wive +wived +wiver +wivern +wiverns +wivers +wives +wiving +wiz +wizard +wizardly +wizardries +wizardry +wizards +wizen +wizened +wizening +wizens +wizes +wizzen +wizzens +wo +woad +woaded +woads +woadwax +woadwaxes +woald +woalds +wobble +wobbled +wobbler +wobblers +wobbles +wobblier +wobblies +wobbliest +wobbliness +wobblinesses +wobbling +wobbly +wobegone +wodge +wodges +woe +woebegone +woebegoneness +woebegonenesses +woeful +woefuller +woefullest +woefully +woefulness +woefulnesses +woeness +woenesses +woes +woesome +woful +wofully +wog +wogs +wok +woke +woken +woks +wold +wolds wolf +wolfberries +wolfberry +wolfed +wolfer +wolfers +wolffish +wolffishes +wolfhound +wolfhounds +wolfing +wolfish +wolfishly +wolfishness +wolfishnesses +wolflike +wolfram +wolframite +wolframites +wolframs +wolfs +wolfsbane +wolfsbanes +wollastonite +wollastonites +wolver +wolverine +wolverines +wolvers +wolves woman +womaned +womanhood +womanhoods +womaning +womanise +womanised +womanises +womanish +womanishly +womanishness +womanishnesses +womanising +womanize +womanized +womanizer +womanizers +womanizes +womanizing +womankind +womanless +womanlier +womanliest +womanlike +womanliness +womanlinesses +womanly +womanpower +womanpowers +womans +womb +wombat +wombats +wombed +wombier +wombiest +wombs +womby +women +womenfolk +womenfolks +womenkind +womera +womeras +wommera +wommeras +won wonder +wondered +wonderer +wonderers wonderful +wonderfully +wonderfulness +wonderfulnesses +wondering +wonderland +wonderlands +wonderment +wonderments +wonders +wonderwork +wonderworks +wondrous +wondrously +wondrousness +wondrousnesses +wonk +wonkier +wonkiest +wonks +wonky +wonned +wonner +wonners +wonning +wons +wont +wonted +wontedly +wontedness +wontednesses +wonting +wonton +wontons +wonts +woo wood +woodbin +woodbind +woodbinds +woodbine +woodbines +woodbins +woodblock +woodblocks +woodbox +woodboxes +woodcarver +woodcarvers +woodcarving +woodcarvings +woodchat +woodchats +woodchopper +woodchoppers +woodchuck +woodchucks +woodcock +woodcocks +woodcraft +woodcrafts +woodcut +woodcuts +woodcutter +woodcutters +woodcutting +woodcuttings +wooded +wooden +woodener +woodenest +woodenhead +woodenheaded +woodenheads +woodenly +woodenness +woodennesses +woodenware +woodenwares +woodhen +woodhens +woodie +woodier +woodies +woodiest +woodiness +woodinesses +wooding +woodland +woodlander +woodlanders +woodlands +woodlark +woodlarks +woodless +woodlore +woodlores +woodlot +woodlots +woodman +woodmen +woodnote +woodnotes +woodpecker +woodpeckers +woodpile +woodpiles +woodruff +woodruffs +woods +woodshed +woodshedded +woodshedding +woodsheds +woodsia +woodsias +woodsier +woodsiest +woodsman +woodsmen +woodstove +woodstoves +woodsy +woodwax +woodwaxes +woodwind +woodwinds +woodwork +woodworker +woodworkers +woodworking +woodworkings +woodworks +woodworm +woodworms +woody +wooed +wooer +wooers +woof +woofed +woofer +woofers +woofing +woofs +wooing +wooingly wool +wooled woolen +woolens +wooler +woolers +woolfell +woolfells +woolgatherer +woolgatherers +woolgathering +woolgatherings +woolhat +woolhats +woolie +woolier +woolies +wooliest +woolled woollen +woollens +woollier +woollies +woolliest +woollike +woollily +woolliness +woollinesses +woolly +woolman +woolmen +woolpack +woolpacks +wools +woolsack +woolsacks +woolshed +woolsheds +woolskin +woolskins +woolwork +woolworks +wooly +woomera +woomeras +woops +woopsed +woopses +woopsing +woorali +wooralis +woorari +wooraris +woos +woosh +wooshed +wooshes +wooshing +woozier +wooziest +woozily +wooziness +woozinesses +woozy +wop +wops word +wordage +wordages +wordbook +wordbooks +worded +wordier +wordiest +wordily +wordiness +wordinesses +wording +wordings +wordless +wordlessly +wordlessness +wordlessnesses +wordmonger +wordmongers +wordplay +wordplays +words +wordsmith +wordsmitheries +wordsmithery +wordsmiths +wordy +wore work +workabilities +workability +workable +workableness +workablenesses +workaday +workaholic +workaholics +workaholism +workaholisms +workbag +workbags +workbasket +workbaskets +workbench +workbenches +workboat +workboats +workbook +workbooks +workbox +workboxes +workday +workdays +worked worker +workers +workfare +workfares +workfolk +workfolks +workforce +workforces +workhorse +workhorses +workhouse +workhouses +working +workingman +workingmen +workings +workingwoman +workingwomen +workless +worklessness +worklessnesses +workload +workloads +workman +workmanlike +workmanly +workmanship +workmanships +workmate +workmates +workmen +workout +workouts +workpeople +workpiece +workpieces +workplace +workplaces +workroom +workrooms +works +worksheet +worksheets +workshop +workshops +workstation +workstations +worktable +worktables +workup +workups +workweek +workweeks +workwoman +workwomen world +worldlier +worldliest +worldliness +worldlinesses +worldling +worldlings +worldly +worlds +worldview +worldviews worldwide worm +wormed +wormer +wormers +wormhole +wormholes +wormier +wormiest +wormil +wormils +worming +wormish +wormlike +wormroot +wormroots +worms +wormseed +wormseeds +wormwood +wormwoods +wormy worn +wornness +wornnesses worried +worriedly +worrier +worriers +worries +worriment +worriments +worrisome +worrisomely +worrisomeness +worrisomenesses +worrit +worrited +worriting +worrits worry +worrying +worrywart +worrywarts +worse +worsen +worsened +worsening +worsens +worser +worses +worset +worsets +worship +worshiped +worshiper +worshipers +worshipful +worshipfully +worshipfulness +worshipfulnesses +worshiping +worshipless +worshipped +worshipper +worshippers +worshipping +worships +worst +worsted +worsteds +worsting +worsts +wort worth +worthed +worthful +worthier +worthies +worthiest +worthily +worthiness +worthinesses +worthing +worthless +worthlessly +worthlessness +worthlessnesses +worths worthwhile +worthwhileness +worthwhilenesses worthy +worts +wos +wost +wot +wots +wotted +wotting would +wouldest +wouldst wound +wounded +wounding +woundless +wounds +wove +woven +wovens +wow +wowed +wowing +wows +wowser +wowsers +wrack +wracked +wrackful +wracking +wracks +wraith +wraithlike +wraiths +wrang +wrangle +wrangled +wrangler +wranglers +wrangles +wrangling +wrangs +wrap +wraparound +wraparounds +wrapped +wrapper +wrappers +wrapping +wrappings +wraps +wrapt +wrasse +wrasses +wrassle +wrassled +wrassles +wrassling +wrastle +wrastled +wrastles +wrastling +wrath +wrathed +wrathful +wrathfully +wrathfulness +wrathfulnesses +wrathier +wrathiest +wrathily +wrathing +wraths +wrathy +wreak +wreaked +wreaker +wreakers +wreaking +wreaks +wreath +wreathe +wreathed +wreathen +wreathes +wreathing +wreaths +wreathy +wreck +wreckage +wreckages +wrecked +wrecker +wreckers +wreckful +wrecking +wreckings +wrecks +wren +wrench +wrenched +wrenches +wrenching +wrenchingly +wrens +wrest +wrested +wrester +wresters +wresting wrestle +wrestled +wrestler +wrestlers +wrestles +wrestling +wrestlings +wrests +wretch +wretched +wretcheder +wretchedest +wretchedly +wretchedness +wretchednesses +wretches +wrick +wricked +wricking +wricks +wried +wrier +wries +wriest +wriggle +wriggled +wriggler +wrigglers +wriggles +wrigglier +wriggliest +wriggling +wriggly +wright +wrights +wring +wringed +wringer +wringers +wringing +wrings wrinkle +wrinkled +wrinkles +wrinklier +wrinkliest +wrinkling +wrinkly wrist +wristband +wristbands +wristier +wristiest +wristlet +wristlets +wristlock +wristlocks +wrists +wristwatch +wristwatches +wristy +writ +writable write +writer +writerly +writers +writes +writhe +writhed +writhen +writher +writhers +writhes +writhing +writing +writings +writs +written wrong -xray +wrongdoer +wrongdoers +wrongdoing +wrongdoings +wronged +wronger +wrongers +wrongest +wrongful +wrongfully +wrongfulness +wrongfulnesses +wrongheaded +wrongheadedly +wrongheadedness +wrongheadednesses +wronging +wrongly +wrongness +wrongnesses +wrongs +wrote +wroth +wrothful +wrought +wrung +wry +wryer +wryest +wrying +wryly +wryneck +wrynecks +wryness +wrynesses +wud +wulfenite +wulfenites +wunderkind +wunderkinder +wurst +wursts +wurzel +wurzels +wuss +wusses +wussier +wussies +wussiest +wussy +wuther +wuthered +wuthering +wuthers +wyandotte +wyandottes +wych +wyches +wye +wyes +wyle +wyled +wyles +wyliecoat +wyliecoats +wyling +wyn +wynd +wynds +wynn +wynns +wyns +wyte +wyted +wytes +wyting +wyvern +wyverns +xanthan +xanthans +xanthate +xanthates +xanthein +xantheins +xanthene +xanthenes +xanthic +xanthin +xanthine +xanthines +xanthins +xanthoma +xanthomas +xanthomata +xanthone +xanthones +xanthophyll +xanthophylls +xanthous +xebec +xebecs +xenia +xenial +xenias +xenic +xenobiotic +xenobiotics +xenodiagnoses +xenodiagnosis +xenodiagnostic +xenogamies +xenogamy +xenogeneic +xenogenies +xenogeny +xenograft +xenografts +xenolith +xenolithic +xenoliths +xenon +xenons +xenophile +xenophiles +xenophobe +xenophobes +xenophobia +xenophobias +xenophobic +xenophobically +xenotropic +xerarch +xeric +xerographic +xerographically +xerographies +xerography +xerophile +xerophilies +xerophilous +xerophily +xerophthalmia +xerophthalmias +xerophthalmic +xerophyte +xerophytes +xerophytic +xerophytism +xerophytisms +xeroradiographies +xeroradiography +xerosere +xeroseres +xeroses +xerosis +xerothermic +xerotic +xerox +xeroxed +xeroxes +xeroxing +xerus +xeruses +xi +xiphisterna +xiphisternum +xiphoid +xiphoids +xis +xu +xylan +xylans +xylem +xylems +xylene +xylenes +xylidin +xylidine +xylidines +xylidins +xylitol +xylitols +xylocarp +xylocarps +xylograph +xylographer +xylographers +xylographic +xylographical +xylographies +xylographs +xylography +xyloid +xylol +xylols +xylophagous +xylophone +xylophones +xylophonist +xylophonists +xylose +xyloses +xylotomies +xylotomy +xylyl +xylyls +xyst +xyster +xysters +xysti +xystoi +xystos +xysts +xystus +ya +yabber +yabbered +yabbering +yabbers +yacht +yachted +yachter +yachters +yachting +yachtings +yachtman +yachtmen +yachts +yachtsman +yachtsmen +yack +yacked +yacking +yacks +yaff +yaffed +yaffing +yaffs +yager +yagers +yagi +yagis +yah +yahoo +yahooism +yahooisms +yahoos +yahrzeit +yahrzeits +yaird +yairds +yak +yakitori +yakitoris +yakked +yakker +yakkers +yakking +yaks +yald +yam +yamalka +yamalkas +yamen +yamens +yammer +yammered +yammerer +yammerers +yammering +yammers +yams +yamulka +yamulkas +yamun +yamuns +yang +yangs +yank +yanked +yanking +yanks +yanqui +yanquis +yantra +yantras +yap +yapock +yapocks +yapok +yapoks +yapon +yapons +yapped +yapper +yappers +yapping +yaps +yar yard +yardage +yardages +yardarm +yardarms +yardbird +yardbirds +yarded +yarding +yardland +yardlands +yardman +yardmaster +yardmasters +yardmen +yards +yardstick +yardsticks +yardwand +yardwands +yardwork +yardworks +yare +yarely +yarer +yarest +yarmelke +yarmelkes +yarmulke +yarmulkes +yarn +yarned +yarner +yarners +yarning +yarns +yarrow +yarrows +yashmac +yashmacs +yashmak +yashmaks +yasmak +yasmaks +yatagan +yatagans +yataghan +yataghans +yatter +yattered +yattering +yatters +yaud +yauds +yauld +yaup +yauped +yauper +yaupers +yauping +yaupon +yaupons +yaups +yautia +yautias +yaw +yawed +yawing +yawl +yawled +yawling +yawls +yawmeter +yawmeters yawn +yawned +yawner +yawners +yawning +yawningly +yawns +yawp +yawped +yawper +yawpers +yawping +yawpings +yawps +yaws +yay +yays +ycleped +yclept +ye +yea +yeah +yealing +yealings +yean +yeaned +yeaning +yeanling +yeanlings +yeans year +yearbook +yearbooks +yearend +yearends +yearlies +yearling +yearlings +yearlong +yearly +yearn +yearned +yearner +yearners +yearning +yearningly +yearnings +yearns +years +yeas +yeasayer +yeasayers +yeast +yeasted +yeastier +yeastiest +yeastily +yeastiness +yeastinesses +yeasting +yeasts +yeasty +yecch +yecchs +yech +yechs +yechy +yeelin +yeelins +yegg +yeggman +yeggmen +yeggs +yeh +yeld +yelk +yelks yell +yelled +yeller +yellers +yelling yellow +yellowed +yellower +yellowest +yellowfin +yellowfins +yellowhammer +yellowhammers +yellowing +yellowish +yellowlegs +yellowly +yellows +yellowtail +yellowtails +yellowthroat +yellowthroats +yellowware +yellowwares +yellowwood +yellowwoods +yellowy +yells +yelp +yelped +yelper +yelpers +yelping +yelps +yen +yenned +yenning +yens +yenta +yentas +yente +yentes +yeoman +yeomanly +yeomanries +yeomanry +yeomen +yep +yerba +yerbas +yerk +yerked +yerking +yerks yes +yeses +yeshiva +yeshivah +yeshivahs +yeshivas +yeshivot +yeshivoth +yessed +yesses +yessing +yester yesterday +yesterdays +yestern +yesternight +yesternights +yesteryear +yesteryears +yestreen +yestreens yet +yeti +yetis +yett +yetts +yeuk +yeuked +yeuking +yeuks +yeuky +yew +yews +yid +yids +yield +yielded +yielder +yielders +yielding +yields +yikes +yill +yills +yin +yince +yins +yip +yipe +yipes +yipped +yippee +yippie +yippies +yipping +yips +yird +yirds +yirr +yirred +yirring +yirrs +yirth +yirths +ylem +ylems +yo +yob +yobbo +yobboes +yobbos +yobs +yock +yocked +yocking +yocks +yod +yodel +yodeled +yodeler +yodelers +yodeling +yodelled +yodeller +yodellers +yodelling +yodels +yodh +yodhs +yodle +yodled +yodler +yodlers +yodles +yodling +yods +yoga +yogas +yogee +yogees +yogh +yoghourt +yoghourts +yoghs yoghurt +yoghurts +yogi +yogic +yogin +yogini +yoginis +yogins +yogis +yogurt +yogurts +yohimbine +yohimbines +yoicks +yok +yoke +yoked +yokefellow +yokefellows +yokel +yokeless +yokelish +yokels +yokemate +yokemates +yokes +yoking +yokozuna +yokozunas +yoks +yolk +yolked +yolkier +yolkiest +yolks +yolky +yom +yomim +yon +yond +yonder +yoni +yonic +yonis +yonker +yonkers +yore +yores you young +youngberries +youngberry +younger +youngers +youngest +youngish +youngling +younglings +youngness +youngnesses +youngs +youngster +youngsters +younker +younkers +youpon +youpons your +yourn yours yourself +yourselves +youse youth +youthen +youthened +youthening +youthens +youthful +youthfully +youthfulness +youthfulnesses +youthquake +youthquakes +youths +yow +yowe +yowed +yowes +yowie +yowies +yowing +yowl +yowled +yowler +yowlers +yowling +yowls +yows +yperite +yperites +ytterbia +ytterbias +ytterbic +ytterbium +ytterbiums +yttria +yttrias +yttric +yttrium +yttriums +yuan +yuans +yuca +yucas +yucca +yuccas +yucch +yuch +yuck +yucked +yuckier +yuckiest +yucking +yucks +yucky +yuga +yugas +yuk +yukked +yukking +yuks +yulan +yulans +yule +yules +yuletide +yuletides +yum +yummier +yummies +yummiest yummy +yup +yupon +yupons +yuppie +yuppies +yups +yurt +yurta +yurts +ywis +zabaglione +zabagliones +zabaione +zabaiones +zabajone +zabajones +zacaton +zacatons +zaddick +zaddik +zaddikim +zaffar +zaffars +zaffer +zaffers +zaffir +zaffirs +zaffre +zaffres +zaftig +zag +zagged +zagging +zags +zaibatsu +zaikai +zaikais +zaire +zaires +zamarra +zamarras +zamarro +zamarros +zamia +zamias +zamindar +zamindari +zamindaris +zamindars +zanana +zananas +zander +zanders +zanier +zanies +zaniest +zanily +zaniness +zaninesses +zany +zanyish +zanza +zanzas +zap +zapateado +zapateados +zapateo +zapateos +zapped +zapper +zappers +zappier +zappiest +zapping +zappy +zaps +zaptiah +zaptiahs +zaptieh +zaptiehs +zaratite +zaratites +zareba +zarebas +zareeba +zareebas +zarf +zarfs +zariba +zaribas +zarzuela +zarzuelas +zastruga +zastrugi +zax +zaxes +zayin +zayins +zazen +zazens +zeal +zealot +zealotries +zealotry +zealots +zealous +zealously +zealousness +zealousnesses +zeals +zeatin +zeatins +zebec +zebeck +zebecks +zebecs zebra +zebraic +zebras +zebrass +zebrasses +zebrawood +zebrawoods +zebrine +zebroid +zebu +zebus +zecchin +zecchini +zecchino +zecchinos +zecchins +zechin +zechins +zed +zedoaries +zedoary +zeds +zee +zees +zein +zeins +zeitgeber +zeitgebers +zeitgeist +zeitgeists +zek +zeks +zelkova +zelkovas +zemindar +zemindaries +zemindars +zemindary +zemstva +zemstvo +zemstvos +zenaida +zenaidas +zenana +zenanas +zenith +zenithal +zeniths +zeolite +zeolites +zeolitic +zephyr +zephyrs +zeppelin +zeppelins +zerk +zerks zero +zeroed +zeroes +zeroing +zeros +zeroth +zest +zested +zester +zesters +zestful +zestfully +zestfulness +zestfulnesses +zestier +zestiest +zesting +zestless +zests +zesty +zeta +zetas +zeugma +zeugmas +zibeline +zibelines +zibelline +zibellines +zibet +zibeth +zibeths +zibets +zidovudine +zidovudines +zig +zigged +zigging +ziggurat +ziggurats +zigs +zigzag +zigzagged +zigzagging +zigzags +zikkurat +zikkurats +zikurat +zikurats +zilch +zilches +zill +zillah +zillahs +zillion +zillionaire +zillionaires +zillions +zillionth +zills +zin +zinc +zincate +zincates +zinced +zincic +zincified +zincifies +zincify +zincifying +zincing +zincite +zincites +zincked +zincking +zincky +zincoid +zincous +zincs +zincy +zineb +zinebs +zinfandel +zinfandels +zing +zingani +zingano +zingara +zingare +zingari +zingaro +zinged +zinger +zingers +zingier +zingiest +zinging +zings +zingy +zinkified +zinkifies +zinkify +zinkifying +zinky +zinnia +zinnias +zins zip +zipless +zipped zipper +zippered +zippering +zippers +zippier +zippiest +zipping +zippy +zips +ziram +zirams +zircon +zirconia +zirconias +zirconic +zirconium +zirconiums +zircons +zit +zither +zitherist +zitherists +zithern +zitherns +zithers +ziti +zitis +zits +zizit +zizith +zizzle +zizzled +zizzles +zizzling +zlote +zloties +zloty +zlotych +zlotys +zoa +zoantharian +zoantharians +zoaria +zoarial +zoarium +zodiac +zodiacal +zodiacs +zoea +zoeae +zoeal +zoeas +zoecia +zoecium +zoftig +zoic +zoisite +zoisites +zombi +zombie +zombielike +zombies +zombification +zombifications +zombified +zombifies +zombify +zombifying +zombiism +zombiisms +zombis +zonal +zonally +zonary +zonate +zonated +zonation +zonations zone +zoned +zoneless +zoner +zoners +zones +zonetime +zonetimes +zoning +zonk +zonked +zonking +zonks +zonula +zonulae +zonular +zonulas +zonule +zonules zoo +zoochore +zoochores +zooecia +zooecium +zoogenic +zoogeographer +zoogeographers +zoogeographic +zoogeographical +zoogeographically +zoogeographies +zoogeography +zooglea +zoogleae +zoogleal +zoogleas +zoogloea +zoogloeae +zoogloeas +zooid +zooidal +zooids +zookeeper +zookeepers +zooks +zoolater +zoolaters +zoolatries +zoolatry +zoologic +zoological +zoologically +zoologies +zoologist +zoologists +zoology zoom +zoomania +zoomanias +zoomed +zoometries +zoometry +zooming +zoomorph +zoomorphic +zoomorphs +zooms +zoon +zoonal +zoonoses +zoonosis +zoonotic +zoons +zoophile +zoophiles +zoophilic +zoophilies +zoophilous +zoophily +zoophobe +zoophobes +zoophyte +zoophytes +zooplankter +zooplankters +zooplankton +zooplanktonic +zooplanktons +zoos +zoosperm +zoosperms +zoosporangia +zoosporangium +zoospore +zoospores +zoosporic +zoosterol +zoosterols +zootechnical +zootechnics +zootier +zootiest +zootomic +zootomies +zootomy +zooty +zooxanthella +zooxanthellae +zori +zoril +zorilla +zorillas +zorille +zorilles +zorillo +zorillos +zorils +zoris +zoster +zosters +zouave +zouaves +zounds +zowie +zoysia +zoysias +zucchetto +zucchettos +zucchini +zucchinis +zwieback +zwiebacks +zwitterion +zwitterionic +zwitterions +zydeco +zydecos +zygapophyses +zygapophysis +zygodactyl +zygodactylous +zygoid +zygoma +zygomas +zygomata +zygomatic +zygomorphic +zygomorphies +zygomorphy +zygose +zygoses +zygosis +zygosities +zygosity +zygospore +zygospores +zygote +zygotene +zygotenes +zygotes +zygotic +zymase +zymases +zyme +zymes +zymogen +zymogene +zymogenes +zymogens +zymogram +zymograms +zymologies +zymology +zymosan +zymosans +zymoses +zymosis +zymotic +zymurgies +zymurgy +zyzzyva +zyzzyvas From a9625ba206db2b636be172d264461fbc7d9bc8fa Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sun, 24 Sep 2023 03:10:31 +0200 Subject: [PATCH 128/272] 3.5.1 (#73) * mdblist scrape improvements * olderthen input * correct logic * fix logic * add skip * update word list * remove keys * hashlist and color fixes --- package-lock.json | 4 ++-- package.json | 2 +- src/pages/hashlist.tsx | 9 ++++----- src/pages/movie/[imdbid].tsx | 6 +++--- src/pages/search.tsx | 2 +- src/pages/show/[imdbid]/[seasonNum].tsx | 6 +++--- 6 files changed, 14 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1a42aee..1ebf7e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "3.5.0", + "version": "3.5.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "3.5.0", + "version": "3.5.1", "dependencies": { "@ctrl/video-filename-parser": "^4.12.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 1ef3902..c25a7ea 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "3.5.0", + "version": "3.5.1", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/hashlist.tsx b/src/pages/hashlist.tsx index d453119..73331b7 100644 --- a/src/pages/hashlist.tsx +++ b/src/pages/hashlist.tsx @@ -7,7 +7,6 @@ import { getMediaId } from '@/utils/mediaId'; import { getMediaType } from '@/utils/mediaType'; import getReleaseTags from '@/utils/score'; import { getSelectableFiles, isVideoOrSubs } from '@/utils/selectable'; -import { withAuth } from '@/utils/withAuth'; import { ParsedFilename, filenameParse } from '@ctrl/video-filename-parser'; import lzString from 'lz-string'; import Head from 'next/head'; @@ -421,13 +420,13 @@ function TorrentsPage() {
handleSort('score')} > QScore{' '} {sortBy.column === 'score' && (sortBy.direction === 'asc' ? 'โ†‘' : 'โ†“')} - handleSort('progress')} @@ -1046,9 +1081,9 @@ function TorrentsPage() { {(torrent.bytes / ONE_GIGABYTE).toFixed(1)} GB + {/* {torrent.score.toFixed(1)} - {torrent.status === 'downloading' ? `${torrent.progress}%` diff --git a/src/services/realDebrid.ts b/src/services/realDebrid.ts index 668f2ca..066beb6 100644 --- a/src/services/realDebrid.ts +++ b/src/services/realDebrid.ts @@ -49,6 +49,7 @@ export interface UserTorrentResponse { added: string; links: string[]; ended: string; + seeders: number; } export interface DownloadResponse { diff --git a/src/services/scrapeJobs.ts b/src/services/scrapeJobs.ts index d02ce70..c178bee 100644 --- a/src/services/scrapeJobs.ts +++ b/src/services/scrapeJobs.ts @@ -1,6 +1,8 @@ import axios from 'axios'; +import { cleanMovieScrapes } from './movieCleaner'; import { scrapeMovies } from './movieScraper'; import { PlanetScaleCache } from './planetscale'; +import { cleanTvScrapes } from './tvCleaner'; import { scrapeTv } from './tvScraper'; const tmdbKey = process.env.TMDB_KEY; @@ -46,6 +48,7 @@ export async function generateScrapeJobs(imdbId: string, replaceOldScrape: boole try { const tmdbId = mdbInfo.data.tmdbid ?? tmdbSearch.data.movie_results[0]?.id; const tmdbInfo = await axios.get(getTmdbMovieInfo(tmdbId)); + if (!replaceOldScrape) await cleanMovieScrapes(imdbId, tmdbInfo.data, mdbInfo.data, db); await scrapeMovies(imdbId, tmdbInfo.data, mdbInfo.data, db, replaceOldScrape); return; } catch (error: any) { @@ -68,6 +71,7 @@ export async function generateScrapeJobs(imdbId: string, replaceOldScrape: boole try { const tmdbId = mdbInfo.data.tmdbid ?? tmdbSearch.data.tv_results[0]?.id; const tmdbInfo = await axios.get(getTmdbTvInfo(tmdbId)); + if (!replaceOldScrape) await cleanTvScrapes(imdbId, tmdbInfo.data, mdbInfo.data, db); await scrapeTv(imdbId, tmdbInfo.data, mdbInfo.data, db, replaceOldScrape); return; } catch (error: any) { diff --git a/src/utils/search.test.ts b/src/utils/search.test.ts new file mode 100644 index 0000000..e000f16 --- /dev/null +++ b/src/utils/search.test.ts @@ -0,0 +1,26 @@ +import { expect, test } from 'vitest'; +import { tokenizeString } from './search'; + +test('should tokenize the string correctly', () => { + const testCases = [ + { input: 'Hello, World!', expected: ['hello', 'world'] }, + { input: 'Hello (World)', expected: ['hello', 'world'] }, + { input: 'Hello[World]', expected: ['hello', 'world'] }, + { input: 'Hello{World}', expected: ['hello', 'world'] }, + { input: 'Hello+World', expected: ['hello', 'world'] }, + { input: 'Hello\\World', expected: ['hello', 'world'] }, + { input: 'Hello^World', expected: ['hello', 'world'] }, + { input: 'Hello|World', expected: ['hello', 'world'] }, + { input: 'HelloยทWorld', expected: ['hello', 'world'] }, + { input: 'Hello?World', expected: ['hello', 'world'] }, + { input: 'Hello/World', expected: ['hello', 'world'] }, + { input: 'Hello:World', expected: ['hello', 'world'] }, + { input: 'Hello;World', expected: ['hello', 'world'] }, + { input: ' Hello World ', expected: ['hello', 'world'] }, + { input: 'Hello::World', expected: ['hello', 'world'] }, + ]; + + testCases.forEach(({ input, expected }) => { + expect(tokenizeString(input)).toEqual(expected); + }); +}); diff --git a/src/utils/search.ts b/src/utils/search.ts index b0ceddc..638fc73 100644 --- a/src/utils/search.ts +++ b/src/utils/search.ts @@ -22,3 +22,10 @@ export const liteCleanSearchQuery = (search: string): string => { .join(' ') .trim(); }; + +export const tokenizeString = (search: string): string[] => { + return search + .split(/[\s\(\)\[\]\{\}\+\\\^\|ยท\?,\/:;"!]/) // split the search query into an array of elements + .filter((e) => e !== '') // filter out any empty elements + .map((e) => e.toLowerCase()); +}; From 092523c562e8b53302e62d7064905c2d970c2eac Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sun, 29 Oct 2023 21:46:50 +0100 Subject: [PATCH 158/272] 3.8.2 (#88) * clean on scrape * Improve dupe detection * Bump version --- package-lock.json | 4 ++-- package.json | 2 +- src/pages/library.tsx | 33 +++++++++++++++++++++------------ 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index d212652..9c6f979 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "3.8.1", + "version": "3.8.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "3.8.1", + "version": "3.8.2", "dependencies": { "@ctrl/video-filename-parser": "^5.0.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 8b28bb0..9bc53cd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "3.8.1", + "version": "3.8.2", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/library.tsx b/src/pages/library.tsx index ca85f52..7ccc8cd 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -74,7 +74,7 @@ function TorrentsPage() { const [movieGrouping] = useState>({}); const [tvGroupingByEpisode] = useState>({}); const [tvGroupingByTitle] = useState>({}); - const [hasDupes] = useState>([]); + const [dupeTitles] = useState>([]); const [dupeHashes] = useState>([]); // stats @@ -116,8 +116,6 @@ function TorrentsPage() { mediaType === 'movie' ? filenameParse(torrent.filename) : filenameParse(torrent.filename, true); - if (torrent.filename === 'Pokemon.S01-S19.DUBBED.WEBRip.AAC.2.0.x264-SRS') - console.log(info); return { score: getReleaseTags(torrent.filename, torrent.bytes / ONE_GIGABYTE).score, info, @@ -220,14 +218,25 @@ function TorrentsPage() { let tmpTotalBytes = 0; clearGroupings(movieGrouping); clearGroupings(tvGroupingByEpisode); - const hashes: string[] = []; + const hashes: Map = new Map(); for (const t of userTorrentsList) { - if (!hashes.includes(`${t.bytes}-${t.hash}`)) hashes.push(`${t.bytes}-${t.hash}`); - else dupeHashes.push(`${t.bytes}-${t.hash}`); - tmpTotalBytes += t.bytes; + const key: string = `${t.filename}|${t.hash}`; + if (!(key in hashes)) { + hashes.set(key, t.bytes); + tmpTotalBytes += t.bytes; + } + else { + const prevBytes = hashes.get(key) || 0; + if (prevBytes < t.bytes) { + tmpTotalBytes -= prevBytes; + tmpTotalBytes += t.bytes; + hashes.set(key, t.bytes); + } + dupeHashes.push(key); + } const mediaId = getMediaId(t.info, t.mediaType); if (mediaId in getGroupings(t.mediaType)) { - if (getGroupings(t.mediaType)[mediaId] === 1) hasDupes.push(mediaId); + if (getGroupings(t.mediaType)[mediaId] === 1) dupeTitles.push(mediaId); getGroupings(t.mediaType)[mediaId]++; } else { getGroupings(t.mediaType)[mediaId] = 1; @@ -252,7 +261,7 @@ function TorrentsPage() { movieGrouping, tvGroupingByEpisode, tvGroupingByTitle, - hasDupes, + dupeTitles, ]); // set the list you see @@ -284,14 +293,14 @@ function TorrentsPage() { ); } if (status === 'dupe') { - tmpList = tmpList.filter((t) => hasDupes.includes(getMediaId(t.info, t.mediaType))); + tmpList = tmpList.filter((t) => dupeTitles.includes(getMediaId(t.info, t.mediaType))); setFilteredList(applyQuickSearch(tmpList)); setHelpText( 'Torrents shown have the same title parsed from the torrent name. Use "By size" to retain the larger torrent for each title, or "By date" to retain the more recent torrent. Take note: the parser might not work well for multi-season tv show torrents.' ); } if (status === 'dupehash') { - tmpList = tmpList.filter((t) => dupeHashes.includes(`${t.bytes}-${t.hash}`)); + tmpList = tmpList.filter((t) => dupeHashes.includes(`${t.filename}|${t.hash}`)); setFilteredList(applyQuickSearch(tmpList)); setHelpText( 'Torrents shown have the same hash and size. These are exact duplicates. Just using the hash still means that they could have different files selected so size is also used for comparison.' @@ -334,7 +343,7 @@ function TorrentsPage() { rdLoading, adLoading, grouping, - hasDupes, + dupeTitles, query, currentPage, ]); From 22b55882a95a4bfdbbc90fcf8695110ec8f1b1a4 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 29 Oct 2023 22:02:53 +0100 Subject: [PATCH 159/272] fix dupe detection --- src/pages/library.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/library.tsx b/src/pages/library.tsx index 7ccc8cd..ae4f444 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -220,8 +220,8 @@ function TorrentsPage() { clearGroupings(tvGroupingByEpisode); const hashes: Map = new Map(); for (const t of userTorrentsList) { - const key: string = `${t.filename}|${t.hash}`; - if (!(key in hashes)) { + const key = `${t.filename}|${t.hash}`; + if (!hashes.has(key)) { hashes.set(key, t.bytes); tmpTotalBytes += t.bytes; } From d9d28e6ff22cb5a310ab00c0ce800877fd20a73c Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Mon, 6 Nov 2023 16:50:37 +0100 Subject: [PATCH 160/272] New scrapers (#1) * Add scrapedtrue table * scraped true * move endpoints * renames * Setup for scraping * Fix rescrape if x days old * Add logging * Only show cached --- .env | 1 - prisma/schema.prisma | 6 + scraper.sh | 115 ++++++++++++++++++ src/pages/api/{ => browse}/recent.ts | 0 src/pages/api/{ => browse}/top.ts | 1 + .../{moviecleaner.ts => cleaners/movie.ts} | 9 +- .../api/{tvcleaner.ts => cleaners/tv.ts} | 9 +- src/pages/api/movieupdater2.ts | 89 -------------- src/pages/api/scrape.ts | 23 ---- .../existingmovies.ts} | 9 +- .../existingshows.ts} | 9 +- src/pages/api/scrapers/imdb.ts | 17 +++ .../listoflists.ts} | 11 +- src/pages/api/{ => scrapers}/requested.ts | 13 +- src/pages/api/{ => scrapers}/singlelist.ts | 13 +- .../api/{processed.ts => scrapers/stuck.ts} | 13 +- src/pages/api/scrapers/torrentio.ts | 85 +++++++++++++ .../api/{keywordsearch.ts => search/title.ts} | 0 .../api/{moviesearch.ts => torrents/movie.ts} | 17 ++- src/pages/api/{tvsearch.ts => torrents/tv.ts} | 17 ++- .../recent.tsx} | 2 +- src/pages/index.tsx | 2 +- src/pages/library.tsx | 3 +- src/pages/movie/[imdbid].tsx | 42 ++++++- src/pages/search.tsx | 4 +- src/pages/show/[imdbid]/[seasonNum].tsx | 42 ++++++- src/services/hashlists.ts | 2 +- src/services/planetscale.ts | 56 +++++++-- src/services/torrentio.ts | 33 ++++- 29 files changed, 433 insertions(+), 210 deletions(-) create mode 100644 scraper.sh rename src/pages/api/{ => browse}/recent.ts (100%) rename src/pages/api/{ => browse}/top.ts (98%) rename src/pages/api/{moviecleaner.ts => cleaners/movie.ts} (73%) rename src/pages/api/{tvcleaner.ts => cleaners/tv.ts} (74%) delete mode 100644 src/pages/api/movieupdater2.ts delete mode 100644 src/pages/api/scrape.ts rename src/pages/api/{movieupdater.ts => scrapers/existingmovies.ts} (73%) rename src/pages/api/{tvupdater.ts => scrapers/existingshows.ts} (75%) create mode 100644 src/pages/api/scrapers/imdb.ts rename src/pages/api/{searchlist.ts => scrapers/listoflists.ts} (83%) rename src/pages/api/{ => scrapers}/requested.ts (65%) rename src/pages/api/{ => scrapers}/singlelist.ts (77%) rename src/pages/api/{processed.ts => scrapers/stuck.ts} (54%) create mode 100644 src/pages/api/scrapers/torrentio.ts rename src/pages/api/{keywordsearch.ts => search/title.ts} (100%) rename src/pages/api/{moviesearch.ts => torrents/movie.ts} (61%) rename src/pages/api/{tvsearch.ts => torrents/tv.ts} (62%) rename src/pages/{recentlyupdated.tsx => browse/recent.tsx} (98%) diff --git a/.env b/.env index d526130..391b632 100644 --- a/.env +++ b/.env @@ -1,7 +1,6 @@ REQUEST_TIMEOUT=5000 GH_PAT=github-access-token PROXY=tor:9050 -SCRAPE_API_PASSWORD=123456 TMDB_KEY=abc123 MDBLIST_KEY=abc123 diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 20af633..8edfefb 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -23,6 +23,12 @@ model Scraped { updatedAt DateTime @updatedAt } +model ScrapedTrue { + key String @id + value Json + updatedAt DateTime @updatedAt +} + model Search { key String @id value Json diff --git a/scraper.sh b/scraper.sh new file mode 100644 index 0000000..337d483 --- /dev/null +++ b/scraper.sh @@ -0,0 +1,115 @@ +#!/bin/bash + +function find_free_port() { + port=$(shuf -i 1024-65535 -n 1) + while netstat -an | grep -q LISTEN:$port; do + port=$(shuf -i 1024-65535 -n 1) + done + echo $port +} + +function launch_scraper() { + DMM_PATH="/Users/bensarmiento/2023/debrid-torrent-manager" + + echo "Launching scraper...$1" + + if [ "$1" = "upkeep" ]; then + SESSION_NAME="upkeep" + tmux new-session -d -s upkeep + + # requested + tmux new-window -t upkeep:1 -n requested + PORT=$(find_free_port) + tmux send-keys -t upkeep:1 "cd $DMM_PATH && npm start -- -p $PORT && exit" C-m + sleep 3 + tmux send-keys -t upkeep:0 "curl \"http://localhost:$PORT/api/scrapers/requested\" &" C-m + + # processed + tmux new-window -t upkeep:2 -n processed + PORT=$(find_free_port) + tmux send-keys -t upkeep:2 "cd $DMM_PATH && npm start -- -p $PORT && exit" C-m + sleep 3 + tmux send-keys -t upkeep:0 "curl \"http://localhost:$PORT/api/scrapers/stuck\" &" C-m + + # movie updater + tmux new-window -t upkeep:3 -n movie + PORT=$(find_free_port) + tmux send-keys -t upkeep:3 "cd $DMM_PATH && npm start -- -p $PORT && exit" C-m + sleep 3 + tmux send-keys -t upkeep:0 "curl \"http://localhost:$PORT/api/scrapers/existingmovies?quantity=3\" &" C-m + + # tv updater + tmux new-window -t upkeep:4 -n tv + PORT=$(find_free_port) + tmux send-keys -t upkeep:4 "cd $DMM_PATH && npm start -- -p $PORT && exit" C-m + sleep 3 + tmux send-keys -t upkeep:0 "curl \"http://localhost:$PORT/api/scrapers/existingshows?quantity=3\" &" C-m + + # torrentio + tmux new-window -t upkeep:5 -n tv + PORT=$(find_free_port) + tmux send-keys -t upkeep:5 "cd $DMM_PATH && npm start -- -p $PORT && exit" C-m + sleep 3 + tmux send-keys -t upkeep:0 "curl \"http://localhost:$PORT/api/scrapers/torrentio\" &" C-m + + # done! + sleep 3 + tmux kill-window -t upkeep:0 + + elif [[ "$1" =~ ^tt[a-z0-9]{3,20}$ ]]; then + PARAM="$1" + PORT=$(find_free_port) + SESSION_NAME="$PARAM-$PORT" + AGE="$2" + tmux new-session -d -s $SESSION_NAME + tmux send-keys -t $SESSION_NAME:0 "cd $DMM_PATH && npm start -- -p $PORT && exit" C-m + sleep 3 + tmux new-window -t $SESSION_NAME:1 + tmux send-keys -t $SESSION_NAME:1 "curl \"http://localhost:$PORT/api/scrapers/imdb?replaceOldScrape=false&id=$PARAM\"" C-m + sleep 3 + tmux kill-window -t $SESSION_NAME:1 + + elif [[ "$1" =~ ^rtt[a-z0-9]{3,20}$ ]]; then + PARAM="${1#r}" + PORT=$(find_free_port) + SESSION_NAME="$PARAM-$PORT" + AGE="$2" + tmux new-session -d -s $SESSION_NAME + tmux send-keys -t $SESSION_NAME:0 "cd $DMM_PATH && npm start -- -p $PORT && exit" C-m + sleep 3 + tmux new-window -t $SESSION_NAME:1 + tmux send-keys -t $SESSION_NAME:1 "curl \"http://localhost:$PORT/api/scrapers/imdb?replaceOldScrape=true&id=$PARAM\"" C-m + sleep 3 + tmux kill-window -t $SESSION_NAME:1 + + elif [[ "$1" =~ ^[a-z]{3,20}$ ]]; then + PARAM="$1" + PORT=$(find_free_port) + SESSION_NAME="$PARAM-$PORT" + AGE="$2" + tmux new-session -d -s $SESSION_NAME + tmux send-keys -t $SESSION_NAME:0 "cd $DMM_PATH && npm start -- -p $PORT && exit" C-m + sleep 3 + tmux new-window -t $SESSION_NAME:1 + tmux send-keys -t $SESSION_NAME:1 "curl \"http://localhost:$PORT/api/scrapers/listoflists?skipMs=1&rescrapeIfXDaysOld=$AGE&quantity=3&search=$PARAM\"" C-m + sleep 3 + tmux kill-window -t $SESSION_NAME:1 + + else + PARAM="$1" + SLUG=$(curl -s "https://mdblist.com/api/lists/$PARAM/?apikey=55gg408ja72aa3f5d5p90w4zu" | jq -r '.[0].slug') + PORT=$(find_free_port) + SESSION_NAME="$SLUG-$PORT" + AGE="$2" + tmux new-session -d -s $SESSION_NAME + tmux send-keys -t $SESSION_NAME:0 "cd $DMM_PATH && npm start -- -p $PORT && exit" C-m + sleep 3 + tmux new-window -t $SESSION_NAME:1 + tmux send-keys -t $SESSION_NAME:1 "curl \"http://localhost:$PORT/api/scrapers/singlelist?skipMs=1&rescrapeIfXDaysOld=$AGE&quantity=3&listId=$PARAM\"" C-m + sleep 3 + tmux kill-window -t $SESSION_NAME:1 + fi + + tmux ls | grep $SESSION_NAME + echo "Launched $SESSION_NAME" +} diff --git a/src/pages/api/recent.ts b/src/pages/api/browse/recent.ts similarity index 100% rename from src/pages/api/recent.ts rename to src/pages/api/browse/recent.ts diff --git a/src/pages/api/top.ts b/src/pages/api/browse/top.ts similarity index 98% rename from src/pages/api/top.ts rename to src/pages/api/browse/top.ts index 7264096..f6822d7 100644 --- a/src/pages/api/top.ts +++ b/src/pages/api/browse/top.ts @@ -2,6 +2,7 @@ import MdbList from '@/services/mdblist'; import { lcg, shuffle } from '@/utils/seededShuffle'; import { NextApiHandler } from 'next'; +// unused atm const handler: NextApiHandler = async (req, res) => { const mdblist = new MdbList(); let topLists = await mdblist.topLists(); diff --git a/src/pages/api/moviecleaner.ts b/src/pages/api/cleaners/movie.ts similarity index 73% rename from src/pages/api/moviecleaner.ts rename to src/pages/api/cleaners/movie.ts index 8dc9a1f..66e0909 100644 --- a/src/pages/api/moviecleaner.ts +++ b/src/pages/api/cleaners/movie.ts @@ -6,14 +6,7 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword, id } = req.query; - if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { - res.status(403).json({ - status: 'error', - errorMessage: 'You are not authorized to use this feature', - }); - return; - } + const { id } = req.query; let imdbIds = !!id ? [id as string] : await db.getAllImdbIds('movie'); if (!imdbIds) { diff --git a/src/pages/api/tvcleaner.ts b/src/pages/api/cleaners/tv.ts similarity index 74% rename from src/pages/api/tvcleaner.ts rename to src/pages/api/cleaners/tv.ts index 84af6ac..a8fb0ad 100644 --- a/src/pages/api/tvcleaner.ts +++ b/src/pages/api/cleaners/tv.ts @@ -6,14 +6,7 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword, id } = req.query; - if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { - res.status(403).json({ - status: 'error', - errorMessage: 'You are not authorized to use this feature', - }); - return; - } + const { id } = req.query; let imdbIds = !!id ? [id as string] : await db.getAllImdbIds('tv'); if (!imdbIds) { diff --git a/src/pages/api/movieupdater2.ts b/src/pages/api/movieupdater2.ts deleted file mode 100644 index 3e247c4..0000000 --- a/src/pages/api/movieupdater2.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { ScrapeSearchResult } from '@/services/mediasearch'; -import { PlanetScaleCache } from '@/services/planetscale'; -import { ScrapeResponse } from '@/services/scrapeJobs'; -import axios from 'axios'; -import { NextApiRequest, NextApiResponse } from 'next'; -import UserAgent from 'user-agents'; - -const db = new PlanetScaleCache(); -const torrentioUrl = (imdbId: string) => - `https://torrentio.strem.fun/sort=size%7Cqualityfilter=other,scr,cam,unknown/stream/movie/${imdbId}.json`; - -export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword, startFrom } = req.query; - if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { - res.status(403).json({ - status: 'error', - errorMessage: 'You are not authorized to use this feature', - }); - return; - } - - let imdbIds = await db.getAllImdbIds('movie'); - if (!imdbIds) { - res.status(500).json({ - status: 'error', - errorMessage: 'Something wrong with the database', - }); - return; - } - let startFromHere = (startFrom as string) ?? ''; - for (const imdbId of imdbIds) { - if (startFromHere && imdbId !== startFromHere) continue; - startFromHere = ''; - // show percentage - const index = imdbIds.indexOf(imdbId); - const percentage = Math.round((index / imdbIds.length) * 100); - while (true) { - try { - const response = await axios.get(torrentioUrl(imdbId), { - headers: { - accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', - 'accept-language': 'en-US,en;q=0.5', - 'accept-encoding': 'gzip, deflate, br', - connection: 'keep-alive', - 'sec-fetch-dest': 'document', - 'sec-fetch-mode': 'navigate', - 'sec-fetch-site': 'same-origin', - 'sec-fetch-user': '?1', - 'upgrade-insecure-requests': '1', - 'user-agent': new UserAgent().toString(), - }, - }); - const torrentioLinks = response.data.streams.map(processStream); - console.log( - `[movieupdater] ${imdbId} has ${torrentioLinks.length} links ${percentage}% (${index}/${imdbIds.length})` - ); - await db.saveScrapedResults(`movie:${imdbId}`, torrentioLinks, false); - break; - } catch (e) { - console.log(`[movieupdater] ${imdbId} failed (${e}), retrying...`); - await new Promise((resolve) => setTimeout(resolve, 600000)); - continue; - } - } - await new Promise((resolve) => setTimeout(resolve, 10000)); - } -} - -function processStream(item: any): ScrapeSearchResult { - // Extract the name - const nameMatch = item.title.match(/(.+?)\n/); - const name = nameMatch ? nameMatch[1] : ''; - - // Extract the size - const sizeMatch = item.title.match(/๐Ÿ’พ\s+(\d+(?:\.\d+)?)\s+(GB|MB)/); - let size = sizeMatch ? parseFloat(sizeMatch[1]) : 0; - const unit = sizeMatch ? sizeMatch[2] : ''; - - // If the size is in MB, convert it to GB - if (unit === 'GB') { - size *= 1024; - } - - return { - title: name, - fileSize: size, - hash: item.infoHash, - }; -} diff --git a/src/pages/api/scrape.ts b/src/pages/api/scrape.ts deleted file mode 100644 index b48b8b9..0000000 --- a/src/pages/api/scrape.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { PlanetScaleCache } from '@/services/planetscale'; -import { ScrapeResponse, generateScrapeJobs } from '@/services/scrapeJobs'; -import { NextApiRequest, NextApiResponse } from 'next'; - -export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { imdbId, scrapePassword, replaceOldScrape } = req.query; - if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { - res.status(403).json({ - status: 'error', - errorMessage: 'You are not authorized to use this feature', - }); - return; - } - - if (!imdbId || !(typeof imdbId === 'string')) { - res.status(400).json({ status: 'error', errorMessage: 'Missing "imdbId" query parameter' }); - return; - } - - await new PlanetScaleCache().delete(imdbId); - await generateScrapeJobs(imdbId.toString().trim(), replaceOldScrape === 'true'); - res.status(200).json({ status: 'success' }); -} diff --git a/src/pages/api/movieupdater.ts b/src/pages/api/scrapers/existingmovies.ts similarity index 73% rename from src/pages/api/movieupdater.ts rename to src/pages/api/scrapers/existingmovies.ts index e59a48b..dedc58a 100644 --- a/src/pages/api/movieupdater.ts +++ b/src/pages/api/scrapers/existingmovies.ts @@ -5,14 +5,7 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword, quantity } = req.query; - if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { - res.status(403).json({ - status: 'error', - errorMessage: 'You are not authorized to use this feature', - }); - return; - } + const { quantity } = req.query; while (true) { let imdbIds = await db.getOldestScrapedMedia('movie', parseInt(quantity as string)); diff --git a/src/pages/api/tvupdater.ts b/src/pages/api/scrapers/existingshows.ts similarity index 75% rename from src/pages/api/tvupdater.ts rename to src/pages/api/scrapers/existingshows.ts index 1e314b6..1c4f702 100644 --- a/src/pages/api/tvupdater.ts +++ b/src/pages/api/scrapers/existingshows.ts @@ -5,14 +5,7 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword, quantity } = req.query; - if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { - res.status(403).json({ - status: 'error', - errorMessage: 'You are not authorized to use this feature', - }); - return; - } + const { quantity } = req.query; while (true) { let imdbIds = await db.getOldestScrapedMedia('tv', 10); diff --git a/src/pages/api/scrapers/imdb.ts b/src/pages/api/scrapers/imdb.ts new file mode 100644 index 0000000..f255e4c --- /dev/null +++ b/src/pages/api/scrapers/imdb.ts @@ -0,0 +1,17 @@ +import { PlanetScaleCache } from '@/services/planetscale'; +import { ScrapeResponse, generateScrapeJobs } from '@/services/scrapeJobs'; +import { NextApiRequest, NextApiResponse } from 'next'; + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + const { id, replaceOldScrape } = req.query; + + if (!id || !(typeof id === 'string')) { + res.status(400).json({ status: 'error', errorMessage: 'Missing "id" query parameter' }); + return; + } + + await new PlanetScaleCache().delete(id); + await generateScrapeJobs(id.toString().trim(), replaceOldScrape === 'true'); + res.status(200).json({ status: 'success' }); + process.exit(0); +} diff --git a/src/pages/api/searchlist.ts b/src/pages/api/scrapers/listoflists.ts similarity index 83% rename from src/pages/api/searchlist.ts rename to src/pages/api/scrapers/listoflists.ts index d79a829..77485d0 100644 --- a/src/pages/api/searchlist.ts +++ b/src/pages/api/scrapers/listoflists.ts @@ -6,14 +6,8 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword, search, rescrapeIfXDaysOld, skipMs, quantity } = req.query; - if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { - res.status(403).json({ - status: 'error', - errorMessage: 'You are not authorized to use this feature', - }); - return; - } + const { search, rescrapeIfXDaysOld, skipMs, quantity } = req.query; + if (!search || typeof search !== 'string') { res.status(400).json({ status: 'error', @@ -49,4 +43,5 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< await Promise.all(imdbIds.map(async (id) => await generateScrapeJobs(id))); } } + process.exit(0); } diff --git a/src/pages/api/requested.ts b/src/pages/api/scrapers/requested.ts similarity index 65% rename from src/pages/api/requested.ts rename to src/pages/api/scrapers/requested.ts index 0fc81c6..09eeb17 100644 --- a/src/pages/api/requested.ts +++ b/src/pages/api/scrapers/requested.ts @@ -5,21 +5,12 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword } = req.query; - if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { - res.status(403).json({ - status: 'error', - errorMessage: 'You are not authorized to use this feature', - }); - return; - } - let updatedAt = null; while (true) { let request = await db.getOldestRequest(updatedAt); if (!request) { - console.log('[requested] No requested jobs found, waiting 60 seconds'); - await new Promise((resolve) => setTimeout(resolve, 60000)); + console.log('[requested] No requested jobs found, waiting 30 seconds'); + await new Promise((resolve) => setTimeout(resolve, 30000)); continue; } diff --git a/src/pages/api/singlelist.ts b/src/pages/api/scrapers/singlelist.ts similarity index 77% rename from src/pages/api/singlelist.ts rename to src/pages/api/scrapers/singlelist.ts index e2d6070..a230fdc 100644 --- a/src/pages/api/singlelist.ts +++ b/src/pages/api/scrapers/singlelist.ts @@ -6,14 +6,8 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword, listId, olderThanMins, skipMs, quantity } = req.query; - if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { - res.status(403).json({ - status: 'error', - errorMessage: 'You are not authorized to use this feature', - }); - return; - } + const { listId, rescrapeIfXDaysOld, skipMs, quantity } = req.query; + if (!listId || typeof listId !== 'string') { res.status(400).json({ status: 'error', @@ -31,7 +25,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< console.log(`[singlelist] Already processing ${imdbId}, skipping`); continue; } - if (!(await db.isOlderThan(imdbId, parseInt(olderThanMins as string) || 60 * 24))) { + if (!(await db.isOlderThan(imdbId, parseInt(rescrapeIfXDaysOld as string) || 10))) { console.log(`[singlelist] ${imdbId} was scraped recently, skipping`); await new Promise((resolve) => setTimeout(resolve, parseInt(skipMs as string) || 1000)); continue; @@ -45,4 +39,5 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< if (imdbIds.length > 0) { await Promise.all(imdbIds.map(async (id) => await generateScrapeJobs(id))); } + process.exit(0); } diff --git a/src/pages/api/processed.ts b/src/pages/api/scrapers/stuck.ts similarity index 54% rename from src/pages/api/processed.ts rename to src/pages/api/scrapers/stuck.ts index e728298..d7a7279 100644 --- a/src/pages/api/processed.ts +++ b/src/pages/api/scrapers/stuck.ts @@ -5,20 +5,11 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { - const { scrapePassword } = req.query; - if (process.env.SCRAPE_API_PASSWORD && scrapePassword !== process.env.SCRAPE_API_PASSWORD) { - res.status(403).json({ - status: 'error', - errorMessage: 'You are not authorized to use this feature', - }); - return; - } - while (true) { let imdbId = await db.processingMoreThanAnHour(); if (!imdbId) { - console.log('[processed] No processing jobs found, waiting 60 seconds'); - await new Promise((resolve) => setTimeout(resolve, 60000)); + console.log('[processed] No processing jobs found, waiting 120 seconds'); + await new Promise((resolve) => setTimeout(resolve, 120000)); continue; } await generateScrapeJobs(imdbId); diff --git a/src/pages/api/scrapers/torrentio.ts b/src/pages/api/scrapers/torrentio.ts new file mode 100644 index 0000000..d91a22b --- /dev/null +++ b/src/pages/api/scrapers/torrentio.ts @@ -0,0 +1,85 @@ +import { ScrapeSearchResult } from '@/services/mediasearch'; +import { PlanetScaleCache } from '@/services/planetscale'; +import { ScrapeResponse } from '@/services/scrapeJobs'; +import axios from 'axios'; +import { NextApiRequest, NextApiResponse } from 'next'; +import UserAgent from 'user-agents'; + +const db = new PlanetScaleCache(); +const torrentioUrl = (imdbId: string) => + `https://torrentio.strem.fun/sort=size%7Cqualityfilter=other,scr,cam,unknown/stream/movie/${imdbId}.json`; + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + const { startFrom } = req.query; + + let imdbIds = await db.getAllImdbIds('movie'); + if (!imdbIds) { + res.status(500).json({ + status: 'error', + errorMessage: 'Something wrong with the database', + }); + return; + } + let startFromHere = (startFrom as string) ?? ''; + while (true) { + for (const imdbId of imdbIds) { + if (startFromHere && imdbId !== startFromHere) continue; + startFromHere = ''; + // show percentage + const index = imdbIds.indexOf(imdbId); + const percentage = Math.round((index / imdbIds.length) * 100); + while (true) { + try { + const response = await axios.get(torrentioUrl(imdbId), { + headers: { + accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', + 'accept-language': 'en-US,en;q=0.5', + 'accept-encoding': 'gzip, deflate, br', + connection: 'keep-alive', + 'sec-fetch-dest': 'document', + 'sec-fetch-mode': 'navigate', + 'sec-fetch-site': 'same-origin', + 'sec-fetch-user': '?1', + 'upgrade-insecure-requests': '1', + 'user-agent': new UserAgent().toString(), + }, + }); + const torrentioLinks = response.data.streams.map(processStream); + console.log( + `[movieupdater] ${imdbId} has ${torrentioLinks.length} links ${percentage}% (${index}/${imdbIds.length})` + ); + await db.saveScrapedTrueResults(`movie:${imdbId}`, torrentioLinks, true); + break; + } catch (e) { + console.log(`[movieupdater] ${imdbId} failed (${e}), retrying...`); + await new Promise((resolve) => setTimeout(resolve, 600000)); + continue; + } + } + await new Promise((resolve) => setTimeout(resolve, 10000)); + } + startFromHere = ''; + } +} + +function processStream(item: any): ScrapeSearchResult { + // Extract the name + const nameMatch = item.title.match(/(.+?)\n/); + const name = nameMatch ? nameMatch[1] : ''; + + // Extract the size + const sizeMatch = item.title.match(/๐Ÿ’พ\s+(\d+(?:\.\d+)?)\s+(GB|MB)/); + let size = sizeMatch ? parseFloat(sizeMatch[1]) : 0; + const unit = sizeMatch ? sizeMatch[2] : ''; + + // If the size is in MB, convert it to GB + if (unit === 'GB') { + size *= 1024; + } + + return { + title: name, + fileSize: size, + hash: item.infoHash, + }; +} diff --git a/src/pages/api/keywordsearch.ts b/src/pages/api/search/title.ts similarity index 100% rename from src/pages/api/keywordsearch.ts rename to src/pages/api/search/title.ts diff --git a/src/pages/api/moviesearch.ts b/src/pages/api/torrents/movie.ts similarity index 61% rename from src/pages/api/moviesearch.ts rename to src/pages/api/torrents/movie.ts index a498ff7..579d8fe 100644 --- a/src/pages/api/moviesearch.ts +++ b/src/pages/api/torrents/movie.ts @@ -1,8 +1,10 @@ +import { flattenAndRemoveDuplicates, sortByFileSize } from '@/services/mediasearch'; import { PlanetScaleCache } from '@/services/planetscale'; import { NextApiHandler } from 'next'; const db = new PlanetScaleCache(); +// returns scraped results or marks the imdb id as requested const handler: NextApiHandler = async (req, res) => { const { imdbId } = req.query; @@ -12,10 +14,19 @@ const handler: NextApiHandler = async (req, res) => { } try { - const searchResults = await db.getScrapedResults( - `movie:${imdbId.toString().trim()}` - ); + const results = await Promise.all([ + db.getScrapedResults( + `movie:${imdbId.toString().trim()}` + ), + db.getScrapedTrueResults( + `movie:${imdbId.toString().trim()}` + ), + ]) + // should contain both results + const searchResults = [...(results[0] || []), ...(results[1] || [])]; if (searchResults) { + let processedResults = flattenAndRemoveDuplicates(searchResults); + processedResults = sortByFileSize(processedResults); res.status(200).json({ results: searchResults }); return; } diff --git a/src/pages/api/tvsearch.ts b/src/pages/api/torrents/tv.ts similarity index 62% rename from src/pages/api/tvsearch.ts rename to src/pages/api/torrents/tv.ts index c3a6adc..2a4c57c 100644 --- a/src/pages/api/tvsearch.ts +++ b/src/pages/api/torrents/tv.ts @@ -1,8 +1,10 @@ +import { flattenAndRemoveDuplicates, sortByFileSize } from '@/services/mediasearch'; import { PlanetScaleCache } from '@/services/planetscale'; import { NextApiHandler } from 'next'; const db = new PlanetScaleCache(); +// returns scraped results or marks the imdb id as requested const handler: NextApiHandler = async (req, res) => { const { imdbId, seasonNum } = req.query; @@ -18,10 +20,19 @@ const handler: NextApiHandler = async (req, res) => { } try { - const searchResults = await db.getScrapedResults( - `tv:${imdbId.toString().trim()}:${parseInt(seasonNum.toString().trim(), 10)}` - ); + const results = await Promise.all([ + db.getScrapedResults( + `tv:${imdbId.toString().trim()}:${parseInt(seasonNum.toString().trim(), 10)}` + ), + db.getScrapedTrueResults( + `tv:${imdbId.toString().trim()}:${parseInt(seasonNum.toString().trim(), 10)}` + ), + ]) + // should contain both results + const searchResults = [...(results[0] || []), ...(results[1] || [])]; if (searchResults) { + let processedResults = flattenAndRemoveDuplicates(searchResults); + processedResults = sortByFileSize(processedResults); res.status(200).json({ results: searchResults }); return; } diff --git a/src/pages/recentlyupdated.tsx b/src/pages/browse/recent.tsx similarity index 98% rename from src/pages/recentlyupdated.tsx rename to src/pages/browse/recent.tsx index 2754c81..74b26a4 100644 --- a/src/pages/recentlyupdated.tsx +++ b/src/pages/browse/recent.tsx @@ -15,7 +15,7 @@ function RecentlyUpdated() { const fetchData = async () => { setLoading(true); try { - let path = 'api/recent'; + let path = 'api/browse/recent'; if (config.externalSearchApiHostname) { path = encodeURIComponent(path); } diff --git a/src/pages/index.tsx b/src/pages/index.tsx index b0dc683..c3fb0c9 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -107,7 +107,7 @@ function IndexPage() { Recently Updated diff --git a/src/pages/library.tsx b/src/pages/library.tsx index ae4f444..c908780 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -224,8 +224,7 @@ function TorrentsPage() { if (!hashes.has(key)) { hashes.set(key, t.bytes); tmpTotalBytes += t.bytes; - } - else { + } else { const prevBytes = hashes.get(key) || 0; if (prevBytes < t.bytes) { tmpTotalBytes -= prevBytes; diff --git a/src/pages/movie/[imdbid].tsx b/src/pages/movie/[imdbid].tsx index 7e7a61f..d213925 100644 --- a/src/pages/movie/[imdbid].tsx +++ b/src/pages/movie/[imdbid].tsx @@ -37,6 +37,7 @@ const MovieSearch: FunctionComponent = ({ const { publicRuntimeConfig: config } = getConfig(); const [searchState, setSearchState] = useState('loading'); const [searchResults, setSearchResults] = useState([]); + const [filteredResults, setFilteredResults] = useState([]); const [errorMessage, setErrorMessage] = useState(''); const rdKey = useRealDebridAccessToken(); const adKey = useAllDebridApiKey(); @@ -50,6 +51,10 @@ const MovieSearch: FunctionComponent = ({ 'adAutoInstantCheck', false ); + const [onlyShowCached, setOnlyShowCached] = useLocalStorage( + 'onlyShowCached', + false + ); const router = useRouter(); const { imdbid } = router.query; @@ -61,11 +66,24 @@ const MovieSearch: FunctionComponent = ({ // eslint-disable-next-line react-hooks/exhaustive-deps }, [imdbid]); + useEffect(() => { + if (searchResults.length > 0) { + const filtered = searchResults.filter((result) => { + if (onlyShowCached) { + return result.rdAvailable || result.adAvailable; + } + return true; + }); + setFilteredResults(filtered); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [searchResults, onlyShowCached]); + const fetchData = async (imdbId: string) => { setSearchResults([]); setErrorMessage(''); try { - let path = `api/moviesearch?imdbId=${encodeURIComponent(imdbId)}`; + let path = `api/torrents/movie?imdbId=${encodeURIComponent(imdbId)}`; if (config.externalSearchApiHostname) { path = encodeURIComponent(path); } @@ -335,12 +353,32 @@ const MovieSearch: FunctionComponent = ({ > Auto + { + const isChecked = event.target.checked; + setOnlyShowCached(isChecked); + }} + />{' '} + + + + {filteredResults.length} / {searchResults.length} shown + )}
{searchState !== 'loading' && - searchResults.map((r: SearchResult) => ( + filteredResults.map((r: SearchResult) => (
{ setLoading(true); try { - let path = `api/keywordsearch?keyword=${query}`; + let path = `api/search/title?keyword=${query}`; if (config.externalSearchApiHostname) { path = encodeURIComponent(path); } diff --git a/src/pages/show/[imdbid]/[seasonNum].tsx b/src/pages/show/[imdbid]/[seasonNum].tsx index c0ea918..67b0d1c 100644 --- a/src/pages/show/[imdbid]/[seasonNum].tsx +++ b/src/pages/show/[imdbid]/[seasonNum].tsx @@ -39,6 +39,7 @@ const TvSearch: FunctionComponent = ({ const { publicRuntimeConfig: config } = getConfig(); const [searchState, setSearchState] = useState('loading'); const [searchResults, setSearchResults] = useState([]); + const [filteredResults, setFilteredResults] = useState([]); const [errorMessage, setErrorMessage] = useState(''); const rdKey = useRealDebridAccessToken(); const adKey = useAllDebridApiKey(); @@ -52,6 +53,10 @@ const TvSearch: FunctionComponent = ({ 'adAutoInstantCheck', false ); + const [onlyShowCached, setOnlyShowCached] = useLocalStorage( + 'onlyShowCached', + false + ); const router = useRouter(); const { imdbid, seasonNum } = router.query; @@ -63,11 +68,24 @@ const TvSearch: FunctionComponent = ({ // eslint-disable-next-line react-hooks/exhaustive-deps }, [imdbid, seasonNum]); + useEffect(() => { + if (searchResults.length > 0) { + const filtered = searchResults.filter((result) => { + if (onlyShowCached) { + return result.rdAvailable || result.adAvailable; + } + return true; + }); + setFilteredResults(filtered); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [searchResults, onlyShowCached]); + const fetchData = async (imdbId: string, seasonNum: number) => { setSearchResults([]); setErrorMessage(''); try { - let path = `api/tvsearch?imdbId=${imdbId}&seasonNum=${seasonNum}`; + let path = `api/torrents/tv?imdbId=${imdbId}&seasonNum=${seasonNum}`; if (config.externalSearchApiHostname) { path = encodeURIComponent(path); } @@ -362,12 +380,32 @@ const TvSearch: FunctionComponent = ({ > Auto + { + const isChecked = event.target.checked; + setOnlyShowCached(isChecked); + }} + />{' '} + + + + {filteredResults.length} / {searchResults.length} shown +
)}
{searchState !== 'loading' && - searchResults.map((r: SearchResult) => { + filteredResults.map((r: SearchResult) => { const rdColor = r.noVideos ? 'gray' : r.rdAvailable diff --git a/src/services/hashlists.ts b/src/services/hashlists.ts index a37ddab..d042046 100644 --- a/src/services/hashlists.ts +++ b/src/services/hashlists.ts @@ -6,7 +6,7 @@ interface CreateShortUrlResponse { export async function createShortUrl(originalUrl: string): Promise { try { - const response = await axios.post(`/api/hashlists`, { + const response = await axios.post(`api/hashlists`, { url: originalUrl, }); diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index 3688b15..017b82d 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -17,6 +17,49 @@ export class PlanetScaleCache { return PlanetScaleCache.instance; } + /// true scraped + + public async saveScrapedTrueResults( + key: string, + value: ScrapeSearchResult[], + updateUpdatedAt: boolean = true + ) { + // Fetch the existing record + const existingRecord: Scraped | null = await this.prisma.scrapedTrue.findUnique({ + where: { key }, + }); + + if (existingRecord) { + const origLength = (existingRecord.value as ScrapeSearchResult[]).length; + // If record exists, append the new values to it + let updatedValue = flattenAndRemoveDuplicates([ + existingRecord.value as ScrapeSearchResult[], + value, + ]); + updatedValue = sortByFileSize(updatedValue); + const newLength = updatedValue.length; + console.log(`๐Ÿ“ ${key}: +${newLength - origLength} results`); + + await this.prisma.scrapedTrue.update({ + where: { key }, + data: { + value: updatedValue, + updatedAt: updateUpdatedAt ? undefined : existingRecord.updatedAt, + }, + }); + } else { + // If record doesn't exist, create a new one + await this.prisma.scrapedTrue.create({ + data: { key, value }, + }); + } + } + + public async getScrapedTrueResults(key: string): Promise { + const cacheEntry = await this.prisma.scrapedTrue.findUnique({ where: { key } }); + return cacheEntry?.value as T | undefined; + } + /// scraped results public async saveScrapedResults( @@ -87,16 +130,15 @@ export class PlanetScaleCache { }, select: { updatedAt: true }, }); - if (!cacheEntry || !cacheEntry.updatedAt) { return true; // If it doesn't exist, assume it's old } - - const currentTime = new Date(); - const updatedAt = new Date(cacheEntry.updatedAt); - const ageInMillis = currentTime.getTime() - updatedAt.getTime(); - const daysAgoInMillis = daysAgo * 24 * 60 * 60 * 1000; - return ageInMillis >= daysAgoInMillis; + const updatedAt = cacheEntry.updatedAt; + const currentTime = Date.now(); + const millisAgo = daysAgo * 24 * 60 * 60 * 1000; + const dateXdaysAgo = new Date(currentTime - millisAgo); + console.log('updatedAt', updatedAt, 'dateXdaysAgo', dateXdaysAgo); + return updatedAt <= dateXdaysAgo; } public async getOldestRequest( diff --git a/src/services/torrentio.ts b/src/services/torrentio.ts index 5a1bea4..136cb44 100644 --- a/src/services/torrentio.ts +++ b/src/services/torrentio.ts @@ -1,4 +1,5 @@ import axios from 'axios'; +import UserAgent from 'user-agents'; import { ScrapeSearchResult } from './mediasearch'; function processStream(item: any): ScrapeSearchResult { @@ -31,13 +32,41 @@ export async function scrapeTorrentio( try { if (mediaType === 'movie') { const response = await axios.get( - `https://torrentio.strem.fun/sort=size%7Cqualityfilter=other,scr,cam,unknown/stream/movie/${imdbId}.json` + `https://torrentio.strem.fun/sort=size%7Cqualityfilter=other,scr,cam,unknown/stream/movie/${imdbId}.json`, + { + headers: { + accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', + 'accept-language': 'en-US,en;q=0.5', + 'accept-encoding': 'gzip, deflate, br', + connection: 'keep-alive', + 'sec-fetch-dest': 'document', + 'sec-fetch-mode': 'navigate', + 'sec-fetch-site': 'same-origin', + 'sec-fetch-user': '?1', + 'upgrade-insecure-requests': '1', + 'user-agent': new UserAgent().toString(), + }, + } ); return response.data.streams.map(processStream); } else if (mediaType === 'tv') { // TODO const response = await axios.get( - `https://torrentio.strem.fun/sort=size%7Cqualityfilter=other,scr,cam,unknown/stream/series/${imdbId}:1:3.json` + `https://torrentio.strem.fun/sort=size%7Cqualityfilter=other,scr,cam,unknown/stream/series/${imdbId}:1:3.json`, + { + headers: { + accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', + 'accept-language': 'en-US,en;q=0.5', + 'accept-encoding': 'gzip, deflate, br', + connection: 'keep-alive', + 'sec-fetch-dest': 'document', + 'sec-fetch-mode': 'navigate', + 'sec-fetch-site': 'same-origin', + 'sec-fetch-user': '?1', + 'upgrade-insecure-requests': '1', + 'user-agent': new UserAgent().toString(), + }, + } ); return response.data.streams.map(processStream); } From b93b8981a6ca7c613c460c47aa5d151056299dd1 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Mon, 6 Nov 2023 19:19:58 +0100 Subject: [PATCH 161/272] add password --- src/pages/api/cleaners/movie.ts | 5 +++++ src/pages/api/cleaners/tv.ts | 5 +++++ src/pages/api/scrapers/existingmovies.ts | 5 +++++ src/pages/api/scrapers/existingshows.ts | 5 +++++ src/pages/api/scrapers/imdb.ts | 5 +++++ src/pages/api/scrapers/listoflists.ts | 5 +++++ src/pages/api/scrapers/requested.ts | 5 +++++ src/pages/api/scrapers/singlelist.ts | 5 +++++ src/pages/api/scrapers/stuck.ts | 5 +++++ src/pages/api/scrapers/torrentio.ts | 5 +++++ 10 files changed, 50 insertions(+) diff --git a/src/pages/api/cleaners/movie.ts b/src/pages/api/cleaners/movie.ts index 66e0909..0158b35 100644 --- a/src/pages/api/cleaners/movie.ts +++ b/src/pages/api/cleaners/movie.ts @@ -6,6 +6,11 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { + if (!process.env.JACKETT || !process.env.PROWLARR) { + res.status(403).json({ status: 'failed' }); + return; + } + const { id } = req.query; let imdbIds = !!id ? [id as string] : await db.getAllImdbIds('movie'); diff --git a/src/pages/api/cleaners/tv.ts b/src/pages/api/cleaners/tv.ts index a8fb0ad..0528ea8 100644 --- a/src/pages/api/cleaners/tv.ts +++ b/src/pages/api/cleaners/tv.ts @@ -6,6 +6,11 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { + if (!process.env.JACKETT || !process.env.PROWLARR) { + res.status(403).json({ status: 'failed' }); + return; + } + const { id } = req.query; let imdbIds = !!id ? [id as string] : await db.getAllImdbIds('tv'); diff --git a/src/pages/api/scrapers/existingmovies.ts b/src/pages/api/scrapers/existingmovies.ts index dedc58a..431d487 100644 --- a/src/pages/api/scrapers/existingmovies.ts +++ b/src/pages/api/scrapers/existingmovies.ts @@ -5,6 +5,11 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { + if (!process.env.JACKETT || !process.env.PROWLARR) { + res.status(403).json({ status: 'failed' }); + return; + } + const { quantity } = req.query; while (true) { diff --git a/src/pages/api/scrapers/existingshows.ts b/src/pages/api/scrapers/existingshows.ts index 1c4f702..4640d9d 100644 --- a/src/pages/api/scrapers/existingshows.ts +++ b/src/pages/api/scrapers/existingshows.ts @@ -5,6 +5,11 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { + if (!process.env.JACKETT || !process.env.PROWLARR) { + res.status(403).json({ status: 'failed' }); + return; + } + const { quantity } = req.query; while (true) { diff --git a/src/pages/api/scrapers/imdb.ts b/src/pages/api/scrapers/imdb.ts index f255e4c..3509a4d 100644 --- a/src/pages/api/scrapers/imdb.ts +++ b/src/pages/api/scrapers/imdb.ts @@ -3,6 +3,11 @@ import { ScrapeResponse, generateScrapeJobs } from '@/services/scrapeJobs'; import { NextApiRequest, NextApiResponse } from 'next'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { + if (!process.env.JACKETT || !process.env.PROWLARR) { + res.status(403).json({ status: 'failed' }); + return; + } + const { id, replaceOldScrape } = req.query; if (!id || !(typeof id === 'string')) { diff --git a/src/pages/api/scrapers/listoflists.ts b/src/pages/api/scrapers/listoflists.ts index 77485d0..e74cb8b 100644 --- a/src/pages/api/scrapers/listoflists.ts +++ b/src/pages/api/scrapers/listoflists.ts @@ -6,6 +6,11 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { + if (!process.env.JACKETT || !process.env.PROWLARR) { + res.status(403).json({ status: 'failed' }); + return; + } + const { search, rescrapeIfXDaysOld, skipMs, quantity } = req.query; if (!search || typeof search !== 'string') { diff --git a/src/pages/api/scrapers/requested.ts b/src/pages/api/scrapers/requested.ts index 09eeb17..64797e0 100644 --- a/src/pages/api/scrapers/requested.ts +++ b/src/pages/api/scrapers/requested.ts @@ -5,6 +5,11 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { + if (!process.env.JACKETT || !process.env.PROWLARR) { + res.status(403).json({ status: 'failed' }); + return; + } + let updatedAt = null; while (true) { let request = await db.getOldestRequest(updatedAt); diff --git a/src/pages/api/scrapers/singlelist.ts b/src/pages/api/scrapers/singlelist.ts index a230fdc..974789d 100644 --- a/src/pages/api/scrapers/singlelist.ts +++ b/src/pages/api/scrapers/singlelist.ts @@ -6,6 +6,11 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { + if (!process.env.JACKETT || !process.env.PROWLARR) { + res.status(403).json({ status: 'failed' }); + return; + } + const { listId, rescrapeIfXDaysOld, skipMs, quantity } = req.query; if (!listId || typeof listId !== 'string') { diff --git a/src/pages/api/scrapers/stuck.ts b/src/pages/api/scrapers/stuck.ts index d7a7279..db5ca22 100644 --- a/src/pages/api/scrapers/stuck.ts +++ b/src/pages/api/scrapers/stuck.ts @@ -5,6 +5,11 @@ import { NextApiRequest, NextApiResponse } from 'next'; const db = new PlanetScaleCache(); export default async function handler(req: NextApiRequest, res: NextApiResponse) { + if (!process.env.JACKETT || !process.env.PROWLARR) { + res.status(403).json({ status: 'failed' }); + return; + } + while (true) { let imdbId = await db.processingMoreThanAnHour(); if (!imdbId) { diff --git a/src/pages/api/scrapers/torrentio.ts b/src/pages/api/scrapers/torrentio.ts index d91a22b..aa3d005 100644 --- a/src/pages/api/scrapers/torrentio.ts +++ b/src/pages/api/scrapers/torrentio.ts @@ -10,6 +10,11 @@ const torrentioUrl = (imdbId: string) => `https://torrentio.strem.fun/sort=size%7Cqualityfilter=other,scr,cam,unknown/stream/movie/${imdbId}.json`; export default async function handler(req: NextApiRequest, res: NextApiResponse) { + if (!process.env.JACKETT || !process.env.PROWLARR) { + res.status(403).json({ status: 'failed' }); + return; + } + const { startFrom } = req.query; let imdbIds = await db.getAllImdbIds('movie'); From 73a039a522374ec6f031f1fa83dc4cb97d9c3f7f Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Wed, 8 Nov 2023 04:21:05 +0100 Subject: [PATCH 162/272] Same hash&size fix --- src/pages/library.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/library.tsx b/src/pages/library.tsx index c908780..e1424f2 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -220,7 +220,7 @@ function TorrentsPage() { clearGroupings(tvGroupingByEpisode); const hashes: Map = new Map(); for (const t of userTorrentsList) { - const key = `${t.filename}|${t.hash}`; + const key = `${t.filename}|${t.hash}|${t.bytes}`; if (!hashes.has(key)) { hashes.set(key, t.bytes); tmpTotalBytes += t.bytes; @@ -299,7 +299,7 @@ function TorrentsPage() { ); } if (status === 'dupehash') { - tmpList = tmpList.filter((t) => dupeHashes.includes(`${t.filename}|${t.hash}`)); + tmpList = tmpList.filter((t) => dupeHashes.includes(`${t.filename}|${t.hash}|${t.bytes}`)); setFilteredList(applyQuickSearch(tmpList)); setHelpText( 'Torrents shown have the same hash and size. These are exact duplicates. Just using the hash still means that they could have different files selected so size is also used for comparison.' From 85326f5c01b96189ba284be5431450a6e4873ca6 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Wed, 8 Nov 2023 05:38:36 +0100 Subject: [PATCH 163/272] Improve index page --- queries.sql | 2 + src/pages/api/torrents/movie.ts | 10 +--- src/pages/api/torrents/tv.ts | 2 +- src/pages/index.tsx | 74 +++++++++++++++++++++++-- src/pages/library.tsx | 4 +- src/pages/movie/[imdbid].tsx | 12 ++-- src/pages/show/[imdbid]/[seasonNum].tsx | 12 ++-- 7 files changed, 87 insertions(+), 29 deletions(-) create mode 100644 queries.sql diff --git a/queries.sql b/queries.sql new file mode 100644 index 0000000..1e089c8 --- /dev/null +++ b/queries.sql @@ -0,0 +1,2 @@ +-- gets the total number of torrents scraped by DMM +SELECT SUM(JSON_LENGTH(Scraped.value)) AS total_torrents FROM Scraped; diff --git a/src/pages/api/torrents/movie.ts b/src/pages/api/torrents/movie.ts index 579d8fe..8601fc2 100644 --- a/src/pages/api/torrents/movie.ts +++ b/src/pages/api/torrents/movie.ts @@ -15,13 +15,9 @@ const handler: NextApiHandler = async (req, res) => { try { const results = await Promise.all([ - db.getScrapedResults( - `movie:${imdbId.toString().trim()}` - ), - db.getScrapedTrueResults( - `movie:${imdbId.toString().trim()}` - ), - ]) + db.getScrapedResults(`movie:${imdbId.toString().trim()}`), + db.getScrapedTrueResults(`movie:${imdbId.toString().trim()}`), + ]); // should contain both results const searchResults = [...(results[0] || []), ...(results[1] || [])]; if (searchResults) { diff --git a/src/pages/api/torrents/tv.ts b/src/pages/api/torrents/tv.ts index 2a4c57c..255f790 100644 --- a/src/pages/api/torrents/tv.ts +++ b/src/pages/api/torrents/tv.ts @@ -27,7 +27,7 @@ const handler: NextApiHandler = async (req, res) => { db.getScrapedTrueResults( `tv:${imdbId.toString().trim()}:${parseInt(seasonNum.toString().trim(), 10)}` ), - ]) + ]); // should contain both results const searchResults = [...(results[0] || []), ...(results[1] || [])]; if (searchResults) { diff --git a/src/pages/index.tsx b/src/pages/index.tsx index c3fb0c9..4fe66a8 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -79,12 +79,15 @@ function IndexPage() { )}

+

- 8.5+ million torrents collected from all corners of the web + 6.43+ million torrents collected from all corners of the web (as of + November 2023, post clean-up)

-
-
+
+ +
-
+
{/* )}
+
+

+ Get your movies straight from{' '} + + + IMDB + + {' '} + or{' '} + + + MDBList + + {' '} + with{' '} + + DMM browser extensions + {' '} + for{' '} + + + Chrome + + {' '} + (soon,{' '} + + load unpacked + {' '} + for now) and{' '} + + + Firefox + + +

+ {/*

+ + Beta is out for an uber fast webdav server and rclone + alternative + + . Mount your Real-Debrid library and play your files directly from your + computer. +

*/} +

+ + DMM is a 1-person passion project and{' '} + + sponsoring it will mean a lot to me + + +

) : ( diff --git a/src/pages/library.tsx b/src/pages/library.tsx index e1424f2..3b20bc8 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -299,7 +299,9 @@ function TorrentsPage() { ); } if (status === 'dupehash') { - tmpList = tmpList.filter((t) => dupeHashes.includes(`${t.filename}|${t.hash}|${t.bytes}`)); + tmpList = tmpList.filter((t) => + dupeHashes.includes(`${t.filename}|${t.hash}|${t.bytes}`) + ); setFilteredList(applyQuickSearch(tmpList)); setHelpText( 'Torrents shown have the same hash and size. These are exact duplicates. Just using the hash still means that they could have different files selected so size is also used for comparison.' diff --git a/src/pages/movie/[imdbid].tsx b/src/pages/movie/[imdbid].tsx index d213925..73fc834 100644 --- a/src/pages/movie/[imdbid].tsx +++ b/src/pages/movie/[imdbid].tsx @@ -51,10 +51,7 @@ const MovieSearch: FunctionComponent = ({ 'adAutoInstantCheck', false ); - const [onlyShowCached, setOnlyShowCached] = useLocalStorage( - 'onlyShowCached', - false - ); + const [onlyShowCached, setOnlyShowCached] = useLocalStorage('onlyShowCached', false); const router = useRouter(); const { imdbid } = router.query; @@ -353,6 +350,9 @@ const MovieSearch: FunctionComponent = ({ > Auto + + {filteredResults.length} / {searchResults.length} shown + = ({ > Only show cached - - - {filteredResults.length} / {searchResults.length} shown -
)}
diff --git a/src/pages/show/[imdbid]/[seasonNum].tsx b/src/pages/show/[imdbid]/[seasonNum].tsx index 67b0d1c..ee639ae 100644 --- a/src/pages/show/[imdbid]/[seasonNum].tsx +++ b/src/pages/show/[imdbid]/[seasonNum].tsx @@ -53,10 +53,7 @@ const TvSearch: FunctionComponent = ({ 'adAutoInstantCheck', false ); - const [onlyShowCached, setOnlyShowCached] = useLocalStorage( - 'onlyShowCached', - false - ); + const [onlyShowCached, setOnlyShowCached] = useLocalStorage('onlyShowCached', false); const router = useRouter(); const { imdbid, seasonNum } = router.query; @@ -380,6 +377,9 @@ const TvSearch: FunctionComponent = ({ > Auto + + {filteredResults.length} / {searchResults.length} shown + = ({ > Only show cached - - - {filteredResults.length} / {searchResults.length} shown -
)}
From 3364886bab7fb55d89e0a461368af46f75ef74e8 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Mon, 13 Nov 2023 15:20:34 +0100 Subject: [PATCH 164/272] Create anticors endpoint --- next.config.js | 5 +-- src/hooks/localStorage.ts | 2 +- src/pages/api/anticors.ts | 79 +++++++++++++++++++++++++++++++++++ src/pages/index.tsx | 8 +--- src/pages/start.tsx | 6 --- src/pages/troubleshooting.tsx | 6 +-- src/services/allDebrid.ts | 24 ----------- src/services/planetscale.ts | 6 +-- 8 files changed, 89 insertions(+), 47 deletions(-) create mode 100644 src/pages/api/anticors.ts diff --git a/next.config.js b/next.config.js index 4f2cd4a..3eeb5c1 100644 --- a/next.config.js +++ b/next.config.js @@ -28,10 +28,9 @@ const nextConfig = { publicRuntimeConfig: { // Will be available on both server and client externalSearchApiHostname: process.env.EXTERNAL_SEARCH_API_HOSTNAME, - realDebridHostname: 'https://corsproxy.org/?https://api.real-debrid.com', - allDebridHostname: 'https://api.alldebrid.com', + realDebridHostname: '/api/anticors?url=https://api.real-debrid.com', + allDebridHostname: '/api/anticors?url=https://api.alldebrid.com', allDebridAgent: 'debridMediaManager', - bypassHostname: 'https://corsproxy.org/?', }, }; diff --git a/src/hooks/localStorage.ts b/src/hooks/localStorage.ts index e122564..83d4d57 100644 --- a/src/hooks/localStorage.ts +++ b/src/hooks/localStorage.ts @@ -13,7 +13,7 @@ function useLocalStorage(key: string, defaultValue: T | null = null) { } const storedValue = localStorage.getItem(key); - if (storedValue !== null) { + if (storedValue !== null && storedValue !== 'undefined') { const parsedValue = JSON.parse(storedValue) as ExpirableValue | T; if (isExpirableValue(parsedValue)) { if (parsedValue.expiry >= new Date().getTime()) { diff --git a/src/pages/api/anticors.ts b/src/pages/api/anticors.ts new file mode 100644 index 0000000..d72acc6 --- /dev/null +++ b/src/pages/api/anticors.ts @@ -0,0 +1,79 @@ +import type { NextApiRequest, NextApiResponse } from 'next'; +import { NextApiHandler } from 'next'; + +// Constants for readability and maintainability +const HTTP_METHODS = { + POST: 'POST', + PUT: 'PUT', + PATCH: 'PATCH', +}; + +const CONTENT_TYPES = { + JSON: 'application/json', + FORM: 'application/x-www-form-urlencoded', +}; + +const ALLOWED_HOSTS = ['api.real-debrid.com', 'api.alldebrid.com']; + +// Utility function to append query parameters +function appendQueryParams(url: URL, params: any) { + Object.keys(params).forEach((key) => { + const value = params[key]; + if (Array.isArray(value)) { + value.forEach((v) => url.searchParams.append(key, v)); + } else { + url.searchParams.append(key, value as string); + } + }); +} + +const handler: NextApiHandler = async (req: NextApiRequest, res: NextApiResponse) => { + try { + const { url, ...otherQueryParams } = req.query; + if (typeof url !== 'string' || !url) { + return res.status(400).json({ error: 'No URL provided' }); + } + + const decodedUrl = decodeURIComponent(url); + const parsedUrl = new URL(decodedUrl); + if (!ALLOWED_HOSTS.includes(parsedUrl.hostname)) { + return res.status(403).json({ error: 'Host is not allowed' }); + } + + appendQueryParams(parsedUrl, otherQueryParams); + + // Simplified header setting + const reqHeaders = { + ...(req.headers.authorization && { authorization: req.headers.authorization }), + ...(req.headers['content-type'] && { 'content-type': req.headers['content-type'] }), + }; + + let reqBody; + if ( + [HTTP_METHODS.POST, HTTP_METHODS.PUT, HTTP_METHODS.PATCH].includes(req.method || '') && + req.headers['content-type'] + ) { + reqBody = + req.headers['content-type'] === CONTENT_TYPES.JSON + ? JSON.stringify(req.body) + : new URLSearchParams(req.body).toString(); + } + + const response = await fetch(parsedUrl.toString(), { + headers: reqHeaders, + method: req.method, + body: reqBody, + }); + + const responseBody = await response.text(); + + res.status(response.status) + .setHeader('content-type', response.headers.get('content-type') || '') + .send(responseBody); + } catch (err: unknown) { + console.error(err); + res.status(500).json({ error: 'Internal Server Error' }); + } +}; + +export default handler; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 4fe66a8..6484d9f 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -175,17 +175,13 @@ function IndexPage() { for{' '} Chrome {' '} - (soon,{' '} - - load unpacked - {' '} - for now) and{' '} + and{' '} Everything is stored on your browser's local storage -
- We use corsproxy.org to bypass RealDebrid API's CORS restrictions -

-

- Because this website do lots of RegEx look behinds, it doesn't work on - Safari / iOS browsers

diff --git a/src/pages/troubleshooting.tsx b/src/pages/troubleshooting.tsx index 6f57318..99f6436 100644 --- a/src/pages/troubleshooting.tsx +++ b/src/pages/troubleshooting.tsx @@ -82,7 +82,7 @@ function TroubleshootingPage() { setTestResults((prev) => prev + `-----\n`); } if (adKey) { - let adBaseUrl = `${config.bypassHostname}${config.allDebridHostname}`; + let adBaseUrl = `${config.allDebridHostname}`; setTestResults((prev) => prev + `AllDebrid base URL: ${adBaseUrl}\n`); try { let adTorrents = (await getMagnetStatus(adKey)).data.magnets; @@ -92,8 +92,7 @@ function TroubleshootingPage() { } setTestResults((prev) => prev + `-----\n`); - config.bypassHostname = 'https://corsproxy.io/?'; - adBaseUrl = `${config.bypassHostname}${config.allDebridHostname}`; + adBaseUrl = `${config.allDebridHostname}`; setTestResults((prev) => prev + `AllDebrid base URL: ${adBaseUrl}\n`); try { let adTorrents = (await getMagnetStatus(adKey)).data.magnets; @@ -103,7 +102,6 @@ function TroubleshootingPage() { } setTestResults((prev) => prev + `-----\n`); - config.bypassHostname = ''; setTestResults((prev) => prev + `AllDebrid base URL: ${config.allDebridHostname}\n`); try { let adTorrents = (await getMagnetStatus(adKey)).data.magnets; diff --git a/src/services/allDebrid.ts b/src/services/allDebrid.ts index 46e3417..da49195 100644 --- a/src/services/allDebrid.ts +++ b/src/services/allDebrid.ts @@ -18,9 +18,6 @@ interface PinResponse { export const getPin = async () => { try { let endpoint = `${config.allDebridHostname}/v4/pin/get?agent=${config.allDebridAgent}`; - if (config.bypassHostname) { - endpoint = `${config.bypassHostname}${encodeURIComponent(endpoint)}`; - } const response = await axios.get(endpoint); return response.data.data; } catch (error) { @@ -40,9 +37,6 @@ interface PinCheckResponse { export const checkPin = async (pin: string, check: string) => { let endpoint = `${config.allDebridHostname}/v4/pin/check?agent=${config.allDebridAgent}&check=${check}&pin=${pin}`; - if (config.bypassHostname) { - endpoint = `${config.bypassHostname}${encodeURIComponent(endpoint)}`; - } try { let pinCheck = await axios.get(endpoint); @@ -80,9 +74,6 @@ interface UserResponse { export const getAllDebridUser = async (apikey: string) => { let endpoint = `${config.allDebridHostname}/v4/user?agent=${config.allDebridAgent}&apikey=${apikey}`; - if (config.bypassHostname) { - endpoint = `${config.bypassHostname}${encodeURIComponent(endpoint)}`; - } try { const response = await axios.get(endpoint); return response.data.data.user; @@ -118,9 +109,6 @@ export const uploadMagnet = async (apikey: string, hashes: string[]) => { for (const hash of hashes) { endpoint += `&magnets[]=${hash}`; } - if (config.bypassHostname) { - endpoint = `${config.bypassHostname}${encodeURIComponent(endpoint)}`; - } const response = await axios.post(endpoint); return response.data; } catch (error) { @@ -183,9 +171,6 @@ export const getMagnetStatus = async ( if (counter) { endpoint += `&counter=${counter}`; } - if (config.bypassHostname) { - endpoint = `${config.bypassHostname}${encodeURIComponent(endpoint)}`; - } try { const response = await axios.get(endpoint); return response.data; @@ -201,9 +186,6 @@ interface MagnetDeleteResponse { export const deleteMagnet = async (apikey: string, id: string): Promise => { let endpoint = `${config.allDebridHostname}/v4/magnet/delete?agent=${config.allDebridAgent}&apikey=${apikey}&id=${id}`; - if (config.bypassHostname) { - endpoint = `${config.bypassHostname}${encodeURIComponent(endpoint)}`; - } try { const response = await axios.get(endpoint); return response.data; @@ -224,9 +206,6 @@ interface MagnetRestartResponse { export const restartMagnet = async (apikey: string, id: string): Promise => { let endpoint = `${config.allDebridHostname}/v4/magnet/restart?agent=${config.allDebridAgent}&apikey=${apikey}&id=${id}`; - if (config.bypassHostname) { - endpoint = `${config.bypassHostname}${encodeURIComponent(endpoint)}`; - } try { const response = await axios.get(endpoint); return response.data; @@ -266,9 +245,6 @@ export const adInstantCheck = async ( for (const hash of hashes) { endpoint += `&magnets[]=${hash}`; } - if (config.bypassHostname) { - endpoint = `${config.bypassHostname}${encodeURIComponent(endpoint)}`; - } try { const response = await axios.get(endpoint); return response.data; diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index 017b82d..c22f03e 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -199,7 +199,7 @@ export class PlanetScaleCache { ): Promise { const scrapedItems = await this.prisma.scraped.findMany({ where: { - key: { startsWith: `${mediaType}:` }, + key: { startsWith: `${mediaType}:tt` }, }, orderBy: { updatedAt: 'asc' }, take: quantity, @@ -216,7 +216,7 @@ export class PlanetScaleCache { public async getAllImdbIds(mediaType: 'tv' | 'movie'): Promise { const scrapedItems = await this.prisma.scraped.findMany({ where: { - key: { startsWith: `${mediaType}:` }, + key: { startsWith: `${mediaType}:tt` }, }, orderBy: { updatedAt: 'asc' }, select: { key: true }, @@ -285,7 +285,7 @@ export class PlanetScaleCache { updatedAt: 'desc', }, where: { - OR: [{ key: { startsWith: 'movie:' } }, { key: { startsWith: 'tv:' } }], + OR: [{ key: { startsWith: 'movie:tt' } }, { key: { startsWith: 'tv:tt' } }], }, select: { key: true, From ad4800767b00db162259df1027812e110ea86d4c Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Mon, 13 Nov 2023 16:44:44 +0100 Subject: [PATCH 165/272] Add error for checking if login was blocked --- src/hooks/auth.ts | 28 ++++++++++++++++++++-------- src/pages/index.tsx | 11 ++++++++++- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/hooks/auth.ts b/src/hooks/auth.ts index 91b1666..643aa9c 100644 --- a/src/hooks/auth.ts +++ b/src/hooks/auth.ts @@ -4,6 +4,7 @@ import { clearRdKeys } from '@/utils/clearLocalStorage'; import { useRouter } from 'next/router'; import { useEffect, useState } from 'react'; import useLocalStorage from './localStorage'; +import { E } from 'vitest/dist/reporters-5f784f42'; interface RealDebridUser { id: number; @@ -87,20 +88,31 @@ export const useCurrentUser = () => { const router = useRouter(); const [accessToken] = useLocalStorage('rd:accessToken'); const [apiKey] = useLocalStorage('ad:apiKey'); + const [errors, setErrors] = useState>(new Map()); useEffect(() => { (async () => { if (!accessToken && !apiKey) return null; - if (accessToken) { - const rdUserResponse = await getRealDebridUser(accessToken); - if (rdUserResponse) setRdUser(rdUserResponse); + try { + if (accessToken) { + const rdUserResponse = await getRealDebridUser(accessToken); + if (rdUserResponse) setRdUser(rdUserResponse); + } + } catch (error: any) { + console.error('rd error', error); + setErrors((errors) => errors.set('rd', error)); } - if (apiKey) { - const adUserResponse = await getAllDebridUser(apiKey); - if (adUserResponse) setAdUser(adUserResponse); + try { + if (apiKey) { + const adUserResponse = await getAllDebridUser(apiKey); + if (adUserResponse) setAdUser(adUserResponse); + } + } catch (error) { + console.error('ad error', error); + setErrors((errors) => errors.set('ad', error)); } })(); - }, [accessToken, apiKey, router]); + }, [accessToken, apiKey, router, errors]); - return { realDebrid: rdUser, allDebrid: adUser }; + return { realDebrid: rdUser, allDebrid: adUser, errors }; }; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 6484d9f..eddadf1 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -3,10 +3,18 @@ import { withAuth } from '@/utils/withAuth'; import Head from 'next/head'; import Link from 'next/link'; import { useRouter } from 'next/router'; +import { Toaster, toast } from 'react-hot-toast'; function IndexPage() { const router = useRouter(); - const { realDebrid: rdUser, allDebrid: adUser } = useCurrentUser(); + const { realDebrid: rdUser, allDebrid: adUser, errors } = useCurrentUser(); + + if (errors.get('rd')) { + toast.error('Real-Debrid get user info failed, check your email and confirm the login coming from DMM'); + } + if (errors.get('ad')) { + toast.error('AllDebrid get user info failed, check your email and confirm the login coming from DMM'); + } const handleHashListClick = () => { const newTab = window.open('https://hashlists.debridmediamanager.com', '_blank'); @@ -47,6 +55,7 @@ function IndexPage() { fill="#EDC951" /> + {/* this is made by ChatGPT */} {rdUser || adUser ? ( <> From 88eebfd9673f671b6eea62c271039107e2ba6a1a Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Mon, 13 Nov 2023 17:20:34 +0100 Subject: [PATCH 166/272] Fix AllDebrid issue --- src/hooks/auth.ts | 16 +++++++--------- src/pages/index.tsx | 21 ++++++++++++++------- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/hooks/auth.ts b/src/hooks/auth.ts index 643aa9c..de50f70 100644 --- a/src/hooks/auth.ts +++ b/src/hooks/auth.ts @@ -4,7 +4,6 @@ import { clearRdKeys } from '@/utils/clearLocalStorage'; import { useRouter } from 'next/router'; import { useEffect, useState } from 'react'; import useLocalStorage from './localStorage'; -import { E } from 'vitest/dist/reporters-5f784f42'; interface RealDebridUser { id: number; @@ -88,7 +87,8 @@ export const useCurrentUser = () => { const router = useRouter(); const [accessToken] = useLocalStorage('rd:accessToken'); const [apiKey] = useLocalStorage('ad:apiKey'); - const [errors, setErrors] = useState>(new Map()); + const [rdError, setRdError] = useState(null); + const [adError, setAdError] = useState(null); useEffect(() => { (async () => { @@ -99,20 +99,18 @@ export const useCurrentUser = () => { if (rdUserResponse) setRdUser(rdUserResponse); } } catch (error: any) { - console.error('rd error', error); - setErrors((errors) => errors.set('rd', error)); + setRdError(new Error(error)); } try { if (apiKey) { const adUserResponse = await getAllDebridUser(apiKey); if (adUserResponse) setAdUser(adUserResponse); } - } catch (error) { - console.error('ad error', error); - setErrors((errors) => errors.set('ad', error)); + } catch (error: any) { + setAdError(new Error(error)); } })(); - }, [accessToken, apiKey, router, errors]); + }, [accessToken, apiKey, router]); - return { realDebrid: rdUser, allDebrid: adUser, errors }; + return { realDebrid: rdUser, allDebrid: adUser, rdError, adError }; }; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index eddadf1..3ef4ef1 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -3,18 +3,25 @@ import { withAuth } from '@/utils/withAuth'; import Head from 'next/head'; import Link from 'next/link'; import { useRouter } from 'next/router'; +import { useEffect } from 'react'; import { Toaster, toast } from 'react-hot-toast'; function IndexPage() { const router = useRouter(); - const { realDebrid: rdUser, allDebrid: adUser, errors } = useCurrentUser(); + const { realDebrid: rdUser, allDebrid: adUser, rdError, adError } = useCurrentUser(); - if (errors.get('rd')) { - toast.error('Real-Debrid get user info failed, check your email and confirm the login coming from DMM'); - } - if (errors.get('ad')) { - toast.error('AllDebrid get user info failed, check your email and confirm the login coming from DMM'); - } + useEffect(() => { + if (rdError) { + toast.error( + 'Real-Debrid get user info failed, check your email and confirm the login coming from DMM' + ); + } + if (adError) { + toast.error( + 'AllDebrid get user info failed, check your email and confirm the login coming from DMM' + ); + } + }, [rdError, adError]); const handleHashListClick = () => { const newTab = window.open('https://hashlists.debridmediamanager.com', '_blank'); From bb36a586699f027d736244d7a276e5e1cfcf3057 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Tue, 14 Nov 2023 21:44:28 +0100 Subject: [PATCH 167/272] Fix the 2500 limit problem --- src/pages/api/anticors.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/pages/api/anticors.ts b/src/pages/api/anticors.ts index d72acc6..521540d 100644 --- a/src/pages/api/anticors.ts +++ b/src/pages/api/anticors.ts @@ -67,9 +67,21 @@ const handler: NextApiHandler = async (req: NextApiRequest, res: NextApiResponse const responseBody = await response.text(); + const responseHeaders: { [key: string]: string } = {}; + response.headers.forEach((value, key) => { + if (key.startsWith('x-')) { + responseHeaders[key] = value; + } + }); + res.status(response.status) .setHeader('content-type', response.headers.get('content-type') || '') - .send(responseBody); + Object.keys(responseHeaders).forEach(key => { + res.setHeader(key, responseHeaders[key]); + }); + + res.send(responseBody); + } catch (err: unknown) { console.error(err); res.status(500).json({ error: 'Internal Server Error' }); From fcc5050d555d8bffe67c1e50c075a55704a75539 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Tue, 14 Nov 2023 21:44:45 +0100 Subject: [PATCH 168/272] Formatting --- src/pages/api/anticors.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/pages/api/anticors.ts b/src/pages/api/anticors.ts index 521540d..b9c8a22 100644 --- a/src/pages/api/anticors.ts +++ b/src/pages/api/anticors.ts @@ -74,14 +74,15 @@ const handler: NextApiHandler = async (req: NextApiRequest, res: NextApiResponse } }); - res.status(response.status) - .setHeader('content-type', response.headers.get('content-type') || '') - Object.keys(responseHeaders).forEach(key => { - res.setHeader(key, responseHeaders[key]); - }); + res.status(response.status).setHeader( + 'content-type', + response.headers.get('content-type') || '' + ); + Object.keys(responseHeaders).forEach((key) => { + res.setHeader(key, responseHeaders[key]); + }); res.send(responseBody); - } catch (err: unknown) { console.error(err); res.status(500).json({ error: 'Internal Server Error' }); From 8c80d29732f3c70e5626157fb0cb90c04a354280 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Tue, 14 Nov 2023 23:27:56 +0100 Subject: [PATCH 169/272] 3.9.0 update --- package-lock.json | 4 +- package.json | 2 +- src/pages/fixer.tsx | 390 ---------------------------------- src/pages/index.tsx | 9 +- src/pages/library.tsx | 129 ++++++----- src/pages/troubleshooting.tsx | 136 ------------ src/services/realDebrid.ts | 65 +++--- src/utils/mediaType.ts | 20 +- 8 files changed, 131 insertions(+), 624 deletions(-) delete mode 100644 src/pages/fixer.tsx delete mode 100644 src/pages/troubleshooting.tsx diff --git a/package-lock.json b/package-lock.json index 9c6f979..c0d9eab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "3.8.2", + "version": "3.9.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "3.8.2", + "version": "3.9.0", "dependencies": { "@ctrl/video-filename-parser": "^5.0.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index 9bc53cd..b903144 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "3.8.2", + "version": "3.9.0", "private": false, "scripts": { "dev": "next dev", diff --git a/src/pages/fixer.tsx b/src/pages/fixer.tsx deleted file mode 100644 index 2c3b137..0000000 --- a/src/pages/fixer.tsx +++ /dev/null @@ -1,390 +0,0 @@ -import { useRealDebridAccessToken } from '@/hooks/auth'; -import { - DownloadResponse, - UnrestrictResponse, - UserTorrentResponse, - addHashAsMagnet, - deleteDownload, - deleteTorrent, - getDownloads, - getTorrentInfo, - getUserTorrentsList, - selectFiles, - unrestrictLink, -} from '@/services/realDebrid'; -import { getSelectableFiles, isVideoOrSubs } from '@/utils/selectable'; -import { withAuth } from '@/utils/withAuth'; -import { useEffect, useState } from 'react'; - -let rdTorrents: UserTorrentResponse[] = []; -let rdDownloads: DownloadResponse[] = []; - -async function downloadFirstByte(url: string): Promise { - const controller = new AbortController(); - const signal = controller.signal; - try { - const response = await fetch(url, { headers: { Range: 'bytes=0-0' }, signal }); - const reader = response.body?.getReader(); - if (!reader) return 500; - await reader.read(); - controller.abort(); - return response.status; - } catch (error) { - controller.abort(); - return 600; - } -} - -const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); - -function FixerPage() { - // keys - const rdKey = useRealDebridAccessToken(); - - const [fixOutput, setFixOutput] = useState('Running fixes...\n-----\n'); - const [fixRunning, setFixRunning] = useState(false); - - useEffect(() => { - if (!fixRunning) return; - window.onbeforeunload = function (e) { - e = e || window.event; - if (e) { - e.returnValue = 'Sure?'; - } - return 'Sure?'; - }; - }, [fixRunning]); - - const refreshData = async () => { - rdTorrents = await getUserTorrentsList(rdKey!); - setFixOutput( - (prev) => prev + `RD torrent count: ${rdTorrents.length}\nFetching downloads...\n` - ); - rdDownloads = await getDownloads(rdKey!); - setFixOutput((prev) => prev + `RD download count: ${rdDownloads.length}\n`); - }; - - const processBatch = async ( - batch: DownloadResponse[] | UnrestrictResponse[], - previousLink?: string - ) => { - const promises = batch.map(async (item) => { - let downloadLink = item.download; - try { - const downloadStatus = await downloadFirstByte( - `https://corsproxy.org/?${downloadLink}` - ); - if (downloadStatus > 300) { - setFixOutput( - (prev) => - prev + - `E${!!previousLink ? '2' : ''}(${downloadStatus}): ${ - item.filename - } # ${downloadLink}\n` - ); - await deleteDownload(rdKey!, item.id); - if (!previousLink) { - // try to re-unrestrict the same link - const unrestrictedDownload = await unrestrictLink(rdKey!, item.link); - await processBatch([unrestrictedDownload], downloadLink); - } else { - const badTorrent = rdTorrents.find((t) => t.links.includes(item.link)); - if (badTorrent) await fixBadTorrent(badTorrent); - } - } - } catch (e) { - setFixOutput( - (prev) => - prev + - `E${!!previousLink ? '2' : ''}(${e}): ${item.filename} # ${downloadLink}\n` - ); - await deleteDownload(rdKey!, item.id); - if (!previousLink) { - const unrestrictedDownload = await unrestrictLink(rdKey!, item.link); - await processBatch([unrestrictedDownload], downloadLink); - } else { - const badTorrent = rdTorrents.find((t) => t.links.includes(item.link)); - if (badTorrent) await fixBadTorrent(badTorrent); - } - } - }); - await Promise.all(promises); - }; - - const fixBadTorrent = async (badTorrent: { id: string; filename: string; hash: string }) => { - setFixOutput( - (prev) => prev + `Bad torrent procedure, redownloading: ${badTorrent.filename}\n` - ); - const hash = badTorrent.hash; - const id = await addHashAsMagnet(rdKey!, hash); - let response = await getTorrentInfo(rdKey!, id); - const selectedFiles = getSelectableFiles(response.files.filter(isVideoOrSubs)).map( - (file) => file.id - ); - if (selectedFiles.length === 0) { - setFixOutput( - (prev) => prev + `Error: no file for selection (${badTorrent.filename})\n` - ); - } else { - await selectFiles(rdKey!, id, selectedFiles); - } - response = await getTorrentInfo(rdKey!, id); - setFixOutput( - (prev) => - prev + - `Unrestricting new links (${badTorrent.filename}, ${response.links.length})...\n` - ); - for (let i = 0; i < response.links.length; i++) { - try { - const link = response.links[i]; - const unrestrictedLink = await unrestrictLink(rdKey!, link); - if (!unrestrictedLink.streamable && response.links.length === 1) - throw new Error('Unstreamable'); - } catch (e) { - setFixOutput((prev) => prev + `No hope here: ${e}\n`); - setFixOutput((prev) => prev + `Filename: ${response.filename}\n`); - setFixOutput((prev) => prev + `Hash: ${response.hash}\n`); - setFixOutput((prev) => prev + `Deleting new torrent...\n`); - await deleteTorrent(rdKey!, response.id); - } - } - setFixOutput((prev) => prev + `Deleting old torrent...\n`); - await deleteTorrent(rdKey!, badTorrent.id); - setFixOutput((prev) => prev + `Bad torrent removed (${badTorrent.filename})\n`); - }; - - const startTest = async () => { - if (rdKey) { - try { - if ( - !confirm( - `This is an expensive DMM+Real-Debrid server operation so please use it sparingly` - ) - ) - return; - if ( - !confirm( - `This assumes your Real-Debrid account is used exclusively for media downloads. Take caution as this will delete all non-media downloads` - ) - ) - return; - if ( - !confirm( - `It comes in 4 phases:\n1. Delete unstreamable content\n2. Delete duplicate downloads\n3. Unrestrict yet to be unrestricted torrents\n4. Delete deleted content in RD servers\nYou will be asked to proceed on each phase\n\nProceed to Phase 1?` - ) - ) - return; - setFixRunning(true); - - /// PHASE 1: NON STREAMABLE CONTENT - setFixOutput((prev) => prev + `PHASE 1 PREPARATION\n`); - await refreshData(); - let unstreamable = rdDownloads.filter((d) => !d.streamable); - setFixOutput((prev) => prev + `Fixing unstreamable content\n`); - for (let i = 0; i < unstreamable.length; i++) { - let link = unstreamable[i].link; - setFixOutput( - (prev) => prev + `Identified: ${unstreamable[i].filename}\nDeleting...` - ); - - await deleteDownload(rdKey!, unstreamable[i].id); - setFixOutput((prev) => prev + `Removed unstreamable download\n`); - - const badTorrent = rdTorrents.find((t) => t.links.includes(link)); - if (!badTorrent) continue; - await fixBadTorrent(badTorrent); - } - setFixOutput((prev) => prev + `PHASE 1 DONE!\n\n`); - - // PHASE 2: DELETE DUPLICATE DOWNLOADS - setFixOutput((prev) => prev + `PHASE 2 PREPARATION\n`); - await refreshData(); - let dupeDownloads: DownloadResponse[] = []; - rdDownloads.reduce( - (acc: { [key: string]: DownloadResponse }, cur: DownloadResponse) => { - let key = `${cur.filename}_${cur.filesize}`; - if (acc[key]) { - const torrent1 = rdTorrents.find((t) => - t.links.includes(acc[key].link) - ); - if (!torrent1) return acc; - const torrent2 = rdTorrents.find((t) => t.links.includes(cur.link)); - if (!torrent2) return acc; - if ( - torrent1.hash === torrent2.hash || - torrent1.bytes === torrent2.bytes || - torrent1.filename === torrent2.filename - ) { - const torrent1date = new Date(torrent1.added); - const torrent2date = new Date(torrent2.added); - if (torrent1date < torrent2date) { - dupeDownloads.push(acc[key]); - acc[key] = cur; - } else { - dupeDownloads.push(cur); - } - } - } else if (!acc[key]) { - acc[key] = cur; - } - return acc; - }, - {} - ); - if ( - !confirm( - `This will delete ${ - dupeDownloads.length - } duplicate links and will take approx ${Math.ceil( - (dupeDownloads.length / 600) * 1.3 - )} minutes. Proceed?` - ) - ) - return; - setFixOutput( - (prev) => - prev + - `Found ${dupeDownloads.length} duplicate links to delete, processing\n` - ); - for (let i = 0; i < dupeDownloads.length; i += 1) { - try { - await deleteDownload(rdKey!, dupeDownloads[i].id); - delay(100); - } catch (e: any) { - if (e.response?.status === 429) { - await delay(1000); - } else { - await delay(250); - } - } - setFixOutput((prev) => prev + `.`); - if (i % 40 === 0 && i > 0) - setFixOutput( - (prev) => prev + `(${Math.ceil((i / dupeDownloads.length) * 100)}%)\n` - ); - } - setFixOutput((prev) => prev + `PHASE 2 DONE!\n\n`); - - /// PHASE 3: YET TO BE UNRESTRICTED TORRENTS - setFixOutput((prev) => prev + `PHASE 3 PREPARATION\n`); - await refreshData(); - const unrestricted = rdTorrents - .map((t) => t.links) - .flat() - .filter((l) => !rdDownloads.find((d) => d.link === l)); - if ( - !confirm( - `This will unrestrict ${ - unrestricted.length - } links and will take approx ${Math.ceil( - (unrestricted.length / 300) * 1.3 - )} minutes. Proceed?` - ) - ) - return; - setFixOutput( - (prev) => - prev + `Found ${unrestricted.length} links to unrestrict, processing\n` - ); - for (let i = 0; i < unrestricted.length; i += 1) { - const rdLink = unrestricted[i]; - try { - await unrestrictLink(rdKey!, rdLink); - await delay(200); - } catch (e: any) { - if (e.response?.status === 429) { - await delay(1000); - } else { - // find rd torrent and delete it - const suspectedBad = rdTorrents.find((t) => t.links.includes(rdLink)); - if (!suspectedBad) { - continue; - } - setFixOutput( - (prev) => - prev + `Not all files are playable: ${suspectedBad.filename}\n` - ); - // remove from list of links - suspectedBad.links = suspectedBad?.links.splice( - suspectedBad.links.findIndex((l) => l === rdLink), - 1 - ); - await delay(250); - } - } - setFixOutput((prev) => prev + `.`); - if (i % 40 === 0 && i > 0) - setFixOutput( - (prev) => prev + `(${Math.ceil((i / unrestricted.length) * 100)}%)\n` - ); - } - // delete torrents with no links - const badTorrents = rdTorrents.filter((t) => t.links.length === 0); - setFixOutput((prev) => prev + `Deleting ${badTorrents.length} bad torrents\n`); - for (let i = 0; i < badTorrents.length; i += 1) { - await deleteTorrent(rdKey!, badTorrents[i].id); - setFixOutput((prev) => prev + `.`); - if (i % 40 === 0 && i > 0) - setFixOutput( - (prev) => prev + `(${Math.ceil((i / badTorrents.length) * 100)}%)\n` - ); - } - setFixOutput((prev) => prev + `PHASE 3 DONE!\n\n`); - - /// PHASE 4: DELETED CONTENT IN RD SERVERS - setFixOutput((prev) => prev + `PHASE 4 PREPARATION\n`); - await refreshData(); - let streamable = rdDownloads.filter((d) => d.streamable); - if ( - !confirm( - `This will check ${ - streamable.length - } downloads and will take approx ${Math.ceil( - (streamable.length / 1200) * 1.1 - )} minutes. Proceed?` - ) - ) - return; - setFixOutput( - (prev) => - prev + `Checking ${streamable.length} downloads. Do not close this tab!\n` - ); - for (let i = 0; i < streamable.length; i += 20) { - const batch = streamable.slice(i, i + 20); - await processBatch(batch); - if (i % 100 === 0 && i > 0) { - setFixOutput( - (prev) => - prev + - `Processing ${i}th item (${Math.ceil( - (i / streamable.length) * 100 - )}%)\n` - ); - } - } - setFixOutput((prev) => prev + `PHASE 4 DONE!\n\n`); - } catch (e) { - setFixOutput((prev) => prev + `RD error: ${e}\n`); - } - } - setFixOutput( - (prev) => - prev + - `Finished! Consider restarting your Real-Debrid WebDAV or rclone_RD mount to clear its cache\n` - ); - }; - - return ( -
-

Maintenance

- {!fixRunning && ( - - )} - {fixRunning &&
{fixOutput}
} -
- ); -} - -export default withAuth(FixerPage); diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 3ef4ef1..9626328 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,4 +1,5 @@ import { useCurrentUser } from '@/hooks/auth'; +import { libraryToastOptions } from '@/utils/toastOptions'; import { withAuth } from '@/utils/withAuth'; import Head from 'next/head'; import Link from 'next/link'; @@ -47,6 +48,12 @@ function IndexPage() { } }; + const handleClearCache = () => { + localStorage.removeItem('rd:downloads'); + localStorage.removeItem('ad:downloads'); + toast.success(`Library cache cleared, please check again`, libraryToastOptions); + }; + return (
@@ -149,7 +156,7 @@ function IndexPage() { */} diff --git a/src/pages/library.tsx b/src/pages/library.tsx index 3b20bc8..7740641 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -12,7 +12,7 @@ import { } from '@/services/realDebrid'; import { runConcurrentFunctions } from '@/utils/batch'; import { getMediaId } from '@/utils/mediaId'; -import { getMediaType } from '@/utils/mediaType'; +import { getMediaType, getMediaType2 } from '@/utils/mediaType'; import getReleaseTags from '@/utils/score'; import { getSelectableFiles, isVideoOrSubs } from '@/utils/selectable'; import { libraryToastOptions } from '@/utils/toastOptions'; @@ -110,43 +110,52 @@ function TorrentsPage() { const fetchRealDebrid = async () => { try { if (!rdKey) throw new Error('no_rd_key'); - const torrents = (await getUserTorrentsList(rdKey)).map((torrent) => { - const mediaType = getMediaType(torrent.filename); - const info = - mediaType === 'movie' - ? filenameParse(torrent.filename) - : filenameParse(torrent.filename, true); - return { - score: getReleaseTags(torrent.filename, torrent.bytes / ONE_GIGABYTE).score, - info, - mediaType, - title: getMediaId(info, mediaType, false), - ...torrent, - id: `rd:${torrent.id}`, - links: torrent.links.map((l) => l.replaceAll('/', '/')), - seeders: torrent.seeders || 0, - }; - }) as UserTorrent[]; - setUserTorrentsList((prev) => [...prev, ...torrents]); - rdCacheAdder.many( - torrents.map((t) => ({ - id: t.id, - hash: t.hash, - status: t.status === 'downloaded' ? 'downloaded' : 'downloading', - progress: t.progress, - })) - ); + // Iterate over each page of results from the generator + for await (let pageOfTorrents of getUserTorrentsList(rdKey)) { + const torrents = pageOfTorrents.map((torrent) => { + const mediaType = getMediaType2(torrent.filename, torrent.links.length); + const info = + mediaType === 'movie' + ? filenameParse(torrent.filename) + : filenameParse(torrent.filename, true); + return { + score: getReleaseTags(torrent.filename, torrent.bytes / ONE_GIGABYTE) + .score, + info, + mediaType, + title: getMediaId(info, mediaType, false) || torrent.filename, + ...torrent, + id: `rd:${torrent.id}`, + links: torrent.links.map((l) => l.replaceAll('/', '/')), + seeders: torrent.seeders || 0, + }; + }) as UserTorrent[]; // Cast the result to UserTorrent[] to ensure type correctness + + // Add the current page of torrents directly to the state + setUserTorrentsList((prev) => [...prev, ...torrents]); + + // Optionally add to cache or perform any other operation needed with the current page + rdCacheAdder.many( + torrents.map((t) => ({ + id: t.id, + hash: t.hash, + status: t.status === 'downloaded' ? 'downloaded' : 'downloading', + progress: t.progress, + })) + ); + } } catch (error) { - setUserTorrentsList((prev) => [...prev]); toast.error('Error fetching user torrents list', libraryToastOptions); console.error(error); } finally { setRdLoading(false); } }; + if (rdKey) fetchRealDebrid(); else setRdLoading(false); + // eslint-disable-next-line react-hooks/exhaustive-deps }, [rdKey]); @@ -176,7 +185,7 @@ function TorrentsPage() { score: getReleaseTags(torrent.filename, torrent.size / ONE_GIGABYTE).score, info, mediaType, - title: getMediaId(info, mediaType, false), + title: getMediaId(info, mediaType, false) || torrent.filename, id: `ad:${torrent.id}`, filename: torrent.filename, hash: torrent.hash, @@ -233,15 +242,14 @@ function TorrentsPage() { } dupeHashes.push(key); } - const mediaId = getMediaId(t.info, t.mediaType); - if (mediaId in getGroupings(t.mediaType)) { - if (getGroupings(t.mediaType)[mediaId] === 1) dupeTitles.push(mediaId); - getGroupings(t.mediaType)[mediaId]++; + if (t.title in getGroupings(t.mediaType)) { + if (getGroupings(t.mediaType)[t.title] === 1) dupeTitles.push(t.title); + getGroupings(t.mediaType)[t.title]++; } else { - getGroupings(t.mediaType)[mediaId] = 1; + getGroupings(t.mediaType)[t.title] = 1; } if (t.mediaType === 'tv') { - const title = getMediaId(t.info, t.mediaType, true, true); + const title = t.title; if (title in tvGroupingByTitle) { tvGroupingByTitle[title]++; } else { @@ -285,14 +293,14 @@ function TorrentsPage() { const { filter: titleFilter, mediaType, status } = router.query; let tmpList = userTorrentsList; if (status === 'slow') { - tmpList = tmpList.filter(isTorrentSlow); + tmpList = tmpList.filter(isSlowOrNoLinks); setFilteredList(applyQuickSearch(tmpList)); setHelpText( - 'Torrents shown are older than 1 hour and has no seeders. Use "Delete shown" to delete them.' + 'The displayed torrents either do not contain any links or are older than one hour and lack any seeders. You can use the "Delete shown" option to remove them.' ); } if (status === 'dupe') { - tmpList = tmpList.filter((t) => dupeTitles.includes(getMediaId(t.info, t.mediaType))); + tmpList = tmpList.filter((t) => dupeTitles.includes(t.title)); setFilteredList(applyQuickSearch(tmpList)); setHelpText( 'Torrents shown have the same title parsed from the torrent name. Use "By size" to retain the larger torrent for each title, or "By date" to retain the more recent torrent. Take note: the parser might not work well for multi-season tv show torrents.' @@ -323,7 +331,7 @@ function TorrentsPage() { } if (titleFilter) { const decodedTitleFilter = decodeURIComponent(titleFilter as string); - tmpList = tmpList.filter((t) => decodedTitleFilter === getMediaId(t.info, t.mediaType)); + tmpList = tmpList.filter((t) => decodedTitleFilter === t.title); setFilteredList(applyQuickSearch(tmpList)); setHelpText(`Torrents shown have the title "${titleFilter}".`); } @@ -400,6 +408,12 @@ function TorrentsPage() { } else if (a[sortBy.column] < b[sortBy.column]) { comparison = -1; } + + // If comparison is 0 and the column is 'progress', then compare by the length of the links property + if (comparison === 0 && sortBy.column === 'progress') { + comparison = a.links.length - b.links.length; + } + return isAsc ? comparison : comparison * -1; }); return filteredList; @@ -614,12 +628,15 @@ function TorrentsPage() { } } - function isTorrentSlow(t: UserTorrent) { + function isSlowOrNoLinks(t: UserTorrent) { const oldTorrentAge = 3600000; // 1 hour in milliseconds const addedDate = new Date(t.added); const now = new Date(); const ageInMillis = now.getTime() - addedDate.getTime(); - return t.progress !== 100 && ageInMillis >= oldTorrentAge && t.seeders === 0; + return ( + (t.links.length === 0 && t.progress === 100) || + (t.progress !== 100 && ageInMillis >= oldTorrentAge && t.seeders === 0) + ); } async function generateHashList() { @@ -1018,7 +1035,7 @@ function TorrentsPage() { className="px-4 py-2 cursor-pointer" onClick={() => handleSort('progress')} > - Progress{' '} + Status{' '} {sortBy.column === 'progress' && (sortBy.direction === 'asc' ? 'โ†‘' : 'โ†“')} @@ -1041,13 +1058,11 @@ function TorrentsPage() { ) .map((torrent) => { const groupCount = getGroupings(torrent.mediaType)[ - getMediaId(torrent.info, torrent.mediaType) + torrent.title ]; const filterText = groupCount > 1 && !router.query.filter - ? `${groupCount - 1} other file${ - groupCount === 1 ? '' : 's' - }` + ? `${groupCount} of same title` : ''; return (
- {torrent.status === 'downloading' + {torrent.progress !== 100 ? `${torrent.progress}%` - : torrent.status} + : `${torrent.links.length} file${ + torrent.links.length === 1 ? '' : 's' + }`} {new Date(torrent.added).toLocaleString()} diff --git a/src/pages/troubleshooting.tsx b/src/pages/troubleshooting.tsx deleted file mode 100644 index 99f6436..0000000 --- a/src/pages/troubleshooting.tsx +++ /dev/null @@ -1,136 +0,0 @@ -import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; -import { getMagnetStatus } from '@/services/allDebrid'; -import { getUserTorrentsList } from '@/services/realDebrid'; -import { genericToastOptions } from '@/utils/toastOptions'; -import { withAuth } from '@/utils/withAuth'; -import getConfig from 'next/config'; -import { useState } from 'react'; -import toast, { Toaster } from 'react-hot-toast'; - -function TroubleshootingPage() { - const { publicRuntimeConfig: config } = getConfig(); - - // keys - const rdKey = useRealDebridAccessToken(); - const adKey = useAllDebridApiKey(); - - const [testResults, setTestResults] = useState('Running test...\n-----\n'); - const [testRunning, setTestRunning] = useState(false); - - const startTest = async () => { - let cachedRdDownloads = JSON.parse( - localStorage.getItem('rd:downloads')?.toString() || '{}' - ); - setTestResults( - (prev) => - prev + `Real-Debrid cached downloads: ${Object.keys(cachedRdDownloads).length}\n` - ); - localStorage.removeItem('rd:downloads'); - - cachedRdDownloads = JSON.parse(localStorage.getItem('rd:downloads')?.toString() || '{}'); - setTestResults( - (prev) => - prev + `Real-Debrid refreshed downloads: ${Object.keys(cachedRdDownloads).length}\n` - ); - setTestResults((prev) => prev + `-----\n`); - - let cachedAdDownloads = JSON.parse( - localStorage.getItem('ad:downloads')?.toString() || '{}' - ); - setTestResults( - (prev) => - prev + `AllDebrid cached downloads: ${Object.keys(cachedAdDownloads).length}\n` - ); - localStorage.removeItem('ad:downloads'); - - cachedAdDownloads = JSON.parse(localStorage.getItem('ad:downloads')?.toString() || '{}'); - setTestResults( - (prev) => - prev + `AllDebrid refreshed downloads: ${Object.keys(cachedAdDownloads).length}\n` - ); - setTestResults((prev) => prev + `-----\n`); - - setTestRunning(true); - if (rdKey) { - setTestResults((prev) => prev + `Real-Debrid base URL: ${config.realDebridHostname}\n`); - try { - let rdTorrents = await getUserTorrentsList(rdKey); - setTestResults((prev) => prev + `RD torrent count: ${rdTorrents.length}\n`); - } catch (e) { - setTestResults((prev) => prev + `RD torrent error: ${e}\n`); - } - setTestResults((prev) => prev + `-----\n`); - - config.realDebridHostname = 'https://corsproxy.io/?https://api.real-debrid.com'; - setTestResults((prev) => prev + `Real-Debrid base URL: ${config.realDebridHostname}\n`); - try { - let rdTorrents = await getUserTorrentsList(rdKey); - setTestResults((prev) => prev + `RD torrent count: ${rdTorrents.length}\n`); - } catch (e) { - setTestResults((prev) => prev + `RD torrent error: ${e}\n`); - } - setTestResults((prev) => prev + `-----\n`); - - config.realDebridHostname = 'https://api.real-debrid.com'; - setTestResults((prev) => prev + `Real-Debrid base URL: ${config.realDebridHostname}\n`); - try { - let rdTorrents = await getUserTorrentsList(rdKey); - setTestResults((prev) => prev + `RD torrent count: ${rdTorrents.length}\n`); - } catch (e) { - setTestResults((prev) => prev + `RD torrent error: ${e}\n`); - } - setTestResults((prev) => prev + `-----\n`); - } - if (adKey) { - let adBaseUrl = `${config.allDebridHostname}`; - setTestResults((prev) => prev + `AllDebrid base URL: ${adBaseUrl}\n`); - try { - let adTorrents = (await getMagnetStatus(adKey)).data.magnets; - setTestResults((prev) => prev + `AD torrent count: ${adTorrents.length}\n`); - } catch (e) { - setTestResults((prev) => prev + `AD torrent error: ${e}\n`); - } - setTestResults((prev) => prev + `-----\n`); - - adBaseUrl = `${config.allDebridHostname}`; - setTestResults((prev) => prev + `AllDebrid base URL: ${adBaseUrl}\n`); - try { - let adTorrents = (await getMagnetStatus(adKey)).data.magnets; - setTestResults((prev) => prev + `AD torrent count: ${adTorrents.length}\n`); - } catch (e) { - setTestResults((prev) => prev + `AD torrent error: ${e}\n`); - } - setTestResults((prev) => prev + `-----\n`); - - setTestResults((prev) => prev + `AllDebrid base URL: ${config.allDebridHostname}\n`); - try { - let adTorrents = (await getMagnetStatus(adKey)).data.magnets; - setTestResults((prev) => prev + `AD torrent count: ${adTorrents.length}\n`); - } catch (e) { - setTestResults((prev) => prev + `AD torrent error: ${e}\n`); - } - setTestResults((prev) => prev + `-----\n`); - } - setTestResults((prev) => prev + `Test complete!\n`); - - toast( - 'Copy this and send to r/debridmediamanager or send to my Discord @ yowmamasita', - genericToastOptions - ); - }; - - return ( -
-

Troubleshooting

- {!testRunning && ( - - )} - {testRunning &&
{testResults}
} - -
- ); -} - -export default withAuth(TroubleshootingPage); diff --git a/src/services/realDebrid.ts b/src/services/realDebrid.ts index 066beb6..6bea25e 100644 --- a/src/services/realDebrid.ts +++ b/src/services/realDebrid.ts @@ -212,50 +212,43 @@ export const getCurrentUser = async (accessToken: string) => { } }; -export const getUserTorrentsList = async (accessToken: string): Promise => { - try { - const headers = { - Authorization: `Bearer ${accessToken}`, - }; +export async function* getUserTorrentsList(accessToken: string) { + const headers = { + Authorization: `Bearer ${accessToken}`, + }; + + let page = 1; + let limit = 2500; + + while (true) { + const response = await axios.get( + `${config.realDebridHostname}/rest/1.0/torrents`, + { headers, params: { page, limit } } + ); - let torrents: UserTorrentResponse[] = []; - let page = 1; - let limit = 2500; + const { + data, + headers: { 'x-total-count': totalCount }, + } = response; - while (true) { - const response = await axios.get( - `${config.realDebridHostname}/rest/1.0/torrents`, - { headers, params: { page, limit } } - ); - - const { - data, - headers: { 'x-total-count': totalCount }, - } = response; - torrents = torrents.concat(data); + yield data; // Yield the current page of torrents - if (data.length < limit || !totalCount) { - break; - } - - const totalCountValue = parseInt(totalCount, 10); - if (isNaN(totalCountValue)) { - break; - } + if (data.length < limit || !totalCount) { + break; + } - if (data.length >= totalCountValue) { - break; - } + const totalCountValue = parseInt(totalCount, 10); + if (isNaN(totalCountValue)) { + break; + } - page++; + if (data.length >= totalCountValue) { + break; } - return torrents; - } catch (error: any) { - console.error('Error fetching user torrents list:', error.message); - throw error; + page++; } -}; +} export const getDownloads = async (accessToken: string): Promise => { try { diff --git a/src/utils/mediaType.ts b/src/utils/mediaType.ts index a9cf075..093f980 100644 --- a/src/utils/mediaType.ts +++ b/src/utils/mediaType.ts @@ -1,5 +1,23 @@ export const getMediaType = (filename: string): 'tv' | 'movie' => { - return /seasons?.\d/i.test(filename) || /s\d\d/i.test(filename) || /\btv/i.test(filename) + return /seasons?.\d/i.test(filename) || + /s\d\d/i.test(filename) || + /\b(tv|complete)/i.test(filename) || + /\b(saison|stage)[\s\.]?\d/i.test(filename) ? 'tv' : 'movie'; }; + +export const getMediaType2 = (filename: string, linkCount: number): 'tv' | 'movie' => { + if ( + /seasons?.\d/i.test(filename) || + /s\d\d/i.test(filename) || + /\b(tv|complete)/i.test(filename) || + /\b(saison|stage)[\s\.]?\d/i.test(filename) + ) { + return 'tv'; + } + if (linkCount > 3) { + return 'tv'; + } + return 'movie'; +}; From 4328d5a52ed036e6fc6b55886103d4114fb5497b Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Wed, 15 Nov 2023 00:25:43 +0100 Subject: [PATCH 170/272] Logout and type detection improvements --- src/hooks/auth.ts | 3 ++- src/pages/hashlist.tsx | 6 +++--- src/pages/index.tsx | 6 +++++- src/pages/library.tsx | 11 +++++++---- src/pages/movie/[imdbid].tsx | 2 +- src/pages/show/[imdbid]/[seasonNum].tsx | 2 +- src/utils/mediaType.ts | 20 ++++++++++++-------- src/utils/withAuth.tsx | 2 +- 8 files changed, 32 insertions(+), 20 deletions(-) diff --git a/src/hooks/auth.ts b/src/hooks/auth.ts index de50f70..651626f 100644 --- a/src/hooks/auth.ts +++ b/src/hooks/auth.ts @@ -51,6 +51,7 @@ export const useRealDebridAccessToken = () => { const [clientSecret] = useLocalStorage('rd:clientSecret'); const [refreshToken] = useLocalStorage('rd:refreshToken'); const [accessToken, setAccessToken] = useLocalStorage('rd:accessToken'); + const canRefresh = !!refreshToken && !!clientId && !!clientSecret; useEffect(() => { (async () => { @@ -73,7 +74,7 @@ export const useRealDebridAccessToken = () => { // eslint-disable-next-line react-hooks/exhaustive-deps }, [clientId, clientSecret, refreshToken]); - return accessToken; + return [accessToken, canRefresh]; }; export const useAllDebridApiKey = () => { diff --git a/src/pages/hashlist.tsx b/src/pages/hashlist.tsx index 8ee95c3..3473ff6 100644 --- a/src/pages/hashlist.tsx +++ b/src/pages/hashlist.tsx @@ -4,7 +4,7 @@ import { uploadMagnet } from '@/services/allDebrid'; import { addHashAsMagnet, deleteTorrent, getTorrentInfo, selectFiles } from '@/services/realDebrid'; import { runConcurrentFunctions } from '@/utils/batch'; import { getMediaId } from '@/utils/mediaId'; -import { getMediaType } from '@/utils/mediaType'; +import { getTypeByName } from '@/utils/mediaType'; import getReleaseTags from '@/utils/score'; import { getSelectableFiles, isVideoOrSubs } from '@/utils/selectable'; import { ParsedFilename, filenameParse } from '@ctrl/video-filename-parser'; @@ -47,7 +47,7 @@ function TorrentsPage() { const [filteredList, setFilteredList] = useState([]); const [sortBy, setSortBy] = useState({ column: 'title', direction: 'asc' }); - const rdKey = useRealDebridAccessToken(); + const [rdKey] = useRealDebridAccessToken(); const adKey = useAllDebridApiKey(); const [movieCount, setMovieCount] = useState(0); @@ -72,7 +72,7 @@ function TorrentsPage() { (async () => { try { const torrents = (await getUserTorrentsList()).map((torrent) => { - const mediaType = getMediaType(torrent.filename); + const mediaType = getTypeByName(torrent.filename); const info = mediaType === 'movie' ? filenameParse(torrent.filename) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 9626328..4b7c675 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -35,12 +35,16 @@ function IndexPage() { return null; } if (prefix) { - for (let i = 0; i < localStorage.length; i++) { + // Start from the end of localStorage and move backwards + let i = localStorage.length - 1; + while (i >= 0) { const key = localStorage.key(i); if (key && key.startsWith(prefix)) { localStorage.removeItem(key); } + i--; // Decrement i regardless of whether an item was removed } + router.reload(); } else { localStorage.clear(); diff --git a/src/pages/library.tsx b/src/pages/library.tsx index 7740641..0fc193c 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -12,7 +12,7 @@ import { } from '@/services/realDebrid'; import { runConcurrentFunctions } from '@/utils/batch'; import { getMediaId } from '@/utils/mediaId'; -import { getMediaType, getMediaType2 } from '@/utils/mediaType'; +import { getTypeByName, getTypeByNameAndFileCount } from '@/utils/mediaType'; import getReleaseTags from '@/utils/score'; import { getSelectableFiles, isVideoOrSubs } from '@/utils/selectable'; import { libraryToastOptions } from '@/utils/toastOptions'; @@ -68,7 +68,7 @@ function TorrentsPage() { const [helpText, setHelpText] = useState(''); // keys - const rdKey = useRealDebridAccessToken(); + const [rdKey] = useRealDebridAccessToken(); const adKey = useAllDebridApiKey(); const [movieGrouping] = useState>({}); @@ -114,7 +114,10 @@ function TorrentsPage() { // Iterate over each page of results from the generator for await (let pageOfTorrents of getUserTorrentsList(rdKey)) { const torrents = pageOfTorrents.map((torrent) => { - const mediaType = getMediaType2(torrent.filename, torrent.links.length); + const mediaType = getTypeByNameAndFileCount( + torrent.filename, + torrent.links.length + ); const info = mediaType === 'movie' ? filenameParse(torrent.filename) @@ -164,7 +167,7 @@ function TorrentsPage() { try { if (!adKey) throw new Error('no_ad_key'); const torrents = (await getMagnetStatus(adKey)).data.magnets.map((torrent) => { - const mediaType = getMediaType(torrent.filename); + const mediaType = getTypeByName(torrent.filename); const info = mediaType === 'movie' ? filenameParse(torrent.filename) diff --git a/src/pages/movie/[imdbid].tsx b/src/pages/movie/[imdbid].tsx index 73fc834..7117261 100644 --- a/src/pages/movie/[imdbid].tsx +++ b/src/pages/movie/[imdbid].tsx @@ -39,7 +39,7 @@ const MovieSearch: FunctionComponent = ({ const [searchResults, setSearchResults] = useState([]); const [filteredResults, setFilteredResults] = useState([]); const [errorMessage, setErrorMessage] = useState(''); - const rdKey = useRealDebridAccessToken(); + const [rdKey] = useRealDebridAccessToken(); const adKey = useAllDebridApiKey(); const [rdCache, rd, rdCacheAdder, removeFromRdCache] = useDownloadsCache('rd'); const [adCache, ad, adCacheAdder, removeFromAdCache] = useDownloadsCache('ad'); diff --git a/src/pages/show/[imdbid]/[seasonNum].tsx b/src/pages/show/[imdbid]/[seasonNum].tsx index ee639ae..35dfb88 100644 --- a/src/pages/show/[imdbid]/[seasonNum].tsx +++ b/src/pages/show/[imdbid]/[seasonNum].tsx @@ -41,7 +41,7 @@ const TvSearch: FunctionComponent = ({ const [searchResults, setSearchResults] = useState([]); const [filteredResults, setFilteredResults] = useState([]); const [errorMessage, setErrorMessage] = useState(''); - const rdKey = useRealDebridAccessToken(); + const [rdKey] = useRealDebridAccessToken(); const adKey = useAllDebridApiKey(); const [rdCache, rd, rdCacheAdder, removeFromRdCache] = useDownloadsCache('rd'); const [adCache, ad, adCacheAdder, removeFromAdCache] = useDownloadsCache('ad'); diff --git a/src/utils/mediaType.ts b/src/utils/mediaType.ts index 093f980..4f8a2b0 100644 --- a/src/utils/mediaType.ts +++ b/src/utils/mediaType.ts @@ -1,18 +1,22 @@ -export const getMediaType = (filename: string): 'tv' | 'movie' => { - return /seasons?.\d/i.test(filename) || - /s\d\d/i.test(filename) || +export const getTypeByName = (filename: string): 'tv' | 'movie' => { + return /(season|episode)s?.?\d/i.test(filename) || + /[se]\d\d/i.test(filename) || /\b(tv|complete)/i.test(filename) || - /\b(saison|stage)[\s\.]?\d/i.test(filename) + /\b(saison|stage).?\d/i.test(filename) || + /[a-z]\s?\-\s?\d{2,4}\b/.test(filename) || + /\d{2,4}\s?\-\s?\d{2,4}\b/.test(filename) ? 'tv' : 'movie'; }; -export const getMediaType2 = (filename: string, linkCount: number): 'tv' | 'movie' => { +export const getTypeByNameAndFileCount = (filename: string, linkCount: number): 'tv' | 'movie' => { if ( - /seasons?.\d/i.test(filename) || - /s\d\d/i.test(filename) || + /(season|episode)s?.?\d/i.test(filename) || + /[se]\d\d/i.test(filename) || /\b(tv|complete)/i.test(filename) || - /\b(saison|stage)[\s\.]?\d/i.test(filename) + /\b(saison|stage).?\d/i.test(filename) || + /[a-z]\s?\-\s?\d{2,4}\b/.test(filename) || + /\d{2,4}\s?\-\s?\d{2,4}\b/.test(filename) ) { return 'tv'; } diff --git a/src/utils/withAuth.tsx b/src/utils/withAuth.tsx index db44c18..19ed35d 100644 --- a/src/utils/withAuth.tsx +++ b/src/utils/withAuth.tsx @@ -9,7 +9,7 @@ export const withAuth =

(Component: ComponentType

) => { return function WithAuth(props: P) { const router = useRouter(); const [isLoading, setIsLoading] = useState(true); - const rdKey = useRealDebridAccessToken(); + const [rdKey] = useRealDebridAccessToken(); const adKey = useAllDebridApiKey(); useEffect(() => { From 0fa22b78f6a5130baed7feb30eab41d56130661f Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Wed, 15 Nov 2023 00:26:05 +0100 Subject: [PATCH 171/272] 3.9.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index c0d9eab..8ccb2c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "debrid-media-manager", - "version": "3.9.0", + "version": "3.9.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "debrid-media-manager", - "version": "3.9.0", + "version": "3.9.1", "dependencies": { "@ctrl/video-filename-parser": "^5.0.0", "@octokit/rest": "^19.0.7", diff --git a/package.json b/package.json index b903144..8ac53f9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "debrid-media-manager", - "version": "3.9.0", + "version": "3.9.1", "private": false, "scripts": { "dev": "next dev", From 6f1e2237cb22b06bce3435d668916bb9e935d5b9 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Wed, 15 Nov 2023 00:30:31 +0100 Subject: [PATCH 172/272] Fix issues --- src/hooks/auth.ts | 3 +-- src/pages/hashlist.tsx | 2 +- src/pages/library.tsx | 2 +- src/pages/movie/[imdbid].tsx | 2 +- src/pages/show/[imdbid]/[seasonNum].tsx | 2 +- src/utils/withAuth.tsx | 2 +- 6 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/hooks/auth.ts b/src/hooks/auth.ts index 651626f..de50f70 100644 --- a/src/hooks/auth.ts +++ b/src/hooks/auth.ts @@ -51,7 +51,6 @@ export const useRealDebridAccessToken = () => { const [clientSecret] = useLocalStorage('rd:clientSecret'); const [refreshToken] = useLocalStorage('rd:refreshToken'); const [accessToken, setAccessToken] = useLocalStorage('rd:accessToken'); - const canRefresh = !!refreshToken && !!clientId && !!clientSecret; useEffect(() => { (async () => { @@ -74,7 +73,7 @@ export const useRealDebridAccessToken = () => { // eslint-disable-next-line react-hooks/exhaustive-deps }, [clientId, clientSecret, refreshToken]); - return [accessToken, canRefresh]; + return accessToken; }; export const useAllDebridApiKey = () => { diff --git a/src/pages/hashlist.tsx b/src/pages/hashlist.tsx index 3473ff6..3cee13b 100644 --- a/src/pages/hashlist.tsx +++ b/src/pages/hashlist.tsx @@ -47,7 +47,7 @@ function TorrentsPage() { const [filteredList, setFilteredList] = useState([]); const [sortBy, setSortBy] = useState({ column: 'title', direction: 'asc' }); - const [rdKey] = useRealDebridAccessToken(); + const rdKey = useRealDebridAccessToken(); const adKey = useAllDebridApiKey(); const [movieCount, setMovieCount] = useState(0); diff --git a/src/pages/library.tsx b/src/pages/library.tsx index 0fc193c..3c14d14 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -68,7 +68,7 @@ function TorrentsPage() { const [helpText, setHelpText] = useState(''); // keys - const [rdKey] = useRealDebridAccessToken(); + const rdKey = useRealDebridAccessToken(); const adKey = useAllDebridApiKey(); const [movieGrouping] = useState>({}); diff --git a/src/pages/movie/[imdbid].tsx b/src/pages/movie/[imdbid].tsx index 7117261..73fc834 100644 --- a/src/pages/movie/[imdbid].tsx +++ b/src/pages/movie/[imdbid].tsx @@ -39,7 +39,7 @@ const MovieSearch: FunctionComponent = ({ const [searchResults, setSearchResults] = useState([]); const [filteredResults, setFilteredResults] = useState([]); const [errorMessage, setErrorMessage] = useState(''); - const [rdKey] = useRealDebridAccessToken(); + const rdKey = useRealDebridAccessToken(); const adKey = useAllDebridApiKey(); const [rdCache, rd, rdCacheAdder, removeFromRdCache] = useDownloadsCache('rd'); const [adCache, ad, adCacheAdder, removeFromAdCache] = useDownloadsCache('ad'); diff --git a/src/pages/show/[imdbid]/[seasonNum].tsx b/src/pages/show/[imdbid]/[seasonNum].tsx index 35dfb88..ee639ae 100644 --- a/src/pages/show/[imdbid]/[seasonNum].tsx +++ b/src/pages/show/[imdbid]/[seasonNum].tsx @@ -41,7 +41,7 @@ const TvSearch: FunctionComponent = ({ const [searchResults, setSearchResults] = useState([]); const [filteredResults, setFilteredResults] = useState([]); const [errorMessage, setErrorMessage] = useState(''); - const [rdKey] = useRealDebridAccessToken(); + const rdKey = useRealDebridAccessToken(); const adKey = useAllDebridApiKey(); const [rdCache, rd, rdCacheAdder, removeFromRdCache] = useDownloadsCache('rd'); const [adCache, ad, adCacheAdder, removeFromAdCache] = useDownloadsCache('ad'); diff --git a/src/utils/withAuth.tsx b/src/utils/withAuth.tsx index 19ed35d..db44c18 100644 --- a/src/utils/withAuth.tsx +++ b/src/utils/withAuth.tsx @@ -9,7 +9,7 @@ export const withAuth =

(Component: ComponentType

) => { return function WithAuth(props: P) { const router = useRouter(); const [isLoading, setIsLoading] = useState(true); - const [rdKey] = useRealDebridAccessToken(); + const rdKey = useRealDebridAccessToken(); const adKey = useAllDebridApiKey(); useEffect(() => { From a5218ff9d2c5b37b44db936b99a467971f37dba8 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Wed, 15 Nov 2023 00:47:00 +0100 Subject: [PATCH 173/272] optimize build speeds --- .github/workflows/build-and-push.yml | 7 +++-- Dockerfile | 38 +++++++++++++--------------- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/.github/workflows/build-and-push.yml b/.github/workflows/build-and-push.yml index ebacf6a..598a798 100644 --- a/.github/workflows/build-and-push.yml +++ b/.github/workflows/build-and-push.yml @@ -16,13 +16,16 @@ jobs: uses: actions/checkout@v2 - name: Cache node modules - uses: actions/cache@v2 + uses: actions/cache@v3 with: - path: node_modules + path: | + node_modules + */node_modules key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node- + - name: Set up QEMU uses: docker/setup-qemu-action@v2 diff --git a/Dockerfile b/Dockerfile index 7b0da43..1449844 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,24 +1,29 @@ -FROM node:18-alpine AS dependencies +# Use a single stage for dependencies and build, as they share the same base image +FROM node:18-alpine AS build + +# Install additional tools (curl and grep) only once +RUN apk --no-cache add curl grep WORKDIR /app + +# Copy package files and install dependencies COPY package.json package-lock.json ./ RUN npm ci -FROM node:18-alpine AS build - -WORKDIR /app -COPY --from=dependencies /app/node_modules ./node_modules +# Copy source files COPY . . -RUN npx prisma generate -RUN npm run build - -FROM node:18-alpine AS deploy - -WORKDIR /app +# Generate prisma client and build the project +RUN npx prisma generate && npm run build +# Set environment variables for the deploy stage ENV NODE_ENV production +ENV PORT 3000 +ENV HOSTNAME "0.0.0.0" +# Copy only necessary files for the deploy stage +FROM node:18-alpine AS deploy +WORKDIR /app COPY --from=build /app/public ./public COPY --from=build /app/package.json ./package.json COPY --from=build /app/prisma ./prisma @@ -27,15 +32,8 @@ COPY --from=build /app/.next/standalone . EXPOSE 3000 -ENV PORT 3000 -# set hostname to localhost -ENV HOSTNAME "0.0.0.0" - -CMD ["node", "server.js"] - -# Install additional tools (curl and grep) -RUN apk --no-cache add curl grep - # Healthcheck HEALTHCHECK --interval=30s --timeout=1s --start-period=3s --retries=1 \ CMD curl -s http://localhost:3000/api/healthz | grep -qm1 ok + +CMD ["node", "server.js"] From 8bf7c682ea49fe2dc8181efe70ea6a9ccddca037 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Wed, 15 Nov 2023 00:49:55 +0100 Subject: [PATCH 174/272] Use version output --- .github/workflows/build-and-push.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-and-push.yml b/.github/workflows/build-and-push.yml index 598a798..c5d22bf 100644 --- a/.github/workflows/build-and-push.yml +++ b/.github/workflows/build-and-push.yml @@ -39,7 +39,8 @@ jobs: password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Read version from package.json - run: echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_ENV + id: version + run: echo "version=$(node -p "require('./package.json').version")" >> "$GITHUB_OUTPUT" - name: Build and push Docker image id: build-image @@ -52,4 +53,4 @@ jobs: cache-to: type=gha,mode=max tags: | debridmediamanager/debrid-media-manager:latest - debridmediamanager/debrid-media-manager:${{ env.version }} + debridmediamanager/debrid-media-manager:${{ steps.version.outputs.version }} From 89804383897c4d8b7f4cf9b3aecc744eb7ec79bd Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Wed, 15 Nov 2023 01:57:11 +0100 Subject: [PATCH 175/272] Add downloading stats --- src/pages/hashlist.tsx | 44 +++++++++++--------------------------- src/pages/library.tsx | 37 ++++++++++++++++++++++++++------ src/services/realDebrid.ts | 1 + src/utils/mediaType.ts | 4 ++-- src/utils/speed.ts | 18 ++++++++++++++++ 5 files changed, 65 insertions(+), 39 deletions(-) create mode 100644 src/utils/speed.ts diff --git a/src/pages/hashlist.tsx b/src/pages/hashlist.tsx index 3cee13b..a8b7667 100644 --- a/src/pages/hashlist.tsx +++ b/src/pages/hashlist.tsx @@ -82,13 +82,14 @@ function TorrentsPage() { score: getReleaseTags(torrent.filename, torrent.bytes / ONE_GIGABYTE).score, info, mediaType, - title: getMediaId(info, mediaType, false), + title: getMediaId(info, mediaType, false) || torrent.filename, ...torrent, }; }) as UserTorrent[]; setUserTorrentsList(torrents); } catch (error) { + alert(error); setUserTorrentsList([]); toast.error('Error fetching user torrents list'); } finally { @@ -110,19 +111,17 @@ function TorrentsPage() { clearGroupings(tvGroupingByEpisode); for (const t of userTorrentsList) { tmpTotalBytes += t.bytes; - const mediaId = getMediaId(t.info, t.mediaType); - if (mediaId in getGroupings(t.mediaType)) { - if (getGroupings(t.mediaType)[mediaId] === 1) hasDupes.push(mediaId); - getGroupings(t.mediaType)[mediaId]++; + if (t.title in getGroupings(t.mediaType)) { + if (getGroupings(t.mediaType)[t.title] === 1) hasDupes.push(t.title); + getGroupings(t.mediaType)[t.title]++; } else { - getGroupings(t.mediaType)[mediaId] = 1; + getGroupings(t.mediaType)[t.title] = 1; } if (t.mediaType === 'tv') { - const title = getMediaId(t.info, t.mediaType, true, true); - if (title in tvGroupingByTitle) { - tvGroupingByTitle[title]++; + if (t.title in tvGroupingByTitle) { + tvGroupingByTitle[t.title]++; } else { - tvGroupingByTitle[title] = 1; + tvGroupingByTitle[t.title] = 1; } } } @@ -146,7 +145,7 @@ function TorrentsPage() { let tmpList = userTorrentsList; if (titleFilter) { const decodedTitleFilter = decodeURIComponent(titleFilter as string); - tmpList = tmpList.filter((t) => decodedTitleFilter === getMediaId(t.info, t.mediaType)); + tmpList = tmpList.filter((t) => decodedTitleFilter === t.title); setFilteredList(applyQuickSearch(tmpList)); } if (mediaType) { @@ -421,22 +420,12 @@ function TorrentsPage() { {sortBy.column === 'bytes' && (sortBy.direction === 'asc' ? 'โ†‘' : 'โ†“')} -

handleSort('score')} - > - Score{' '} - {sortBy.column === 'score' && - (sortBy.direction === 'asc' ? 'โ†‘' : 'โ†“')} - Actions
{(t.bytes / ONE_GIGABYTE).toFixed(1)} GB {t.score.toFixed(1)} {rd.isDownloading(t.hash) && rdCache![t.hash].id && ( - {torrent.progress !== 100 - ? `${torrent.progress}%` - : `${torrent.links.length} file${ - torrent.links.length === 1 ? '' : 's' - }`} + {torrent.progress !== 100 ? ( + <> + + {torrent.progress}%  + + + + + + {torrent.seeders} + +
+ + {shortenNumber(torrent.speed)}B/s + + + ) : ( + `${torrent.links.length} file${ + torrent.links.length === 1 ? '' : 's' + }` + )}
{new Date(torrent.added).toLocaleString()}
{torrent.id} - {t.title}{' '} + + {t.mediaType === 'tv' ? '๐Ÿ“บ' : '๐ŸŽฅ'} + +  {t.title}{' '} >({}); const [tvGroupingByEpisode] = useState>({}); const [tvGroupingByTitle] = useState>({}); - const [dupeTitles] = useState>([]); - const [dupeHashes] = useState>([]); + const [sameTitle, setSameTitle] = useState>([]); // stats const [totalBytes, setTotalBytes] = useState(0); @@ -86,6 +85,8 @@ function TorrentsPage() { const [_1, rdUtils, rdCacheAdder, removeFromRdCache] = useDownloadsCache('rd'); const [_2, adUtils, adCacheAdder, removeFromAdCache] = useDownloadsCache('ad'); + const uniqId = (torrent: UserTorrent): string => `${torrent.hash}|${torrent.links.join()}`; + const handlePrevPage = useCallback(() => { if (router.query.page === '1') return; router.push({ @@ -159,7 +160,7 @@ function TorrentsPage() { } }; - if (rdKey) fetchRealDebrid(); + if (rdKey && userTorrentsList.length === 0) fetchRealDebrid(); else setRdLoading(false); // eslint-disable-next-line react-hooks/exhaustive-deps @@ -224,7 +225,7 @@ function TorrentsPage() { setAdLoading(false); } }; - if (adKey) fetchAllDebrid(); + if (adKey && userTorrentsList.length === 0) fetchAllDebrid(); else setAdLoading(false); // eslint-disable-next-line react-hooks/exhaustive-deps }, [adKey]); @@ -240,7 +241,7 @@ function TorrentsPage() { clearGroupings(tvGroupingByEpisode); const hashes: Map = new Map(); for (const t of userTorrentsList) { - const key = `${t.filename}|${t.hash}|${t.bytes}`; + const key = uniqId(t); if (!hashes.has(key)) { hashes.set(key, t.bytes); tmpTotalBytes += t.bytes; @@ -251,10 +252,10 @@ function TorrentsPage() { tmpTotalBytes += t.bytes; hashes.set(key, t.bytes); } - dupeHashes.push(key); } if (t.title in getGroupings(t.mediaType)) { - if (getGroupings(t.mediaType)[t.title] === 1) dupeTitles.push(t.title); + if (getGroupings(t.mediaType)[t.title] === 1) + setSameTitle((prev) => [...prev, t.title]); getGroupings(t.mediaType)[t.title]++; } else { getGroupings(t.mediaType)[t.title] = 1; @@ -279,7 +280,6 @@ function TorrentsPage() { movieGrouping, tvGroupingByEpisode, tvGroupingByTitle, - dupeTitles, ]); // set the list you see @@ -310,22 +310,13 @@ function TorrentsPage() { 'The displayed torrents either do not contain any links or are older than one hour and lack any seeders. You can use the "Delete shown" option to remove them.' ); } - if (status === 'dupe') { - tmpList = tmpList.filter((t) => dupeTitles.includes(t.title)); + if (status === 'sametitle') { + tmpList = tmpList.filter((t) => sameTitle.includes(t.title)); setFilteredList(applyQuickSearch(tmpList)); setHelpText( 'Torrents shown have the same title parsed from the torrent name. Use "By size" to retain the larger torrent for each title, or "By date" to retain the more recent torrent. Take note: the parser might not work well for multi-season tv show torrents.' ); } - if (status === 'dupehash') { - tmpList = tmpList.filter((t) => - dupeHashes.includes(`${t.filename}|${t.hash}|${t.bytes}`) - ); - setFilteredList(applyQuickSearch(tmpList)); - setHelpText( - 'Torrents shown have the same hash and size. These are exact duplicates. Just using the hash still means that they could have different files selected so size is also used for comparison.' - ); - } if (status === 'non4k') { tmpList = tmpList.filter( (t) => !/\b2160|\b4k|\buhd|\bdovi|\bdolby.?vision|\bdv|\bremux/i.test(t.filename) @@ -362,16 +353,7 @@ function TorrentsPage() { deleteFailedTorrents(tmpList); setFiltering(false); // eslint-disable-next-line react-hooks/exhaustive-deps - }, [ - router.query, - userTorrentsList, - rdLoading, - adLoading, - grouping, - dupeTitles, - query, - currentPage, - ]); + }, [router.query, userTorrentsList, rdLoading, adLoading, grouping, query, currentPage]); const handleDeleteTorrent = async (id: string, disableToast: boolean = false) => { try { @@ -449,7 +431,7 @@ function TorrentsPage() { if (!rdKey) throw new Error('no_rd_key'); const response = await getTorrentInfo(rdKey, id.substring(3)); - const selectedFiles = getSelectableFiles(response.files.filter(isVideoOrSubs)).map( + const selectedFiles = getSelectableFiles(response.files.filter(isVideo)).map( (file) => file.id ); if (selectedFiles.length === 0) { @@ -522,7 +504,7 @@ function TorrentsPage() { } const getKeyByStatus = (status: string) => { - if (status === 'dupe') return (torrent: UserTorrent) => torrent.info.title; + if (status === 'sametitle') return (torrent: UserTorrent) => torrent.info.title; return (torrent: UserTorrent) => torrent.hash; }; @@ -598,6 +580,55 @@ function TorrentsPage() { } } + function wrapReinsertFn(t: UserTorrent) { + return async () => + t.id.startsWith('rd:') + ? await handleReinsertTorrent(t.id) + : await handleRestartTorrent(t.id); + } + + async function combineSameHash() { + if ( + !confirm( + `This will combine torrents with identical hashes and select all streamable files. Make sure to backup before doing this. Do you want to proceed?` + ) + ) + return; + const dupeHashes: Map = new Map(); + userTorrentsList.reduce((acc: { [key: string]: UserTorrent }, cur: UserTorrent) => { + let key = cur.hash; + if (acc[key]) { + if (!dupeHashes.has(key)) { + dupeHashes.set(key, new Array(acc[key])); + } + dupeHashes.get(key)?.push(cur); + } else { + acc[key] = cur; + } + return acc; + }, {}); + let toReinsertAndDelete: AsyncFunction[] = []; + dupeHashes.forEach((sameHashTorrents: UserTorrent[]) => { + const reinsert = sameHashTorrents.pop(); + if (reinsert) { + toReinsertAndDelete.push(wrapReinsertFn(reinsert)); + toReinsertAndDelete = toReinsertAndDelete.concat( + sameHashTorrents.map(wrapDeleteFn) + ); + } + }); + const [results, errors] = await runConcurrentFunctions(toReinsertAndDelete, 5, 500); + if (errors.length) { + toast.error(`Error with merging ${errors.length} torrents`, libraryToastOptions); + } + if (results.length) { + toast.success(`Merged ${results.length} torrents`, libraryToastOptions); + } + if (!errors.length && !results.length) { + toast('No torrents to merge', libraryToastOptions); + } + } + async function deleteFilteredTorrents() { if ( !confirm(`This will delete the ${filteredList.length} torrents filtered. Are you sure?`) @@ -894,29 +925,23 @@ function TorrentsPage() { No seeds Same title - - Same hash&size - + + + + `; + } + + // Return the list item for the file, with or without the download form + return `
  • ${ + file.path + } - ${size.toFixed(2)} ${unit}${downloadForm}
  • `; + }) + .join(''); + + // Handle the display of progress, speed, and seeders as table rows + const progressRow = + info.status === 'downloading' + ? `
    Progress:${info.progress.toFixed( + 2 + )}%
    Speed:${( + info.speed / 1024 + ).toFixed(2)} KB/s
    Seeders:${info.seeders}
    + + + + + + + + + + + + + + + + + + ${progressRow} + ${speedRow} + ${seedersRow} + + + + + +
    Original filename:${info.original_filename}
    Size:${(info.bytes / 1024 ** 3).toFixed(2)} GB
    Original size:${(info.original_bytes / 1024 ** 3).toFixed(2)} GB +
    Status:${info.status}
    Added:${new Date(info.added).toLocaleString()}
    +
    + ${warning} +

    Files:

    +
    +
      ${filesList}
    +
    + `, + showConfirmButton: false, + customClass: { + popup: 'format-class', + }, + width: '800px', + }); + }; + return (
    @@ -1205,6 +1351,13 @@ function TorrentsPage() { > + ); diff --git a/src/services/realDebrid.ts b/src/services/realDebrid.ts index 21df278..2353838 100644 --- a/src/services/realDebrid.ts +++ b/src/services/realDebrid.ts @@ -100,6 +100,8 @@ export interface TorrentInfoResponse { }[]; links: string[]; ended: string; + speed: number; + seeders: number; } interface FileData { From b93542564e1bfc5030b4d9398927b4fa98a9273d Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Thu, 16 Nov 2023 06:21:09 +0100 Subject: [PATCH 183/272] Add download buttons only when intact --- src/pages/library.tsx | 80 ++++++++++++++++++++++++++----------------- 1 file changed, 48 insertions(+), 32 deletions(-) diff --git a/src/pages/library.tsx b/src/pages/library.tsx index 2106b2d..236b870 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -26,15 +26,7 @@ import Link from 'next/link'; import { useRouter } from 'next/router'; import { useCallback, useEffect, useState } from 'react'; import { Toaster, toast } from 'react-hot-toast'; -import { - FaArrowLeft, - FaArrowRight, - FaGlasses, - FaRecycle, - FaSeedling, - FaShare, - FaTrash, -} from 'react-icons/fa'; +import { FaArrowLeft, FaArrowRight, FaRecycle, FaSeedling, FaShare, FaTrash } from 'react-icons/fa'; import Swal from 'sweetalert2'; const ONE_GIGABYTE = 1024 * 1024 * 1024; @@ -901,8 +893,9 @@ function TorrentsPage() { const info = await getTorrentInfo(rdKey!, torrent.id.substring(3)); let warning = ''; + const isIntact = info.files.filter((f) => f.selected).length === info.links.length; // Check if there is a mismatch between files and links - if (info.files.filter((f) => f.selected).length !== info.links.length) { + if (info.progress === 100 && !isIntact) { warning = `

    Warning: Some files have expired

    `; } @@ -917,7 +910,7 @@ function TorrentsPage() { let downloadForm = ''; // Only create a download form for selected files - if (file.selected) { + if (file.selected && isIntact) { downloadForm = `
    @@ -958,6 +951,10 @@ function TorrentsPage() {
    + + + + @@ -1259,7 +1256,12 @@ function TorrentsPage() { ? `${groupCount} of same title` : ''; return ( - + showInfo(torrent)} // Add the onClick event here + title="Click for more info" + > @@ -1274,16 +1276,28 @@ function TorrentsPage() { : '๐ŸŽฅ'}  {torrent.title}{' '} + {filterText && ( + e.stopPropagation()} + > + {filterText} + + )} - {filterText} - {' '} - e.stopPropagation()} > Search again @@ -1292,6 +1306,7 @@ function TorrentsPage() { )} {torrent.filename} + @@ -1329,35 +1344,36 @@ function TorrentsPage() { - + {/* Removed the glasses icon since the row is now clickable */} ); From 82b28ffcc6f7be4d34248e099399c64dcb48979d Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Thu, 16 Nov 2023 06:41:00 +0100 Subject: [PATCH 184/272] A proper file list --- src/pages/library.tsx | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/src/pages/library.tsx b/src/pages/library.tsx index 236b870..686c2ae 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -914,15 +914,21 @@ function TorrentsPage() { downloadForm = ` - + `; } // Return the list item for the file, with or without the download form - return `
  • ${ - file.path - } - ${size.toFixed(2)} ${unit}${downloadForm}
  • `; + return ` +
  • + ${file.path} + ${size.toFixed(2)} ${unit} + ${downloadForm} +
  • + `; }) .join(''); @@ -984,9 +990,12 @@ function TorrentsPage() { ${warning}

    Files:

    -
    -
      ${filesList}
    +
    +
      + ${filesList} +
    + `, showConfirmButton: false, customClass: { @@ -1092,17 +1101,15 @@ function TorrentsPage() { - )} - {adKey && ( - - )} + + {Object.keys(router.query).length !== 0 && ( Reset @@ -569,34 +567,51 @@ function TorrentsPage() { } `} > -
    + showInfo(torrent)} // Add the onClick event here + onClick={() => + torrent.id.startsWith('rd:') + ? showInfo(torrent) + : null + } // Add the onClick event here title="Click for more info" > torrent.id.startsWith('rd:') ? showInfo(torrent) @@ -1411,7 +1417,7 @@ function TorrentsPage() { From 38b35b33df7a3391e436afbda2f062a4610e6d10 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Fri, 15 Dec 2023 21:42:12 +0100 Subject: [PATCH 213/272] Refactor add and delete magnet --- src/pages/hashlist.tsx | 170 ++++++++---------------- src/pages/library.tsx | 65 +++++---- src/pages/movie/[imdbid].tsx | 113 +++------------- src/pages/show/[imdbid]/[seasonNum].tsx | 113 +++------------- src/utils/addMagnet.ts | 81 +++++++++++ src/utils/deleteTorrent.ts | 36 +++++ src/utils/toastOptions.ts | 5 + 7 files changed, 257 insertions(+), 326 deletions(-) create mode 100644 src/utils/addMagnet.ts create mode 100644 src/utils/deleteTorrent.ts diff --git a/src/pages/hashlist.tsx b/src/pages/hashlist.tsx index 9d540e1..56266ce 100644 --- a/src/pages/hashlist.tsx +++ b/src/pages/hashlist.tsx @@ -1,25 +1,15 @@ import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; import { useDownloadsCache } from '@/hooks/cache'; -import { - AdInstantAvailabilityResponse, - MagnetFile, - adInstantCheck, - uploadMagnet, -} from '@/services/allDebrid'; -import { - RdInstantAvailabilityResponse, - addHashAsMagnet, - deleteTorrent, - getTorrentInfo, - rdInstantCheck, - selectFiles, -} from '@/services/realDebrid'; +import { AdInstantAvailabilityResponse, MagnetFile, adInstantCheck } from '@/services/allDebrid'; +import { RdInstantAvailabilityResponse, rdInstantCheck } from '@/services/realDebrid'; +import { handleAddAsMagnetInAd, handleAddAsMagnetInRd } from '@/utils/addMagnet'; import { runConcurrentFunctions } from '@/utils/batch'; +import { handleDeleteAdTorrent, handleDeleteRdTorrent } from '@/utils/deleteTorrent'; import { groupBy } from '@/utils/groupBy'; import { getMediaId } from '@/utils/mediaId'; import { getTypeByName } from '@/utils/mediaType'; import getReleaseTags from '@/utils/score'; -import { getSelectableFiles, isVideo } from '@/utils/selectable'; +import { isVideo } from '@/utils/selectable'; import { ParsedFilename, filenameParse } from '@ctrl/video-filename-parser'; import lzString from 'lz-string'; import Head from 'next/head'; @@ -316,43 +306,13 @@ function HashlistPage() { } } - const handleAddAsMagnetInRd = async (hash: string, disableToast: boolean = false) => { - try { - if (!rdKey) throw new Error('no_rd_key'); - const id = await addHashAsMagnet(rdKey, hash); - if (!disableToast) toast.success('Successfully added as magnet!'); - rdCacheAdder.single(`rd:${id}`, hash); - handleSelectFiles(`rd:${id}`, true); - } catch (error) { - if (!disableToast) - toast.error( - 'There was an error adding as magnet in Real-Debrid. Please try again.' - ); - throw error; - } - }; - - const handleAddAsMagnetInAd = async (hash: string, disableToast: boolean = false) => { - try { - if (!adKey) throw new Error('no_ad_key'); - const resp = await uploadMagnet(adKey, [hash]); - if (resp.data.magnets.length === 0 || resp.data.magnets[0].error) - throw new Error('no_magnets'); - if (!disableToast) toast.success('Successfully added as magnet!'); - adCacheAdder.single(`ad:${resp.data.magnets[0].id}`, hash); - } catch (error) { - if (!disableToast) - toast.error('There was an error adding as magnet in AllDebrid. Please try again.'); - throw error; - } - }; - function wrapDownloadFilesInRdFn(t: UserTorrent) { - return async () => await handleAddAsMagnetInRd(t.hash, true); + return async () => + await handleAddAsMagnetInRd(rdKey!, t.hash, rdCacheAdder, removeFromRdCache, true); } function wrapDownloadFilesInAdFn(t: UserTorrent) { - return async () => await handleAddAsMagnetInAd(t.hash, true); + return async () => await handleAddAsMagnetInAd(adKey!, t.hash, adCacheAdder, true); } async function downloadNonDupeTorrentsInRd() { @@ -375,7 +335,7 @@ function HashlistPage() { async function downloadNonDupeTorrentsInAd() { if (!adKey) throw new Error('no_ad_key'); - const libraryHashes = Object.keys(rdCache!); + const libraryHashes = Object.keys(adCache!); const yetToDownload = filteredList .filter((t) => !libraryHashes.includes(t.hash)) .map(wrapDownloadFilesInAdFn); @@ -391,47 +351,6 @@ function HashlistPage() { } } - const handleDeleteTorrent = async (id: string, disableToast: boolean = false) => { - try { - if (!rdKey && !adKey) throw new Error('no_keys'); - if (rdKey && id.startsWith('rd:')) await deleteTorrent(rdKey, id.substring(3)); - if (adKey && id.startsWith('ad:')) await deleteTorrent(adKey, id.substring(3)); - if (!disableToast) toast.success(`Download canceled (${id})`); - if (id.startsWith('rd:')) removeFromRdCache(id); - if (id.startsWith('ad:')) removeFromAdCache(id); - } catch (error) { - if (!disableToast) toast.error(`Error deleting torrent (${id})`); - throw error; - } - }; - - const handleSelectFiles = async (id: string, disableToast: boolean = false) => { - try { - if (!rdKey) throw new Error('no_rd_key'); - const response = await getTorrentInfo(rdKey, id.substring(3)); - - const selectedFiles = getSelectableFiles(response.files.filter(isVideo)).map( - (file) => file.id - ); - if (selectedFiles.length === 0) { - handleDeleteTorrent(id, true); - throw new Error('no_files_for_selection'); - } - - await selectFiles(rdKey, id.substring(3), selectedFiles); - } catch (error) { - if ((error as Error).message === 'no_files_for_selection') { - if (!disableToast) - toast.error(`No files for selection, deleting (${id})`, { - duration: 5000, - }); - } else { - if (!disableToast) toast.error(`Error selecting files (${id})`); - } - throw error; - } - }; - return (
    @@ -609,22 +528,34 @@ function HashlistPage() { {(t.bytes / ONE_GIGABYTE).toFixed(1)} GB
    ` - : ''; - const speedRow = - info.status === 'downloading' - ? `` - : ''; - const seedersRow = - info.status === 'downloading' - ? `` - : ''; - - Swal.fire({ - icon: 'info', - html: ` -

    ${info.filename}

    -
    -
    ID:${info.id}
    Original filename: ${info.original_filename}
    {torrent.id} {(torrent.bytes / ONE_GIGABYTE).toFixed(1)} GB
    - - {t.mediaType === 'tv' ? '๐Ÿ“บ' : '๐ŸŽฅ'} - -  {t.title}{' '} - - {filterText} - {' '} - - Search again - -
    +
    + {!['Invalid Magnet', 'Magnet'].includes(t.filename) && ( + <> + + {t.mediaType === 'tv' ? '๐Ÿ“บ' : '๐ŸŽฅ'} + +  {t.title}{' '} + {filterText && ( + e.stopPropagation()} + > + {filterText} + + )} + e.stopPropagation()} + > + Search again + +
    + + )} {t.filename}
    {(t.bytes / ONE_GIGABYTE).toFixed(1)} GB {rd.isDownloading(t.hash) && rdCache![t.hash].id && (
    From 61aadca2d5b107dbf6c5ab59d837d281b97e6a0d Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Fri, 17 Nov 2023 23:29:54 +0100 Subject: [PATCH 186/272] Improve search accuracy by adding movie filter --- src/pages/api/search/title.ts | 46 +++++++++++++++++++++++++++-------- src/pages/search.tsx | 2 +- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/pages/api/search/title.ts b/src/pages/api/search/title.ts index c9fd0d1..576be19 100644 --- a/src/pages/api/search/title.ts +++ b/src/pages/api/search/title.ts @@ -3,12 +3,8 @@ import axios from 'axios'; import { NextApiHandler } from 'next'; const mdblistKey = process.env.MDBLIST_KEY; -const searchMdb = (keyword: string) => `https://mdblist.com/api/?apikey=${mdblistKey}&s=${keyword}`; +const searchMdb = (keyword: string, year?: number) => `https://mdblist.com/api/?apikey=${mdblistKey}&s=${keyword}&y=${year}`; const getMdbInfo = (imdbId: string) => `https://mdblist.com/api/?apikey=${mdblistKey}&i=${imdbId}`; -const tmdbSearchMovie = (keyword: string, tmdbKey: string) => - `https://api.themoviedb.org/3/search/movie?api_key=${tmdbKey}&query=${keyword}&page=1`; -const tmdbSearchTv = (keyword: string, tmdbKey: string) => - `https://api.themoviedb.org/3/search/tv?api_key=${tmdbKey}&query=${keyword}&page=1`; const db = new PlanetScaleCache(); export type MdbSearchResult = { @@ -23,6 +19,37 @@ export type MdbSearchResult = { season_names?: string[]; }; +function parseTitleAndYear(searchQuery: string): [string, number?] { + // Get the current year + 1 + const currentYearPlusOne = new Date().getFullYear() + 1; + + // Regex to find a year at the end of the search query + const yearRegex = / (19\d{2}|20\d{2}|2100)$/; + + // Check if the searchQuery is just a year + if (yearRegex.test(searchQuery) && searchQuery.trim().length === 4) { + return [searchQuery.trim(), undefined]; + } + + // Extract the year from the end of the search query + const match = searchQuery.match(yearRegex); + + let title: string = searchQuery; + let year: number | undefined; + + // If there's a year match and it's within the valid range, parse it + if (match && match[0]) { + const parsedYear = parseInt(match[0].trim(), 10); + if (parsedYear >= 1900 && parsedYear <= currentYearPlusOne) { + year = parsedYear; + // Remove the year from the title + title = searchQuery.replace(yearRegex, '').trim(); + } + } + + return [title, year]; + } + const handler: NextApiHandler = async (req, res) => { const { keyword } = req.query; @@ -35,16 +62,15 @@ const handler: NextApiHandler = async (req, res) => { } try { - const cleanKeyword = encodeURIComponent( - keyword.toString().replace(/[\W]+/g, ' ').split(' ').join(' ').trim().toLowerCase() - ); - const searchResults = await db.getSearchResults(cleanKeyword); + const cleanKeyword = keyword.toString().replace(/[\W]+/g, ' ').split(' ').filter(e => e).join(' ').trim().toLowerCase(); + const searchResults = await db.getSearchResults(encodeURIComponent(cleanKeyword)); if (searchResults) { res.status(200).json({ results: searchResults.filter((r) => r.imdbid) }); return; } - const searchResponse = await axios.get(searchMdb(cleanKeyword)); + const [searchTerm, year] = parseTitleAndYear(cleanKeyword); + const searchResponse = await axios.get(searchMdb(encodeURIComponent(searchTerm), year)); const results: MdbSearchResult[] = [...searchResponse.data.search].filter( (result: any) => result.imdbid ); diff --git a/src/pages/search.tsx b/src/pages/search.tsx index ccd7ab0..571fc09 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -79,7 +79,7 @@ function Search() { className="appearance-none bg-transparent border-none w-full text-white mr-3 py-1 px-2 leading-tight focus:outline-none" type="text" id="query" - placeholder="type a movie or show name" + placeholder="type a movie or show name, add year at the end to narrow down results" value={typedQuery} onChange={(e) => setTypedQuery(e.target.value)} /> From ec1dea4b26f1e3449e62192ed96eae9db572c1ed Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 18 Nov 2023 00:45:48 +0100 Subject: [PATCH 187/272] Add tip --- src/pages/api/search/title.ts | 28 ++++++++++++++++++---------- src/pages/library.tsx | 4 ++++ 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/pages/api/search/title.ts b/src/pages/api/search/title.ts index 576be19..86ca10a 100644 --- a/src/pages/api/search/title.ts +++ b/src/pages/api/search/title.ts @@ -3,7 +3,8 @@ import axios from 'axios'; import { NextApiHandler } from 'next'; const mdblistKey = process.env.MDBLIST_KEY; -const searchMdb = (keyword: string, year?: number) => `https://mdblist.com/api/?apikey=${mdblistKey}&s=${keyword}&y=${year}`; +const searchMdb = (keyword: string, year?: number) => + `https://mdblist.com/api/?apikey=${mdblistKey}&s=${keyword}&y=${year}`; const getMdbInfo = (imdbId: string) => `https://mdblist.com/api/?apikey=${mdblistKey}&i=${imdbId}`; const db = new PlanetScaleCache(); @@ -28,7 +29,7 @@ function parseTitleAndYear(searchQuery: string): [string, number?] { // Check if the searchQuery is just a year if (yearRegex.test(searchQuery) && searchQuery.trim().length === 4) { - return [searchQuery.trim(), undefined]; + return [searchQuery.trim(), undefined]; } // Extract the year from the end of the search query @@ -39,16 +40,16 @@ function parseTitleAndYear(searchQuery: string): [string, number?] { // If there's a year match and it's within the valid range, parse it if (match && match[0]) { - const parsedYear = parseInt(match[0].trim(), 10); - if (parsedYear >= 1900 && parsedYear <= currentYearPlusOne) { - year = parsedYear; - // Remove the year from the title - title = searchQuery.replace(yearRegex, '').trim(); - } + const parsedYear = parseInt(match[0].trim(), 10); + if (parsedYear >= 1900 && parsedYear <= currentYearPlusOne) { + year = parsedYear; + // Remove the year from the title + title = searchQuery.replace(yearRegex, '').trim(); + } } return [title, year]; - } +} const handler: NextApiHandler = async (req, res) => { const { keyword } = req.query; @@ -62,7 +63,14 @@ const handler: NextApiHandler = async (req, res) => { } try { - const cleanKeyword = keyword.toString().replace(/[\W]+/g, ' ').split(' ').filter(e => e).join(' ').trim().toLowerCase(); + const cleanKeyword = keyword + .toString() + .replace(/[\W]+/g, ' ') + .split(' ') + .filter((e) => e) + .join(' ') + .trim() + .toLowerCase(); const searchResults = await db.getSearchResults(encodeURIComponent(cleanKeyword)); if (searchResults) { res.status(200).json({ results: searchResults.filter((r) => r.imdbid) }); diff --git a/src/pages/library.tsx b/src/pages/library.tsx index ce6a25b..f6fc4dd 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -101,6 +101,10 @@ function TorrentsPage() { }); }, [currentPage, router]); + useEffect(() => { + toast('Have you tried clicking on a library item?', libraryToastOptions); + }, []); + // pagination query params useEffect(() => { const { page } = router.query; From cc7aba6be3a8909dea3cf5b9e7d001b4d7750267 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 19 Nov 2023 11:44:52 +0100 Subject: [PATCH 188/272] Cleanup only considers completed torrents --- src/pages/library.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/library.tsx b/src/pages/library.tsx index f6fc4dd..2398e03 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -614,7 +614,7 @@ function TorrentsPage() { !( await Swal.fire({ title: 'Cleanup', - text: 'This will combine torrents with identical hashes and select all streamable files. Make sure to backup before doing this. Do you want to proceed?', + text: 'This will combine completed torrents with identical hashes and select all streamable files. Make sure to backup before doing this. Do you want to proceed?', icon: 'warning', showCancelButton: true, confirmButtonColor: '#3085d6', @@ -627,6 +627,7 @@ function TorrentsPage() { const dupeHashes: Map = new Map(); userTorrentsList.reduce((acc: { [key: string]: UserTorrent }, cur: UserTorrent) => { + if (cur.progress !== 100) return acc; let key = cur.hash; if (acc[key]) { if (!dupeHashes.has(key)) { From fd2629f5bc43a1b8f219934b762340e189e814f5 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 19 Nov 2023 23:28:42 +0100 Subject: [PATCH 189/272] Add more options for deletion, remove auto delete --- src/pages/library.tsx | 164 +++++++++++++++++++++++++++++++----------- 1 file changed, 121 insertions(+), 43 deletions(-) diff --git a/src/pages/library.tsx b/src/pages/library.tsx index 2398e03..6b3efca 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -77,7 +77,7 @@ function TorrentsPage() { const [movieGrouping] = useState>({}); const [tvGroupingByEpisode] = useState>({}); const [tvGroupingByTitle] = useState>({}); - const [sameTitle, setSameTitle] = useState>([]); + const [sameTitle] = useState>([]); // stats const [totalBytes, setTotalBytes] = useState(0); @@ -101,10 +101,6 @@ function TorrentsPage() { }); }, [currentPage, router]); - useEffect(() => { - toast('Have you tried clicking on a library item?', libraryToastOptions); - }, []); - // pagination query params useEffect(() => { const { page } = router.query; @@ -240,7 +236,7 @@ function TorrentsPage() { if (rdLoading || adLoading) return; setGrouping(true); setTotalBytes(0); - setSameTitle([]); + sameTitle.length = 0; // clear array let tmpTotalBytes = 0; clearGroupings(movieGrouping); @@ -260,8 +256,7 @@ function TorrentsPage() { } } if (t.title in getGroupings(t.mediaType)) { - if (getGroupings(t.mediaType)[t.title] === 1) - setSameTitle((prev) => [...prev, t.title]); + if (getGroupings(t.mediaType)[t.title] === 1) sameTitle.push(t.title); getGroupings(t.mediaType)[t.title]++; } else { getGroupings(t.mediaType)[t.title] = 1; @@ -295,7 +290,7 @@ function TorrentsPage() { if (hasNoQueryParamsBut('page')) { setFilteredList(applyQuickSearch(userTorrentsList)); selectPlayableFiles(userTorrentsList); - deleteFailedTorrents(userTorrentsList); + // deleteFailedTorrents(userTorrentsList); // disabled because this is BAD! setFiltering(false); setHelpText( [ @@ -303,7 +298,9 @@ function TorrentsPage() { 'Tip: You can make a local backup of your library by using the "Local backup" button. This will generate a file containing your whole library that you can use to restore your library later.', 'Tip: You can restore a local backup by using the "Local restore" button. It will only restore the torrents that are not already in your library.', 'Tip: The quick search box will filter the list by filename and id. You can use multiple words or even regex to filter your library. This way, you can select multiple torrents and delete them at once, or share them as a hash list.', - ][Math.floor(Math.random() * 4)] + 'Have you tried clicking on a torrent? You can see the links, the progress, and the status of the torrent. You can also select the files you want to download.', + 'I don\'t know what to put here, so here\'s a random tip: "The average person walks the equivalent of five times around the world in a lifetime."', + ][Math.floor(Math.random() * 6)] ); return; } @@ -356,7 +353,7 @@ function TorrentsPage() { ); } selectPlayableFiles(tmpList); - deleteFailedTorrents(tmpList); + // deleteFailedTorrents(tmpList); setFiltering(false); // eslint-disable-next-line react-hooks/exhaustive-deps }, [router.query, userTorrentsList, rdLoading, adLoading, grouping, query, currentPage]); @@ -505,6 +502,22 @@ function TorrentsPage() { } } + async function handleDeleteFailedTorrents() { + const consent = await Swal.fire({ + title: 'Delete failed torrents', + text: 'This will delete torrents that have status of error, dead or virus. Are you sure?', + icon: 'warning', + showCancelButton: true, + confirmButtonColor: '#3085d6', + cancelButtonColor: '#d33', + confirmButtonText: 'Yes, proceed!', + }); + + if (!consent.isConfirmed) return; + + await deleteFailedTorrents(userTorrentsList); + } + function wrapDeleteFn(t: UserTorrent) { return async () => await handleDeleteTorrent(t.id); } @@ -515,26 +528,51 @@ function TorrentsPage() { }; async function dedupeBySize() { - if ( - !( - await Swal.fire({ - title: 'Delete by size', - text: 'This will delete duplicate torrents based on size (bigger size wins). Are you sure?', - icon: 'warning', - showCancelButton: true, - confirmButtonColor: '#3085d6', - cancelButtonColor: '#d33', - confirmButtonText: 'Yes, delete!', - }) - ).isConfirmed - ) - return; + // First confirmation dialog + const initialConfirmation = await Swal.fire({ + title: 'Delete by size', + text: 'This will delete duplicate torrents based on size. Are you sure?', + icon: 'warning', + showCancelButton: true, + confirmButtonColor: '#3085d6', + cancelButtonColor: '#d33', + confirmButtonText: 'Yes, proceed!', + }); + + if (!initialConfirmation.isConfirmed) return; + + // New dialog to select whether to delete bigger or smaller torrents + const deletePreference = await Swal.fire({ + title: 'Select which torrents to delete', + text: 'Choose which duplicate torrents to delete based on size:', + icon: 'question', + showCancelButton: true, + confirmButtonColor: '#3085d6', + cancelButtonColor: '#d33', + denyButtonColor: 'green', + confirmButtonText: 'Delete Smaller', + denyButtonText: 'Delete Bigger', + showDenyButton: true, + cancelButtonText: `Cancel`, + }); + + // If the user cancels the operation, return without doing anything + if (deletePreference.isDismissed) return; + + // Determine the preference for deletion + const deleteBigger = deletePreference.isDenied; + + // Get the key by status const getKey = getKeyByStatus(router.query.status as string); const dupes: UserTorrent[] = []; filteredList.reduce((acc: { [key: string]: UserTorrent }, cur: UserTorrent) => { let key = getKey(cur); if (acc[key]) { - if (acc[key].bytes < cur.bytes) { + // Check if current is bigger or smaller based on the user's choice + const isPreferred = deleteBigger + ? acc[key].bytes < cur.bytes + : acc[key].bytes > cur.bytes; + if (isPreferred) { dupes.push(acc[key]); acc[key] = cur; } else { @@ -545,8 +583,12 @@ function TorrentsPage() { } return acc; }, {}); + + // Map duplicates to delete function based on preference const toDelete = dupes.map(wrapDeleteFn); const [results, errors] = await runConcurrentFunctions(toDelete, 5, 500); + + // Handle toast notifications for errors and results if (errors.length) { toast.error(`Error deleting ${errors.length} torrents`, libraryToastOptions); } @@ -559,26 +601,51 @@ function TorrentsPage() { } async function dedupeByRecency() { - if ( - !( - await Swal.fire({ - title: 'Delete by date', - text: 'This will delete duplicate torrents based on recency (recently added wins). Are you sure?', - icon: 'warning', - showCancelButton: true, - confirmButtonColor: '#3085d6', - cancelButtonColor: '#d33', - confirmButtonText: 'Yes, delete!', - }) - ).isConfirmed - ) - return; + // First confirmation dialog + const initialConfirmation = await Swal.fire({ + title: 'Delete by date', + text: 'This will delete duplicate torrents based on recency. Are you sure?', + icon: 'warning', + showCancelButton: true, + confirmButtonColor: '#3085d6', + cancelButtonColor: '#d33', + confirmButtonText: 'Yes, proceed!', + }); + + if (!initialConfirmation.isConfirmed) return; + + // New dialog to select whether to delete newer or older torrents + const deletePreference = await Swal.fire({ + title: 'Select which torrents to delete', + text: 'Choose which duplicate torrents to delete:', + icon: 'question', + showCancelButton: true, + confirmButtonColor: '#3085d6', + cancelButtonColor: '#d33', + denyButtonColor: 'green', + confirmButtonText: 'Delete Older', + denyButtonText: 'Delete Newer', + showDenyButton: true, + cancelButtonText: `Cancel`, + }); + + // If the user cancels the operation, return without doing anything + if (deletePreference.isDismissed) return; + + // Determine the preference for deletion + const deleteOlder = deletePreference.isConfirmed; + + // Get the key by status const getKey = getKeyByStatus(router.query.status as string); const dupes: UserTorrent[] = []; filteredList.reduce((acc: { [key: string]: UserTorrent }, cur: UserTorrent) => { let key = getKey(cur); if (acc[key]) { - if (acc[key].added < cur.added) { + // Check if current is newer based on the user's choice + const isPreferred = deleteOlder + ? acc[key].added > cur.added + : acc[key].added < cur.added; + if (isPreferred) { dupes.push(acc[key]); acc[key] = cur; } else { @@ -589,8 +656,12 @@ function TorrentsPage() { } return acc; }, {}); + + // Map duplicates to delete function based on preference const toDelete = dupes.map(wrapDeleteFn); const [results, errors] = await runConcurrentFunctions(toDelete, 5, 500); + + // Handle toast notifications for errors and results if (errors.length) { toast.error(`Error deleting ${errors.length} torrents`, libraryToastOptions); } @@ -613,7 +684,7 @@ function TorrentsPage() { if ( !( await Swal.fire({ - title: 'Cleanup', + title: 'Merge same hash', text: 'This will combine completed torrents with identical hashes and select all streamable files. Make sure to backup before doing this. Do you want to proceed?', icon: 'warning', showCancelButton: true, @@ -1141,11 +1212,18 @@ function TorrentsPage() { Delete shown + +
    + {/* Removed the glasses icon since the row is now clickable */}
    - {rd.isDownloading(t.hash) && rdCache![t.hash].id && ( - - )} + {rdKey && + rd.isDownloading(t.hash) && + rdCache![t.hash].id && ( + + )} {rdKey && rd.notInLibrary(t.hash) && ( )} - {ad.isDownloading(t.hash) && adCache![t.hash].id && ( - - )} + {adKey && + ad.isDownloading(t.hash) && + adCache![t.hash].id && ( + + )} {adKey && rd.notInLibrary(t.hash) && ( )} - {ad.isDownloading(r.hash) && + {adKey && + ad.isDownloading(r.hash) && adCache![r.hash].id && ( )} - {ad.isDownloading(r.hash) && + {adKey && + ad.isDownloading(r.hash) && adCache![r.hash].id && ( @@ -1147,7 +1003,7 @@ function TorrentsPage() { {adKey && ( diff --git a/src/pages/movie/[imdbid].tsx b/src/pages/movie/[imdbid].tsx index bcde638..3b986c5 100644 --- a/src/pages/movie/[imdbid].tsx +++ b/src/pages/movie/[imdbid].tsx @@ -2,7 +2,11 @@ import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; import { useDownloadsCache } from '@/hooks/cache'; import useLocalStorage from '@/hooks/localStorage'; import { SearchApiResponse, SearchResult } from '@/services/mediasearch'; -import { handleAddAsMagnetInAd, handleAddAsMagnetInRd } from '@/utils/addMagnet'; +import { + handleAddAsMagnetInAd, + handleAddAsMagnetInRd, + handleSelectFilesInRd, +} from '@/utils/addMagnet'; import { handleDeleteAdTorrent, handleDeleteRdTorrent } from '@/utils/deleteTorrent'; import { instantCheckInAd, instantCheckInRd, wrapLoading } from '@/utils/instantChecks'; import { searchToastOptions } from '@/utils/toastOptions'; @@ -342,9 +346,21 @@ rounded-lg overflow-hidden handleAddAsMagnetInRd( rdKey, r.hash, - rdCacheAdder, - removeFromRdCache, - r.rdAvailable + (id: string) => { + rdCacheAdder.single( + `rd:${id}`, + r.hash, + r.rdAvailable + ? 'downloaded' + : 'downloading' + ); + handleSelectFilesInRd( + rdKey, + `rd:${id}`, + removeFromRdCache, + true + ); + } ); }} > diff --git a/src/pages/show/[imdbid]/[seasonNum].tsx b/src/pages/show/[imdbid]/[seasonNum].tsx index 1831ef2..1347db9 100644 --- a/src/pages/show/[imdbid]/[seasonNum].tsx +++ b/src/pages/show/[imdbid]/[seasonNum].tsx @@ -2,7 +2,11 @@ import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; import { useDownloadsCache } from '@/hooks/cache'; import useLocalStorage from '@/hooks/localStorage'; import { SearchApiResponse, SearchResult } from '@/services/mediasearch'; -import { handleAddAsMagnetInAd, handleAddAsMagnetInRd } from '@/utils/addMagnet'; +import { + handleAddAsMagnetInAd, + handleAddAsMagnetInRd, + handleSelectFilesInRd, +} from '@/utils/addMagnet'; import { handleDeleteAdTorrent, handleDeleteRdTorrent } from '@/utils/deleteTorrent'; import { instantCheckInAd, instantCheckInRd, wrapLoading } from '@/utils/instantChecks'; import { searchToastOptions } from '@/utils/toastOptions'; @@ -373,9 +377,21 @@ rounded-lg overflow-hidden handleAddAsMagnetInRd( rdKey, r.hash, - rdCacheAdder, - removeFromRdCache, - r.rdAvailable + (id: string) => { + rdCacheAdder.single( + `rd:${id}`, + r.hash, + r.rdAvailable + ? 'downloaded' + : 'downloading' + ); + handleSelectFilesInRd( + rdKey, + `rd:${id}`, + removeFromRdCache, + true + ); + } ) } > diff --git a/src/types/userTorrent.ts b/src/types/userTorrent.ts index 12bc0d1..80f89d1 100644 --- a/src/types/userTorrent.ts +++ b/src/types/userTorrent.ts @@ -16,3 +16,5 @@ export interface UserTorrent { seeders: number; speed: number; } + +export const uniqId = (torrent: UserTorrent): string => `${torrent.hash}|${torrent.links.join()}`; diff --git a/src/utils/addMagnet.ts b/src/utils/addMagnet.ts index cf847a1..8369bf8 100644 --- a/src/utils/addMagnet.ts +++ b/src/utils/addMagnet.ts @@ -10,16 +10,13 @@ import { magnetToastOptions } from './toastOptions'; export const handleAddAsMagnetInRd = async ( rdKey: string, hash: string, - rdCacheAddr: ReturnType[2], - removeFromRdCache: ReturnType[3], - instantDownload: boolean = false, + callback: (id: string) => void, disableToast: boolean = false ) => { try { const id = await addHashAsMagnet(rdKey, hash); if (!disableToast) toast('Successfully added as magnet!', magnetToastOptions); - rdCacheAddr.single(`rd:${id}`, hash, instantDownload ? 'downloaded' : 'downloading'); - handleSelectFilesInRd(rdKey, `rd:${id}`, removeFromRdCache, true); + callback(id); } catch (error) { console.error(error); if (!disableToast) toast.error('There was an error adding as magnet. Please try again.'); diff --git a/src/utils/deleteTorrent.ts b/src/utils/deleteTorrent.ts index 1a0f213..2c1fb6d 100644 --- a/src/utils/deleteTorrent.ts +++ b/src/utils/deleteTorrent.ts @@ -11,7 +11,7 @@ export const handleDeleteRdTorrent = async ( ) => { try { await deleteTorrent(rdKey, id.substring(3)); - if (!disableToast) toast(`Download canceled (${id})`, magnetToastOptions); + if (!disableToast) toast(`Torrent deleted (${id})`, magnetToastOptions); removeFromRdCache(id); } catch (error) { console.error(error); @@ -27,7 +27,7 @@ export const handleDeleteAdTorrent = async ( ) => { try { await deleteTorrent(adKey, id.substring(3)); - if (!disableToast) toast(`Download canceled (${id})`, magnetToastOptions); + if (!disableToast) toast(`Torrent deleted (${id})`, magnetToastOptions); removeFromAdCache(id); } catch (error) { console.error(error); diff --git a/src/utils/fetchTorrents.ts b/src/utils/fetchTorrents.ts new file mode 100644 index 0000000..97280fe --- /dev/null +++ b/src/utils/fetchTorrents.ts @@ -0,0 +1,92 @@ +import { getMagnetStatus } from '@/services/allDebrid'; +import { getUserTorrentsList } from '@/services/realDebrid'; +import { UserTorrent } from '@/types/userTorrent'; +import { filenameParse } from '@ctrl/video-filename-parser'; +import toast from 'react-hot-toast'; +import { getMediaId } from './mediaId'; +import { getTypeByName, getTypeByNameAndFileCount } from './mediaType'; +import getReleaseTags from './score'; +import { genericToastOptions } from './toastOptions'; + +const ONE_GIGABYTE = 1024 * 1024 * 1024; + +export const fetchRealDebrid = async ( + rdKey: string, + callback: (torrents: UserTorrent[]) => void +) => { + try { + for await (let pageOfTorrents of getUserTorrentsList(rdKey)) { + const torrents = pageOfTorrents.map((torrent) => { + const mediaType = getTypeByNameAndFileCount(torrent.filename, torrent.links.length); + const info = + mediaType === 'movie' + ? filenameParse(torrent.filename) + : filenameParse(torrent.filename, true); + return { + score: getReleaseTags(torrent.filename, torrent.bytes / ONE_GIGABYTE).score, + info, + mediaType, + title: getMediaId(info, mediaType, false) || torrent.filename, + ...torrent, + id: `rd:${torrent.id}`, + links: torrent.links.map((l) => l.replaceAll('/', '/')), + seeders: torrent.seeders || 0, + speed: torrent.speed || 0, + }; + }) as UserTorrent[]; // Cast the result to UserTorrent[] to ensure type correctness + callback(torrents); + } + } catch (error) { + callback([]); + toast.error('Error fetching Real-Debrid torrents list', genericToastOptions); + console.error(error); + } +}; + +export const fetchAllDebrid = async ( + adKey: string, + callback: (torrents: UserTorrent[]) => void +) => { + try { + const torrents = (await getMagnetStatus(adKey)).data.magnets.map((torrent) => { + const mediaType = getTypeByName(torrent.filename); + const info = + mediaType === 'movie' + ? filenameParse(torrent.filename) + : filenameParse(torrent.filename, true); + + const date = new Date(torrent.uploadDate * 1000); + // Format date string + const formattedDate = date.toISOString(); + + let status = 'error'; + if (torrent.statusCode >= 0 && torrent.statusCode <= 3) { + status = 'downloading'; + } else if (torrent.statusCode === 4) { + status = 'downloaded'; + } + + return { + score: getReleaseTags(torrent.filename, torrent.size / ONE_GIGABYTE).score, + info, + mediaType, + title: getMediaId(info, mediaType, false) || torrent.filename, + id: `ad:${torrent.id}`, + filename: torrent.filename, + hash: torrent.hash, + bytes: torrent.size, + progress: + torrent.statusCode === 4 ? 100 : (torrent.downloaded / torrent.size) * 100, + status, + added: formattedDate, + speed: torrent.downloadSpeed || 0, + links: torrent.links.map((l) => l.link), + }; + }) as UserTorrent[]; + callback(torrents); + } catch (error) { + callback([]); + toast.error('Error fetching AllDebrid torrents list', genericToastOptions); + console.error(error); + } +}; diff --git a/src/utils/localRestore.ts b/src/utils/localRestore.ts new file mode 100644 index 0000000..bb6baec --- /dev/null +++ b/src/utils/localRestore.ts @@ -0,0 +1,23 @@ +export async function localRestore(callback: (files: any[]) => void): Promise { + const filePicker = document.createElement('input'); + filePicker.type = 'file'; + filePicker.accept = '.json'; + let file: File | null = null; + + filePicker.onchange = (e: Event) => { + const target = e.target as HTMLInputElement; + file = target.files ? target.files[0] : new File([], ''); + }; + filePicker.click(); + + filePicker.addEventListener('change', async () => { + if (!file) return; + + const reader: FileReader = new FileReader(); + reader.readAsText(file, 'UTF-8'); + reader.onload = async function (evt: ProgressEvent) { + const files: any[] = JSON.parse(evt.target?.result as string); + callback(files); + }; + }); +} diff --git a/src/utils/quickSearch.ts b/src/utils/quickSearch.ts new file mode 100644 index 0000000..93c9b50 --- /dev/null +++ b/src/utils/quickSearch.ts @@ -0,0 +1,18 @@ +import { UserTorrent } from '@/types/userTorrent'; + +// given a list, filter by query and paginate +export function applyQuickSearch(query: string, unfiltered: UserTorrent[]) { + let regexFilters: RegExp[] = []; + for (const q of query.split(' ')) { + try { + regexFilters.push(new RegExp(q, 'i')); + } catch (error) { + continue; + } + } + return query + ? unfiltered.filter((t) => + regexFilters.every((regex) => regex.test(t.filename) || regex.test(t.id)) + ) + : unfiltered; +} From 3f8e2d78f3a1524aad9effe0ab7b51b7980d729b Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 16 Dec 2023 00:56:40 +0100 Subject: [PATCH 216/272] Refactor hashlist functions --- src/pages/library.tsx | 62 +++++------------------------------------- src/utils/addMagnet.ts | 12 +++++++- src/utils/hashList.ts | 39 ++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 56 deletions(-) create mode 100644 src/utils/hashList.ts diff --git a/src/pages/library.tsx b/src/pages/library.tsx index 2fbeaec..2bce1ba 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -1,25 +1,24 @@ import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; import { useDownloadsCache } from '@/hooks/cache'; -import { restartMagnet } from '@/services/allDebrid'; -import { createShortUrl } from '@/services/hashlists'; import { getTorrentInfo } from '@/services/realDebrid'; import { UserTorrent, uniqId } from '@/types/userTorrent'; import { handleAddAsMagnetInAd, handleAddAsMagnetInRd, handleReinsertTorrent, + handleRestartTorrent, handleSelectFilesInRd, } from '@/utils/addMagnet'; import { AsyncFunction, runConcurrentFunctions } from '@/utils/batch'; import { handleDeleteAdTorrent, handleDeleteRdTorrent } from '@/utils/deleteTorrent'; import { fetchAllDebrid, fetchRealDebrid } from '@/utils/fetchTorrents'; +import { generateHashList, handleShare } from '@/utils/hashList'; import { localRestore } from '@/utils/localRestore'; import { applyQuickSearch } from '@/utils/quickSearch'; import { shortenNumber } from '@/utils/speed'; import { libraryToastOptions } from '@/utils/toastOptions'; import { withAuth } from '@/utils/withAuth'; import { saveAs } from 'file-saver'; -import lzString from 'lz-string'; import Head from 'next/head'; import Link from 'next/link'; import { useRouter } from 'next/router'; @@ -498,7 +497,7 @@ function TorrentsPage() { return async () => { if (rdKey && t.id.startsWith('rd:')) await handleReinsertTorrent(rdKey, t.id, userTorrentsList, removeFromRdCache); - if (adKey && t.id.startsWith('ad:')) await handleRestartTorrent(t.id); + if (adKey && t.id.startsWith('ad:')) await handleRestartTorrent(adKey, t.id); }; } @@ -593,29 +592,6 @@ function TorrentsPage() { ); } - async function generateHashList() { - toast('The hash list will return a 404 for the first 1-2 minutes', { - ...libraryToastOptions, - duration: 60000, - }); - try { - const hashList = filteredList.map((t) => ({ - filename: t.filename, - hash: t.hash, - bytes: t.bytes, - })); - const shortUrl = await createShortUrl( - `${window.location.protocol}//${ - window.location.host - }/hashlist#${lzString.compressToEncodedURIComponent(JSON.stringify(hashList))}` - ); - window.open(shortUrl); - } catch (error) { - toast.error(`Error generating hash list, try again later`, libraryToastOptions); - console.error(error); - } - } - async function localBackup() { toast('Generating a local backup file', libraryToastOptions); try { @@ -633,36 +609,12 @@ function TorrentsPage() { } } - async function handleShare(t: UserTorrent) { - const hashList = [ - { - filename: t.filename, - hash: t.hash, - bytes: t.bytes, - }, - ]; - router.push( - `/hashlist#${lzString.compressToEncodedURIComponent(JSON.stringify(hashList))}` - ); - } - async function handleCopyMagnet(hash: string) { const magnet = `magnet:?xt=urn:btih:${hash}`; await navigator.clipboard.writeText(magnet); toast.success('Copied magnet url to clipboard', libraryToastOptions); } - const handleRestartTorrent = async (id: string) => { - try { - if (!adKey) throw new Error('no_ad_key'); - await restartMagnet(adKey, id.substring(3)); - toast.success(`Torrent restarted (${id})`, libraryToastOptions); - } catch (error) { - toast.error(`Error restarting torrent (${id})`, libraryToastOptions); - console.error(error); - } - }; - const hasNoQueryParamsBut = (...params: string[]) => Object.keys(router.query).filter((p) => !params.includes(p)).length === 0; @@ -978,7 +930,7 @@ function TorrentsPage() { className={`mr-2 mb-2 bg-indigo-700 hover:bg-indigo-600 text-white font-bold py-1 px-1 rounded ${ filteredList.length === 0 ? 'opacity-60 cursor-not-allowed' : '' }`} - onClick={generateHashList} + onClick={() => generateHashList(filteredList)} disabled={filteredList.length === 0} > Share hash list @@ -1183,9 +1135,9 @@ function TorrentsPage() { - Page {currentPage} + + {currentPage}/{Math.ceil(sortedData().length / ITEMS_PER_PAGE)} + + - Only movies + ๐ŸŽฅ - Only TV - - - No seeds + ๐Ÿ“บ - - Same title - - - + {sameTitle.length > 0 && ( + <> + + ๐Ÿ‘€ Same title + + + + + + + + + )} - + {slowCount > 0 && ( + + ๐Ÿ‘€ No seeds + + )} - + {inProgressCount > 0 && ( + + ๐Ÿ‘€ In progress + + )} + + {failedCount > 0 && ( + + ๐Ÿ‘€ Failed + + )} {rdKey && ( )} {adKey && ( @@ -957,15 +927,9 @@ function TorrentsPage() { className={`mr-2 mb-2 bg-indigo-700 hover:bg-indigo-600 text-white font-bold py-1 px-1 rounded`} onClick={() => wrapLocalRestoreFn('ad')} > - Local restore to AD + ๐Ÿช› Restore to AD )} - - Reset - {helpText !== '' &&
    {helpText}
    }
    @@ -1161,6 +1125,12 @@ function TorrentsPage() { removeFromAdCache ); } + setUserTorrentsList((prevList) => + prevList.filter( + (prevTor) => + prevTor.id !== torrent.id + ) + ); }} > diff --git a/src/types/userTorrent.ts b/src/types/userTorrent.ts index 80f89d1..1262cb0 100644 --- a/src/types/userTorrent.ts +++ b/src/types/userTorrent.ts @@ -18,3 +18,8 @@ export interface UserTorrent { } export const uniqId = (torrent: UserTorrent): string => `${torrent.hash}|${torrent.links.join()}`; + +export const getKeyByStatus = (status: string) => { + if (status === 'sametitle') return (torrent: UserTorrent) => torrent.info.title; + return (torrent: UserTorrent) => torrent.hash; +}; diff --git a/src/utils/deleteList.ts b/src/utils/deleteList.ts new file mode 100644 index 0000000..231235d --- /dev/null +++ b/src/utils/deleteList.ts @@ -0,0 +1,21 @@ +import { UserTorrent } from '@/types/userTorrent'; +import toast from 'react-hot-toast'; +import { AsyncFunction, runConcurrentFunctions } from './batch'; +import { magnetToastOptions } from './toastOptions'; + +export async function deleteFilteredTorrents( + torrentList: UserTorrent[], + wrapDeleteFn: (t: UserTorrent) => AsyncFunction +) { + const toDelete = torrentList.map(wrapDeleteFn); + const [results, errors] = await runConcurrentFunctions(toDelete, 5, 500); + if (errors.length) { + toast.error(`Error deleting ${errors.length} torrents`, magnetToastOptions); + } + if (results.length) { + toast.success(`Deleted ${results.length} torrents`, magnetToastOptions); + } + if (!errors.length && !results.length) { + toast('No torrents to delete', magnetToastOptions); + } +} From 9fef67398dd90669a6050b34e296898958883868 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 16 Dec 2023 02:52:00 +0100 Subject: [PATCH 218/272] Add size emoji --- src/pages/library.tsx | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/pages/library.tsx b/src/pages/library.tsx index a8e125e..2ec1bc2 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -760,9 +760,22 @@ function TorrentsPage() {

    - My Library ({userTorrentsList.length} downloads in total; size:{' '} - {(totalBytes / ONE_GIGABYTE / 1024).toFixed(1)} TB) + My Library ๐Ÿ“š {userTorrentsList.length} torrents{' '} + {totalBytes / ONE_GIGABYTE / 1024 > 10000 + ? '๐Ÿ˜ฑ' // Fear for more than 10 PB + : totalBytes / ONE_GIGABYTE / 1024 > 1000 + ? '๐Ÿ˜จ' // Fearful surprise for more than 1 PB + : totalBytes / ONE_GIGABYTE / 1024 > 100 + ? '๐Ÿ˜ฎ' // Surprise for more than 100 TB + : totalBytes / ONE_GIGABYTE / 1024 > 10 + ? '๐Ÿ™‚' // Smile for more than 10 TB + : totalBytes / ONE_GIGABYTE / 1024 > 1 + ? '๐Ÿ˜' // Neutral for more than 1 TB + : '๐Ÿ™'}{' '} + {/* Sad for 1 TB or less */} + {(totalBytes / ONE_GIGABYTE / 1024).toFixed(1)} TB

    + Date: Sat, 16 Dec 2023 04:37:44 +0100 Subject: [PATCH 219/272] Support adding magnets --- src/hooks/cache.ts | 6 +- src/pages/hashlist.tsx | 43 ++- src/pages/library.tsx | 345 ++++++++++-------------- src/pages/movie/[imdbid].tsx | 25 +- src/pages/show/[imdbid]/[seasonNum].tsx | 25 +- src/services/realDebrid.ts | 7 +- src/utils/addMagnet.ts | 15 +- src/utils/fetchTorrents.ts | 5 +- src/utils/showInfo.ts | 119 ++++++++ src/utils/slow.ts | 20 ++ 10 files changed, 350 insertions(+), 260 deletions(-) create mode 100644 src/utils/showInfo.ts create mode 100644 src/utils/slow.ts diff --git a/src/hooks/cache.ts b/src/hooks/cache.ts index 078223f..b82e38c 100644 --- a/src/hooks/cache.ts +++ b/src/hooks/cache.ts @@ -6,13 +6,13 @@ export const useDownloadsCache = (providerKey: string) => { const [cache, setCache] = useLocalStorage(`${providerKey}:downloads`, {}); - const addOneToCache = (id: string, hash: string, status?: string) => { + const addOneToCache = (id: string, hash: string, status: boolean = true) => { if (cache && hash in cache === true) { setCache((prev) => ({ ...prev, [hash]: { ...prev[hash], - status: status === 'downloaded' ? 'downloaded' : 'downloading', + status: status ? 'downloaded' : 'downloading', }, })); } else { @@ -22,7 +22,7 @@ export const useDownloadsCache = (providerKey: string) => { id, hash, progress: 0, - status: status === 'downloaded' ? 'downloaded' : 'downloading', + status: status ? 'downloaded' : 'downloading', }, })); } diff --git a/src/pages/hashlist.tsx b/src/pages/hashlist.tsx index 933b12a..2022f9c 100644 --- a/src/pages/hashlist.tsx +++ b/src/pages/hashlist.tsx @@ -312,14 +312,27 @@ function HashlistPage() { function wrapDownloadFilesInRdFn(t: UserTorrent) { return async () => - await handleAddAsMagnetInRd(rdKey!, t.hash, (id: string) => { - rdCacheAdder.single(`rd:${id}`, t.hash, 'downloaded'); - handleSelectFilesInRd(rdKey!, `rd:${id}`, removeFromRdCache, true); - }); + await handleAddAsMagnetInRd( + rdKey!, + t.hash, + async (id: string) => { + await handleSelectFilesInRd(rdKey!, `rd:${id}`, removeFromRdCache, true); + rdCacheAdder.single(`rd:${id}`, t.hash); + }, + true + ); } function wrapDownloadFilesInAdFn(t: UserTorrent) { - return async () => await handleAddAsMagnetInAd(adKey!, t.hash, adCacheAdder, true); + return async () => + await handleAddAsMagnetInAd( + adKey!, + t.hash, + async (id: string) => { + adCacheAdder.single(`ad:${id}`, t.hash); + }, + true + ); } async function downloadNonDupeTorrentsInRd() { @@ -560,18 +573,17 @@ function HashlistPage() { handleAddAsMagnetInRd( rdKey, t.hash, - (id: string) => { - rdCacheAdder.single( - `rd:${id}`, - t.hash, - 'downloading' - ); - handleSelectFilesInRd( + async (id: string) => { + await handleSelectFilesInRd( rdKey, `rd:${id}`, removeFromRdCache, true ); + rdCacheAdder.single( + `rd:${id}`, + t.hash + ); } ); }} @@ -606,7 +618,12 @@ function HashlistPage() { handleAddAsMagnetInAd( adKey, t.hash, - adCacheAdder + async (id: string) => { + adCacheAdder.single( + `ad:${id}`, + t.hash + ); + } ); }} > diff --git a/src/pages/library.tsx b/src/pages/library.tsx index 2ec1bc2..bd62aaa 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -1,6 +1,5 @@ import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; import { useDownloadsCache } from '@/hooks/cache'; -import { getTorrentInfo } from '@/services/realDebrid'; import { UserTorrent, getKeyByStatus, uniqId } from '@/types/userTorrent'; import { handleAddAsMagnetInAd, @@ -16,6 +15,8 @@ import { fetchAllDebrid, fetchRealDebrid } from '@/utils/fetchTorrents'; import { generateHashList, handleShare } from '@/utils/hashList'; import { localRestore } from '@/utils/localRestore'; import { applyQuickSearch } from '@/utils/quickSearch'; +import { showInfo } from '@/utils/showInfo'; +import { isFailed, isInProgress, isSlowOrNoLinks } from '@/utils/slow'; import { shortenNumber } from '@/utils/speed'; import { libraryToastOptions } from '@/utils/toastOptions'; import { withAuth } from '@/utils/withAuth'; @@ -102,34 +103,44 @@ function TorrentsPage() { // eslint-disable-next-line react-hooks/exhaustive-deps }, [router]); - // fetch list from api - useEffect(() => { - if (!rdKey || userTorrentsList.length > 0) { + const fillTableWithRDLibrary = async function (customLimit?: number) { + if (!rdKey) { setRdLoading(false); return; } - fetchRealDebrid(rdKey, (torrents: UserTorrent[]) => { - setUserTorrentsList((prev) => [...prev, ...torrents]); - rdCacheAdder.many( - torrents.map((t) => ({ - id: t.id, - hash: t.hash, - status: t.status === 'downloaded' ? 'downloaded' : 'downloading', - progress: t.progress, - })) - ); - setRdLoading(false); - }); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [rdKey]); + fetchRealDebrid( + rdKey, + (torrents: UserTorrent[]) => { + setUserTorrentsList((prev) => { + const existingIds = new Set(prev.map((torrent) => torrent.id)); + const newTorrents = torrents.filter((torrent) => !existingIds.has(torrent.id)); + return [...prev, ...newTorrents]; + }); + rdCacheAdder.many( + torrents.map((t) => ({ + id: t.id, + hash: t.hash, + status: t.status === 'downloaded' ? 'downloaded' : 'downloading', + progress: t.progress, + })) + ); + setRdLoading(false); + }, + customLimit + ); + }; - useEffect(() => { - if (!adKey || userTorrentsList.length > 0) { + const fillTableWithADLibrary = async function () { + if (!adKey) { setAdLoading(false); return; } fetchAllDebrid(adKey, (torrents: UserTorrent[]) => { - setUserTorrentsList((prev) => [...prev, ...torrents]); + setUserTorrentsList((prev) => { + const existingIds = new Set(prev.map((torrent) => torrent.id)); + const newTorrents = torrents.filter((torrent) => !existingIds.has(torrent.id)); + return [...prev, ...newTorrents]; + }); adCacheAdder.many( torrents.map((t) => ({ id: t.id, @@ -140,6 +151,16 @@ function TorrentsPage() { ); setAdLoading(false); }); + }; + + // fetch list from api + useEffect(() => { + fillTableWithRDLibrary(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [rdKey]); + + useEffect(() => { + fillTableWithADLibrary(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [adKey]); @@ -219,8 +240,8 @@ function TorrentsPage() { const { filter: titleFilter, mediaType, status } = router.query; setSlowCount(userTorrentsList.filter(isSlowOrNoLinks).length); - setInProgressCount(userTorrentsList.filter((t) => t.progress !== 100).length); - setFailedCount(userTorrentsList.filter((t) => /error|dead|virus/.test(t.status)).length); + setInProgressCount(userTorrentsList.filter(isInProgress).length); + setFailedCount(userTorrentsList.filter(isFailed).length); let tmpList = userTorrentsList; if (status === 'slow') { @@ -237,27 +258,13 @@ function TorrentsPage() { 'Torrents shown have the same title parsed from the torrent name. Use "By size" to retain the larger torrent for each title, or "By date" to retain the more recent torrent. Take note: the parser might not work well for multi-season tv show torrents.' ); } - if (status === 'non4k') { - tmpList = tmpList.filter( - (t) => !/\b2160|\b4k|\buhd|\bdovi|\bdolby.?vision|\bdv|\bremux/i.test(t.filename) - ); - setFilteredList(applyQuickSearch(query, tmpList)); - setHelpText('Torrents shown are not high quality based on the torrent name.'); - } - if (status === '4k') { - tmpList = tmpList.filter((t) => - /\b2160|\b4k|\buhd|\bdovi|\bdolby.?vision|\bdv|\bremux/i.test(t.filename) - ); - setFilteredList(applyQuickSearch(query, tmpList)); - setHelpText('Torrents shown are high quality based on the torrent name.'); - } if (status === 'inprogress') { - tmpList = tmpList.filter((t) => t.progress !== 100); + tmpList = tmpList.filter(isInProgress); setFilteredList(applyQuickSearch(query, tmpList)); setHelpText('Torrents that are still downloading'); } if (status === 'failed') { - tmpList = tmpList.filter((t) => /error|dead|virus/.test(t.status)); + tmpList = tmpList.filter(isFailed); setFilteredList(applyQuickSearch(query, tmpList)); setHelpText('Torrents that have a failure status'); } @@ -275,7 +282,6 @@ function TorrentsPage() { ); } selectPlayableFiles(tmpList); - // deleteFailedTorrents(tmpList); setFiltering(false); // eslint-disable-next-line react-hooks/exhaustive-deps }, [router.query, userTorrentsList, rdLoading, adLoading, grouping, query, currentPage]); @@ -513,13 +519,16 @@ function TorrentsPage() { } return acc; }, {}); - const dupeHashesCount = dupeHashes.size; + let dupeHashesCount = 0; + dupeHashes.forEach((hashes) => { + dupeHashesCount += hashes.length; + }); if ( dupeHashesCount > 0 && !( await Swal.fire({ title: 'Merge same hash', - text: `This will combine the ${dupeHashesCount} completed torrents with identical hashes and select all streamable files. Make sure to backup before doing this. Do you want to proceed?`, + text: `This will combine the ${dupeHashesCount} completed torrents with identical hashes into ${dupeHashes.size} and select all streamable files. Make sure to backup before doing this. Do you want to proceed?`, icon: 'warning', showCancelButton: true, confirmButtonColor: '#3085d6', @@ -551,17 +560,6 @@ function TorrentsPage() { } } - function isSlowOrNoLinks(t: UserTorrent) { - const oldTorrentAge = 3600000; // 1 hour in milliseconds - const addedDate = new Date(t.added); - const now = new Date(); - const ageInMillis = now.getTime() - addedDate.getTime(); - return ( - (t.links.length === 0 && t.progress === 100) || - (t.progress !== 100 && ageInMillis >= oldTorrentAge && t.seeders === 0) - ); - } - async function localBackup() { toast('Generating a local backup file', libraryToastOptions); try { @@ -579,142 +577,29 @@ function TorrentsPage() { } } - async function handleCopyMagnet(hash: string) { - const magnet = `magnet:?xt=urn:btih:${hash}`; - await navigator.clipboard.writeText(magnet); - toast.success('Copied magnet url to clipboard', libraryToastOptions); - } - - const hasNoQueryParamsBut = (...params: string[]) => - Object.keys(router.query).filter((p) => !params.includes(p)).length === 0; - - const showInfo = async (torrent: UserTorrent) => { - const info = await getTorrentInfo(rdKey!, torrent.id.substring(3)); - - let warning = ''; - const isIntact = info.files.filter((f) => f.selected).length === info.links.length; - // Check if there is a mismatch between files and links - if (info.progress === 100 && !isIntact) { - warning = `

    Warning: Some files have expired

    `; - } - - // Initialize a separate index for the links array - let linkIndex = 0; - - const filesList = info.files - .map((file) => { - let size = file.bytes < 1024 ** 3 ? file.bytes / 1024 ** 2 : file.bytes / 1024 ** 3; - let unit = file.bytes < 1024 ** 3 ? 'MB' : 'GB'; - - let downloadForm = ''; - - // Only create a download form for selected files - if (file.selected && isIntact) { - downloadForm = ` -
    - - -
    - `; - } - - // Return the list item for the file, with or without the download form - return ` -
  • - ${file.path} - ${size.toFixed(2)} ${unit} - ${downloadForm} -
  • - `; - }) - .join(''); - - // Handle the display of progress, speed, and seeders as table rows - const progressRow = - info.status === 'downloading' - ? `
    Progress:${info.progress.toFixed( - 2 - )}%
    Speed:${( - info.speed / 1024 - ).toFixed(2)} KB/s
    Seeders:${info.seeders}
    - - - - - - - - - - - - - - - - - - - - - - ${progressRow} - ${speedRow} - ${seedersRow} - - - - - -
    ID:${info.id}
    Original filename:${info.original_filename}
    Size:${(info.bytes / 1024 ** 3).toFixed(2)} GB
    Original size:${(info.original_bytes / 1024 ** 3).toFixed(2)} GB -
    Status:${info.status}
    Added:${new Date(info.added).toLocaleString()}
    -
    - ${warning} -

    Files:

    -
    -
      - ${filesList} -
    -
    - - `, - showConfirmButton: false, - customClass: { - popup: 'format-class', - }, - width: '800px', - }); - }; - - const wrapLocalRestoreFn = async (debridService: string) => { + async function wrapLocalRestoreFn(debridService: string) { return await localRestore((files: any[]) => { const utils = debridService === 'rd' ? rdUtils : adUtils; const addMagnet = (hash: string) => { if (rdKey && debridService === 'rd') - return handleAddAsMagnetInRd(rdKey, hash, (id: string) => { - rdCacheAdder.single(`rd:${id}`, hash, 'downloading'); - handleSelectFilesInRd(rdKey, `rd:${id}`, removeFromRdCache, true); - }); + return handleAddAsMagnetInRd( + rdKey, + hash, + async (id: string) => { + await handleSelectFilesInRd(rdKey, `rd:${id}`, removeFromRdCache, true); + rdCacheAdder.single(`rd:${id}`, hash); + }, + true + ); if (adKey && debridService === 'ad') - return handleAddAsMagnetInAd(adKey, hash, adCacheAdder); + return handleAddAsMagnetInAd( + adKey, + hash, + async (id: string) => { + adCacheAdder.single(`ad:${id}`, hash); + }, + true + ); }; function wrapAddMagnetFn(hash: string) { @@ -750,7 +635,40 @@ function TorrentsPage() { } ); }); - }; + } + + async function handleAddMagnet(debridService: string) { + const { value: hash } = await Swal.fire({ + title: `Add magnet to your ${debridService.toUpperCase()} library`, + input: 'text', + inputLabel: 'Paste your Magnet link here', + inputValue: '', + showCancelButton: true, + inputValidator: (value) => !value && 'You need to put something!', + }); + if (rdKey && hash && debridService === 'rd') { + handleAddAsMagnetInRd(rdKey, hash, async (id: string) => { + await handleSelectFilesInRd(rdKey, `rd:${id}`, removeFromRdCache, true); + await fillTableWithRDLibrary(10); + rdCacheAdder.single(`rd:${id}`, hash, false); + }); + } + if (adKey && hash && debridService === 'ad') { + handleAddAsMagnetInAd(adKey, hash, async (id: string) => { + await fillTableWithADLibrary(); + adCacheAdder.single(`ad:${id}`, hash, false); + }); + } + } + + async function handleCopyMagnet(hash: string) { + const magnet = `magnet:?xt=urn:btih:${hash}`; + await navigator.clipboard.writeText(magnet); + toast.success('Copied magnet url to clipboard', libraryToastOptions); + } + + const hasNoQueryParamsBut = (...params: string[]) => + Object.keys(router.query).filter((p) => !params.includes(p)).length === 0; return (
    @@ -796,6 +714,7 @@ function TorrentsPage() { }} />
    + {/* Start of Main Menu */}
    {sameTitle.length > 0 && ( <> @@ -909,6 +819,24 @@ function TorrentsPage() { ๐Ÿ—‘๏ธ Delete + {/* Add torrent */} + {rdKey && ( + + )} + {adKey && ( + + )} + )} {adKey && ( @@ -940,11 +868,22 @@ function TorrentsPage() { className={`mr-2 mb-2 bg-indigo-700 hover:bg-indigo-600 text-white font-bold py-1 px-1 rounded`} onClick={() => wrapLocalRestoreFn('ad')} > - ๐Ÿช› Restore to AD + ๐Ÿช› AD Restore )} + +
    - {helpText !== '' &&
    {helpText}
    } + {/* End of Main Menu */} + {helpText !== '' &&
    ๐Ÿ’ก {helpText}
    }
    {rdLoading || adLoading || grouping || filtering ? (
    @@ -978,14 +917,6 @@ function TorrentsPage() { {sortBy.column === 'bytes' && (sortBy.direction === 'asc' ? 'โ†‘' : 'โ†“')} - {/* handleSort('score')} - > - QScore{' '} - {sortBy.column === 'score' && - (sortBy.direction === 'asc' ? 'โ†‘' : 'โ†“')} - */} handleSort('progress')} @@ -1024,8 +955,8 @@ function TorrentsPage() { key={i} className="border-t-2 hover:bg-purple-900" onClick={() => - torrent.id.startsWith('rd:') - ? showInfo(torrent) + rdKey && torrent.id.startsWith('rd:') + ? showInfo(rdKey, torrent) : null } // Add the onClick event here title="Click for more info" diff --git a/src/pages/movie/[imdbid].tsx b/src/pages/movie/[imdbid].tsx index 3b986c5..53aebdb 100644 --- a/src/pages/movie/[imdbid].tsx +++ b/src/pages/movie/[imdbid].tsx @@ -346,20 +346,18 @@ rounded-lg overflow-hidden handleAddAsMagnetInRd( rdKey, r.hash, - (id: string) => { - rdCacheAdder.single( - `rd:${id}`, - r.hash, - r.rdAvailable - ? 'downloaded' - : 'downloading' - ); - handleSelectFilesInRd( + async (id: string) => { + await handleSelectFilesInRd( rdKey, `rd:${id}`, removeFromRdCache, true ); + rdCacheAdder.single( + `rd:${id}`, + r.hash, + r.rdAvailable + ); } ); }} @@ -414,8 +412,13 @@ rounded-lg overflow-hidden handleAddAsMagnetInAd( adKey, r.hash, - adCacheAdder, - r.adAvailable + async (id: string) => { + adCacheAdder.single( + `ad:${id}`, + r.hash, + r.adAvailable + ); + } ); }} > diff --git a/src/pages/show/[imdbid]/[seasonNum].tsx b/src/pages/show/[imdbid]/[seasonNum].tsx index 1347db9..169816f 100644 --- a/src/pages/show/[imdbid]/[seasonNum].tsx +++ b/src/pages/show/[imdbid]/[seasonNum].tsx @@ -377,20 +377,18 @@ rounded-lg overflow-hidden handleAddAsMagnetInRd( rdKey, r.hash, - (id: string) => { - rdCacheAdder.single( - `rd:${id}`, - r.hash, - r.rdAvailable - ? 'downloaded' - : 'downloading' - ); - handleSelectFilesInRd( + async (id: string) => { + await handleSelectFilesInRd( rdKey, `rd:${id}`, removeFromRdCache, true ); + rdCacheAdder.single( + `rd:${id}`, + r.hash, + r.rdAvailable + ); } ) } @@ -430,8 +428,13 @@ rounded-lg overflow-hidden handleAddAsMagnetInAd( adKey, r.hash, - adCacheAdder, - r.adAvailable + async (id: string) => { + adCacheAdder.single( + `ad:${id}`, + r.hash, + r.adAvailable + ); + } ) } > diff --git a/src/services/realDebrid.ts b/src/services/realDebrid.ts index 2353838..d82e7f7 100644 --- a/src/services/realDebrid.ts +++ b/src/services/realDebrid.ts @@ -215,13 +215,14 @@ export const getCurrentUser = async (accessToken: string) => { } }; -export async function* getUserTorrentsList(accessToken: string) { +export async function* getUserTorrentsList(accessToken: string, limit: number = 0) { const headers = { Authorization: `Bearer ${accessToken}`, }; let page = 1; - let limit = 2500; + const limitSet = limit || Infinity; + if (!limit) limit = 2500; while (true) { const response = await axios.get( @@ -245,7 +246,7 @@ export async function* getUserTorrentsList(accessToken: string) { break; } - if (data.length >= totalCountValue) { + if (data.length >= limitSet || data.length >= totalCountValue) { break; } diff --git a/src/utils/addMagnet.ts b/src/utils/addMagnet.ts index 5431b0b..d63d89a 100644 --- a/src/utils/addMagnet.ts +++ b/src/utils/addMagnet.ts @@ -10,13 +10,13 @@ import { magnetToastOptions } from './toastOptions'; export const handleAddAsMagnetInRd = async ( rdKey: string, hash: string, - callback: (id: string) => void, - disableToast: boolean = false + callback: (id: string) => Promise, + disableToast: boolean = false // todo check if toast is ever disabled ) => { try { const id = await addHashAsMagnet(rdKey, hash); + await callback(id); if (!disableToast) toast('Successfully added as magnet!', magnetToastOptions); - callback(id); } catch (error) { console.error(error); if (!disableToast) toast.error('There was an error adding as magnet. Please try again.'); @@ -79,20 +79,15 @@ export const handleReinsertTorrent = async ( export const handleAddAsMagnetInAd = async ( adKey: string, hash: string, - cacheAddr: ReturnType[2], - instantDownload: boolean = false, + callback: (id: string) => Promise, disableToast: boolean = false ) => { try { const resp = await uploadMagnet(adKey, [hash]); if (resp.data.magnets.length === 0 || resp.data.magnets[0].error) throw new Error('no_magnets'); + await callback(`${resp.data.magnets[0].id}`); if (!disableToast) toast('Successfully added as magnet!', magnetToastOptions); - cacheAddr.single( - `ad:${resp.data.magnets[0].id}`, - hash, - instantDownload ? 'downloaded' : 'downloading' - ); } catch (error) { console.error(error); if (!disableToast) toast.error('There was an error adding as magnet. Please try again.'); diff --git a/src/utils/fetchTorrents.ts b/src/utils/fetchTorrents.ts index 97280fe..387761f 100644 --- a/src/utils/fetchTorrents.ts +++ b/src/utils/fetchTorrents.ts @@ -12,10 +12,11 @@ const ONE_GIGABYTE = 1024 * 1024 * 1024; export const fetchRealDebrid = async ( rdKey: string, - callback: (torrents: UserTorrent[]) => void + callback: (torrents: UserTorrent[]) => void, + customLimit?: number ) => { try { - for await (let pageOfTorrents of getUserTorrentsList(rdKey)) { + for await (let pageOfTorrents of getUserTorrentsList(rdKey, customLimit)) { const torrents = pageOfTorrents.map((torrent) => { const mediaType = getTypeByNameAndFileCount(torrent.filename, torrent.links.length); const info = diff --git a/src/utils/showInfo.ts b/src/utils/showInfo.ts new file mode 100644 index 0000000..6244199 --- /dev/null +++ b/src/utils/showInfo.ts @@ -0,0 +1,119 @@ +import { getTorrentInfo } from '@/services/realDebrid'; +import { UserTorrent } from '@/types/userTorrent'; +import Swal from 'sweetalert2'; + +export const showInfo = async (rdKey: string, torrent: UserTorrent) => { + const info = await getTorrentInfo(rdKey, torrent.id.substring(3)); + + let warning = ''; + const isIntact = info.files.filter((f) => f.selected).length === info.links.length; + // Check if there is a mismatch between files and links + if (info.progress === 100 && !isIntact) { + warning = `

    Warning: Some files have expired

    `; + } + + // Initialize a separate index for the links array + let linkIndex = 0; + + const filesList = info.files + .map((file) => { + let size = file.bytes < 1024 ** 3 ? file.bytes / 1024 ** 2 : file.bytes / 1024 ** 3; + let unit = file.bytes < 1024 ** 3 ? 'MB' : 'GB'; + + let downloadForm = ''; + + // Only create a download form for selected files + if (file.selected && isIntact) { + downloadForm = ` +
    + + +
    + `; + } + + // Return the list item for the file, with or without the download form + return ` +
  • + ${file.path} + ${size.toFixed(2)} ${unit} + ${downloadForm} +
  • + `; + }) + .join(''); + + // Handle the display of progress, speed, and seeders as table rows + const progressRow = + info.status === 'downloading' + ? `Progress:${info.progress.toFixed( + 2 + )}%` + : ''; + const speedRow = + info.status === 'downloading' + ? `Speed:${( + info.speed / 1024 + ).toFixed(2)} KB/s` + : ''; + const seedersRow = + info.status === 'downloading' + ? `Seeders:${info.seeders}` + : ''; + + Swal.fire({ + icon: 'info', + html: ` +

    ${info.filename}

    +
    + + + + + + + + + + + + + + + + + + + + + + + ${progressRow} + ${speedRow} + ${seedersRow} + + + + + +
    ID:${info.id}
    Original filename:${info.original_filename}
    Size:${(info.bytes / 1024 ** 3).toFixed(2)} GB
    Original size:${(info.original_bytes / 1024 ** 3).toFixed(2)} GB +
    Status:${info.status}
    Added:${new Date(info.added).toLocaleString()}
    +
    + ${warning} +

    Files:

    +
    +
      + ${filesList} +
    +
    + + `, + showConfirmButton: false, + customClass: { + popup: 'format-class', + }, + width: '800px', + }); +}; diff --git a/src/utils/slow.ts b/src/utils/slow.ts new file mode 100644 index 0000000..1d1c518 --- /dev/null +++ b/src/utils/slow.ts @@ -0,0 +1,20 @@ +import { UserTorrent } from '@/types/userTorrent'; + +export function isSlowOrNoLinks(t: UserTorrent) { + const oldTorrentAge = 3600000; // 1 hour in milliseconds + const addedDate = new Date(t.added); + const now = new Date(); + const ageInMillis = now.getTime() - addedDate.getTime(); + return ( + (t.links.length === 0 && t.progress === 100) || + (t.progress !== 100 && ageInMillis >= oldTorrentAge && t.seeders === 0) + ); +} + +export function isInProgress(t: UserTorrent) { + return t.progress !== 100; +} + +export function isFailed(t: UserTorrent) { + return /error|dead|virus/.test(t.status); +} From 4ef15d0662fdf69612ddf2bc6477adc1c89af978 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 16 Dec 2023 04:48:14 +0100 Subject: [PATCH 220/272] Allow copy magnet url --- src/pages/library.tsx | 7 +------ src/pages/movie/[imdbid].tsx | 9 ++++++++- src/pages/show/[imdbid]/[seasonNum].tsx | 9 ++++++++- src/utils/addMagnet.ts | 6 ++++++ 4 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/pages/library.tsx b/src/pages/library.tsx index bd62aaa..ba60e14 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -4,6 +4,7 @@ import { UserTorrent, getKeyByStatus, uniqId } from '@/types/userTorrent'; import { handleAddAsMagnetInAd, handleAddAsMagnetInRd, + handleCopyMagnet, handleReinsertTorrent, handleRestartTorrent, handleSelectFilesInRd, @@ -661,12 +662,6 @@ function TorrentsPage() { } } - async function handleCopyMagnet(hash: string) { - const magnet = `magnet:?xt=urn:btih:${hash}`; - await navigator.clipboard.writeText(magnet); - toast.success('Copied magnet url to clipboard', libraryToastOptions); - } - const hasNoQueryParamsBut = (...params: string[]) => Object.keys(router.query).filter((p) => !params.includes(p)).length === 0; diff --git a/src/pages/movie/[imdbid].tsx b/src/pages/movie/[imdbid].tsx index 53aebdb..5b12abb 100644 --- a/src/pages/movie/[imdbid].tsx +++ b/src/pages/movie/[imdbid].tsx @@ -5,6 +5,7 @@ import { SearchApiResponse, SearchResult } from '@/services/mediasearch'; import { handleAddAsMagnetInAd, handleAddAsMagnetInRd, + handleCopyMagnet, handleSelectFilesInRd, } from '@/utils/addMagnet'; import { handleDeleteAdTorrent, handleDeleteRdTorrent } from '@/utils/deleteTorrent'; @@ -20,7 +21,7 @@ import Link from 'next/link'; import { useRouter } from 'next/router'; import { FunctionComponent, useEffect, useState } from 'react'; import toast, { Toaster } from 'react-hot-toast'; -import { FaDownload, FaFastForward, FaTimes } from 'react-icons/fa'; +import { FaDownload, FaFastForward, FaMagnet, FaTimes } from 'react-icons/fa'; type MovieSearchProps = { title: string; @@ -309,6 +310,12 @@ rounded-lg overflow-hidden Size: {(r.fileSize / 1024).toFixed(2)} GB

    + {rdKey && rd.isDownloading(r.hash) && rdCache![r.hash].id && ( diff --git a/src/pages/show/[imdbid]/[seasonNum].tsx b/src/pages/show/[imdbid]/[seasonNum].tsx index 169816f..f5abf1b 100644 --- a/src/pages/show/[imdbid]/[seasonNum].tsx +++ b/src/pages/show/[imdbid]/[seasonNum].tsx @@ -5,6 +5,7 @@ import { SearchApiResponse, SearchResult } from '@/services/mediasearch'; import { handleAddAsMagnetInAd, handleAddAsMagnetInRd, + handleCopyMagnet, handleSelectFilesInRd, } from '@/utils/addMagnet'; import { handleDeleteAdTorrent, handleDeleteRdTorrent } from '@/utils/deleteTorrent'; @@ -20,7 +21,7 @@ import Link from 'next/link'; import { useRouter } from 'next/router'; import { FunctionComponent, useEffect, useState } from 'react'; import toast, { Toaster } from 'react-hot-toast'; -import { FaDownload, FaFastForward, FaTimes } from 'react-icons/fa'; +import { FaDownload, FaFastForward, FaMagnet, FaTimes } from 'react-icons/fa'; type TvSearchProps = { title: string; @@ -352,6 +353,12 @@ rounded-lg overflow-hidden Size: {(r.fileSize / 1024).toFixed(2)} GB

    + {rdKey && rd.isDownloading(r.hash) && rdCache![r.hash].id && ( diff --git a/src/utils/addMagnet.ts b/src/utils/addMagnet.ts index d63d89a..8350f37 100644 --- a/src/utils/addMagnet.ts +++ b/src/utils/addMagnet.ts @@ -103,3 +103,9 @@ export const handleRestartTorrent = async (adKey: string, id: string) => { console.error(error); } }; + +export async function handleCopyMagnet(hash: string) { + const magnet = `magnet:?xt=urn:btih:${hash}`; + await navigator.clipboard.writeText(magnet); + toast.success('Copied magnet url to clipboard', magnetToastOptions); +} From 00ccd55d4481b450f15235e74d16fb05d3b00e0c Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sat, 16 Dec 2023 05:27:11 +0100 Subject: [PATCH 221/272] Improve searching --- .env | 2 ++ src/pages/api/search/title.ts | 32 +++++++++++++++++++++++--------- src/pages/index.tsx | 24 +++++++++++++++--------- src/pages/search.tsx | 6 +++--- 4 files changed, 43 insertions(+), 21 deletions(-) diff --git a/.env b/.env index 391b632..dc3e672 100644 --- a/.env +++ b/.env @@ -12,3 +12,5 @@ PROWLARR="http://localhost:9696" PROWLARR_KEY=abc123 EXTERNAL_SEARCH_API_HOSTNAME= + +OMDB_KEY=abc123 diff --git a/src/pages/api/search/title.ts b/src/pages/api/search/title.ts index 86ca10a..4ae2828 100644 --- a/src/pages/api/search/title.ts +++ b/src/pages/api/search/title.ts @@ -2,17 +2,17 @@ import { PlanetScaleCache } from '@/services/planetscale'; import axios from 'axios'; import { NextApiHandler } from 'next'; -const mdblistKey = process.env.MDBLIST_KEY; -const searchMdb = (keyword: string, year?: number) => - `https://mdblist.com/api/?apikey=${mdblistKey}&s=${keyword}&y=${year}`; -const getMdbInfo = (imdbId: string) => `https://mdblist.com/api/?apikey=${mdblistKey}&i=${imdbId}`; +const omdbKey = process.env.OMDB_KEY; +const searchOmdb = (keyword: string, year?: number) => + `https://www.omdbapi.com/?s=${keyword}&y=${year}&apikey=${omdbKey}`; +const getMdbInfo = (imdbId: string) => `https://mdblist.com/api/?apikey=${omdbKey}&i=${imdbId}`; const db = new PlanetScaleCache(); export type MdbSearchResult = { id: string; type: 'movie' | 'show'; year: number; - score: number; + // score: number; title: string; imdbid: string; tmdbid?: string; @@ -20,6 +20,14 @@ export type MdbSearchResult = { season_names?: string[]; }; +type OmdbSearchResult = { + Title: string; + Year: string; + imdbID: string; + Type: string; + Poster: string; +}; + function parseTitleAndYear(searchQuery: string): [string, number?] { // Get the current year + 1 const currentYearPlusOne = new Date().getFullYear() + 1; @@ -78,10 +86,16 @@ const handler: NextApiHandler = async (req, res) => { } const [searchTerm, year] = parseTitleAndYear(cleanKeyword); - const searchResponse = await axios.get(searchMdb(encodeURIComponent(searchTerm), year)); - const results: MdbSearchResult[] = [...searchResponse.data.search].filter( - (result: any) => result.imdbid - ); + const searchResponse = await axios.get(searchOmdb(encodeURIComponent(searchTerm), year)); + const results: MdbSearchResult[] = [...searchResponse.data.Search] + .filter((r: OmdbSearchResult) => r.imdbID.startsWith('tt')) + .map((r: OmdbSearchResult) => ({ + id: r.imdbID, + type: r.Type === 'series' ? 'show' : 'movie', + year: parseInt(r.Year, 10), + title: r.Title, + imdbid: r.imdbID, + })); for (let i = 0; i < results.length; i++) { if (results[i].type === 'show') { diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 4b7c675..557dfde 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -108,7 +108,7 @@ function IndexPage() {

    - 6.43+ million torrents collected from all corners of the web (as of + 10+ million torrents collected from all corners of the web (as of November 2023, post clean-up)

    @@ -131,9 +131,9 @@ function IndexPage() { - Search + Improved Search

    - {/*

    +

    . Mount your Real-Debrid library and play your files directly from your computer. -

    */} +

    + Sponsor this project's development on{' '} - DMM is a 1-person passion project and{' '} - - sponsoring it will mean a lot to me - + Github + + | + + Patreon + + | + + Paypal

    diff --git a/src/pages/search.tsx b/src/pages/search.tsx index 571fc09..ecc530b 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -65,7 +65,7 @@ function Search() {
    -

    Search

    +

    Search, Improved Accuracy

    {result.title}

    Year: {result.year}

    -

    + {/*

    IMDB Score: {result.score} -

    +

    */} {result.type === 'movie' ? ( Date: Sat, 16 Dec 2023 12:32:10 +0100 Subject: [PATCH 222/272] Fix search --- src/pages/api/importers/bitmagnet.ts | 23 +++++++------- src/pages/api/importers/rarbg.ts | 17 +++++------ src/pages/api/search/title.ts | 3 +- src/pages/index.tsx | 45 ++++++++++++++++++++-------- 4 files changed, 54 insertions(+), 34 deletions(-) diff --git a/src/pages/api/importers/bitmagnet.ts b/src/pages/api/importers/bitmagnet.ts index 0a7df2a..8a5428b 100644 --- a/src/pages/api/importers/bitmagnet.ts +++ b/src/pages/api/importers/bitmagnet.ts @@ -1,4 +1,3 @@ -import { ScrapeSearchResult } from '@/services/mediasearch'; import { PlanetScaleCache } from '@/services/planetscale'; import { ScrapeResponse } from '@/services/scrapeJobs'; import { NextApiRequest, NextApiResponse } from 'next'; @@ -38,25 +37,25 @@ const fetchMovies = async () => { console.log(`[${i}/${result.rows.length}] ${row.name} ${row.value}`); const hash = row.id.split(':')[0]; - let saved = await db.getScrapedTrueResults(`movie:${row.value}`); - if (!saved || saved.length === 0) { - saved = []; - } + // let saved = await db.getScrapedTrueResults(`movie:${row.value}`); + // if (!saved || saved.length === 0) { + // saved = []; + // } - await db.deleteScrapedTrue(row.value); + // await db.deleteScrapedTrue(row.value); - saved.splice( - saved.findIndex((s) => s.hash === hash), - 1 - ); + // saved.splice( + // saved.findIndex((s) => s.hash === hash), + // 1 + // ); // console.log(row); // Process each row here const scrape = { title: row.name, fileSize: parseInt(row.size) / 1024 / 1024, hash, }; - saved.push(scrape); - await db.saveScrapedTrueResults(`movie:${row.value}`, saved, true); + // saved.push(scrape); + await db.saveScrapedTrueResults(`movie:${row.value}`, [scrape], true); i++; } diff --git a/src/pages/api/importers/rarbg.ts b/src/pages/api/importers/rarbg.ts index 8923e0a..44224e8 100644 --- a/src/pages/api/importers/rarbg.ts +++ b/src/pages/api/importers/rarbg.ts @@ -30,15 +30,14 @@ const fetchMovies = async (): Promise => { const db = await initDB(); const query = ` - SELECT - id, hash, title, dt, cat, size, imdb - FROM - items - WHERE - cat = 'movies' - ORDER BY - dt DESC - LIMIT 1; + SELECT + id, hash, title, dt, cat, size, imdb + FROM + items + WHERE + cat LIKE 'movies_%' AND imdb IS NOT NULL + ORDER BY + dt DESC; `; try { diff --git a/src/pages/api/search/title.ts b/src/pages/api/search/title.ts index 4ae2828..346d612 100644 --- a/src/pages/api/search/title.ts +++ b/src/pages/api/search/title.ts @@ -3,9 +3,10 @@ import axios from 'axios'; import { NextApiHandler } from 'next'; const omdbKey = process.env.OMDB_KEY; +const mdbKey = process.env.MDBLIST_KEY; const searchOmdb = (keyword: string, year?: number) => `https://www.omdbapi.com/?s=${keyword}&y=${year}&apikey=${omdbKey}`; -const getMdbInfo = (imdbId: string) => `https://mdblist.com/api/?apikey=${omdbKey}&i=${imdbId}`; +const getMdbInfo = (imdbId: string) => `https://mdblist.com/api/?apikey=${mdbKey}&i=${imdbId}`; const db = new PlanetScaleCache(); export type MdbSearchResult = { diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 557dfde..4a0e890 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -108,8 +108,14 @@ function IndexPage() {

    - 10+ million torrents collected from all corners of the web (as of - November 2023, post clean-up) + Besides the 10+ million torrents indexed (as of December 2023), no other + data is stored +

    + +

    + + ๐Ÿค– r/debridmediamanager +


    @@ -119,35 +125,35 @@ function IndexPage() { href="/library" className="mr-2 bg-cyan-800 hover:bg-cyan-700 text-white font-bold py-2 px-4 rounded" > - My Library + ๐Ÿ“š My Library - Improved Search + ๐Ÿ”Ž Improved Search - Recently Updated + โฐ Recently Updated - Browse + ๐ŸŒ Browse
    @@ -202,6 +208,7 @@ function IndexPage() { for{' '} @@ -211,6 +218,7 @@ function IndexPage() { and{' '} @@ -220,29 +228,42 @@ function IndexPage() {

    Beta is out for an uber fast webdav server and rclone alternative - + {' '} + + zurg + . Mount your Real-Debrid library and play your files directly from your computer.

    Sponsor this project's development on{' '} Github - | - +  |  + Patreon - | - +  |  + Paypal

    From 74daca056a9b62afba19be724e0de5ebeecb2ae6 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 17 Dec 2023 20:27:32 +0100 Subject: [PATCH 223/272] Add more banned words --- bannedwordlist.txt | 398 +++++++++++++++++++++++++++++++++++++ bannedwordlist2.txt | 198 +++++++++++++++++- src/pages/index.tsx | 34 ++-- src/pages/library.tsx | 8 +- src/services/scrapeJobs.ts | 9 +- src/styles/globals.css | 4 + src/utils/checks.ts | 22 +- 7 files changed, 636 insertions(+), 37 deletions(-) diff --git a/bannedwordlist.txt b/bannedwordlist.txt index 63cd752..9f645f8 100644 --- a/bannedwordlist.txt +++ b/bannedwordlist.txt @@ -1,24 +1,76 @@ +2g1c +4r5e +5h1t +5hit +a55 +acrotomophilia adult anal +anilingus anus +apeshit +ar5e arrse arse +arsehole +ass +assbag +assbandit +assbanger +assbite +assclown +asscock +asscracker asses +assface assfucker assfukka +assgoblin +asshat +asshead asshole assholes +asshopper +assjacker +asslick +asslicker +assmonkey +assmunch +assmuncher +asspirate +assshole +asssucker +asswad asswhole +asswipe +autoerotic +b00bs +b17ch +b1tch +babeland ballbag balls ballsack +bampot +bangbros +bareback +barenaked bastard +bastardo +bastinado +bbw +bdsm +beaner +beaners beastial beastiality +beastility bellend bestial bestiality biatch +bimbos +birdlock bitch bitcher bitchers @@ -28,10 +80,16 @@ bitching bloody blowjob blowjobs +blumpkin boiolas bollock +bollocks bollok +bollox +bondage boner +boob +boobie boobs booobs boooobs @@ -40,22 +98,57 @@ booooooobs breasts buceta bugger +bukkake +bulldyke +bullshit +bum +bunghole +busty butt +buttcheeks butthole buttmuch +buttmunch buttplug +c0ck +c0cksucker +camgirl +camslut +camwhore +carpetmuncher cawk +chinc chink +choad +chode +cipa +circlejerk +cl1t clit +clitface clitoris clits +clusterfuck cnut cock +cockbite +cockburger cockface cockhead +cockjockey +cockknoker +cockmaster +cockmongler +cockmongruel +cockmonkey cockmunch cockmuncher +cocknose +cocknugget cocks +cockshit +cocksmith +cocksmoker cocksuck cocksucked cocksucker @@ -66,21 +159,39 @@ cocksukka cok cokmuncher coksucka +coochie +coochy coon +coons +cooter +coprolagnia +coprophilia +cornhole cox crap +creampie cum +cumbubble +cumdumpster +cumguzzler +cumjockey cummer cumming cums cumshot +cumslut +cumtart cunilingus cunillingus +cunnie cunnilingus cunt +cuntface +cunthole cuntlick cuntlicker cuntlicking +cuntrag cunts cyalis cyberfuc @@ -89,20 +200,58 @@ cyberfucked cyberfucker cyberfuckers cyberfucking +d1ck +dammit +damn +darkie +daterape +deepthroat +dendrophilia dick +dickbag +dickbeater +dickface dickhead +dickhole +dickjuice +dickmilk +dickmonger +dickslap +dicksucker +dickwad +dickweasel +dickweed +dickwod +dike dildo dildos +dingleberries +dingleberry dink dinks +dipshit dirsa dlck +doggiestyle doggin dogging +doggystyle +dolcett +domination +dominatrix +dommes donkeyribber +doochbag +dookie doosh +douche +douchebag duche +dumbshit +dumshit +dvda dyke +ecchi ejaculate ejaculated ejaculates @@ -110,33 +259,54 @@ ejaculating ejaculatings ejaculation ejakulate +erotic +erotism +escort +eunuch +f4nny fag +fagbag +fagg fagging +faggit faggitt faggot faggs fagot fagots fags +fagtard fanny fannyflaps fannyfucker fanyy +fart +farted +farting +farty fatass fcuk fcuker fcuking +fecal feck fecker +felatio +felch felching fellate fellatio +feltch +femdom +figging +fingerbang fingerfuck fingerfucked fingerfucker fingerfuckers fingerfucking fingerfucks +fingering fistfuck fistfucked fistfucker @@ -144,9 +314,13 @@ fistfuckers fistfucking fistfuckings fistfucks +fisting +flamer flange fook fooker +footjob +frotting fuck fucka fucked @@ -160,6 +334,7 @@ fuckings fuckingshitmotherfucker fuckme fucks +fucktards fuckwhit fuckwit fudgepacker @@ -170,32 +345,78 @@ fukkin fuks fukwhit fukwit +futanari fux +fux0r gangbang gangbanged gangbangs +gayass +gaybob +gaydo gaylord gaysex +gaytard +gaywad +genitals girlsoutwest +goatcx goatse +goddamn +goddamned +gokkun +gooch +goodpoop +gook +goregasm +gringo +grope +guido +guro +handjob +hardcore hardcoresex +heeb +hell +hentai heshe hoar hoare +hoe hoer homo +homoerotic +honkey +honky +hooker hore horniest horny hotsex +humping +incest +intercourse +jackass jackoff +jailbait +jap jerk +jigaboo +jiggaboo +jiggerboo jism jiz jizm jizz +juggs kawk +kike +kinbaku +kinkster +kinky +kiunt knob +knobbing knobead knobed knobend @@ -205,20 +426,40 @@ knobjokey kock kondum kondums +kooch +kootch kum +kumer kummer kumming kums kunilingus +kunt +kyke +l3itch labia +lesbo +lezzie +lmfao +lolita +lovemaking lust lusting +m0f0 +m0fo +m45terbate +ma5terb8 +ma5terbate masochist +masterb8 +masterbat3 masterbate masterbation masterbations masturbate milf +minge +mof0 mofo mothafuck mothafucka @@ -241,30 +482,61 @@ motherfuckings motherfuckka motherfucks muff +muffdiver +muffdiving mutha muthafecker muthafuckker muther mutherfucker +n1gga +n1gger +nambla +nawashi nazi +negro +neonazi +nigg3r +nigg4h nigga niggah niggas niggaz nigger niggers +niglet +nimphomania +nipple +nipples nob nobhead nobjocky nobjokey +nude +nudity numbnuts nutsack +nympho +nymphomania +octopussy +omorashi orgasim orgasims orgasm orgasms +orgy +p0rn +paedophile +paki +panooch +panties +panty pawn pecker +peckerhead +pedobear +pedophile +pegging penis penisfucker phonesex @@ -278,15 +550,34 @@ phuks phuq pigfucker pimpis +pis +pises +pisin +pising +pisof piss pissed pisser pissers pisses +pissflap pissflaps pissin pissing pissoff +pisspig +playboy +polesmoker +pollock +ponyplay +poo +poof +poon +poonani +poonany +poontang +poop +poopchute porn porno pornography @@ -294,82 +585,189 @@ pornos prick pricks pron +pthc pube +pubes +punanny +punany +punta +pusies pusse pussi pussies pussy +pussylicking pussys +pusy +puto +queaf +queef queer +queerbait +queerhole +quim +raghead +rape +raping +rapist rectum +renob retard rimjaw +rimjob rimming +ruski +sadism sadist +santorum +scat schlong +scissoring screwing scroat scrote scrotum semen +sex +sexo +sexy +sh1t shag shagger shaggin shagging shemale +shibari +shit +shitass +shitbag +shitbagger +shitblimp +shitbrain +shitbreath +shitcunt shitdick shite +shiteating shited shitey +shitface +shitfaced +shitfit shitfuck shitfull shithead +shitheel +shithole +shithouse shiting shitings +shitload +shitpot shits +shitspitter +shitstain shitted shitter shitters +shittiest shitting shittings shitty +shity +shiz +shiznit +shota +shrimping skank +skeet +slanteye slut +slutbag sluts +smeg smegma smut snatch +snowballing +sodomize +sodomy spac +spic +spick +splooge +spooge spunk +strapon +strappado +suck +sucks +swallow +swastika +swinger +t1tt1e5 +t1tties +tard teets teez testical testicle +threesome +throating +thundercunt +tit titfuck tits titt +tittie5 tittiefucker titties +titty tittyfuck tittywank titwank +topless tosser +towelhead +tranny +tribadism +tubgirl turd +tushy +tw4t twat twathead +twatlips twatty +twink +twinkie twunt twunter +undressing +upskirt +urophilia +v14gra +v1gra +vag vagina viagra +vibrator +vjayjay +vorarephilia +voyeur vulva +w00se wang wank wanker wanky +wetback whoar whore willies willy xrated xxx +yaoi +yiffy +zoophilia diff --git a/bannedwordlist2.txt b/bannedwordlist2.txt index 98f59a8..af0a746 100644 --- a/bannedwordlist2.txt +++ b/bannedwordlist2.txt @@ -1,15 +1,52 @@ +2 girls 1 cup +alabama hot pocket +alaskan pipeline ass fucker ass fukka +ass hat ass hole ass holes +ass pirate ass whole +auto erotic +baby batter +baby juice ball bag +ball gag +ball gravy +ball kicking +ball licking ball sack +ball sucking +barely legal +beaver cleaver +beaver lips +big black +big breasts +big knockers +big tits +black cock +blonde action +blonde on blonde action blow job blow jobs +blow your load +blue waffle +booty call +brown showers +brunette action +bullet vibe +bung hole +bunny fucker butt hole butt much +butt pirate butt plug +camel toe +carpet muncher +chocolate rosebuds +cleveland steamer +clover clamps cock face cock head cock munch @@ -21,28 +58,62 @@ cock sucking cock sucks cock suka cock sukka +cocksuck +cocksucked +cocksucks cok muncher cok sucka +cream pie cunt lick cunt licker cunt licking +cuntlick +cuntlicker +cuntlicking cyber fuc cyber fuck cyber fucked cyber fucker cyber fuckers cyber fucking +cyberfuck +cyberfucked +cyberfucking +date rape +deep throat dick head +dirty pillows +dirty sanchez +dog fucker +dog style +doggie style +doggy style +donkey punch donkey ribber +double dong +double penetration +dp action +dry hump +eat my ass +ejaculates +ejaculating +f u c k +f u c k e r fanny flaps fanny fucker fat ass +female squirting finger fuck finger fucked finger fucker finger fuckers finger fucking finger fucks +fingerfuck +fingerfucked +fingerfucker +fingerfucking +fingerfucks fist fuck fist fucked fist fucker @@ -50,27 +121,72 @@ fist fuckers fist fucking fist fuckings fist fucks +fistfucked +fistfucker +fistfuckers +fistfucking +fistfuckings +fistfucks +foot fetish +fuck buttons fuck head fuck heads -fucking shit -mother fucker fuck me fuck whit fuck wit +fucking shit +fuckme fudge packer fuk whit fuk wit +g spot gang bang gang banged gang bangs +gangbanged +gangbangs gay lord gay sex +giant cock +girl on +girl on top +girls gone wild +god dam +god damn +god damned +golden shower +goo girl +group sex +hand job +hard core hardcore sex +hardcoresex +hot carl +hot chick hot sex +how to kill +how to murder +huge fat jack off +jack-off +jail bait +jelly donut +jerk off +jerk-off +jiz +jizm knob head knob jocky knob jokey +leather restraint +leather straight jacket +lemon party +make me come +male squirting +master bate +menage a trois +missionary position +mo fo motha fuck motha fucka motha fuckas @@ -82,6 +198,8 @@ motha fuckin motha fucking motha fuckings motha fucks +mothafucked +mothafucking mother fuck mother fucked mother fucker @@ -91,27 +209,101 @@ mother fucking mother fuckings mother fuckka mother fucks +mound of venus +mr hands +muff diver mutha fecker mutha fuckker muther fucker +nig nog +niggers nob head nob jocky nob jokey +nsfw images numb nuts nut sack +one cup two girls +one guy one jar +orgasim +orgasims +orgasms penis fucker phone sex +piece of shit pig fucker piss flaps +piss pig +pisses +pissin +pissoff +pleasure chest +pole smoker +poop chute +pricks +prince albert piercing +pussys +raging boner +reverse cowgirl rim jaw +rosy palm +rosy palm and her 5 sisters +rusty trombone +s hit +shaved beaver +shaved pussy she male +shit ass +shit bag +shit bagger +shit brain +shit breath +shit cunt shit dick +shit eating +shit face +shit faced +shit fit shit fuck shit full shit head +shit heel +shit hole +shit house +shit load +shit pot +shit spitter +shit stain +shitters +shitty +son of a bitch +splooge moose +spread legs +strap on +strip club +style doggy +suicide girls +sultry women +tainted love +taste my +tea bagging +tied up +tight white tit fuck +tit wank tittie fucker titty fuck titty wank -tit wank +tongue in a +tub girl twat head +two girls one cup +urethra play +va j j +venus mound +violet wand +wet dream +white power +wrapping men +wrinkled starfish +yellow showers diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 4a0e890..150ada8 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -112,12 +112,6 @@ function IndexPage() { data is stored

    -

    - - ๐Ÿค– r/debridmediamanager - -

    -
    @@ -232,33 +226,39 @@ function IndexPage() { href="https://github.com/debridmediamanager/zurg-testing" target="_blank" > - Beta is out for an uber fast webdav server and rclone - alternative + + zurg + {' '} + beta is out! {' '} - - zurg - - . Mount your Real-Debrid library and play your files directly from your + Mount your Real-Debrid library and play your files directly from your computer.

    - Sponsor this project's development on{' '} + + ๐Ÿค– r/debridmediamanager + {' '} + ๐Ÿค Sponsor this project's development on{' '} Github - -  |  + {' '} + |{' '} Patreon - -  |  + {' '} + |{' '} - ๐ŸŽฅ + ๐ŸŽฅ Movies - ๐Ÿ“บ + ๐Ÿ“บ TV shows {sameTitle.length > 0 && ( diff --git a/src/services/scrapeJobs.ts b/src/services/scrapeJobs.ts index 4b60a01..56997c2 100644 --- a/src/services/scrapeJobs.ts +++ b/src/services/scrapeJobs.ts @@ -41,8 +41,13 @@ export async function generateScrapeJobs(imdbId: string, replaceOldScrape: boole return; } - const isMovie = mdbInfo.data.type === 'movie' || tmdbSearch.data.movie_results?.length > 0; - const isTv = mdbInfo.data.type === 'show' || tmdbSearch.data.tv_results?.length > 0; + const isMovie = + mdbInfo.data.type === 'movie' || + (tmdbSearch.data.movie_results?.length > 0 && + tmdbSearch.data.movie_results[0].vote_count > 0); + const isTv = + mdbInfo.data.type === 'show' || + (tmdbSearch.data.tv_results?.length > 0 && tmdbSearch.data.tv_results[0].vote_count > 0); if (isMovie) { try { diff --git a/src/styles/globals.css b/src/styles/globals.css index ac1c2b0..c780b78 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -7,3 +7,7 @@ body{ background: hsl(0, 0%, 12%); color: azure; } + +a { + color: inherit; +} diff --git a/src/utils/checks.ts b/src/utils/checks.ts index e3ed8e3..f8ae785 100644 --- a/src/utils/checks.ts +++ b/src/utils/checks.ts @@ -41,17 +41,17 @@ export function grabPossibleSeasonNums(str: string): number[] { return (str.match(/\d+/g) ?? []).map((n) => parseInt(n, 10)).filter((n) => n > 0 && n <= 100); } -export function hasYear(test: string, years: string[]) { - return ( - years.filter((year) => { - const intYear = parseInt(year); - return ( - test.includes(year) || - test.includes(`${intYear + 1}`) || - test.includes(`${intYear - 1}`) - ); - }).length > 0 - ); +export function hasYear(test: string, years: string[], strictCheck: boolean = false) { + return strictCheck + ? years.some((year) => test.includes(year)) + : years.filter((year) => { + const intYear = parseInt(year); + return ( + test.includes(year) || + test.includes(`${intYear + 1}`) || + test.includes(`${intYear - 1}`) + ); + }).length > 0; } function removeDiacritics(str: string) { From 18a03ee10a9c8932ce0fbecf1385e16254ca9306 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Mon, 18 Dec 2023 01:16:03 +0100 Subject: [PATCH 224/272] Add misc search --- src/pages/api/scrapers/imdb.ts | 4 + src/pages/api/scrapers/listoflists.ts | 1 + src/pages/api/scrapers/singlelist.ts | 1 + src/pages/api/search/misc.ts | 45 +++++++++++ src/pages/api/search/title.ts | 4 + src/pages/search.tsx | 105 ++++++++++++++++++++------ src/services/planetscale.ts | 4 +- 7 files changed, 140 insertions(+), 24 deletions(-) create mode 100644 src/pages/api/search/misc.ts diff --git a/src/pages/api/scrapers/imdb.ts b/src/pages/api/scrapers/imdb.ts index ddf649c..abafb19 100644 --- a/src/pages/api/scrapers/imdb.ts +++ b/src/pages/api/scrapers/imdb.ts @@ -13,6 +13,10 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< res.status(400).json({ status: 'error', errorMessage: 'Missing "id" query parameter' }); return; } + if (!id.startsWith('tt')) { + res.status(400).json({ status: 'error', errorMessage: 'Invalid "id" query parameter' }); + return; + } await generateScrapeJobs(id.toString().trim(), replaceOldScrape === 'true'); res.status(200).json({ status: 'success' }); diff --git a/src/pages/api/scrapers/listoflists.ts b/src/pages/api/scrapers/listoflists.ts index e74cb8b..1847e6f 100644 --- a/src/pages/api/scrapers/listoflists.ts +++ b/src/pages/api/scrapers/listoflists.ts @@ -26,6 +26,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< for await (let listId of scrapeInput.byLists(search)) { let imdbIds = []; for await (let imdbId of scrapeInput.byListId(listId)) { + if (!imdbId.startsWith('tt')) continue; const isProcessing = await db.keyExists(`processing:${imdbId}`); if (isProcessing) { console.log(`[searchlist] Already processing ${imdbId}, skipping`); diff --git a/src/pages/api/scrapers/singlelist.ts b/src/pages/api/scrapers/singlelist.ts index 974789d..dc8c39a 100644 --- a/src/pages/api/scrapers/singlelist.ts +++ b/src/pages/api/scrapers/singlelist.ts @@ -25,6 +25,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< let imdbIds = []; for await (let imdbId of scrapeInput.byListId(listId)) { + if (!imdbId.startsWith('tt')) continue; const isProcessing = await db.keyExists(`processing:${imdbId}`); if (isProcessing) { console.log(`[singlelist] Already processing ${imdbId}, skipping`); diff --git a/src/pages/api/search/misc.ts b/src/pages/api/search/misc.ts new file mode 100644 index 0000000..32488af --- /dev/null +++ b/src/pages/api/search/misc.ts @@ -0,0 +1,45 @@ +import MdbList from '@/services/mdblist'; +import { lcg, shuffle } from '@/utils/seededShuffle'; +import { NextApiHandler } from 'next'; + +type SearchMiscResponse = Record; +type SearchMiscResponseCache = { + lastUpdated: number; + response: SearchMiscResponse; +}; +const responses: Record = {}; + +const handler: NextApiHandler = async (req, res) => { + const { keyword } = req.query; + const keywordStr = keyword as string; + + const mdblist = new MdbList(); + let topLists; + if (!keywordStr) { + topLists = await mdblist.searchLists('latest'); + } else { + topLists = await mdblist.searchLists(keywordStr); + } + + let rng = lcg(new Date().getTime() / 1000 / 60 / 10); + topLists = shuffle(topLists, rng).slice(0, 1); + // topLists = topLists.slice(0, 1); + + const response: SearchMiscResponse = {}; + for (const list of topLists) { + const itemsResponse = await mdblist.listItems(list.id); + response[list.name] = itemsResponse + .filter((item) => item.imdb_id) + .slice(0, 16) + .map((item) => `${list.mediatype}:${item.imdb_id}`); + } + + responses[keywordStr] = { + lastUpdated: new Date().getTime(), + response, + }; + + res.status(200).json(response); +}; + +export default handler; diff --git a/src/pages/api/search/title.ts b/src/pages/api/search/title.ts index 346d612..bcdb059 100644 --- a/src/pages/api/search/title.ts +++ b/src/pages/api/search/title.ts @@ -88,6 +88,10 @@ const handler: NextApiHandler = async (req, res) => { const [searchTerm, year] = parseTitleAndYear(cleanKeyword); const searchResponse = await axios.get(searchOmdb(encodeURIComponent(searchTerm), year)); + if (searchResponse.data.Error) { + res.status(401).json({ error: searchResponse.data.Error, results: [] }); + return; + } const results: MdbSearchResult[] = [...searchResponse.data.Search] .filter((r: OmdbSearchResult) => r.imdbID.startsWith('tt')) .map((r: OmdbSearchResult) => ({ diff --git a/src/pages/search.tsx b/src/pages/search.tsx index ecc530b..110bfec 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -15,27 +15,10 @@ function Search() { const [searchResults, setSearchResults] = useState([]); const [loading, setLoading] = useState(false); const [errorMessage, setErrorMessage] = useState(''); + const [miscResults, setMiscResults] = useState>({}); const router = useRouter(); - const fetchData = async (query: string) => { - setLoading(true); - try { - let path = `api/search/title?keyword=${query}`; - if (config.externalSearchApiHostname) { - path = encodeURIComponent(path); - } - let endpoint = `${config.externalSearchApiHostname || ''}/${path}`; - const res = await fetch(endpoint); - const data = await res.json(); - setSearchResults(data.results); - } catch (error: any) { - setErrorMessage(error.message); - } finally { - setLoading(false); - } - }; - const handleSubmit = useCallback( (e?: React.FormEvent) => { if (e) e.preventDefault(); @@ -48,16 +31,57 @@ function Search() { ); useEffect(() => { + if (Object.keys(router.query).length === 0) return; const { query: searchQuery } = router.query; - if (!searchQuery) return; const decodedQuery = decodeURIComponent(searchQuery as string); - if (decodedQuery === query) return; - setTypedQuery(decodedQuery); + if (typedQuery !== decodedQuery) setTypedQuery(decodedQuery); setQuery(decodedQuery); fetchData(decodedQuery); // eslint-disable-next-line react-hooks/exhaustive-deps }, [router.query]); + const fetchMiscData = async (q: string) => { + try { + let path = `api/search/misc?keyword=${q}`; + if (config.externalSearchApiHostname) { + path = encodeURIComponent(path); + } + let endpoint = `${config.externalSearchApiHostname || ''}/${path}`; + const res = await fetch(endpoint); + const data = await res.json(); + if (Object.keys(data).length > 0) setMiscResults(data); + else fetchMiscData(''); + } catch (error: any) { + console.error(error); + } + }; + + const fetchData = async (q: string) => { + setMiscResults({}); + setErrorMessage(''); + setLoading(true); + setSearchResults([]); + try { + let path = `api/search/title?keyword=${q}`; + if (config.externalSearchApiHostname) { + path = encodeURIComponent(path); + } + let endpoint = `${config.externalSearchApiHostname || ''}/${path}`; + const res = await fetch(endpoint); + const data = await res.json(); + if (data.error) throw new Error(data.error); + setSearchResults(data.results); + } catch (error: any) { + setErrorMessage(error.message); + fetchMiscData(q); + } finally { + setLoading(false); + } + }; + + if (!loading && searchResults.length === 0 && Object.keys(router.query).length === 0) + fetchMiscData(''); + return (

    )} - {Object.keys(router.query).length !== 0 && searchResults.length === 0 && !loading && ( + {!loading && searchResults.length === 0 && Object.keys(router.query).length !== 0 && ( <>

    No results found for "{query}"

    )} + {!loading && searchResults.length === 0 && Object.keys(miscResults).length > 0 && ( + <> + {Object.keys(miscResults).map((listName: string, idx: number) => { + return ( +
    +

    + How about results from{' '} + {listName}? +

    +
    + {miscResults[listName].map((key: string) => { + const match = key.match(/^(movie|show):(.+)/); + if (match) { + const mediaType = + match[1] === 'movie' ? 'movie' : 'show'; + const imdbid = match[2]; + + return ( + + + + ); + } + })} +
    +
    + ); + })} + + )}
    ); } diff --git a/src/services/planetscale.ts b/src/services/planetscale.ts index e9df8ab..377475b 100644 --- a/src/services/planetscale.ts +++ b/src/services/planetscale.ts @@ -155,7 +155,7 @@ export class PlanetScaleCache { olderThan: Date | null = null ): Promise<{ key: string; updatedAt: Date } | null> { const whereCondition: any = { - key: { startsWith: 'requested:' }, + key: { startsWith: 'requested:tt' }, }; if (olderThan !== null) { @@ -184,7 +184,7 @@ export class PlanetScaleCache { const requestedItem = await this.prisma.scraped.findFirst({ where: { - key: { startsWith: 'processing:' }, + key: { startsWith: 'processing:tt' }, updatedAt: { lte: oneHourAgo }, }, orderBy: { updatedAt: 'asc' }, From 7f28a963a9ab24389355fe692ba80558f6f5a882 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Mon, 18 Dec 2023 01:31:58 +0100 Subject: [PATCH 225/272] Fix checker for key terms in foreign chars --- src/utils/checks.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/utils/checks.ts b/src/utils/checks.ts index f8ae785..4ebc192 100644 --- a/src/utils/checks.ts +++ b/src/utils/checks.ts @@ -242,6 +242,7 @@ export function matchesTitle(target: string, years: string[], test: string): boo const keyTerms: string[] = splits.filter( (s) => (s.length > 1 && !dictionary.has(s)) || s.length > 5 ); + keyTerms.push(...target.split(/\w+/).filter((e) => e.length > 2)); const keySet = new Set(keyTerms); const commonTerms = splits.filter((s) => !keySet.has(s)); @@ -257,7 +258,7 @@ export function matchesTitle(target: string, years: string[], test: string): boo let foundCommonTerms = countTestTermsInTarget(test, commonTerms.join(' ')); const score = foundKeyTerms * 2 + foundCommonTerms + (containsYear ? hasYearScore : 0); if (Math.floor(score / 0.85) >= totalScore) { - // console.log(`๐ŸŽฏ Scored ${score} out of ${totalScore} for target '${target}' in '${test}' (+${foundKeyTerms*2} +${foundCommonTerms} +${containsYear?hasYearScore:0})`); + // console.log(`๐ŸŽฏ Scored ${score} out of ${totalScore} for target '${target}' in '${test}' (+${foundKeyTerms*2} +${foundCommonTerms} +${containsYear?hasYearScore:0})`, keyTerms, commonTerms); return true; } From 29077e8d92ec2f4a3dd9662b94b103476ceff2ab Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Mon, 18 Dec 2023 02:09:35 +0100 Subject: [PATCH 226/272] Fix infinite search --- src/pages/search.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/pages/search.tsx b/src/pages/search.tsx index 110bfec..328f635 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -79,7 +79,12 @@ function Search() { } }; - if (!loading && searchResults.length === 0 && Object.keys(router.query).length === 0) + if ( + !loading && + searchResults.length === 0 && + Object.keys(router.query).length === 0 && + Object.keys(miscResults).length === 0 + ) fetchMiscData(''); return ( From 89d43275b8326a753929930dfc2993cbccfa5ffc Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Tue, 19 Dec 2023 04:51:57 +0100 Subject: [PATCH 227/272] Refactor to use indexeddb --- package-lock.json | 6 + package.json | 1 + src/hooks/cache.ts | 67 ------ src/pages/hashlist.tsx | 272 ++++++++++-------------- src/pages/index.tsx | 20 +- src/pages/library.tsx | 138 +++++------- src/pages/movie/[imdbid].tsx | 162 +++++++------- src/pages/show/[imdbid]/[seasonNum].tsx | 154 ++++++-------- src/services/realDebrid.ts | 2 +- src/torrent/db.ts | 111 ++++++++++ src/{types => torrent}/userTorrent.ts | 2 +- src/utils/addMagnet.ts | 51 ++--- src/utils/batch.ts | 5 +- src/utils/cachedTorrentInfo.ts | 1 - src/utils/deleteList.ts | 2 +- src/utils/deleteTorrent.ts | 9 +- src/utils/fetchTorrents.ts | 2 +- src/utils/hashList.ts | 2 +- src/utils/quickSearch.ts | 2 +- src/utils/showInfo.ts | 2 +- src/utils/slow.ts | 2 +- 21 files changed, 478 insertions(+), 535 deletions(-) delete mode 100644 src/hooks/cache.ts create mode 100644 src/torrent/db.ts rename src/{types => torrent}/userTorrent.ts (91%) diff --git a/package-lock.json b/package-lock.json index b992e3f..77d2ed4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "bencode": "^4.0.0", "express": "^4.18.2", "file-saver": "^2.0.5", + "idb": "^8.0.0", "lz-string": "^1.5.0", "next": "^13.4.19", "pg": "^8.11.3", @@ -4199,6 +4200,11 @@ "node": ">=0.10.0" } }, + "node_modules/idb": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/idb/-/idb-8.0.0.tgz", + "integrity": "sha512-l//qvlAKGmQO31Qn7xdzagVPPaHTxXx199MhrAFuVBTPqydcPYBWjkrbv4Y0ktB+GmWOiwHl237UUOrLmQxLvw==" + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", diff --git a/package.json b/package.json index d8610d5..d153ae9 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "bencode": "^4.0.0", "express": "^4.18.2", "file-saver": "^2.0.5", + "idb": "^8.0.0", "lz-string": "^1.5.0", "next": "^13.4.19", "pg": "^8.11.3", diff --git a/src/hooks/cache.ts b/src/hooks/cache.ts deleted file mode 100644 index b82e38c..0000000 --- a/src/hooks/cache.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { CachedTorrentInfo } from '@/utils/cachedTorrentInfo'; -import useLocalStorage from './localStorage'; - -export const useDownloadsCache = (providerKey: string) => { - type cacheType = Record; - - const [cache, setCache] = useLocalStorage(`${providerKey}:downloads`, {}); - - const addOneToCache = (id: string, hash: string, status: boolean = true) => { - if (cache && hash in cache === true) { - setCache((prev) => ({ - ...prev, - [hash]: { - ...prev[hash], - status: status ? 'downloaded' : 'downloading', - }, - })); - } else { - setCache((prev) => ({ - ...prev, - [hash]: { - id, - hash, - progress: 0, - status: status ? 'downloaded' : 'downloading', - }, - })); - } - }; - - const addManyToCache = (torrents: CachedTorrentInfo[]) => { - setCache((prev) => ({ - ...prev, - ...torrents.reduce((acc: cacheType, curr: CachedTorrentInfo) => { - acc[curr.hash] = curr; - return acc; - }, {}), - })); - }; - - const removeFromCache = (id: string) => { - if (!cache) return; - setCache((prev) => { - const hash = Object.keys(prev).find((key) => prev[key].id === id); - const newCache = { ...prev }; - if (!hash) return newCache; - delete newCache[hash]; - return newCache; - }); - }; - - const cacheUtils = { - inLibrary: (hash: string): boolean => hash in cache!, - notInLibrary: (hash: string): boolean => !cacheUtils.inLibrary(hash), - isDownloaded: (hash: string): boolean => - cacheUtils.inLibrary(hash) && cache![hash].status === 'downloaded', - isDownloading: (hash: string): boolean => - cacheUtils.inLibrary(hash) && cache![hash].status !== 'downloaded', - }; - - const adder = { - single: addOneToCache, - many: addManyToCache, - }; - - return [cache, cacheUtils, adder, removeFromCache] as const; -}; diff --git a/src/pages/hashlist.tsx b/src/pages/hashlist.tsx index 2022f9c..cf5e1e7 100644 --- a/src/pages/hashlist.tsx +++ b/src/pages/hashlist.tsx @@ -1,12 +1,8 @@ import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; -import { useDownloadsCache } from '@/hooks/cache'; import { AdInstantAvailabilityResponse, MagnetFile, adInstantCheck } from '@/services/allDebrid'; import { RdInstantAvailabilityResponse, rdInstantCheck } from '@/services/realDebrid'; -import { - handleAddAsMagnetInAd, - handleAddAsMagnetInRd, - handleSelectFilesInRd, -} from '@/utils/addMagnet'; +import UserTorrentDB from '@/torrent/db'; +import { handleAddAsMagnetInAd, handleAddAsMagnetInRd } from '@/utils/addMagnet'; import { runConcurrentFunctions } from '@/utils/batch'; import { handleDeleteAdTorrent, handleDeleteRdTorrent } from '@/utils/deleteTorrent'; import { groupBy } from '@/utils/groupBy'; @@ -82,7 +78,7 @@ const instantCheckInRd = async ( return instantCount; }; -export const instantCheckInAd = async ( +const instantCheckInAd = async ( adKey: string, hashes: string[], setSearchResults: Dispatch> @@ -126,6 +122,8 @@ export const instantCheckInAd = async ( return instantCount; }; +const torrentDB = new UserTorrentDB(); + function HashlistPage() { const router = useRouter(); const [query, setQuery] = useState(''); @@ -147,52 +145,65 @@ function HashlistPage() { const [tvGroupingByTitle] = useState>({}); const [hasDupes] = useState>([]); const [totalBytes, setTotalBytes] = useState(0); - const [rdCache, rd, rdCacheAdder, removeFromRdCache] = useDownloadsCache('rd'); - const [adCache, ad, adCacheAdder, removeFromAdCache] = useDownloadsCache('ad'); - const getUserTorrentsList = async (): Promise => { + // fetch list from api + async function getUserTorrentsList(): Promise { const hash = window.location.hash; if (!hash) return []; const jsonString = lzString.decompressFromEncodedURIComponent(hash.substring(1)); return JSON.parse(jsonString) as TorrentHash[]; - }; + } + async function fetchUserTorrentsList() { + try { + const torrents = (await getUserTorrentsList()).map((torrent) => { + const mediaType = getTypeByName(torrent.filename); + const info = + mediaType === 'movie' + ? filenameParse(torrent.filename) + : filenameParse(torrent.filename, true); + return { + score: getReleaseTags(torrent.filename, torrent.bytes / ONE_GIGABYTE).score, + info, + mediaType, + title: getMediaId(info, mediaType, false) || torrent.filename, + ...torrent, + }; + }) as UserTorrent[]; + + setUserTorrentsList(torrents); + + if (!torrents.length) return; + // const hashArr = torrents.map((r) => r.hash); + // if (rdKey) wrapLoading('RD', instantCheckInRd(rdKey, hashArr, setUserTorrentsList)); + // if (adKey) wrapLoading('AD', instantCheckInAd(adKey, hashArr, setUserTorrentsList)); + } catch (error) { + alert(error); + setUserTorrentsList([]); + toast.error('Error fetching user torrents list'); + } finally { + setLoading(false); + } + } - // fetch list from api + const [hashAndProgress, setHashAndProgress] = useState>({}); + async function fetchHashAndProgress() { + const torrents = await torrentDB.all(); + const records: Record = {}; + for (const t of torrents) { + records[t.hash] = t.progress; + } + setHashAndProgress(records); + } + const isDownloading = (hash: string) => hash in hashAndProgress && hashAndProgress[hash] < 100; + const isDownloaded = (hash: string) => hash in hashAndProgress && hashAndProgress[hash] === 100; + const inLibrary = (hash: string) => hash in hashAndProgress; + const notInLibrary = (hash: string) => !(hash in hashAndProgress); useEffect(() => { - const fetchUserTorrentsList = async () => { - try { - const torrents = (await getUserTorrentsList()).map((torrent) => { - const mediaType = getTypeByName(torrent.filename); - const info = - mediaType === 'movie' - ? filenameParse(torrent.filename) - : filenameParse(torrent.filename, true); - return { - score: getReleaseTags(torrent.filename, torrent.bytes / ONE_GIGABYTE).score, - info, - mediaType, - title: getMediaId(info, mediaType, false) || torrent.filename, - ...torrent, - }; - }) as UserTorrent[]; - - setUserTorrentsList(torrents); - - if (!torrents.length) return; - // const hashArr = torrents.map((r) => r.hash); - // if (rdKey) wrapLoading('RD', instantCheckInRd(rdKey, hashArr, setUserTorrentsList)); - // if (adKey) wrapLoading('AD', instantCheckInAd(adKey, hashArr, setUserTorrentsList)); - } catch (error) { - alert(error); - setUserTorrentsList([]); - toast.error('Error fetching user torrents list'); - } finally { - setLoading(false); - } - }; - if (userTorrentsList.length === 0) fetchUserTorrentsList(); + if (userTorrentsList.length !== 0) return; + fetchUserTorrentsList(); + fetchHashAndProgress(); // eslint-disable-next-line react-hooks/exhaustive-deps - }, [rdKey]); + }, [rdKey, adKey]); // aggregate metadata useEffect(() => { @@ -229,9 +240,15 @@ function HashlistPage() { }, [userTorrentsList]); // set the list you see - useEffect(() => { + async function filterOutAlreadyDownloaded(unfiltered: UserTorrent[]) { + if (unfiltered.length <= 1) return unfiltered; + const hashes = await torrentDB.hashes(); + return unfiltered.filter((t) => !hashes.has(t.hash)); + } + + async function filterList() { setFiltering(true); - const notYetDownloaded = filterOutAlreadyDownloaded(userTorrentsList); + const notYetDownloaded = await filterOutAlreadyDownloaded(userTorrentsList); if (Object.keys(router.query).length === 0) { setFilteredList(applyQuickSearch(notYetDownloaded)); setFiltering(false); @@ -249,6 +266,9 @@ function HashlistPage() { setFilteredList(applyQuickSearch(tmpList)); } setFiltering(false); + } + useEffect(() => { + filterList(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [query, userTorrentsList, movieGrouping, tvGroupingByEpisode, router.query]); @@ -259,17 +279,6 @@ function HashlistPage() { }); } - function filterOutAlreadyDownloaded(unfiltered: UserTorrent[]) { - if (unfiltered.length <= 1) return unfiltered; - return unfiltered.filter( - (t) => - !rd.isDownloaded(t.hash) && - !ad.isDownloaded(t.hash) && - !rd.isDownloading(t.hash) && - !ad.isDownloading(t.hash) - ); - } - function applyQuickSearch(unfiltered: UserTorrent[]) { let regexFilters: RegExp[] = []; for (const q of query.split(' ')) { @@ -311,35 +320,13 @@ function HashlistPage() { } function wrapDownloadFilesInRdFn(t: UserTorrent) { - return async () => - await handleAddAsMagnetInRd( - rdKey!, - t.hash, - async (id: string) => { - await handleSelectFilesInRd(rdKey!, `rd:${id}`, removeFromRdCache, true); - rdCacheAdder.single(`rd:${id}`, t.hash); - }, - true - ); - } - - function wrapDownloadFilesInAdFn(t: UserTorrent) { - return async () => - await handleAddAsMagnetInAd( - adKey!, - t.hash, - async (id: string) => { - adCacheAdder.single(`ad:${id}`, t.hash); - }, - true - ); + return async () => await handleAddAsMagnetInRd(rdKey!, t.hash); } - async function downloadNonDupeTorrentsInRd() { if (!rdKey) throw new Error('no_rd_key'); - const libraryHashes = Object.keys(rdCache!); + const libraryHashes = await torrentDB.hashes(); const yetToDownload = filteredList - .filter((t) => !libraryHashes.includes(t.hash)) + .filter((t) => !libraryHashes.has(t.hash)) .map(wrapDownloadFilesInRdFn); const [results, errors] = await runConcurrentFunctions(yetToDownload, 5, 500); if (errors.length) { @@ -353,11 +340,14 @@ function HashlistPage() { } } + function wrapDownloadFilesInAdFn(t: UserTorrent) { + return async () => await handleAddAsMagnetInAd(adKey!, t.hash); + } async function downloadNonDupeTorrentsInAd() { if (!adKey) throw new Error('no_ad_key'); - const libraryHashes = Object.keys(adCache!); + const libraryHashes = await torrentDB.hashes(); const yetToDownload = filteredList - .filter((t) => !libraryHashes.includes(t.hash)) + .filter((t) => !libraryHashes.has(t.hash)) .map(wrapDownloadFilesInAdFn); const [results, errors] = await runConcurrentFunctions(yetToDownload, 5, 500); if (errors.length) { @@ -497,13 +487,7 @@ function HashlistPage() { className={` hover:bg-purple-900 border-t-2 - ${ - rd.isDownloaded(t.hash) || ad.isDownloaded(t.hash) - ? 'bg-green-900' - : rd.isDownloading(t.hash) || ad.isDownloading(t.hash) - ? 'bg-red-900' - : '' - } + ${isDownloaded(t.hash) ? 'bg-green-900' : isDownloading(t.hash) ? 'bg-red-900' : ''} `} > @@ -548,84 +532,60 @@ function HashlistPage() { {(t.bytes / ONE_GIGABYTE).toFixed(1)} GB - {rdKey && - rd.isDownloading(t.hash) && - rdCache![t.hash].id && ( - - )} - {rdKey && rd.notInLibrary(t.hash) && ( + {rdKey && inLibrary(t.hash) && ( + )} + {rdKey && notInLibrary(t.hash) && ( + )} - {adKey && - ad.isDownloading(t.hash) && - adCache![t.hash].id && ( - - )} - {adKey && rd.notInLibrary(t.hash) && ( + {adKey && isDownloading(t.hash) && ( + )} + {adKey && notInLibrary(t.hash) && ( + - {rdKey && - rd.isDownloading(r.hash) && - rdCache![r.hash].id && ( - - )} - {rdKey && rd.notInLibrary(r.hash) && ( + if (!torrent) return; + await handleDeleteRdTorrent( + rdKey, + torrent.id + ); + torrentDB.deleteByHash(r.hash); + }} + > + + RD ({hashAndProgress[r.hash] + '%'}) + + )} + {rdKey && notInLibrary(r.hash) && ( )} - {adKey && - ad.isDownloading(r.hash) && - adCache![r.hash].id && ( - - )} - {adKey && ad.notInLibrary(r.hash) && ( + if (!torrent) return; + await handleDeleteAdTorrent( + adKey, + torrent.id + ); + torrentDB.deleteByHash(r.hash); + }} + > + + AD ({hashAndProgress[r.hash] + '%'}) + + )} + {adKey && notInLibrary(r.hash) && ( - {rdKey && - rd.isDownloading(r.hash) && - rdCache![r.hash].id && ( - - )} - {rdKey && rd.notInLibrary(r.hash) && ( + if (!torrent) return; + await handleDeleteRdTorrent( + rdKey, + torrent.id + ); + torrentDB.deleteByHash(r.hash); + }} + > + + RD ({hashAndProgress[r.hash] + '%'}) + + )} + {rdKey && notInLibrary(r.hash) && ( )} - {adKey && - ad.isDownloading(r.hash) && - adCache![r.hash].id && ( - - )} - {adKey && ad.notInLibrary(r.hash) && ( + if (!torrent) return; + await handleDeleteAdTorrent( + adKey, + torrent.id + ); + torrentDB.deleteByHash(r.hash); + }} + > + + AD ({hashAndProgress[r.hash] + '%'}) + + )} + {adKey && notInLibrary(r.hash) && ( - + {rdKey && ( + + )} + {adKey && ( + + )} {Object.keys(router.query).length !== 0 && ( )} - {(rdKey || adKey) && !!filteredList.length && ( + {(rdKey || adKey) && ( {userTorrentsList.length - filteredList.length} torrents hidden @@ -537,19 +590,10 @@ function HashlistPage() { {(t.bytes / ONE_GIGABYTE).toFixed(1)} GB - {rdKey && inLibrary(t.hash) && ( + {rdKey && isDownloading(t.hash) && ( - {rdKey && isDownloading(r.hash) && ( + {rdKey && inLibrary(r.hash) && ( )} - {adKey && isDownloading(r.hash) && ( + {adKey && inLibrary(r.hash) && ( - {rdKey && isDownloading(r.hash) && ( + {rdKey && inLibrary(r.hash) && ( )} - {adKey && isDownloading(r.hash) && ( + {adKey && inLibrary(r.hash) && (

    Go Home diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 4402bc7..8cf9ce6 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,4 +1,6 @@ import { useCurrentUser } from '@/hooks/auth'; +import { DeleteUserTorrentDB } from '@/torrent/db'; +import { landscapeMode } from '@/utils/landscapeMode'; import { libraryToastOptions } from '@/utils/toastOptions'; import { withAuth } from '@/utils/withAuth'; import Head from 'next/head'; @@ -8,6 +10,8 @@ import { useEffect } from 'react'; import { Toaster, toast } from 'react-hot-toast'; function IndexPage() { + useEffect(landscapeMode, []); + const router = useRouter(); const { realDebrid: rdUser, allDebrid: adUser, rdError, adError } = useCurrentUser(); @@ -45,14 +49,8 @@ function IndexPage() { } }; - const handleClearCache = () => { - let i = localStorage.length - 1; - while (i >= 0) { - const key = localStorage.key(i); - if (key && (key.startsWith('rdc:') || key.startsWith('adc:'))) - localStorage.removeItem(key); - i--; - } + const handleClearCache = async () => { + await DeleteUserTorrentDB(); toast.success(`Library cache cleared, please check again`, libraryToastOptions); }; @@ -180,7 +178,7 @@ function IndexPage() { )}

    -

    +

    + +
    ) : ( diff --git a/src/pages/library.tsx b/src/pages/library.tsx index 90be4ff..bd01665 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -226,6 +226,9 @@ function TorrentsPage() { useEffect(() => { if (rdLoading || adLoading || grouping) return; setFiltering(true); + setSlowCount(userTorrentsList.filter(isSlowOrNoLinks).length); + setInProgressCount(userTorrentsList.filter(isInProgress).length); + setFailedCount(userTorrentsList.filter(isFailed).length); if (hasNoQueryParamsBut('page')) { setFilteredList(applyQuickSearch(query, userTorrentsList)); selectPlayableFiles(userTorrentsList); @@ -236,9 +239,7 @@ function TorrentsPage() { } const { filter: titleFilter, mediaType, status } = router.query; - setSlowCount(userTorrentsList.filter(isSlowOrNoLinks).length); - setInProgressCount(userTorrentsList.filter(isInProgress).length); - setFailedCount(userTorrentsList.filter(isFailed).length); + console.log(slowCount, inProgressCount, failedCount); let tmpList = userTorrentsList; if (status === 'slow') { @@ -667,7 +668,7 @@ function TorrentsPage() {

    - My Library ๐Ÿ“š {userTorrentsList.length} torrents{' '} + Library ๐Ÿ“š {userTorrentsList.length} torrents{' '} {totalBytes / ONE_GIGABYTE / 1024 > 10000 ? '๐Ÿ˜ฑ' // Fear for more than 10 PB : totalBytes / ONE_GIGABYTE / 1024 > 1000 @@ -685,7 +686,7 @@ function TorrentsPage() { Go Home @@ -704,7 +705,7 @@ function TorrentsPage() { />

    {/* Start of Main Menu */} -
    +
    {/* End of Main Menu */} - {helpText !== '' &&
    ๐Ÿ’ก {helpText}
    } + {helpText !== '' &&
    ๐Ÿ’ก {helpText}
    }
    {rdLoading || adLoading || grouping || filtering ? (
    @@ -944,7 +945,9 @@ function TorrentsPage() { key={i} className="border-t-2 hover:bg-purple-900" onClick={() => - rdKey && torrent.id.startsWith('rd:') + rdKey && + torrent.id.startsWith('rd:') && + torrent.status.startsWith('download') ? showInfo(rdKey, torrent) : null } // Add the onClick event here diff --git a/src/pages/movie/[imdbid].tsx b/src/pages/movie/[imdbid].tsx index d981124..7248f2d 100644 --- a/src/pages/movie/[imdbid].tsx +++ b/src/pages/movie/[imdbid].tsx @@ -182,7 +182,7 @@ const MovieSearch: FunctionComponent = ({

    Go Home diff --git a/src/pages/search.tsx b/src/pages/search.tsx index 328f635..a8accc4 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -97,7 +97,7 @@ function Search() {

    Search, Improved Accuracy

    Go Home diff --git a/src/pages/show/[imdbid]/[seasonNum].tsx b/src/pages/show/[imdbid]/[seasonNum].tsx index 8a8931f..564c288 100644 --- a/src/pages/show/[imdbid]/[seasonNum].tsx +++ b/src/pages/show/[imdbid]/[seasonNum].tsx @@ -196,7 +196,7 @@ const TvSearch: FunctionComponent = ({ Go Home diff --git a/src/torrent/db.ts b/src/torrent/db.ts index 8f9cc35..fc91af6 100644 --- a/src/torrent/db.ts +++ b/src/torrent/db.ts @@ -1,5 +1,5 @@ import { UserTorrent } from '@/torrent/userTorrent'; -import { IDBPDatabase, openDB } from 'idb'; +import { IDBPDatabase, deleteDB, openDB } from 'idb'; function currentISOWeekNumber(): number { const target = new Date(); @@ -125,4 +125,8 @@ class UserTorrentDB { } } +export const DeleteUserTorrentDB = async () => { + await deleteDB('DMMDB'); +}; + export default UserTorrentDB; diff --git a/src/utils/landscapeMode.ts b/src/utils/landscapeMode.ts new file mode 100644 index 0000000..6a07d37 --- /dev/null +++ b/src/utils/landscapeMode.ts @@ -0,0 +1,23 @@ +import toast from 'react-hot-toast'; + +export const landscapeMode = () => { + const showWarning = () => + toast( + 'You are using a mobile device in portrait mode but *landscape mode* is the best option for Debrid Media Manager', + { + icon: '๐Ÿ“ฑ', + duration: 10000, + } + ); + const isPortrait = () => window.matchMedia('(orientation: portrait)').matches; + const isMobileDevice = () => + /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); + if (isMobileDevice() && isPortrait()) showWarning(); + const handleOrientationChange = () => { + if (isMobileDevice() && isPortrait()) showWarning(); + }; + window.addEventListener('orientationchange', handleOrientationChange); + return () => { + window.removeEventListener('orientationchange', handleOrientationChange); + }; +}; diff --git a/src/utils/showInfo.ts b/src/utils/showInfo.ts index 2353ee1..fd28589 100644 --- a/src/utils/showInfo.ts +++ b/src/utils/showInfo.ts @@ -115,5 +115,7 @@ export const showInfo = async (rdKey: string, torrent: UserTorrent) => { popup: 'format-class', }, width: '800px', + showCloseButton: true, + inputAutoFocus: true, }); }; From dadf759f21aaef1ceed5e78fbf849dc812892fbe Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Wed, 20 Dec 2023 04:58:16 +0100 Subject: [PATCH 236/272] Remove restriction --- src/pages/library.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/pages/library.tsx b/src/pages/library.tsx index bd01665..cd4df3e 100644 --- a/src/pages/library.tsx +++ b/src/pages/library.tsx @@ -945,9 +945,7 @@ function TorrentsPage() { key={i} className="border-t-2 hover:bg-purple-900" onClick={() => - rdKey && - torrent.id.startsWith('rd:') && - torrent.status.startsWith('download') + rdKey && torrent.id.startsWith('rd:') ? showInfo(rdKey, torrent) : null } // Add the onClick event here From ed59a27713516afca142a596fd9c65242508b5a4 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Wed, 20 Dec 2023 05:17:47 +0100 Subject: [PATCH 237/272] Improve mobile layout --- src/pages/browse/[search].tsx | 2 +- src/pages/browse/recent.tsx | 2 +- src/pages/hashlist.tsx | 2 +- src/pages/index.tsx | 18 ++++++------- src/pages/library.tsx | 34 ++++++++++++------------- src/pages/movie/[imdbid].tsx | 2 +- src/pages/search.tsx | 2 +- src/pages/show/[imdbid]/[seasonNum].tsx | 2 +- 8 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/pages/browse/[search].tsx b/src/pages/browse/[search].tsx index 17636a2..3aeb6ac 100644 --- a/src/pages/browse/[search].tsx +++ b/src/pages/browse/[search].tsx @@ -14,7 +14,7 @@ type BrowseProps = { export const Browse: FunctionComponent = ({ response }) => { return ( -
    +
    Debrid Media Manager - Recently Updated diff --git a/src/pages/browse/recent.tsx b/src/pages/browse/recent.tsx index b0080f2..4df32e6 100644 --- a/src/pages/browse/recent.tsx +++ b/src/pages/browse/recent.tsx @@ -36,7 +36,7 @@ function RecentlyUpdated() { }, []); return ( -
    +
    Debrid Media Manager - Recently Updated diff --git a/src/pages/hashlist.tsx b/src/pages/hashlist.tsx index 4fc429c..5239c0c 100644 --- a/src/pages/hashlist.tsx +++ b/src/pages/hashlist.tsx @@ -422,7 +422,7 @@ function HashlistPage() { } return ( -
    +
    Debrid Media Manager - Hash list:{' '} diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 8cf9ce6..457f67e 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -59,7 +59,7 @@ function IndexPage() { <Head> <title>Debrid Media Manager - Home - + @@ -113,13 +113,13 @@ function IndexPage() {
    ๐Ÿ“š My Library */} {rdUser && ( )} + {r.rdAvailable && ( + + )} {adKey && inLibrary(r.hash) && ( + {router.query.status === 'sametitle' && ( + <> + - + + + )} diff --git a/src/torrent/db.ts b/src/torrent/db.ts index bc2cda7..8f9cc35 100644 --- a/src/torrent/db.ts +++ b/src/torrent/db.ts @@ -125,11 +125,4 @@ class UserTorrentDB { } } -export const DeleteUserTorrentDB = async () => { - window.indexedDB.deleteDatabase('DMMDB'); - // await deleteDB('DMMDB', { - // blocked: () => alert('database is still open, refresh the page first to delete cache'), - // }); -}; - export default UserTorrentDB; diff --git a/src/torrent/userTorrent.ts b/src/torrent/userTorrent.ts index 30681d9..0efdaab 100644 --- a/src/torrent/userTorrent.ts +++ b/src/torrent/userTorrent.ts @@ -20,6 +20,6 @@ export interface UserTorrent { export const uniqId = (torrent: UserTorrent): string => `${torrent.hash}|${torrent.links.join()}`; export const keyByStatus = (status: string) => { - if (status === 'sametitle') return (torrent: UserTorrent) => torrent.info.title; + if (status === 'sametitle') return (torrent: UserTorrent) => torrent.title; return (torrent: UserTorrent) => torrent.hash; }; diff --git a/src/utils/fetchTorrents.ts b/src/utils/fetchTorrents.ts index f1e4bfe..43a7c3d 100644 --- a/src/utils/fetchTorrents.ts +++ b/src/utils/fetchTorrents.ts @@ -24,17 +24,17 @@ export const fetchRealDebrid = async ( ? filenameParse(torrent.filename) : filenameParse(torrent.filename, true); return { + ...torrent, score: getReleaseTags(torrent.filename, torrent.bytes / ONE_GIGABYTE).score, info, mediaType, - title: getMediaId(info, mediaType, false) || torrent.filename, - ...torrent, id: `rd:${torrent.id}`, links: torrent.links.map((l) => l.replaceAll('/', '/')), seeders: torrent.seeders || 0, speed: torrent.speed || 0, + title: getMediaId(info, mediaType, false) || torrent.filename, }; - }) as UserTorrent[]; // Cast the result to UserTorrent[] to ensure type correctness + }) as UserTorrent[]; await callback(torrents); } } catch (error) { diff --git a/src/utils/mediaId.ts b/src/utils/mediaId.ts index b7883c4..b400e4e 100644 --- a/src/utils/mediaId.ts +++ b/src/utils/mediaId.ts @@ -46,6 +46,12 @@ export const getMediaId = ( } } + mediaId = mediaId + .split(' ') + .filter((t) => t) + .join(' ') + .trim(); + if (systemOnlyId) { mediaId = mediaId.toLowerCase(); } From 0f1cc4a51a263fcc09a4e3f3b322b28d41663b86 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Thu, 21 Dec 2023 01:56:03 +0100 Subject: [PATCH 253/272] Watch from DMM --- src/pages/index.tsx | 27 ++++++++++++++++++++++----- src/pages/library.tsx | 4 +++- src/pages/movie/[imdbid].tsx | 8 +++++--- src/utils/showInfo.ts | 4 +--- 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index dc9790c..fa6cbae 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -6,6 +6,7 @@ import Link from 'next/link'; import { useRouter } from 'next/router'; import { useEffect, useState } from 'react'; import { Toaster, toast } from 'react-hot-toast'; +import Swal from 'sweetalert2'; function IndexPage() { const router = useRouter(); @@ -41,6 +42,22 @@ function IndexPage() { } }; + const chooseAPlayer = () => { + Swal.fire({ + title: 'Choose your player', + input: 'text', + inputLabel: 'Only infuse and vlc are supported for now. Mac and iOS only.', + inputValue: window.localStorage.getItem('player') || 'infuse', + showCancelButton: true, + inputValidator: (value) => { + if (!value) { + return 'You need to write something!'; + } + window.localStorage.setItem('player', value); + }, + }); + }; + const handleClearCache = async () => { setDeleting(true); const request = window.indexedDB.deleteDatabase('DMMDB'); @@ -155,12 +172,12 @@ function IndexPage() {
    - {/* */} + Choose a player + )} {adKey && inLibrary(r.hash) && ( diff --git a/src/utils/showInfo.ts b/src/utils/showInfo.ts index a6fbe75..f71afcd 100644 --- a/src/utils/showInfo.ts +++ b/src/utils/showInfo.ts @@ -31,9 +31,7 @@ export const showInfo = async (app: string, rdKey: string, torrent: UserTorrent) `; if (app) { watchBtn = ` - - - + `; } } From 2da3b155ab8ac7d6148628a1936fe76084b9b9cd Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Thu, 21 Dec 2023 01:59:54 +0100 Subject: [PATCH 254/272] Add icons --- src/pages/index.tsx | 4 ++-- src/pages/movie/[imdbid].tsx | 2 +- src/utils/showInfo.ts | 10 +++++----- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index fa6cbae..ea81001 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -176,13 +176,13 @@ function IndexPage() { className="mx-1 bg-sky-500 hover:bg-sky-700 text-white font-bold py-1 px-2 rounded text-xs" onClick={() => chooseAPlayer()} > - Choose a player + ๐Ÿ‘€ Choose a player {rdUser && ( )} {adKey && inLibrary(r.hash) && ( diff --git a/src/utils/showInfo.ts b/src/utils/showInfo.ts index f71afcd..efb043e 100644 --- a/src/utils/showInfo.ts +++ b/src/utils/showInfo.ts @@ -8,7 +8,7 @@ export const showInfo = async (app: string, rdKey: string, torrent: UserTorrent) let warning = ''; const isIntact = info.files.filter((f) => f.selected).length === info.links.length; if (info.progress === 100 && !isIntact) { - warning = `
    Warning: Some files have expired
    `; + warning = `
    Warning: Some files have expired
    `; } let linkIndex = 0; @@ -26,12 +26,12 @@ export const showInfo = async (app: string, rdKey: string, torrent: UserTorrent) downloadForm = `
    - +
    `; if (app) { watchBtn = ` - + `; } } @@ -72,7 +72,7 @@ export const showInfo = async (app: string, rdKey: string, torrent: UserTorrent) // icon: 'info', html: `

    ${info.filename}

    -
    +
    @@ -107,7 +107,7 @@ export const showInfo = async (app: string, rdKey: string, torrent: UserTorrent)
    ${warning} -
    +
      ${filesList}
    From 3ed33cf079671f3a86dc23382cc1ccba45d478c4 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Thu, 21 Dec 2023 02:00:48 +0100 Subject: [PATCH 255/272] Choose YOUR player --- src/pages/index.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index ea81001..b1c2928 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -42,7 +42,7 @@ function IndexPage() { } }; - const chooseAPlayer = () => { + const chooseYourPlayer = () => { Swal.fire({ title: 'Choose your player', input: 'text', @@ -174,9 +174,9 @@ function IndexPage() {
    -
    - -
    +
    ๐Ÿ“š Library @@ -144,28 +142,28 @@ function IndexPage() { #๏ธโƒฃ Hash lists ๐Ÿ”Ž Search โฐ Recently Updated ๐ŸŒ Browse @@ -201,7 +199,7 @@ function IndexPage() { )}
    -
    +
    โœจGet your movies straight from{' '} diff --git a/src/pages/search.tsx b/src/pages/search.tsx index cebab09..9c6d8f9 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -94,7 +94,7 @@ function Search() {
    -

    Search, Improved Accuracy

    +

    Search

    setTypedQuery(e.target.value)} /> )} + {r.rdAvailable && ( + + )} {adKey && inLibrary(r.hash) && ( - - `; + if (!info.fake) + downloadForm = ` +
    + + +
    + `; if (app) { - watchBtn = ` - - `; + if (info.fake) { + watchBtn = ` + + `; + } else { + watchBtn = ` + + `; + } } } From f57e482edd7c30e2a939bb181cf4319018bd3e85 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Fri, 22 Dec 2023 01:52:24 +0100 Subject: [PATCH 261/272] Use info modal for movies --- src/pages/browse/[search].tsx | 7 ++---- src/pages/browse/recent.tsx | 7 ++---- src/pages/movie/[imdbid].tsx | 42 ++++++++++++++++++++++++++++++----- src/pages/search.tsx | 12 +++------- 4 files changed, 44 insertions(+), 24 deletions(-) diff --git a/src/pages/browse/[search].tsx b/src/pages/browse/[search].tsx index e4f99f9..4ffada9 100644 --- a/src/pages/browse/[search].tsx +++ b/src/pages/browse/[search].tsx @@ -37,7 +37,7 @@ export const Browse: FunctionComponent = ({ response }) => {

    {idx + 1} {listName}

    -
    +
    {response[listName].map((key: string) => { const match = key.match(/^(movie|show):(.+)/); if (match) { @@ -51,10 +51,7 @@ export const Browse: FunctionComponent = ({ response }) => { href={`/${mediaType}/${imdbid}`} className="" > - + ); } diff --git a/src/pages/browse/recent.tsx b/src/pages/browse/recent.tsx index d510dc3..c2d94a9 100644 --- a/src/pages/browse/recent.tsx +++ b/src/pages/browse/recent.tsx @@ -63,7 +63,7 @@ function RecentlyUpdated() { )} {searchResults.length > 0 && ( <> -
    +
    {searchResults.map((key: string, idx: number) => { const match = key.match(/^(movie|tv):(.+)/); if (match) { @@ -72,10 +72,7 @@ function RecentlyUpdated() { return ( - + ); } diff --git a/src/pages/movie/[imdbid].tsx b/src/pages/movie/[imdbid].tsx index 3e43920..75c17a2 100644 --- a/src/pages/movie/[imdbid].tsx +++ b/src/pages/movie/[imdbid].tsx @@ -1,6 +1,7 @@ import { useAllDebridApiKey, useRealDebridAccessToken } from '@/hooks/auth'; import useLocalStorage from '@/hooks/localStorage'; import { SearchApiResponse, SearchResult } from '@/services/mediasearch'; +import { TorrentInfoResponse } from '@/services/realDebrid'; import { SearchProfile } from '@/services/searchProfile'; import UserTorrentDB from '@/torrent/db'; import { UserTorrent } from '@/torrent/userTorrent'; @@ -9,6 +10,8 @@ import { defaultPlayer } from '@/utils/chooseYourPlayer'; import { handleDeleteAdTorrent, handleDeleteRdTorrent } from '@/utils/deleteTorrent'; import { fetchAllDebrid, fetchRealDebrid } from '@/utils/fetchTorrents'; import { instantCheckInAd, instantCheckInRd, wrapLoading } from '@/utils/instantChecks'; +import { isVideo } from '@/utils/selectable'; +import { showInfo } from '@/utils/showInfo'; import { searchToastOptions } from '@/utils/toastOptions'; import { withAuth } from '@/utils/withAuth'; import axios from 'axios'; @@ -182,6 +185,39 @@ const MovieSearch: FunctionComponent = ({ backgroundSize: 'screen', }; + const handleShowInfo = (result: SearchResult) => { + let files = result.files + .filter((file) => isVideo({ path: file.filename })) + .map((file) => ({ + id: file.fileId, + path: file.filename, + bytes: file.filesize, + selected: 1, + })); + files.sort(); + const info = { + id: '', + filename: result.title, + original_filename: result.title, + hash: result.hash, + bytes: result.fileSize * 1024 * 1024, + original_bytes: result.fileSize, + progress: 100, + files, + links: [], + fake: true, + /// extras + host: '', + split: 0, + status: '', + added: '', + ended: '', + speed: 0, + seeders: 0, + } as TorrentInfoResponse; + showInfo(window.localStorage.getItem('player') || defaultPlayer, rdKey!, info); + }; + return (
    @@ -448,11 +484,7 @@ rounded-lg overflow-hidden {r.rdAvailable && ( diff --git a/src/pages/search.tsx b/src/pages/search.tsx index ed4f8a3..545fb14 100644 --- a/src/pages/search.tsx +++ b/src/pages/search.tsx @@ -147,10 +147,7 @@ function Search() { : `/show/${result.imdbid}` } > - +

    {result.title}

    {result.year}
    @@ -174,7 +171,7 @@ function Search() { How about results from{' '} {listName}? -
    +
    {miscResults[listName].map((key: string) => { const match = key.match(/^(movie|show):(.+)/); if (match) { @@ -188,10 +185,7 @@ function Search() { href={`/${mediaType}/${imdbid}`} className="" > - + ); } From 9fdad9ff646e5c5123d660f1e85ba8e9b2c4d1b7 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Fri, 22 Dec 2023 02:06:44 +0100 Subject: [PATCH 262/272] Fix app chooser --- src/utils/intent.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/utils/intent.ts b/src/utils/intent.ts index eea36d5..6638bd6 100644 --- a/src/utils/intent.ts +++ b/src/utils/intent.ts @@ -42,7 +42,9 @@ export const getInstantIntent = async ( intent = `intent://${resp.download.replace( 'https://', '' - )}#Intent;type=video/any;scheme=https;package=${player};end`; + )}#Intent;type=video/any;scheme=https${ + player !== 'chooser' ? ';package=' + player : '' + };end`; } else if (os === 'ios') { intent = `${player}://${resp.download.replace('https://', '')}`; } else if (os === 'mac') { @@ -71,7 +73,9 @@ export const getIntent = async ( intent = `intent://${resp.download.replace( 'https://', '' - )}#Intent;type=video/any;scheme=https;package=${player};end`; + )}#Intent;type=video/any;scheme=https${ + player !== 'chooser' ? ';package=' + player : '' + };end`; } else if (os === 'ios') { intent = `${player}://${resp.download.replace('https://', '')}`; } else if (os === 'mac') { From 3cb991b659ceac6e41bfb9dd0fba455fbe95b9d8 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Fri, 22 Dec 2023 10:59:06 +0100 Subject: [PATCH 263/272] Restyle --- src/pages/movie/[imdbid].tsx | 236 +++++++++++------------ src/pages/show/[imdbid]/[seasonNum].tsx | 238 +++++++++++------------- 2 files changed, 223 insertions(+), 251 deletions(-) diff --git a/src/pages/movie/[imdbid].tsx b/src/pages/movie/[imdbid].tsx index 75c17a2..0979b5c 100644 --- a/src/pages/movie/[imdbid].tsx +++ b/src/pages/movie/[imdbid].tsx @@ -219,30 +219,15 @@ const MovieSearch: FunctionComponent = ({ }; return ( -
    +
    Debrid Media Manager - Movie - {title} ({year}) -
    -

    router.back()} - style={{ cursor: 'pointer' }} - > - ๐ŸŽฅ -

    - - Go Home - -
    {/* Display basic movie info */} -
    +
    = ({ className="shadow-2xl" />
    -
    -

    +
    + + Go Home + +

    {title} ({year})

    -
    +
    {description}{' '} {imdb_score && (
    @@ -302,110 +293,105 @@ const MovieSearch: FunctionComponent = ({
    )} {searchResults.length > 0 && ( - <> - {searchState !== 'loading' && ( -
    - {rdKey && ( - <> - - { - const isChecked = event.target.checked; - setRdAutoInstantCheck(isChecked); - }} - />{' '} - - - )} - {adKey && ( - <> - - { - const isChecked = event.target.checked; - setAdAutoInstantCheck(isChecked); - }} - />{' '} - - - )} - - { - searchResults.filter( - (r) => - (onlyShowCached && (r.rdAvailable || r.adAvailable)) || - !onlyShowCached - ).length - }{' '} - / {searchResults.length} shown - - { - const isChecked = event.target.checked; - setOnlyShowCached(isChecked); - }} - />{' '} - -
    - )} +
    +
    + {rdKey && ( + <> + + { + const isChecked = event.target.checked; + setRdAutoInstantCheck(isChecked); + }} + />{' '} + + + )} + {adKey && ( + <> + + { + const isChecked = event.target.checked; + setAdAutoInstantCheck(isChecked); + }} + />{' '} + + + )} + + { + searchResults.filter( + (r) => + (onlyShowCached && (r.rdAvailable || r.adAvailable)) || + !onlyShowCached + ).length + }{' '} + / {searchResults.length} shown + + { + const isChecked = event.target.checked; + setOnlyShowCached(isChecked); + }} + />{' '} + +
    {searchResults @@ -534,7 +520,7 @@ rounded-lg overflow-hidden ))}
    - +
    )}
    ); diff --git a/src/pages/show/[imdbid]/[seasonNum].tsx b/src/pages/show/[imdbid]/[seasonNum].tsx index 63b4883..0f7c81a 100644 --- a/src/pages/show/[imdbid]/[seasonNum].tsx +++ b/src/pages/show/[imdbid]/[seasonNum].tsx @@ -231,30 +231,15 @@ const TvSearch: FunctionComponent = ({ }; return ( -
    +
    Debrid Media Manager - TV Show - {title} - Season {seasonNum} -
    -

    router.back()} - style={{ cursor: 'pointer' }} - > - ๐Ÿ“บ -

    - - Go Home - -
    {/* Display basic movie info */} -
    +
    = ({ className="shadow-lg" />
    -
    -

    +
    + + Go Home + +

    {title} - Season {seasonNum}

    -
    +
    {description}{' '} {imdb_score && (
    @@ -281,7 +272,7 @@ const TvSearch: FunctionComponent = ({
    )}
    - <> +
    {Array.from({ length: season_count || 0 }, (_, i) => i + 1).map( (season, idx) => { const color = intSeasonNum === season ? 'red' : 'yellow'; @@ -289,7 +280,7 @@ const TvSearch: FunctionComponent = ({ ๐Ÿ“บ @@ -301,7 +292,7 @@ const TvSearch: FunctionComponent = ({ ); } )} - +
    @@ -335,108 +326,103 @@ const TvSearch: FunctionComponent = ({

    )} {searchResults.length > 0 && ( - <> - {searchState !== 'loading' && ( -
    - {rdKey && ( - <> - - { - setRdAutoInstantCheck(event.target.checked); - }} - />{' '} - - - )} - {adKey && ( - <> - - { - setAdAutoInstantCheck(event.target.checked); - }} - />{' '} - - - )} - - { - searchResults.filter( - (r) => - (onlyShowCached && (r.rdAvailable || r.adAvailable)) || - !onlyShowCached - ).length - }{' '} - / {searchResults.length} shown - - { - const isChecked = event.target.checked; - setOnlyShowCached(isChecked); - }} - />{' '} - -
    - )} +
    +
    + {rdKey && ( + <> + + { + setRdAutoInstantCheck(event.target.checked); + }} + />{' '} + + + )} + {adKey && ( + <> + + { + setAdAutoInstantCheck(event.target.checked); + }} + />{' '} + + + )} + + { + searchResults.filter( + (r) => + (onlyShowCached && (r.rdAvailable || r.adAvailable)) || + !onlyShowCached + ).length + }{' '} + / {searchResults.length} shown + + { + const isChecked = event.target.checked; + setOnlyShowCached(isChecked); + }} + />{' '} + +
    {searchResults @@ -577,7 +563,7 @@ rounded-lg overflow-hidden })}
    - +
    )}
    ); From 563b996304653c24b43f63a947c40b82b0c9d6b0 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Fri, 22 Dec 2023 12:14:45 +0100 Subject: [PATCH 264/272] Use web as default, fix button layout in results page --- src/pages/movie/[imdbid].tsx | 16 ++++++++-------- src/pages/show/[imdbid]/[seasonNum].tsx | 16 ++++++++-------- src/utils/chooseYourPlayer.ts | 3 +++ src/utils/intent.ts | 4 ++++ 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/pages/movie/[imdbid].tsx b/src/pages/movie/[imdbid].tsx index 0979b5c..10eb0ef 100644 --- a/src/pages/movie/[imdbid].tsx +++ b/src/pages/movie/[imdbid].tsx @@ -421,16 +421,16 @@ rounded-lg overflow-hidden
    Size: {(r.fileSize / 1024).toFixed(2)} GB
    -
    +
    {rdKey && inLibrary(r.hash) && ( {rdKey && inLibrary(r.hash) && (
    +
    - ๐ŸŒ Browse + ๐Ÿ† top + + {getTerms(5).map((term) => ( + + {term} + + ))}
    diff --git a/src/utils/browseTerms.ts b/src/utils/browseTerms.ts new file mode 100644 index 0000000..4a1b6f8 --- /dev/null +++ b/src/utils/browseTerms.ts @@ -0,0 +1,125 @@ +import { lcg, shuffle } from './seededShuffle'; + +const terms = [ + '๐Ÿฆธ action', + '๐Ÿ—บ๏ธ adventure', + '๐ŸŒ all', + '๐ŸŒณ amazon', + '๐ŸŽจ animated', + '๐ŸŽฌ animation', + '๐ŸŒŸ anticipated', + '๐Ÿ apple', + '๐Ÿ”ญ astronomy', + '๐Ÿ“– base', + '๐Ÿ“บ bbc', + '๐Ÿ† best', + '๐Ÿ‘ถ children', + '๐Ÿ’ป collection', + '๐Ÿ˜‚ comedies', + '๐ŸŽญ comedy', + '๐Ÿคช crazy', + '๐Ÿ” crime', + 'โฑ๏ธ current', + '๐ŸŒš dark', + '๐Ÿญ disney', + '๐Ÿ“š documentaries', + '๐ŸŽฅ documentary', + '๐ŸŽญ drama', + '๐Ÿ‰ dreamworks', + '๐Ÿ”ญ exploration', + '๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ family', + '๐Ÿงš fantasy', + '๐Ÿ˜Š feel', + '๐Ÿคฏ freak', + '๐Ÿ˜‚ funny', + '๐Ÿ‘ good', + '๐Ÿ“บ hbo', + '๐Ÿ“š history', + '๐Ÿ˜ฑ horror', + '๐Ÿ“บ hulu', + '๐ŸŒŸ imdb', + '๐ŸŽฅ indie', + '๐Ÿ’ก inspired', + '๐Ÿ˜ฒ intense', + '๐Ÿ‘ถ kids', + '๐Ÿ†• latest', + '๐Ÿ” max', + '๐Ÿคฏ mindfuck', + '๐Ÿ“ˆ most', + '๐ŸŽฌ movie', + '๐ŸŽฆ moviemeter', + '๐Ÿ” mystery', + '๐Ÿ“บ netflix', + '๐Ÿ“ผ nostalgic', + '๐ŸŒŒ outer', + '๐Ÿ˜† parody', + '๐Ÿดโ€โ˜ ๏ธ pirate', + '๐Ÿ  pixar', + '๐Ÿ“œ plot', + '๐Ÿ” popular', + '๐Ÿ“บ prime', + '๐Ÿค” provoking', + '๐Ÿคช quirky', + 'โญ rated', + '๐Ÿ’ฟ bluray', + '๐Ÿ†• releases', + 'โค๏ธ romantic', + '๐Ÿ… rotten', + '๐Ÿ”ฌ sci', + '๐Ÿช scifi', + '๐Ÿ“บ series', + '๐Ÿ“บ shows', + '๐ŸŒŒ sky', + '๐Ÿš€ space', + '๐Ÿ“š story', + '๐Ÿ˜ฎ stunning', + '๐Ÿฆธ superhero', + '๐Ÿ”Ÿ ten', + '๐Ÿง  thought', + '๐Ÿ˜ฑ thriller', + '๐Ÿ˜ฒ thrilling', + 'โณ time', + '๐Ÿ“ฐ today', + '๐Ÿ… tomatoes', + '๐Ÿ” top', + '๐Ÿงณ travel', + '๐ŸŒ€ trippy', + '๐ŸŒ€ twist', + '๐Ÿ‘€ visual', + 'โš”๏ธ war', + '๐Ÿ“บ watched', + '๐Ÿ“… week', + '๐Ÿคฏ weird', + '๐Ÿ—พ japanese', + '๐Ÿ‡ฐ๐Ÿ‡ท korean', + '๐Ÿ‡น๐Ÿ‡ญ thai', + '๐Ÿ‡จ๐Ÿ‡ณ chinese', + '๐Ÿ‡ฉ๐Ÿ‡ช german', + '๐Ÿ‡ฌ๐Ÿ‡ง uk', + '๐Ÿ‡ฎ๐Ÿ‡ณ indian', + '๐Ÿ‡บ๐Ÿ‡ธ american', + '๐Ÿ‡ซ๐Ÿ‡ท french', + '๐Ÿ‡ฎ๐Ÿ‡น italian', + '๐Ÿ‡ช๐Ÿ‡ธ spanish', + '๐Ÿ‡ท๐Ÿ‡บ russian', + '๐Ÿ‡ง๐Ÿ‡ท brazilian', + '๐Ÿ‡ฒ๐Ÿ‡ฝ mexican', + '๐Ÿ‡จ๐Ÿ‡ฆ canadian', + '๐Ÿ‡ฆ๐Ÿ‡บ australian', + '๐Ÿ‡ธ๐Ÿ‡ช swedish', + '๐Ÿ‡ณ๐Ÿ‡ฑ dutch', + '๐Ÿ‡น๐Ÿ‡ท turkish', + '๐Ÿ‡ฎ๐Ÿ‡ช irish', + '๐Ÿ‡ต๐Ÿ‡ฑ polish', + '๐Ÿ‡ง๐Ÿ‡ช belgian', + '๐Ÿ‡จ๐Ÿ‡ญ swiss', + '๐Ÿ‡ณ๐Ÿ‡ด norwegian', + '๐Ÿ‡ฉ๐Ÿ‡ฐ danish', + '๐Ÿ‡ซ๐Ÿ‡ฎ finnish', + '๐Ÿ‡ฌ๐Ÿ‡ท greek', +]; + +export const getTerms = (limit: number) => { + let rng = lcg(new Date().getTime() / 1000 / 60 / 10); + return shuffle(terms, rng).slice(0, limit); +}; From 7a43e253bdcd549999cfc9a1ee601385203ae5f9 Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Fri, 22 Dec 2023 16:51:35 +0100 Subject: [PATCH 267/272] Rework layout of index page --- src/pages/index.tsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index b33d629..b88705d 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -116,7 +116,7 @@ function IndexPage() { data is stored
    -
    +
    ๐Ÿ”Ž Search +
    +
    - โฐ Recently Updated + ๐Ÿ† top -
    -
    - ๐Ÿ† top + โฐ recent {getTerms(5).map((term) => ( @@ -166,7 +166,7 @@ function IndexPage() { ))}
    -
    +